Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Одномерный массив


Автор: bobik02 26.11.2007, 17:01
вот задали такую задачку:

Сгенерировать и вывести на экран одномерный массив: X{Xi} (i = 1,n  где n =10 ) у диапазоне целых чисел [20;90] . Сформировать массив Z, который  складывается  с єлементов массива X , которые устравивают условию Xi > 40 . Упорядочить єлементы массива Z по  возрастанию .


так вот что не ясно: 
1.) как с помощью генератора случайных чисел сгенерить  i = 1, n где n 10 в диапазоне чисел [20; 90]   (если не затруднит можно код, а то я не пойму что то )
2.) И каким образом можно упорядочить єлементы по возростнаию ? (тут код не надо просто объсните на примере как построить алгоритм)

(только помгите разобратся , но не делайте за меня задачу, буду очень признателен за помощь smile )

Автор: Puoar 26.11.2007, 17:44
По возрастанию значит первым будет стоять наименьший по значению элемент
Достигает ся это так:
Цикл 1 (от начала до конца массива)
   |--Цикл 2 (от начала до конца массива)
          |--(если элемент меьше предыдушего меняем их местами)

Автор: orthrus 26.11.2007, 17:54
Цитата(bobik02 @  26.11.2007,  17:01 Найти цитируемый пост)
1.) как с помощью генератора случайных чисел сгенерить  i = 1, n где n 10 в диапазоне чисел [20; 90]


примерно так:

Код

int rnd = random(70) + 20;


Цитата(bobik02 @  26.11.2007,  17:01 Найти цитируемый пост)
2.) И каким образом можно упорядочить єлементы по возростнаию ?


При помощи любой сортировки, воспользуйся самой простой пузырьковой smile 

Автор: bobik02 26.11.2007, 19:18
я полагаю что алгоритм должен работать так:
1.) Генерим массив X (в диапазоне от 20 до 90...)
2.) Записываем только те элементы с массива X в массив Z если выполняется условие ( X > 40 )
3.) Сортируем элемнты массива Z по возрастанию .

пункт 1-й есть, со 2-м проблема, с 3-м пока что не могу понять как отсортировать  smile 
ну вот начал делать:
Код

#include <iostream>
#include <conio>

using namespace std;

const n = 10;

int main(int argc, char* argv[])
{
   clrscr();

   int arrayX[n];

  cout << "X : ";
  for ( int i = 0; i < n; i++ )
  {
    arrayX[i] = random(70) + 20; // генерим массив у диапазоне от 20 до 90
    cout << arrayX[i] << " " ;
  }

   // .....
  
  getch();
  return 0;
}


столкнулся с такой проблемой:
в задаче сказано что второй массив (Z):  складывается  с элементов массива X , которые устравивают условию Xi > 40 

например сгенерило такой первый(X) массив: {59, 54, 76 , 54, 72, 53, 46, 34 , 56, 71}
соовтествено с 10 элементов (n), 
если брать єтот пример то по условию второй массив (Z) будет с 9-ти єлементов так как: мы выяснили что Xi > 40 , то берем все элементы,  кроме 34.

значит и второй массив должен содержать 9ть элементов... (соответсвенно n-1 в данном случаи)
я думал решить это так:
Код

    ...

   int count = 0;
   
   ....  в цыкле где мы генерим массив задаем такое условие
    if ( arrayX[i] < 40 )
    {
      count++;
    }
   ..... оно подсчитает сколько нужно будет отминусовать от n

   а дальше хотел инициализировать массив Z:
   int arrayZ[n - count];


но компилятор не хочет меня слушатся и говорит такую ошибку:
E2313 Constant expression required in function main(int,char * *) 

в подскажите как побороть ? 

Автор: bobik02 26.11.2007, 21:15
c сортировкой разобрался  smile  вот пузырьковой:
Код

...
int tmp;
   for(int i = 0; i <= n-1; i++)
  {
      for( int j = 0; j <= n-2-i; j++)
      {
          if( arrayX[j] > arrayX[j+1] )
          {
              tmp = arrayX[j];
              arrayX[j] = arrayX[j+1];
              arrayX[j+1] = tmp;
          }
      }
  }
....


теперь осталось, только:  Сформировать массив Z, который  складывается  с єлементов массива X , которые устравивают условию Xi > 40   smile  

помогите  ?

Автор: bobik02 26.11.2007, 21:38
...

Автор: orthrus 27.11.2007, 07:10
вот так надо сделать:
Код

    ...

   int count = 0;
   
   ....  в цыкле где мы генерим массив задаем такое условие
    if ( arrayX[i] < 40 )
    {
      count++;
    }
   ..... оно подсчитает сколько нужно будет отминусовать от n

   а дальше хотел инициализировать массив Z:
   int *arrayZ = new int[n - count];


т.е. массив надо создавать динамически, т.к. на этапе компиляции count вычислить невозможно следовательно и создать массив статически с кол-вом элементов = count тоже невозможно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)