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

 

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

}

Матрицы (двухмерные массивы)

 

Массивы называются двухмерными, если элементы массива расположены в виде таблицы. При этом каждый элемент массива имеет два индекса, первый показывает номер строки, а второй - номер столбца, на пересечении которых он расположен.

Формат описания двухмерного массива:

<тип> <имя_массива> [размер1][размер2];

Здесь

<тип>— тип элементов массива (int, float, char, структуры),

<имя_массива>записывается по правилам идентификаторов;

[размер1][размер2] - размерность двухмерного массива, т.е. количество строк и столбцов в массиве, указывается в виде целочисленной константы или константного выражения. Величина - (размер1*размер2) определяет количество ячеек оперативной памяти, зарезервированной для массива.

Например:

а) float b[3][5];

б) const n=3, m=5; int A[n][m],

где n — количество строк (первая, левая размерность), m — количество столбцов или количество элементов в строке (вторая, правая размерность). Матрица располагается в оперативной памяти и занимает непрерывный участок, объём которой равен

n*m*sizeof(int),

где int — тип элементов матрицы.