#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 = random(70) + 20; // генерим массив у диапазоне от 20 до 90
cout << arrayX << " " ;
}
getch();
return 0;
}
одномерные массивы (C++)
Сгенерировать и вывести на экран одномерный массив: X{Xi} (i = 1,n где n =10 ) у диапазоне целых чисел [20;90] . Сформировать массив Z, который складывается с єлементов массива X , которые устравивают условию Xi > 40 . Упорядочить єлементы массива Z по возрастанию .
я полагаю что алгоритм должен работать так:
1.) Генерим массив X (в диапазоне от 20 до 90...)
2.) Записываем только те элементы с массива X в массив Z если выполняется условие ( X > 40 )
3.) Сортируем элемнты массива Z по возрастанию .
так вот с 1-м пунктом ясно, и 3м ясно, а со 2-м проблемы.
Код:
как отсортировать массив я знаю, например пузырьком:
Код:
int tmp;
for(int i = 0; i <= n-1; i++)
{
for( int j = 0; j <= n-2-i; j++)
{
if( array[j] > array[j+1] )
{
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
for(int i = 0; i <= n-1; i++)
{
for( int j = 0; j <= n-2-i; j++)
{
if( array[j] > array[j+1] )
{
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
столкнулся с такой проблемой:
в задаче сказано что второй массив (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 < 40 )
{
count++;
}
..... оно подсчитает сколько нужно будет отминусовать от n
а дальше хотел инициализировать массив Z:
int arrayZ[n - count];
int count = 0;
.... в цыкле где мы генерим массив задаем такое условие
if ( arrayX < 40 )
{
count++;
}
..... оно подсчитает сколько нужно будет отминусовать от n
а дальше хотел инициализировать массив Z:
int arrayZ[n - count];
но компилятор не хочет меня слушатся и говорит такую ошибку:
[COLOR="Red"]E2313 Constant expression required in function main(int,char * *) [/COLOR]
в подскажите как побороть ?
Против ошибки поможет только динамическое создание массива
Код:
int* arrayZ=new int[n-count]; // Не плохо было бы сделать проверку на (n - count > 0)
Не забываем очищать память после окончания работы с массивом
Код:
delete []arrayZ;
Но в данной задаче массив arrayZ можно сделать с размерностью равной размерности arrayX
Код:
const int n = 10;
int arrayX[n];
int arrayZ[n];
int arrayX[n];
int arrayZ[n];
Цитата: max_dark
Д
Но в данной задаче массив arrayZ можно сделать с размерностью равной размерности arrayX
Но в данной задаче массив arrayZ можно сделать с размерностью равной размерности arrayX
а почему Вы так считаете ?
Потому что Z формируется из X так, что выбераются максимум все элементы мн-ва X. Не больше.
2. Количество элементов arrayX превышающих 40 никогда не будет больше размерности массива. Здесь достаточно его(кол-во) запомнить : int num = n - count;
лучше использовать динамическое выделение памяти под массив, как сказал max_dark, или, если планируется в процессе программы изменять размер массива, то, чтобы не мудрствовать лукаво, предлагаю использовать векторы из STL.
Код:
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
unsigned int n = 10;
vector<int> coll1,coll2;
for(size_t i = 0;i < n;++i)
coll1.push_back(rand() % 70 + 20);
copy(coll1.begin(),coll1.end(),
ostream_iterator<int>(cout," "));
for(size_t i = 0;i < n;++i)
if(coll1 > 40)
coll2.push_back(coll1);
cout<<endl;
sort(coll2.begin(),coll2.end());
copy(coll2.begin(),coll2.end(),
ostream_iterator<int>(cout," "));
cout<<endl;
return 0;
}
#include <ctime>
#include <vector>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
unsigned int n = 10;
vector<int> coll1,coll2;
for(size_t i = 0;i < n;++i)
coll1.push_back(rand() % 70 + 20);
copy(coll1.begin(),coll1.end(),
ostream_iterator<int>(cout," "));
for(size_t i = 0;i < n;++i)
if(coll1 > 40)
coll2.push_back(coll1);
cout<<endl;
sort(coll2.begin(),coll2.end());
copy(coll2.begin(),coll2.end(),
ostream_iterator<int>(cout," "));
cout<<endl;
return 0;
}