Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование. Практическое пособие
.pdf
31
4) a,b,c:real; — описание вещественных переменных;
5) begin — начало операторного блока;
6) write(’Ввод 2 чисел ’); — оператор вывода текста
подсказки на экран;
7) readln(a,b); — оператор ввода с клавиатуры двух ве-
щественных чисел;
8) if a>b then
c:=a
else
c:=b; — условный оператор, который присваивает ве-
щественной переменной c значение a, если a>b, и значение b,
если a<=b, т. е. выбирает большее из введенных чисел;
9) writeln(’c=’,c); — оператор вывода на экран пояс-
няющего текста и значения вещественной переменной c;
10) end. — конец операторного блока и программы в целом.
Задание 9
1. Наберите программу My7 из примера 7, сохраните ее.
2. Запустите выполнение программы My7. Изучите работу опе-
раторов ввода и вывода.
3. Постройте программу My7а, чтобы из двух введенных с
клавиатуры чисел компьютер выбирал меньшее по модулю и выводил его на экран.
Подсказка. Используйте встроенную функцию abs(x) для
расчета модуля числа и полный условный оператор if …
then … else для выбора из двух вариантов.
4. Добавьте в программу описание символьной переменной s.
Организуйте ввод ее значения с клавиатуры. Вставьте в операторный блок оператор, который будет работать в зависимости от
введенного значения символьной переменной:
если s=’y’ или ’д’, то выводить слово ’Да’,
если s=’n’ или ’н’, то выводить слово ’Нет’,
во всех остальных случаях выводить ’Не знаю’.
Подсказка. Использовать многоальтернативный оператор
case … of с вспомогательной переменной символьного типа.

32
program My8;
uses CRT;
var
a,b,c:real;
begin
write(’Ввод 2 чисел ’);
readln(a,b);
if a>b then
begin
c:=0;
writeln(’c=’,c);
end;
end.
Оператор назначения имени
Блок подключения модуля
Заголовок блока переменных
Оператор описания переменных
Заголовок блока операторов
Оператор вывода
Оператор ввода
Условный оператор
Операторная скобка
Оператор присваивания
Оператор вывода
Операторная скобка
Конец программы
Если в одну из ветвей условного оператора входит не одна
команда, а несколько, то они заключаются в операторные
скобки:
begin
оператор1;
оператор2;
. . .;
end;
10. Операторные скобки
Пример 8:
Рассмотрим работу операторов данной программы:
1) program My8; — оператор, именующий программу;
2) uses CRT; — блок подключения модуля для организации
ввода и вывода в текстовое окно;
3) var — заголовок блока описания переменных;
4) a,b,c:real; — описание вещественных переменных;
5) begin — начало операторного блока;
6) write(’Ввод 2 чисел ’); — оператор вывода текста
на экран;
7) readln(a,b); — оператор ввода с клавиатуры двух ве-
щественных чисел;

33
8) if a>b then
begin
c:=0;
writeln(’c=’,c);
end; — урезанный условный оператор. Если a>b выпол-
няются два оператора: оператор присваивания вещественной переменной c значения 0 и вывод значения c на экран. Если условие a>b не выполняется, то не выполняется никаких действий,
управление в программе передается следующему оператору;
9) end. — конец операторного блока и программы в целом.
Задание 10
1. Наберите программу My8 из примера 8, сохраните ее.
2. Запустите выполнение программы My8. Изучите работу опе-
раторов ввода и вывода.
3. Постройте программу My8а, чтобы компьютер из трех вве-
денных с клавиатуры чисел выбирал большее и выводил его на
экран.
Подсказка. Используйте полный условный оператор if …
then … else для организации первого ветвления, внутри него
еще один if … then для организации второго ветвления, а также операторные скобки begin … end.
11. Оператор цикла (счетный)
11.1. Оператор цикла используется для реализации повторяющихся фрагментов алгоритма. Сначала рассмотрим оператор с заранее заданным количеством прохождений цикла — счетный
оператор цикла.
Оператор цикла начинается со служебного слова for (для).
Параметр цикла (целая переменная) получает начальное значение. Затем выполняется оператор (операторы) из тела цикла. При
каждом следующем прохождении параметр цикла увеличивается
на 1 и выполняется тело цикла. При последнем прохождении параметр цикла получает конечное значение, в последний раз вы-

34
полняется тело цикла. После этого управление передается следующему за оператором цикла оператору.
Тело цикла находится после служебного слова do (делать) и
может состоять из одного или нескольких операторов, в последнем случае тело цикла заключается в операторные скобки
begin … end.
Пример использования оператора цикла:
b:=1;
for i:= 1 to 12 do
b:=b*i;
Перед началом цикла переменной b присвоено значение, рав-
ное единице. В нашем примере тело цикла состоит из одного оператора присваивания значения переменной b, но этот оператор
будет выполняться 12 раз.
При первом прохождении цикла значение i равно 1, поэтому в первый раз переменная b получит значение 1*1 и станет
равна 1.
При втором прохождении цикла значение параметра цикла i
станет равно 2. Оператор в теле цикла присвоит переменной b
значение 1*2.
При третьем прохождении цикла значение параметра цикла i
станет равно 3. Оператор в теле цикла присвоит переменной b
значение 2*3.
Таким образом, при каждом прохождении цикла переменная b
домножается на очередное значение параметра i, по окончании
работы оператора цикла значение переменной b будет равно
1*2*3*4*5*6*7*8*9*10*11*12 (12!, или 12 факториал).
11.2. Параметр цикла должен быть описан как целая перемен-
ная. Если конечное значение меньше начального, то цикл выполняться не будет.
11.3. Если служебное слово to заменить на down to, то пара-
метр цикла с каждым шагом будет не увеличиваться, а уменьшаться на 1. (При этом, естественно, начальное значение должно
быть больше или равно конечному).
11.4. Если тело цикла состоит из нескольких операторов, то
они заключаются в операторные скобки begin … end.

35
program My9;
uses CRT;
var
a:array[1..4] of integer;
i,b:integer;
begin
write(’Введите 4 числа ’);
readln(a[1],a[2],a[3],a[4]);
b:=0;
for i:=1 to 4 do
b:=b+a[i];
writeln(’Сумма ’,b);
end.
Оператор назначения имени
Блок подключения модуля
Заголовок блока переменных
Оператор описания массива
Оператор описания
Заголовок блока операторов
Оператор вывода
Оператор ввода
Оператор присваивания
Оператор цикла (счетного)
Оператор присваивания
Оператор вывода
Конец программы
Пример 9:
Рассмотрим работу операторов данной программы:
1) program My9; — оператор, именующий программу;
2) uses CRT; — блок подключения модуля для организации
ввода и вывода в текстовое окно;
3) var — заголовок блока описания переменных;
4) a:array[1..4] of integer; — описание массива из
четырех целых переменных;
5) i,b:integer; — описание двух целых переменных;
6) begin — начало операторного блока;
7) write(’Введите 4 числа ’); — оператор вывода
текста на экран;
8) readln(a[1],a[2],a[3],a[4]); — оператор ввода с
клавиатуры четырех целых чисел — элементов массива a;
9) for i:=1 to 4 do
b:=b+a[i]; — оператор цикла (счетный), тело цикла — оператор присваивания значения переменной b, выполняется 4 раза со значениями параметра цикла i=1,2,3,4 соответственно. До выполнения цикла значение переменной b равно 0,
при первом прохождении цикла к b добавляется значение первого элемента массива a[1], при втором — a[2] и т. д. Таким образом, после выполнения оператора цикла значение переменной
b равно сумме всех четырех элементов массива a;

36
10) writeln(’Сумма ’,b); — оператор вывода на эк-
ран поясняющего текста и значения вычисленной суммы элементов массива;
11) end. — конец операторного блока и программы в целом.
Задание 11
1. Наберите программу My9 из примера 9, сохраните ее.
2. Запустите программу My9 на выполнение. Изучите работу
операторов ввода и вывода.
3. По аналогии с программой My9 постройте программу My9а,
чтобы компьютер возвел в 7 степень введенное с клавиатуры вещественное число и вывел результат на экран.
4. Сосчитайте 7степень введенного числа с помощью встроен-
ной функции power, выведите результат и сравните с полученным в цикле.
Подсказка. Используйте счетный оператор цикла for … do.
При каждом прохождении цикла вспомогательная переменная
должна домножаться на введенное число.
12. Оператор цикла с проверкой условия
12.1. Оператор цикла может не иметь заранее определенного
числа прохождений, как счетный оператор цикла. В этом случае
повторение шагов зависит от выполнения или невыполнения условия цикла.
Если условие проверяется перед первым выполнением операторов тела цикла, то такой вариант называется оператором цикла
с проверкой предусловия. В этом случае выход из цикла происходит при первом нарушении условия цикла.
Если в первый раз операторы тела цикла выполняются в любом случае, а проверка идет перед вторым проходом, то этот вариант называется оператором цикла с проверкой послеусловия. В
этом случае выход из цикла происходит при первом выполнении
условий цикла.

37
12.2. Оператор цикла с предусловием:
a:=25;
while a>0.01 do
а:=a/2;
Перед циклом присвоили вещественной переменной a значение 25. Оператор цикла начинается со служебного слова while
(пока), затем идет условие, которое проверяется при каждом проходе цикла, включая первый. Если условие выполнено, то выполняется оператор, который стоит после служебного слова do. Если
нужно выполнить несколько операторов в теле цикла, то они заключаются в операторные скобки begin … end.
В нашем примере при первом выполнении цикла условие
a>0.01 будет выполнено, поэтому будет выполнен оператор тела цикла — оператор присваивания переменной a нового значения, в 2 раза меньше предыдущего. Новое значение переменной
a=12.5, оно также удовлетворяет условию цикла, поэтому и во
второй раз будет выполнен оператор деления числа а на 2 и т. д.
Оператор цикла будет работать до тех пор, пока число а не станет <=0.01. Тогда цикл закончит свою работу и управление будет передано следующему оператору.
Внимание! При организации циклов этого рода обязательно
нужно делать так, чтобы условие продолжения цикла рано или
поздно нарушалось. Иначе цикл никогда не закончит свою работу, и придется вмешиваться в работу программы путем внешнего
воздействия, что нежелательно.
В нашем примере число, которое мы на каждом шаге делим
на 2, обязательно станет меньше любого заданного положительного числа, поэтому цикл закончит работу за конечное, хотя и неизвестное заранее число шагов.
12.3. Оператор цикла с послеусловием:
a:=25;
repeat а:=a/2
until a<=0.01;
Этот пример похож на предыдущий, но есть отличия и в конструкции оператора цикла и в выполнении программы. После
служебного слова repeat (повторять) сразу идет тело цикла,
значит, первое деление переменной а на 2 произойдет в любом

38
program My10;
uses CRT;
var
a,b:real;
i:integer;
begin
write(’Введите число>0 ’);
readln(a);
b:=0;
i:=0;
while a-b>0 do
begin
b:=b+0.1;
i:=i+1;
end;
writeln(’Число месяцев ’,i);
end.
Оператор назначения имени
Блок подключения модуля
Заголовок блока переменных
Оператор описания
Оператор описания
Заголовок блока операторов
Оператор вывода
Оператор ввода
Оператор присваивания
Оператор присваивания
Оператор цикла (с условием)
Операторная скобка
Оператор присваивания
Оператор присваивания
Операторная скобка
Оператор вывода
Конец программы
случае, независимо от ее значения и условия цикла. Затем в операторе идет проверка условия, но в операторе этого типа выход
из цикла будет осуществлен при первом выполнении условия
until (пока не) a<=0.01. Поэтому мы изменили знак неравенства на противоположный.
При начальных данных a:=25; оба цикла с проверкой предусловия while и с проверкой послеусловия repeat будут работать одинаково. Однако если мы заменим оператор a:=25; на
оператор a:=0.0005; в обоих примерах, то действия операторов будут разными. Оператор с проверкой предусловия вообще
ни разу не будет выполнен, а оператор с проверкой послеусловия
выполнится один раз, таким образом значение переменной a после выполнения оператора цикла в рассмотренных примерах будет разным.
Пример 10:
Рассмотрим работу операторов данной программы:
1) program My10; — оператор, именующий программу;
2) uses CRT; — блок подключения модуля для организации
ввода и вывода в текстовое окно;

39
3) var — заголовок блока описания переменных;
4) a,b:real; — описание двух вещественных переменных;
5) i:integer; — описание целой переменной;
6) begin — начало операторного блока;
7) write(’Введите числа>0 ’); — оператор вывода
текста на экран;
8) readln(a); — оператор ввода с клавиатуры веществен-
ного чисела a;
9) while a-b>0 do
begin
b:=b+0.1;
i:=i+1;
end; — оператор цикла (с проверкой предусловия), тело
цикла — два оператора присваивания значений переменным b и
i. До выполнения цикла значение переменной b равно 0, при
первом прохождении цикла к b добавляется число 0.1, а значение i увеличивается на 1. После каждого выполнения операторов
тела цикла возросшее значение переменной b сравнивается с
числом a. Как только переменная b станет больше или равна a,
выполнение цикла остановится. Допустим, что каждый оборот
цикла совершается за месяц, тогда переменная i считает количество прошедших месяцев;
10) writeln(’Число месяцев ’,i) — оператор вывода
на экран поясняющего текста и значения переменной i на выходе из цикла;
11) end. — конец операторного блока и программы в целом.
Задание 12
1. Наберите программу My10 из примера 10, сохраните ее.
2. Запустите выполнение программы My10. Изучите работу
операторов ввода и вывода.
3. По аналогии с программой My10 постройте программу
My10а, решающую следующую задачу: найти угол, достаточно
маленький, чтобы разница по модулю между самим углом и его
синусом была меньше заданного числа 0.0001.

40
clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-
красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых
денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver – серебряный
Подсказка. Используйте оператор цикла с проверкой условия
while … do, встроенную функцию abs(x)и встроенную константу языка Паскаль — pi. Начните с угла pi/4, затем при
каждом прохождении цикла уменьшайте угол вдвое до достижения поставленного условия.
13. Работа с графическими объектами
13.1. Для работы с графическими объектами необходимо подключить соответствующий модуль командой uses GraphABC.
13.2. После подключения графического модуля, вывод будет осуществляться в специальное графическое окно. Можно
задать имя этого окна и его размеры в пикселях следующими
командами:
SetWindowCaption('Название');
SetWindowSize(x,y);
В качестве названия можно ввести любой текст. Числа или це-
лые переменные x,y задают ширину и высоту окна в пикселях.
13.3. В языке Паскаль есть встроенные константы для задания некоторых цветов:
Для задания произвольного оттенка используется функция
RGB(a,b,c), где a, b, c — целые числа в диапазоне от 0
до 255, которые задают интенсивность красной, зеленой и синей
составляющей в данном оттенке. Значение функции присваивает-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
