
- •Введение
- •Глава 1. Структурное программирование
- •1.1 Основные определения
- •1.2 Три основных действия
- •1.2.1 Последовательность
- •1.2.2 Выбор
- •1.2.3 Цикл
- •1.3. Структурный подход к решению задач
- •Задание
- •1.4. Организация хранения и обработки данных
- •1.4.1 Записи и списки
- •Задание
- •1.4.2 Очередь
- •Задание
- •1.4.3 Стек
- •Задание
- •1.5 Структурное программирование.
- •2. Программирование на языке паскаль
- •2.1. Краткая история эвм и языки программирования
- •Задание
- •2.2. Интегрированная среда borland pascal
- •2.2.1. Краткая характеристика. Запуск программы
- •2.1.2. Основы работы в редакторе Открытие нового окна
- •Завершение работы со средой
- •Задание
- •«Горячие» клавиши интегрированной среды
- •2.3. Структура программы
- •2.3.1.Основные положения
- •2.3.2. Понятие идентификатора
- •2.3.3. Первая программа
- •2.3.4. Описание подпрограммы (процедуры).
- •2.3.4. Строковый тип данных
- •2.3.5. Процедуры ввода и вывода данных
- •Задание
- •2.4. Программа калькулятор.
- •2.4.1. Тип целые и вещественный.
- •2.4.2. Переменные вещественного типа
- •Задание
- •2.5. Улучшенный калькулятор
- •2.5.1. Операторы выбора
- •Булевские (логические) операции
- •Операции отношения
- •Оператор if … then
- •Оператор case
- •2.5.2. Основные отличия применения операторов выбора. Перечисляемый тип. Интервальный тип.
- •Задание
- •2.6. Улучшенный каЛьКулятор (продолжение)
- •2.6.1. Оператор цикла с постусловием (проверка на ноль)
- •2.6.2. Оператор цикла с предусловием
- •2.6.3. Оператор цикла со счетчиком (параметром)
- •Задание
- •2.7. Переменные типа массив
- •2.7.1. Виды массивов
- •2.7.2.Описание массива
- •2.7.3.Нахождение максимального элемента в массиве
- •Задание
- •2.7.4. Строковая переменная (продолжение)
- •Задание
- •2.7.5. Строковая переменная как массив
- •Мама мыла раму
- •Задание
- •2.7.6. Описание функции
- •Задание
2.6.2. Оператор цикла с предусловием
Оператор while является универсальной управляющей конструкцией. С его помощью можно записать любое циклическое действие. Формат оператора можно изобразить одним из следующих способов.
Тело цикла состоит из одного действия |
Тело цикла состоит из более чем одного действия |
While Условие do Действие; |
While Условие do Begin Действие 1; Действие 2; . . . . . . Действие n; end; |
В нашем случае процедура Init будет выглядеть следующим образом:
procedure Init;
begin
Writeln('Insert chislo 1');
Readln(Chislo1);
Writeln('Insert Znak');
Readln(Znak);
Writeln('Insert chislo 2');
Readln(Chislo2);
While (znak=’/’) and (Chislo2=0) do
begin
Writeln('Insert chislo 2');
Readln(Chislo2);
End;
End
Если знак действия не будет равен "/" или второе число будет неравно нулю, то в процессе выполнения программы этот цикл будет обойден, то есть цикл ни разу не выполнится. Посмотрите, как работает эта программа, проведя ее трассировку (используя клавишу F7).
2.6.3. Оператор цикла со счетчиком (параметром)
Оператор цикла со счетчиком (параметром) применяется только тогда, когда заранее известно начальные и конечные значения счетчика повторений цикла. Он имеет два вида:
For Имя счетчика:= Начальное значение to Конечное значение do
Действие;
For Имя счетчика:= Начальное значение downto Конечное значение do
Действие;
При выполнении цикла, значение счетчика увеличивается на 1 в первом случае и уменьшается на 1- во втором. Поэтому для того, что бы цикл работал в первом случае необходимо, чтобы выполнялось следующее условие: Начальное значение Конечное значение. Для второго варианта использования цикла со счетчиком нужно чтобы выполнялось условие: Начальное значение Конечное значение.
Количество повторений можно определить следующим образом:
Конечное значение - Начальное значение + 1 - для первого случая;
Начальное значение - Конечное значение + 1 - для второго случая.
Допустим, что нам надо вывести результат работы нашего калькулятора на экран три раза. Если бы мы не использовали оператор цикла, мы должны были бы написать процедуру writeln() три раза:
procedure Exi;
begin
writeln(resultat);
writeln(resultat);
writeln(resultat);
end;
С использованием оператора цикла со счетчиком процедура procedure Exi будет выглядеть следующим образом:
procedure Exi;
var
i : byte;
begin
For i:=1 to 3 do
writeln(resultat);
end;
Здесь: i - имя счетчика, 1- начальное значение счетчика, 3 - конечное значение которое может принять счетчик. Перед использованием счетчика его необходимо описать в блоке описания переменных. Так как переменная с именем "i" используется только в процедуре procedure Exi, ее можно описать как локальную переменную данной процедуры.
Как уже отмечалось, цикл с параметром, или как мы говорили цикл с фиксированным количеством действий, является частным случаем цикла с предусловием.
Посмотрим, как будет выглядеть этот фрагмент программы при использовании оператора while:
procedure Exi;
var
i : byte;
begin
i:=1
while i<= 3 do
begin
writeln(resultat);
inc(i);
end;
end;
Как видим задание начального значения счетчика цикла (i:=1), при использовании оператора цикла с предусловием, выполняется перед заголовком цикла, а не в самом заголовке, как в случае цикла с параметром. Кроме этого, в теле цикла используется специальный оператор, который увеличивает значение счетчика на единицу (inc(i)), а в цикле с параметром это происходит автоматически при выполнении тела цикла. Если изменения параметра участвующего в условии выполнения цикла с предусловием не будет происходить, то цикл будет выполнятся - «бесконечно долго» (до аварийной остановки программы). Это замечание касается и цикла с постусловием. Так что при использовании циклов с нефиксированным количеством действий внимательно следите, что бы не произошло «бесконечного зацикливания».
При написании последнего фрагмента программы мы использовали новую процедуру inc(i,n), познакомимся с ней поближе:
Процедура inc(i,n) – увеличивает значение переменной i на величину n , если n опущена, то увеличение происходит на единицу (здесь i и n – целые числа). Действие данной процедуры аналогично выражению i:= i + n , но выполняется быстрее.
Процедура dec(i,n) – обратная по действию процедуре inc(i,n) и аналогична выражению i:= i - n .