Занятие 11 «Цикл for и массивы» 

Рассмотрим задачу, которая была в занятии 9, но не будем ограничиваться малым количеством учащихся, а, например, определимся десятью или даже сотней, а то и большим количеством учащихся (в общем виде заранее неопределенном).

Формальная постановка задачи: пусть на входе в программу имеются данные об успеваемости учащихся (три годовые оценки за предметы: литература, русский и математика), требуется определить «лучшего» учащегося по такому показателю, как среднее арифметическое от имеющихся оценок. Известно, что количество учащихся не может быть более 40 человек и оно указано в виде отдельного целого числа во входных данных в первой строке.

Для решения поставленной задачи определимся с порядком действий (планом):

1. Введем данные.

2. Посчитаем среднее арифметическое оценок для каждого учащегося.

3. Найдем максимальное среднее арифметическое среди всех оценок.

4. Выведем все фамилии учащихся, среднее арифметическое оценок которых в точности равно максимальному значению, найденному на шаге 3.

Рассмотрим код, приведенный на рисунке 11.1.

Рис.11.1 Программа использующая цикл for и массивы

Рассмотрим теперь новые конструкции:

В строках 7 и 8 происходит объявление массивов, одного строкового (в строке 7) на 40 элементов и 4 типов double, каждый из которых на 40 элементов (ячеек хранения).

В строке 10 загружается количество учащихся (число в первой строке, на рисунке это число равно 7, см. input).

В строке 11 впервые встречается цикл «for», благодаря его наличию строка 12 выполнится cnt раз, вначале со значением i = 0, затем i = 1, и так далее до i = cnt – 1. Когда i станет равно cnt, компьютер прекратит выполнять строку 12 и перейдет к строке 14.

Далее в строках 14 и 15, аналогичным образом используя цикл for, производятся действия согласно пункту 2 плана (см. в начале текущего занятия).

Строчки 17 – 20 обеспечивают выполнение 3-го пункта плана, а строчки 22 – 24 производят вывод, который был запланирован в плане в пункте 4.

Дополнительно укажем, что инструкция ++i увеличивает значение переменной i на единицу при каждом выполнении, в данном случае в конце каждой итерации цикла. То есть увеличение значения переменной i будет происходить после выполнения команд внутри цикла (для строки 11, i увеличится на единицу после выполнения строки 12).

Также отметим, что в языке C++ при объявлении массивов (см. строки 7 и 8) в квадратных скобках указывается размер массива (количество «ячеек») и, так как индексирование начинается всегда с нуля (в других языках может быть иначе), максимальный индекс, который может быть использован при обращении к элементам численно на единицу меньше количества выделенных «ячеек».

Действительно, если, скажем, выделено 5 ячеек, то обратиться можно только к ячейкам с индексами: 0, 1, 2, 3, 4 и всё, к ячейке с номером 5 обратиться нельзя, так как у нас есть только пять ячеек с номерами от 0 до 4 включительно.

В качестве тренировки выполните следующие задания:

1. Получите список учащихся с самой слабой успеваемостью (наименьшее среднее арифметическое оценок).

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

3. Напишите программу так, чтобы она вывела название предмета с самым высоким средним баллом.

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

На следующем занятии (не новая тема) вам будет предложено реализовать цикл for и использовать массивы на других языках программирования без такой подробной инструкции, будут лишь даны примеры исходных кодов на разных языках, и вам необходимо будет следовать аналогично действиям этого занятия, выбирая соответствующие языки программирования на начальном этапе.

Спасибо за внимание! Следите за изменениями на нашем ресурсе.

<< Назад   Далее >>