Некоторые типы простых задач при работе с массивами
II. Вывод одномерного массива.
При выводе массива (на экран) в языке С/С++ используются функции printf, сprintf и cout.
Простой вывод элементов небольшого массива в одну строку экрана можно выполнить так:
cout<< “\n Масссив: \n“;
for (int i=0; i<n; i++)
cout<<A[i]<<" ";
cout<<”\n”;
Замечание. Первая и последняя строки будут дальше во всех вариантах.
Вывод массива относительно большой размерности N (например, 50), который не вмещается в одну строку, по K элементов в строке выглядит так:
int K=10;
for (int i=0; i< n; i++)
{ printf("%7.2f", A[i]);
if (! ((i+1) %K)) printf("\n");
}
1. Анализ всего или части массива, то есть найти какую-нибудь его характеристику.
2. Поиск в массиве, т. е. определить, есть ли элемент с некоторым условием и (или) найти индекс и (или) значение первого, последнего такого элемента, всех таких элементов.
3. Построение массива по некоторому правилу, используя при этом индексы, одно или несколько чисел и (или) один или несколько массивов.
4. Преобразование массива: изменить их значения, переставить местами некоторые элементы, удалить один или несколько элементов массива, вставить элементы массива и т. п.
5. Сортировка по одному или нескольким критериям. При этом в качестве критерия используются либо значения элементов, либо их характеристики, например, сортировка по последней (первой) цифре целого числа, по количеству единиц в двоичном представлении и т. п.
6. Вывод массива в специальном виде.
Одна и та же задача может состоять из нескольких частей, каждая из которых относится к разным типам. Например, в следующей задаче - поиск наибольшего и наименьшего элементов массива относятся к первому типу, а их перестановка — к четвёртому.
1. Ввести массив с клавиатуры. Найти его наибольший и наименьший элементы и переставить их, т. е. на место каждого наибольшего поместить наименьший элемент, на место каждого наименьшего поместить наибольший элемент:
void main()
{ clrscr(); const n=5; int a[10], i, max1, min1, Nmin, Nmax;
for (i=0; i<n; i++)
{ cout<<"a["<<i<<"] "; cin>>a[i];
}
min1=a[0]; max1=a[0];
Nmin=0; Nmax=0;
for (i=0; i<n; i++)
if (min1>a[i])
{ min1=a[i]; Nmin=i;
}
else if (max1<a[i])
{ max1=a[i]; Nmax=i;
}
cout<<"Max "<<max1<<" number "<<Nmax<<endl;
cout<<"Min "<<min1<<" number "<<Nmin<<endl;
for (i=0; i<n; i++)
if (max1==a[i]) a[i]=min1;
else if (min1==a[i]) a[i]=max1;
for (i=0;i<n;i++)
cout<<"a["<<i<<"]= "<<a[i]<<endl;
getch();
}
2. Ввести массив с клавиатуры. Найти сумму всех чисел до первого нуля и его номер. Если нуля нет, вывести сумму всех чисел массива.
void main()
{ const n=5; int a[n], i;
for(i=0; i<n; i++) cin>>a[i];
int n2= –1 ,s=0; i=0;
while (i<n )
{
if (a[i]==0) { n2=i+1; break;}
s+=a[i++];
}
if (n2 == –1) cout<<"Нет нуля, сумма всех элементов = "<<s;
else { cout<<"Сумма элементов до нуля = "<<s<<”Номер нулевого элемента =”<<n2;
}
cout<<”\n”;
getch();
}
3. Сформировать целочисленный массив с помощью генератора случайных чисел. Построить массив положительных и массив отрицательных чисел и вывести их.
void main()
{ const int n = 10; int a[n], b[n], d[n];
clrscr(); cout<<"Array : "; randomize();
for (int i=0; i<n; i++)
{ a[i]=random(100)-50; printf ("%5d",a[i]);;
}
int nd=0, nb=0;
for (int i=0; i<n; i++)
if (a[i]<0) d[nd++] = a[i];
else if (a[i]>0) b[nb++] = a[i];
cout<<"\n Положит. массив: ";
for (int i=0; i<nb; i++)
printf ("%5d",b[i]);
cout<<"\nОтрицат. массив: ";
for (int i=0; i<nd; i++)
printf ("%5d",d[i]);
getch();
}