Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация и программирование. Практическое пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
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, которые задают интенсивность красной, зеленой и синей составляющей в данном оттенке. Значение функции присваивает-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]