Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб1(Книга).doc
Скачиваний:
7
Добавлен:
23.12.2018
Размер:
369.66 Кб
Скачать
  1. Одномерные массивы (векторы)

1. Ввести одномерный массив (дальше в тексте “массив”) с экрана. Найти его наибольший и наименьший элементы и переставить их, т. е. на место каждого наибольшего поместить наименьший элемент, на место каждого наименьшего поместить наибольший элемент.

int 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(); return 0;

}

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

int 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<<"No 0, sum of all elements = "<<s;

else { cout<<"Yes, "<< "number of the first 0 = "<<n2;

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

}

cout<<endl;

getch(); return 0;

}

3. Сформировать целочисленный массив с помощью датчика случайных чисел. Построить массив положительных и массив отрицательных чисел и вывести их.

int 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<<"\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. Определить целочисленный массив при объявлении. Найти количество положительных, отрицательных и нулевых чисел и вывести их разным цветом.

int main()

{ const int n=10, c1=2, c2=WHITE;

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

int i; clrscr(); int k=0, k2=0;

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

{ if (a[i]>0)

{ textcolor(c1); k++; }

else if (a[i]<0)

{ textcolor(c2); k2++; }

else textcolor (3);

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

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

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

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

getch(); return 0; }

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

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

}

6. Определить, есть ли нуль в массиве. Если есть, получить индекс первого нуля. В противном случае вывести “нет нулей”. Привести несколько вариантов алгоритма, отличных от задачи 2.

7. Пусть a – массив фиксированной размерности n ( например, n=10). Проанализировать и сравнить приведенные ниже варианты:

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

if (a[i]>0) k++;

cout<<k<<” “;

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

{ if (a[i]>0) k++;

cout<<k<<” “;

}

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

if a[i]>0) { k++; cout<<k<<” “;

}

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

if (a[i]>0) k++;

else cout<<k<<” “;

  1. В числовом массиве найти среднеарифметическое значение среди положительных чисел.

  2. В числовом массиве найти наибольшее отрицательное число и его номер и наименьшее положительное число и его номер. Определить все номера, если таких чисел несколько.

  3. В целочисленном массиве найти первое и второе наименьшие числа и количество их повторений. Например, в массиве {11, 2, 99, –10, 10 , –5, –5, 6, –10, –5} первое наименьшее –10 повторяется 2 раза, второе наименьшее –5 повторяется 3 раза. Предусмотреть случай, когда все числа одинаковы и второго наименьшего числа нет.

  4. В целочисленном массиве найти количество четных чисел, расположенных между первым и последним нулевыми числами этого массива. Предусмотреть случаи, когда нет нулей, нуль единственный, нет четных чисел между первым и последним нулевыми числами, и вывести соответствующий текст.

  5. Известно, что в массиве есть только числа 0, 1, 2 в любом количестве и порядке следования. Преобразовать массив следующим образом: в начало поместить единицы столько раз, сколько их в исходном массиве, затем двойки и, наконец, нули. Например, для массива {2, 1, 1, 2, 0, 2, 0, 1, 1, 2} получим {1, 1, 1, 1, 2, 2, 2, 2, 0, 0}. Дополнительный массив не формировать.

  6. Преобразовать целочисленный массив следующим образом: числа, кратные 5, но не кратные 10, уменьшить в 5 раз; числа, кратные 10, уменьшить в 10 раз; остальные увеличить в 10 раз. Дополнительный массив не формировать.

  7. Задан массив оценок по новой 10-балльной системе, например, оценки одного студента, полученные на восьми экзаменах.

а) Получить 5, если студент отличник, и 0 в противном случае.

б) Получить 2, если студент двоечник, и 0 в противном случае.

в) Если нет 1 или 2, найти средний балл.

г) Получить 5, 4, 3 или 2 в зависимости от того, является ли студент отличником, хорошистом, троечником или двоечником.

д) Преобразовать оценки из 10-балльной системы в 5-балльную.

  1. Решить аналогичные задачи (см. 14,a – 14,д), если задан массив оценок по 5-балльной системе.

  2. Все элементы массива, не равные нулю, переписать в начало массива, сохраняя их порядок, а нулевые элементы  в конец массива. Новый массив не формировать.

  3. В целочисленном массиве найти длину самой длинной последовательности одинаковых, подряд идущих чисел и это повторяющееся число. Например, в массиве {5, 2, 5, 5, 5, 2, 2, 2, 7, 7, 7, 7, 2, 0, 5, 7, 8} самая длинная последовательность состоит из четырех семерок.

  4. Даны два упорядоченных числовых массива размерности n и m. Получить из них новый упорядоченный массив размерности n+m, не используя алгоритма сортировки.

  5. Рассортировать одномерный целочисленный массив по возрастанию последней цифры числа.

  6. Даны точки плоскости своими координатами в виде двух массивов x[n] и y[n], где (xi, yi ) – координаты i-й точки.

а) Найти количество точек в каждой из четвертей.

б) Сколько точек находится внутри кольца, ограниченного окружностями, радиус которых r и R (r < R)?

в) Найти точку (одну, любую), расстояние от которой до заданной точки наименьшее.

г) Найти все точки, расстояние от которых до заданной точки наименьшее.

д) Найти две любые точки с наименьшим расстоянием между ними.

е) Точки плоскости рассортировать по возрастанию расстояния от начала координат.