- •1. Рабочая программа курса “методы программирования ”
- •Литература
- •2. Разветвляющиеся алгоритмы.
- •Циклические алгоритмы
- •Одномерные массивы (векторы)
- •Функции с одним результатом
- •Функции типа void.
- •7. Введение в объектно-ориентированное программирование
- •8. Простые типы данных
- •9. Матрицы (двухмерные массивы)
- •Сборник задач по программированию
- •Учебно-методическое пособие для студентов специальностей g 31 03 01 “Математика”, g 31 03 03 “Механика”
- •220050, Минск, проспект Франциска Скорины, 4.
- •220030, Минск, ул. Красноармейская, 6.
-
Одномерные массивы (векторы)
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). Проанализировать и сравнить приведенные ниже варианты:
-
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<<” “;
-
В числовом массиве найти среднеарифметическое значение среди положительных чисел.
-
В числовом массиве найти наибольшее отрицательное число и его номер и наименьшее положительное число и его номер. Определить все номера, если таких чисел несколько.
-
В целочисленном массиве найти первое и второе наименьшие числа и количество их повторений. Например, в массиве {11, 2, 99, –10, 10 , –5, –5, 6, –10, –5} первое наименьшее –10 повторяется 2 раза, второе наименьшее –5 повторяется 3 раза. Предусмотреть случай, когда все числа одинаковы и второго наименьшего числа нет.
-
В целочисленном массиве найти количество четных чисел, расположенных между первым и последним нулевыми числами этого массива. Предусмотреть случаи, когда нет нулей, нуль единственный, нет четных чисел между первым и последним нулевыми числами, и вывести соответствующий текст.
-
Известно, что в массиве есть только числа 0, 1, 2 в любом количестве и порядке следования. Преобразовать массив следующим образом: в начало поместить единицы столько раз, сколько их в исходном массиве, затем двойки и, наконец, нули. Например, для массива {2, 1, 1, 2, 0, 2, 0, 1, 1, 2} получим {1, 1, 1, 1, 2, 2, 2, 2, 0, 0}. Дополнительный массив не формировать.
-
Преобразовать целочисленный массив следующим образом: числа, кратные 5, но не кратные 10, уменьшить в 5 раз; числа, кратные 10, уменьшить в 10 раз; остальные увеличить в 10 раз. Дополнительный массив не формировать.
-
Задан массив оценок по новой 10-балльной системе, например, оценки одного студента, полученные на восьми экзаменах.
а) Получить 5, если студент отличник, и 0 в противном случае.
б) Получить 2, если студент двоечник, и 0 в противном случае.
в) Если нет 1 или 2, найти средний балл.
г) Получить 5, 4, 3 или 2 в зависимости от того, является ли студент отличником, хорошистом, троечником или двоечником.
д) Преобразовать оценки из 10-балльной системы в 5-балльную.
-
Решить аналогичные задачи (см. 14,a – 14,д), если задан массив оценок по 5-балльной системе.
-
Все элементы массива, не равные нулю, переписать в начало массива, сохраняя их порядок, а нулевые элементы в конец массива. Новый массив не формировать.
-
В целочисленном массиве найти длину самой длинной последовательности одинаковых, подряд идущих чисел и это повторяющееся число. Например, в массиве {5, 2, 5, 5, 5, 2, 2, 2, 7, 7, 7, 7, 2, 0, 5, 7, 8} самая длинная последовательность состоит из четырех семерок.
-
Даны два упорядоченных числовых массива размерности n и m. Получить из них новый упорядоченный массив размерности n+m, не используя алгоритма сортировки.
-
Рассортировать одномерный целочисленный массив по возрастанию последней цифры числа.
-
Даны точки плоскости своими координатами в виде двух массивов x[n] и y[n], где (xi, yi ) – координаты i-й точки.
а) Найти количество точек в каждой из четвертей.
б) Сколько точек находится внутри кольца, ограниченного окружностями, радиус которых r и R (r < R)?
в) Найти точку (одну, любую), расстояние от которой до заданной точки наименьшее.
г) Найти все точки, расстояние от которых до заданной точки наименьшее.
д) Найти две любые точки с наименьшим расстоянием между ними.
е) Точки плоскости рассортировать по возрастанию расстояния от начала координат.