Лекция: Типы задач при работе с массивами

1. Анализ всего или части массива, то есть найти какую–нибудь его характеристику: наименьшее, наибольшее значение, сумму или произведение всех элементов или элементов с некоторым условием, количество элементов с некоторым условием и т.п.

Пример 10. Найти количество положительных, отрицательных и нулевых чисел и вывести их разным цветом.

int main() { const n=10, c1=10, c2=11, с3=12; int k1=0, k2=0;

int a[n]={1, 0,-3,22, -33,-4,0 ,0, -22};

for( int i=0;i<n; i++)

{ if (a[i]>0) { textcolor(c1); k1++; }

else if (a[i]<0) { textcolor(c2); k2++; }

else textcolor (с3);

cprintf("%d ", a[i] ); }

textcolor(c1); cprintf ("\r\n Number of positive %d", k1);

textcolor(c2); cprintf ("\r\n Number of negative %d ", k2);

textcolor(с3); cprintf ("\r\n Number of 0 %d", n-k1-k2);

getch(); return 0; }

2. Поиск в массиве, т. е. определить, есть ли элемент с некоторым условием. Найти индекс и (или) значение первого (последнего) такого элемента, всех таких элементов.

Пример 11. Определить, есть ли в одномерном массиве отрицательные числа. Если есть, вывести “Yes” и номер последнего такого числа, в противном случае вывести “No”.

int main() { const n=10; int a[n]={1, 22, -3, 40, -55 ,-6, 0, -0, -99};

/*Второй тест: нет отрицательных

int a[n]={1, 22, 3, 40, 55, 6, 0, 0, 99};*/

int N0=-1; /* Пусть нет отрицательных.Для поиска последнего отрицательного числа просматриваем массив в обратном порядке.*/

for (int i=n-1; i>=0; i--) if (a[i] <0) { N0=i; break; }

/* Нашли первое с конца, или последнее в массиве отрицательное число, и дальше массив не просматриваем, вышли из цикла с помощью break;*/

if (N0 == -1) cout<<”\nNo”;

/* В массиве нет отрицательного числа, вышли из цикла после того, когда просмотрели все элементы, то есть когда i>=0 стало ложным. */

else /* В массиве было отрицательное число и вышли из цикла с помощью break. */

cout<<"\n Yes, number of the last "<< N0+1;

getch(); return 0; }

Пример 12 объединяет два типа алгоритмов в одной задаче. Ввести массив с экрана. Найти сумму чисел до первого нуля и его номер. Если нуля нет, вывести сумму всех чисел массива.

int main() { const n=5; int a[n]; for(int 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<<«No 0, sum = „<<s;

else { cout<<“Number of the first 0 » <<n2;

if (n2!=1) cout<<", sum before the first 0 = "<<s; }

getch(); return 0; }

3.Построение массива по некоторому правилу, используя при этом индексы, одно или несколько чисел и (или) один или несколько массивов.

Пример 13. Построить массив положительных и массив отрицательных чисел и вывести их.

int main()

{ const n = 10; int a[n], //Исходный массив

b[n], //Массив положительных чисел

d[n]; // Массив отрицательных чисел

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<<"\nPositive array: "; for (int i=0; i<nb; i++)printf ("%5d",b[i]);

cout<<"\nNegative array: "; for (int i=0; i<nd; i++)printf ("%5d",d[i]);

getch(); return 0; }

4. Преобразование массива: изменить их значения, переставить местами некоторые элементы, удалить один или несколько элементов массива, вставить элементы массива и т. п.

Пример 14. Массив преобразовать следующим образом: все числа из отрезка [0,1] увеличить в 10 раз, отрицательные уменьшить в (–2) раза, остальные уменьшить в 10 раз. Преобразованный массив оставить на том же месте.

int main()

{ const n=5; float a[n]= { 0.12, -3.4, .5, 67, 8 };

for (int i=0; i<n; i++)

if(a[i]>=0 && a[i]<=1) a[i] = a[i]*10;

else if (a[i]<0) a[i]=a[i] / (-2);

else a[i] = a[i]/10. ;

for (int i=0; i<n; i++) printf ("%10.3f", a[i]);

getch(); return 0; }

5. Вывод массива в специальном виде (см. § 3).

Одна и та же задача может состоять из нескольких частей, каждая из которых относится к разным типам.

Пример 15. Ввестимассив с экрана. Найти его наибольший и наименьший элементы и переставить их, т. е. на место каждого наибольшего поместить наименьший элемент, на место каждого наименьшего поместить наибольший элемент.

Поиск наибольшего и наименьшего элементов массива относятся к первому типу, а их перестановка — к четвёртому.

int main() { const n=5; int a[n], i;

for (i=0; i<n; i++) { cout<<«a[»<<i<<"] "; cin>>a[i]; }

int min1=a[0], max1=a[0];

for (i=1; i<n; i++) if (min1>a[i]) min1=a[i];

else if ( max1<a[i]) max1=a[i];

cout<<endl<<«Max „<<max1; cout<<“ Min „<<min1 ;

for (i=0; i<n; i++) if (max1==a[i]) a[i]=min1;

else if (min1==a[i]) a[i]=max1;

cout<<“\n The new array\n» ;

for (i=0;i<n;i++) cout<<«a[»<<i<<"]= "<<a[i]<<endl; getch(); return 0; }

еще рефераты
Еще работы по информатике