Некоторые типы простых задач при работе с массивами

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();

}