Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> исправьте код одномерного массива 
:(
    Опции темы
Dmitronnnn
Дата 24.12.2012, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 24.12.2012

Репутация: нет
Всего: нет



Здравствуйте, помогите исправить код программы пожалйста. В этой программе необходимо удалить все минимальные значения массива и добавить в начало массива 3 элемента равных среднему арифметическому массива. 
Код

#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main()
{
    int n,i,min,max,min_i,max_i;
    float s=0;
    cout<<"  n=";
    cin>>n;
    int *a=new int[n];
    cout<<"  Array: ";
    for(i=0;i<n;i++) { a[i]=rand()%10; cout<<a[i]<<" "; s+=(float)a[i]/n; }
    min=max=a[0]; 
    min_i=max_i=0;
    for(i=1;i<n;i++) 
    {
        if(a[i]<min) { min=a[i]; min_i=i; }
        if(a[i]>max) { max=a[i]; max_i=i; }
    }
    cout<<"\n  min="<<min;
    cout<<"\n  max="<<max;
    i=a[max_i];
    a[max_i]=a[min_i];
    a[min_i]=i;
    cout<<"\n  min <--> max: ";
    for(i=0;i<n;i++) cout<<a[i]<<" ";
    cout.precision(3);
    cout<<"\n  S_a="<<s;
    cout<<"\n  New array: ";
    for(i=0;i<n;i++) if(s+s/10>a[i]) cout<<a[i]<<" ";
    delete []a;
    getch();
    return 0;
}

PM MAIL   Вверх
bsa
Дата 25.12.2012, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



в строке 14 у тебя не совсем верно считается среднее. делить нужно после того, как все просуммировал
в строках 24-26 у тебя производится обмен максимального с минимальным элементов массива. этого в задании нет. Строки 27-28, думаю, тоже лишние.
в строке 32 условие вывода должно быть (a[i] > min). А перед ней необходимо вывести три раза среднее арифметическое.

PM   Вверх
Dmitronnnn
Дата 25.12.2012, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 24.12.2012

Репутация: нет
Всего: нет



вроде получилось вот так, но настараживает одна проблемка вроде массив случайных чисел, но почему всегда выскакивают одни и те же (1,7,0,4..... в зависимости от количества элементов в массиве) 
и подскажите пожалуйста как сделать так чтобы 3 среднеарифметических числа становились в одних ряд с массивом чисел. Может какую лишнюю запятую, скобку поставил. 
Код

#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main()
{
    int n,i,min,max,min_i,max_i;
    float s=0;
    cout<<"  n=";
    cin>>n;
    int *a=new int[n];
    cout<<"  Array: ";
    for(i=0;i<n;i++) { a[i]=rand()%10; cout<<a[i]<<" "; s+=(float)a[i]/n; }
    min=max=a[0]; 
    min_i=max_i=0;
    for(i=1;i<n;i++) 
    {
        if(a[i]<min) { min=a[i]; min_i=i; }
        if(a[i]>max) { max=a[i]; max_i=i; }
    }
    cout<<"\n  min="<<min;
    cout<<"\n  max="<<max;
  
    cout<<"\n  S_a="<<s;
    cout<<"\n  New array: "; 
    cout<<"\n "<<s; cout<<"\n "<<s; cout<<"\n "<<s;
    for(i=0;i<n;i++) if(a[i]>min) cout<<a[i]<<" ";
    delete []a;
    getch();
    return 0;
}

PM MAIL   Вверх
feodorv
Дата 25.12.2012, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Dmitronnnn @  25.12.2012,  02:12 Найти цитируемый пост)
но почему всегда выскакивают одни и те же

Всё правильно. Чтобы выскакивали разные, нужно предварительно вызвать функцию srand():
Код

  srand( time( NULL ) );



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
baldina
Дата 25.12.2012, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(Dmitronnnn @  25.12.2012,  01:12 Найти цитируемый пост)
вроде массив случайных чисел

они псевдо-случайные. только похожи на случайные. истинную случайность запрограммировать невозможно.

Это сообщение отредактировал(а) baldina - 25.12.2012, 11:23
PM MAIL   Вверх
Dmitronnnn
Дата 25.12.2012, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 24.12.2012

Репутация: нет
Всего: нет



Получилось: числа случайные, но как сделать чтобы 3 среднеарифметических числа становились в одних ряд с массивом чисел.
PM MAIL   Вверх
feodorv
Дата 25.12.2012, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Dmitronnnn @  25.12.2012,  14:33 Найти цитируемый пост)
но как сделать чтобы 3 среднеарифметических числа становились в одних ряд с массивом чисел. 

В задании сказано так:
  • В этой программе необходимо удалить все минимальные значения массива 
  • добавить в начало массива 3 элемента равных среднему арифметическому массива
Ни один из этих пунктов не выполнен. В массиве как был минимальный (на момент проверки) элемент массива (или даже их несколько), так и остался. Настоящее решение хитро обойдено печатью нужных элементов массива. Ну так и напечатайте (перед печатью массива без минимальных элементов) три раза среднеарифметическое значение (в целочисленном виде). Но думаю, что такое решение при сдаче не прокатит  smile 


Удаление минимальных элементов:
Код

int count = 0;
for( i = 0; i < n; i++)
  if( a[i] != min ) a[count++] = a[i];
n = count;

В результате массив укоротится...


Цитата(Dmitronnnn @  24.12.2012,  17:46 Найти цитируемый пост)
   int *a=new int[n];

Если мы минимальные элементы из массива вычленим, то массив станет как минимум на 1 элемент короче. А если добавим ещё три, то на всё про всё нужна память на как минимум n+2 элементов:
Код

   int *a=new int[n+2];


После этого сдвинем массив на три элемента вправо, чтобы в начале массива освободить место под три среднеарифметических числа:
Код

for( i = n; i > 0; i++) a[i+2] = a[i-1];
n += 3;


Ну и:
Код

a[0] = a[1] = a[2] = (int) (s + 0.5);


Теперь можно печатать сам массив...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Dmitronnnn
Дата 25.12.2012, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 24.12.2012

Репутация: нет
Всего: нет



Как бы это еще в одно целое объединить. Помогите
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0766 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.