Действия над элементами массива
Рассмотрим самые распространенные задачи для одномерного массива:1. Подсчет элементов, обладающих заданным свойством;
2. Поиск максимального и минимального элементов;
3. Поиск элементов, обладающих заданным свойством.
Пример 1. Пусть в массиве записаны средние баллы за 1 четверть десяти учеников. Требуется подсчитать, сколько учеников имеют средний балл больше 7.
Начальное значение количества учеников, имеющих средний балл больше 7, устанавливаем 0.
Рассматриваем всех учеников от нулевого до девятого: for ( i = 0; i < 10; i++)
Проверяем средний балл каждого: if a[i] > 7
В случае положительного ответа увеличиваем количество на единицу: kol+1
#include <iostream>
using namespace std;
int main()
{
short n = 10, kol = 0;
float a[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
if (a[i] > 7)
kol++;
}
cout << kol;
return 0;
}
Внесем изменения в программу: опишем массив как константу:
#include <iostream>
using namespace std;
int main()
{
const short n = 10;
short kol = 0;
double a[n] = {3.2,4.5,8.6,9.4,6.7,9,8,7.1,5.2,2.3};
for (int i = 0; i < n; i++)
{
if (a[i] > 7)
kol++;
}
cout << kol;
return 0;
}
Экспериментальная часть
1. Подсчитать количество учеников, средний балл которых ниже 3.2. Подсчитать количество учеников, средний балл которых находится в промежутке от 3 до 7.
3. Пусть задан еще один массив из десяти элементов со средним баллом этих учеников за прошлый год. Подсчитать количество учеников, которые повысили свой средний балл.
Задание 1. Пусть в массиве записаны средние баллы за 1 четверть десяти учеников. Найти номер ученика, который имеет самый большой средний балл.
Предположим, что первый участник имеет самый большой балл, т.е. max будет равно a[0], а номер n будет равен 0.
Сравним все элементы от 1-го до 9-го с числом max, если max окажется меньше элемента с i-тым номером, то переменной max присвоим значение этого элемента и n станет равно i.
Когда мы переберем все элементы в переменной max окажется значение максимального элемента, а значение переменной n станет равно номеру максимального элемента.
Посмотреть решение
Предположим, что первый участник имеет самый большой балл, т.е. max будет равно a[0], а номер n будет равен 0.
Сравним все элементы от 1-го до 9-го с числом max, если max окажется меньше элемента с i-тым номером, то переменной max присвоим значение этого элемента и n станет равно i.
Когда мы переберем все элементы в переменной max окажется значение максимального элемента, а значение переменной n станет равно номеру максимального элемента.
Посмотреть решение
Экспериментальная часть
1. А если требуется найти не ученика с максимальным средним баллом, а с минимальным , что тогда нужно изменить в данной программе?2. Вывести на экран все средние баллы учеников, которые в списке находятся за максимальным баллом.
3. Найти сумму минимального и максимального баллов.
Задание 2. Задан массив из десяти элементов, в котором содержатся баллы за контрольную работу по математике. Определить, есть ли среди учеников хотя бы один ученик, который получил 6.
Для решения данной задачи воспользуемся алгоритмом подсчета количества элементов, которые равны 6.
#include <iostream>
using namespace std;
int main()
{
double a[10] = {3,4,8,9,6,9,8,7,5,2};
int kol = 0;
for (int i = 0; i < 10; i++)
if (a[i] == 6)
kol++;
if (kol == 0)
cout << "no";
else cout << "yes";
return 0;
}
Недостаток такого подхода заключается в том, что мы вынуждены просматривать все элементы массива, хотя ответ на свой вопрос мы могли узнать уже после просмотра первого элемента, если бы он оказался равным 6. В случае массива из 10 элементов это, может быть, и не трагедия, а если элементов в массиве миллион?
Для изменения решения используйте оператор while.
#include <iostream>
using namespace std;
int main()
{
double a[10] = {3,4,8,9,1,9,8,7,5,4};
int i = 0;
while ( a[i] != 6 && i < 10)
i++;
if (i == 10)
cout << "no";
else cout << "yes";
return 0;
}
Задание 3. Удалить из массива А, состоящего из n элементов, первые три отрицательных элемента.
Для удаления элемента с номером i из массива достаточно записать элемент с номером (i + 1) на место элемента с номером i, элемент (i + 2) на место элемента с номером (i + 1) и т.д.: for (k = i; k < n; k++) a[k] = a[k+1].
При этом размер массива n уменьшится на 1.
Т.к. размер массива при каждом удалении элемента изменяется необходимо использовать цикл while. Выполнение цикла закончится, если мы просмотрим все элементы или количество удаленных отрицательных элементов станет равным 3.
Тесты Посмотреть решение
Экспериментальная часть
1. Определить, есть ли среди учеников хотя бы один ученик, который получил 6 или 5.2. Определить, есть ли среди учеников хотя бы один ученик, который получил балл больше 8.
3. Определить, есть ли среди учеников хотя бы один ученик, который получил балл от 6 до 10.
Задания
1. Переписать элементы массива А в обратном порядке.2. Дан массив А, состоящий из n целых чисел. Записать все четные по значению элементы массива А в массив В.
3. Дана вещественная таблица А из n элементов. Найдите количество элементов этой таблицы, которые больше среднего арифметического всех ее элементов.
Задания для самостоятельного решения
1. Найдите число ненулевых элементов в таблице целых чисел А[10].2. Найдите количество элементов в таблице вещественных чисел А[10], абсолютная величина которых больше 3.
3. Составьте алгоритм, дающий ответ «да» или «нет» в зависимости от того, встречается или нет число 3 в таблице целых чисел А[10].
4. Дана целочисленная таблица А[10]. Найдите разность наибольшего и наименьшего чисел в этой таблице.
5. Даны две целочисленные таблицы А[10] и В[10]. Подсчитайте количество таких пар элементов, для которых:
1) A[i] < B[i]; 2) A[i] = B[i]; 3) A[i] > B[i].