
- •Глава 3. Реализация алгоритмов ветвления
- •3.1. Условный оператор
- •Полная форма оператора
- •Краткая форма оператора.
- •3.2. Задачи к пройденной теме
- •3.3. Задачи для самостоятельного решения
- •Глава 4. Реализация циклических алгоритмов
- •4.1. Конструкция цикла со счетчиком
- •4.2. Базовые алгоритмы
- •4.3. Циклы с предварительной и последующей проверкой условия
- •Цикл с последующей проверкой условия.
- •4.4. Вложенные циклы
- •4.5 Решение задач
- •Задачи для самостоятельного решения
- •Глава 5. Пользовательские типы данных.
- •5.1. Общие понятия
- •5.2. Одномерные массивы
- •5.4. Задачи для самостоятельного решения.
- •Глава 6. Многомерные массивы
- •6.1. Двумерные массивы
- •1. Заполнение двумерного массива по строке.
- •2. Заполнение двумерного массива по столбцу.
- •3. Печать содержимого двумерного массива в виде таблицы.
- •4. Вычисление суммы элементов каждой строки (столбца).
- •6. Задача поиска максимального (минимального) элемента и его индексов (считая, что элемент единственный).
- •Алгоритм поиска минимального элемента и его индексов для всего массива.
- •6.2. Квадратные матрицы.
- •Введем некоторые понятия:
- •6.3. Задачи
- •Глава 7. Типы данных Char и String
- •7.1. Символьные данные
- •7.2. Кодирование
- •7.3. Операции над данными типа char.
- •7.4. Строки
4.3. Циклы с предварительной и последующей проверкой условия
Рассмотрим такую задачу.
Определить количество натуральных чисел, сумма которых превысит 100, если суммирование началось с единицы и каждое слагаемое на единицу больше предыдущего.
Чем отличается задание от предыдущих?
Алгоритм суммирования тот же самый, но в данном случае неизвестно количество слагаемых. Конструкция цикла со счетчиком для заданий такого типа не годится.
Для решения такого рода задач в языке Турбо Паскаль имеются две конструкции: конструкция цикла с предварительной проверкой условия и конструкция цикла с последующей проверкой условия.
Цикл с предварительной проверкой условия.
WHILE <условие> DO
пока
оператор;
{или группа операторов в операторных скобках BEGIN - END}
До тех пор пока условие является истиным, выполняются операторы цикла.
О чем надо помнить:
Если условие ложно, сразу же при первом обращении к циклу, то тело цикла не выполнится ни разу.
Данная конструкция может работать, как конструкция цикла со счетчиком, но при этом необходимо изменять переменную, являющуюся счетчиком, с помощью оператора присваивания. В конструкции WHILE можно выбрать любой необходимый шаг.
Рассмотрим сказанное выше на конкретных примерах.
Решим задачу о сумме натуральных чисел. Нам необходимо найти количество чисел, сумма которых превысит 100. Ниже представлена схема алгоритма решения задачи. Конструкции WHILE в схеме соответствует ромб.
Рис.4.4. Схеме алгоритма подсчета количества слагаемых, сумма которых меньше 100.
Текст программы.
PROGRAM WHILE1;
USES CRT;
VAR
K: integer;
S: integer;
BEGIN
clrscr;
S := 0;
K := 0;
WHILE S<=100 DO
BEGIN
K := K + 1;
S := S + K
END;
writeln('Количество слагаемых ', K, ' их сумма = ', S);
writeln('Нажмите любую клавишу для выхода...');
readln;
END.
О ЧЕМ НАДО ПОМНИТЬ:
Выход из цикла осуществляется только в том случае, когда значение переменной S превысит 100.
Обратите внимание: начальное значение переменной K=0, в этом случае оператор присваивания K:=K+1 расположен до оператора присваивания S=S+K, в этом случае значение переменной K при выходе из цикла показывает номер слагаемого, на котором произойдет превышение суммы. Очень часто начальное значение K задают равным 1, тогда при выходе из цикла необходимо уменьшить K на единицу, чтобы получить номер слагаемого, на котором произошло превышение суммы.
Задача 2. Вычислить сумму первых 10 натуральных чисел.
Это задание было разобрано при изучении оператора FOR. Рассмотрим вариант, когда конструкция WHILE работает со счетчиком.
PROGRAM WHILE10N;
USES CRT;
VAR
i: integer; {очередное слагаемое-счетчик}
S: integer; {сумма}
BEGIN
clrscr;
i := 1;
S := 0;
WHILE i <= 10 DO
BEGIN
S := S+i;
i := i+1
END;
writeln('сумма = ', S);
writeln('Нажмите любую клавишу для выхода...');
readln;
END.
Задача 3. Вычислить сумму четных чисел на отрезке от 10 до 30.
PROGRAM SUM10N30;
USES CRT;
VAR
K: integer; {очередное слагаемое}
S: integer; {сумма}
BEGIN
clrscr;
K:=10;
S:=0;
WHILE K <= 30 DO
BEGIN
S:=S+K;
K:=K+2
END;
writeln('сумма четных чисел от 10 до 30 = ', S);
writeln('Нажмите любую клавишу для выхода...');
readln;
END.