
- •Рекомендации по использованию методического пособия
- •1. Структура программы в Паскале.
- •11. Подпрограммы.
- •13. Работа с файлами.
- •Введение
- •Характеристика и особенности языка
- •Основные особенности языка Pascal
- •Программирование на языках программирования высокого уровня
- •Структура программы в Паскале
- •Правила написания имен в Паскале
- •Стандартные модули в Паскале
- •Типы переменных в Паскале
- •Операции в Паскале
- •Дополнительные функции в Паскале
- •Команда ввода данных
- •Математическое действие
- •Ветвящиеся алгоритмы
- •Оператор условия
- •Оператор выбора
- •Циклические алгоритмы
- •Цикл с предусловием
- •Цикл с постусловием
- •Цикл с параметром
- •Принудительный выход из цикла
- •Работа с массивами
- •Одномерные массивы
- •Многомерные массивы
- •Работа со строковыми переменными
- •Строковые переменные
- •Ascii коды клавиш
- •Подпрограммы
- •Подпрограмма-функция
- •Подпрограмма-процедура
- •Графика в Паскале
- •Переход в графический режим
- •Цветовое оформление
- •Графические примитивы
- •Запись данных в файл
- •Закрытие файла
- •Список использованной литературы:
Циклические алгоритмы
Цикл – многократное повторение последовательности действий по некоторому условию Известны три типа циклических алгоритмических структур:
Цикл с предусловием;
Цикл с постусловием;
Цикл с параметром.
В Паскале существуют операторы, реализующие все три типа циклов.
Цикл с предусловием
Программа
повторяет заданную последовательность
действий, пока условие выполняется, и
выходит из цикла после того, как условие
становится ложным. Как видно из названия
цикла, истинность условия проверяется
до того, как тело цикла выполнится хотя
бы один раз. Таким образом, алгоритм
цикла с предусловием выглядит следующим
образом:
начало цикла
Пока <условие>, повторяй
<действие 1>;
<действие 2>;
…
<действие n>;
конец цикла;
На языке Паскаль эта структура реализуется оператором While:
While <условие> do <действие>;
Так же, как и в ветвящихся конструкциях, если необходимо произвести несколько действий, используются служебные слова begin и end.
While <условие> do begin
<действие 1>;
<действие
2>;
…
<действие n>;
end;
Пример
Одноклеточная амеба каждые 3 часа делится на 2 клетки. Сколько амеб будет через n часов?
Алгоритм амеба;
Целые: a,t,n;
Начало
Ввести: n;
a:=1;
t:=0;
Начало цикла
Пока t<=n повторяй
a:=2*a;
t:=t+3;
Конец цикла;
Вывести: ‘через ‘,n,’ часов будет ‘,a,’ амеб’;
Конец.
Program ameba;
uses crt;
Var a,t,n: integer;
begin
clrscr;
a:=1;
t:=0;
writeln(‘Введите время (в часах)’);
read(n);
while t<=n do begin
a:=2*a;
t:=t+3;
end;
writeln(‘через ‘,n,’ часов будет ‘,a,’ амеб’);
end.
Цикл с постусловием
Инструкции цикла с постусловием обязательно выполняются один раз, и только после этого проверяется условие. Если оно ложно, то инструкции цикла выполняются еще раз, и так продолжается до тех пор, пока условие не станет истинным. Таким образом, в этой конструкции записывается условие завершения цикла.
Повторяй <действие 1>;
<действие 2>;
…
<действие n>
Пока не <условие>;
Аналогичным образом эта структура записывается на языке Паскаль:
Repeat <действие 1>;
<действие 2>;
…
<действие n>
until <условие>;
Использование
служебных слов begin
и end
для ограничения составного тела цикла
не требуется.
Пример
Одноклеточная амеба каждые 3 часа делится на 2 клетки. Сколько амеб будет через n часов?
А
лгоритм
амеба;
Целые: a,t,n;
Начало
Ввести: n;
a:=1;
t:=0;
Повторяй
a:=2*a;
t:=t+3
Пока не t>n;
Вывести: ‘через ‘,n,’ часов будет ‘,a,’ амеб’;
Конец.
Program ameba;
uses crt;
Var a,t,n: integer;
begin
clrscr;
a:=1;
t:=0;
writeln(‘Введите время (в часах)’);
read(n);
repeat
a:=2*a;
t:=t+3;
until t>n;
writeln(‘через ‘,n,’ часов будет ‘,a,’ амеб’);
end.
Цикл с параметром
Цикл с параметром удобно использовать, когда точно известно, сколько раз требуется произвести действия.
Для осуществления цикла необходима переменная типа integer (как правило, обозначается буквой i), которая исполняет роль счетчика, или параметра, и изменяется при каждом повторении тела цикла. В зависимости от того, как меняется значение параметра цикла, различают два вида циклов с параметром: прямой и обратный.
Прямой цикл с параметром
О
собенность
этого вида в том, что при каждом повторении
значение параметра увеличивается
ровно на единицу.
Для i:= Kначальное до Kконечное повторяй
начало цикла
<действие 1>;
<действие 2>;
…
<действие n>;
конец цикла
Kначальное
и Kконечное
–
некоторые значения целого типа,
определяемые только один раз в начале
цикла, причем Kначальное
<
Kконечное;
параметр цикла принимает поочередно
все целые значения, находящиеся в
промежутке от Kначальное
до Kконечное
включительно.
В Паскале это записывается таким образом:
for i:= Kначальное to Kконечное do begin
<действие 1>;
<действие 2>;
…
<действие n>;
end;
Пример
Найдем сумму чисел от 1 до n, где n – натуральное число.
А
лгоритм:
числа;
Целые: i,n,s;
Начало
Ввести: n;
Для i:=1 до n повторяй s:=s+i;
Вывести: s;
Конец.
Program Chisla;
uses crt;
var i,n: integer; s: longint;
begin
clrscr;
Writeln(‘Введите натуральное число’);
read(n);
for i:=1 to n do s:=s+i;
writeln(‘Сумма равна ’,s);
end.
Обратный цикл с параметром
В данном случае конструкция остается неизменной, единственное изменение связано с тем, что в обратном цикле параметр с каждым повторением уменьшается на единицу, таким образом, в алгоритмической записи Kначальное и Kконечное меняются местами:
Для i:= Kконечное до Kначальное повторяй
начало
цикла
<действие 1>;
<действие 2>;
…
<действие n>;
конец цикла
В записи на Паскале, кроме этого, слово to меняется на downto:
for i:= Kконечное downto Kначальное do begin
<действие 1>;
<действие 2>;
…
<действие n>;
end;
Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Пример
В стаде 100 овец, каждая из которых за месяц дает 5кг шерсти. Ежемесячно волк крадет одну овцу из стада. Сколько шерсти состригут со всего стада за m месяцев?
Алгоритм: овцы;
Целые: o,sh,m;
Н
ачало
Ввести: m;
sh:=0;
Если m>99, то m:=99;
Для o:=100 до (100-m) повторяй sh:=sh+5*o;
Вывести: sh;
Конец.
Program ovtsy;
uses crt;
var o,m,sh: integer;
begin
clrscr;
Writeln(‘Введите количество месяцев’);
read(m);
if m>99 then m:=99;
for o:=100 to (100-m) do sh:=sh+5*o;
writeln(‘Состригут ’,sh,‘ кг шерсти’);
end.