Иногда необходимо выполнение одного цикла внутри другого. Такая конструкция называется вложенными циклами (см. рисунок 8).
Допускается вложение любых типов циклов друг в друга[2,c.10], а также можно вкладывать неограниченное количество циклов.
Рис. 8. Один цикл внутри другого
Мы рассмотрели блок-схемы и принципы циклических алгоритмов, теперь необходимо составить программы с их применением.
2. Решение циклических алгоритмов
Графическое отличие циклических алгоритмов мы рассмотрели, теперь попробуем создать алгоритм на примере цикла While-do.
Для организации ввода чисел необходима переменная. Объявим ее, добавив в окно программы [19]
var a:integer;
Для подсчета произведения также необходима переменная. Для того, чтобы объявить ее, добавим следующую строку
mult:integer;
В нашем случае для цикла while-do необходим счетчик. Объявим переменную count, для чего добавим в текст программы
count:integer;
Проинициализируем счетчик.[15] Для этого в программе появляется следующая строка
count:=1;
Результат занесенных с трок мы видим на рисунке 9.
Рис. 9. Введение счетчика в программу
Проинициализируем переменную, отвечающую за произведение чисел. Для этого введем строку
mult:=1;
Переменная инициализируется единицей, а не нулем,[9,c.203] т.к. мы будем перемножать числа, а не складывать.
Организуем цикл while-do. Для этого создадим в программе строку
while count<11 do
Значение "11" в качестве граничного результата выбрано в связи с тем, что при невыполнении условия цикл больше не выполняется. Нам необходимо прекращение выполнения цикла после 10-й итерации.
Организуем операторные скобки, для чего введем дополнительную строку в программу
begin
Введем окончание циклической составляющей
end;
Программы пишутся для пользователей, которые хорошо разбираются в своей предметной области, в которой они используют программу. Пользователи не обязаны понимать, что и как реализовал в этой программе разработчик. Поэтому прикладные программы должны иметь удобный для пользователя интерфейс, снабжаться удобными подсказками, как о запрашиваемых данных, так и о выведенных результатах. Эти подсказки должны быть лаконичны и понятны пользователю.
Необходимо показать пользователю, какие данные необходимо ввести с клавиатуры. Для этого в программу строку
write('Введите ',count,'-ое значение:');
Результат заданных строк мы видим на рисунке 10.
Рис. 10. Ввод данных с клавиатуры
Запросим переменную с клавиатуры. Для этого введем в строку ввода
readln(a);
Увеличим счетчик на 1[3,c.82]. Для этого введем с клавиатуры
count:=count+1;
Добавим полученное значение к произведению. Для этого введем с клавиатуры
mult:=mult*a;
Добавим вывод на экран строки результата. Для этого необходимо в программу добавить строку
writeln('Произведение чисел равно: ',mult);
Дошли до пункта проверки программы. Для запуска программы выберем пункт меню «Run» смотрите рисунок 11.
Рис. 11. Запуск программы
Запустим программу, введем произвольные числа в диапазоне от 1 до 5 и посмотрим результат на рисунке 12
Рис. 12. Результат программы
Аналогично изложенной программе, давайте создадим алгоритм со вложенным циклом используя цикл for-to.
Решим задачу: необходимо запросить с клавиатуры 10 чисел и найти их среднее арифметическое.
Для организации цикла for-to необходимо использование переменной-счетчика.[14,c.56] Объявим такую переменную. Для этого создадим строчку и добавим её в программу
var count:integer;
Начало написания программы смотрите на рисунке 13
Рис. 13. Введение счетчика в программу
Для запроса целочисленных данных от пользователя необходима переменная типа integer. Для этого введем строку программы
a:integer;
Для подсчета результата так же необходима переменная. В этой переменной будут суммироваться данные, вводимые пользователем.
sum:integer;
Переменная, отвечающая за суммирование, должна быть проинициализирована перед использованием, рисунок . Установим значение переменной, равное 0. Для этого введем в программу строку, рисунок 14
sum:=0;
Рис. 14. Ввод суммирующего элемента
Организуем цикл для ввода 10-ти значений от пользователя. Для этого вводим в программу строку
for count:=1 to 10 do
Так как мы собираемся использовать в цикле несколько операций, то необходимо поставить операторные скобки. Вводим следующую строку
begin
...введите дополнительную строку, окончания данного задания
end;
Водим с клавиатуры очередное значение... Для этого вводим в алгоритм следующую команду
readln(a);
В результате наш алгоритм выглядит следующим образом, рисунок 15. Продолжим запись программы.
Рис. 15. Ввод очередного значения
Однако пользователь должен понять, что за данные ему необходимо вводить.
Write (‘Введите ‘, count, ‘-тое значение:’);
Не забудем в каждой итерации цикла прибавить новое значение к сумме. Для этого введем строку в программу
sum:=sum+a;
В конце программы выведем результат на экран, следующей строкой
Writeln (‘Среднее арифметическое:’, sum/10);
Запустим программу, щелкнув пункт меню «Run», рисунок 16.
Рис. 16. Запуск программы
Необходимо пользователю ввести 10-ть значений (от 1 до 10). Результат работы программы видно на рисунке 17
Рис. 17. Результат работы программы
Мы рассмотрели два варинта написания программы с использование двух циклов. Как видно из примеров необходимо все сторонне подходить к написанию программы, что бы пользователю было понятно и удобно использовать написанную программу, для этого и вводим строки позволяющие пользователю получить желаемый результат работы программы.
3. Работа с массивами
Массив — упорядоченный набор данных для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.[1]
Работа с многомерными массивами всегда связана с организацией вложенных циклов, рассмотрим пример написания такого массива.
Начнем запись программы
Program TestProg;
Begin
End.
Для начала нам необходимо определить массив для хранения десяти введенных пользователем значений. Для этого введите в программу строку
var a:array[1..10] of integer;
Обработка массивов очень часто производится при помощи цикла for. Для использование данного цикла необходимо определить переменную-счетчик.
i:integer;
Ввод данных с клавиатуры будет осуществляться в цикле for. Добавим в программу данный цикл. Для этого введем строку
for i:=1 to 10 do
Так как в теле цикла будет составной оператор, рисунок 18 то введем следующее:
Begin
End;
Рис. 18. Составной оператор цикла
Выдадим запрос на ввод очередного элемента. Для алгоритм программы вводим строку
Write (‘Введите’,i,’-ый элемент’);
Запросим i-ый элемент у пользователя. Для этого введите строку
readln(a[i]);
Для нахождения максимального значения нам понадобится еще одна переменная., она будет следующая
max:integer;
Инициализируем переменную числом 0. Для этого введите строку в программу
max:=0;
Организуем цикл для поиска максимального значения, смотрите на рисунке 19 . Необходимо перебрать все элементы массива.
For i:=1 to 10
Begin
End;
Рис. 19. Цикл для поиска максимального значения
Проверим, больше ли очередной элемент массива, чем значение в max? Если больше, то запишем это значение в max. Для этой операции в алгоритм программы вводим следующую строку
if (a[i]>max) then max:=a[i];[16]
Выведем пользователю результат выполнения программы, рисунок 20.
Write (‘максимальное значение в массиве:’, max);
Рис. 20. Готовая программа по поиску максимального значения
Запустим программу, для чего щелкнем по меню Run для открытия меню.
Теперь, введя по запросу 10 чисел, в качестве результата получим наибольшее из этих значений, рисунок 21.
Рис. 21. Результат работы программы
На данный момент мы имеем программу, которая запрашивает у пользователя 10 чисел с клавиатуры и заполняет ими массив. Теперь необходимо организовать цикл обработки значений массива[10], начиная со 2-го
For i:=2 to 10
Begin
End.
Организуем проверку двух соседних значений массива. Для этого в алгоритм добавим условие с составным оператором (рис. 22).