
- •Лабораторная работа №7 «Первичные навыки программирования на языке pascal»
- •Цель работы
- •Методические указания по подготовке к выполнению работы
- •Порядок выполнения лабораторной работы
- •Var X,y: real;
- •Var X,y: real;
- •Var n: byte;
- •2..4: Write('а');
- •5..10: Write('ов');
- •2..4: Write('а');
- •5..10: Write('ов');
- •Var n: integer;
- •2..4: Write('а');
- •5..10: Write('ов');
- •Var X,y:real;
- •Var X,y:real;
- •Var a:arr; {массив}
- •I,j,n: byte; {индексы, длина массива}
- •I_max: byte; {индекс максимального элемента массива}
- •Var a:arr; {массив}
- •I,j,n: byte; {индексы, длина массива}
- •I_max: byte; {индекс максимального элемента массива}
Var n: byte;
Далее следует основное тело программы, которое начинается с информационного блока.
begin
writeln;
writeln(’ Автор – Иванов И.П., студент гр. 121’);
writeln(’ Вариант № 100’);
writeln(’Программа вводит целое число от 1 до 10 и приписывает
окончание к слову ученик’);
writeln;
После вывода информации приступаем к вводу исходных данных, т. е. нужно вывести подсказку пользователю и ввести число учеников.
write('Число учеников --> ');
readln(n);
Далее программа должна вывести на экран введенное число, слово «ученик» и с помощью оператора выбора определить и вывести окончание этого слова.
write(n,' ученик');
case n of
2..4: Write('а');
5..10: Write('ов');
end;
Заметим, что нулевое окончание не требует дополнительного вывода, поэтому если пользователь введет число 1, программа выведет слово «ученик», и не выберет никакой из вариантов оператора case.
Но представим ситуацию, если пользователь вводит число, выходящие за границы диапазона от 1 до 10, например, 12. В этом случае программа выдаст некорректный результат. Так как значение 12 не подходит ни под какой вариант оператора выбора, то слово «ученик» будет написано с нулевым окончанием (как в случае со значением 1). На экране появится текст «12 ученик», хотя должно быть «12 учеников».
Для устранения этой «слабости» программы добавим проверку введенного пользователем числа, и если это число входит в допустимый диапазон, тогда нужно будет выполнить предыдущий фрагмент, в противном случае – выдать сообщение об ошибке.
if (n>=1) and (n<=10) then
begin
write(n,' ученик');
case n of
2..4: Write('а');
5..10: Write('ов');
end;
end
else
writeln(' ошибка ввода!');
В данном случае условный оператор содержит, во-первых, сложное условие, составленное из двух условных выражений с помощью логической связки and (логическое И), и, во-вторых, при выполнении условия должно быть выполнено два оператора (write и case), поэтому они заключаются в операторные скобки (begin end).
Полный текст программы будет выглядеть следующим образом:
program Lab2;
Var n: integer;
begin
writeln;
writeln(’ Автор – Иванов И.П., студент гр. 121’);
writeln(’ Вариант № 100’);
writeln(’Программа вводит целое число от 1 до 10 и приписывает
окончание к слову ученик’);
writeln;
write('Число учеников --> '); readln(n);
if (n>=1) and (n<=10) then
begin
write(n,' ученик');
case n of
2..4: Write('а');
5..10: Write('ов');
end;
end
else
writeln(' ошибка ввода!');
readln;
end.
Варианты заданий.
1. Дан номер месяца (1 – январь, 2 – февраль, ...). Вывести название соответствующего времени года («зима», «весна» и т. д.).
2. Дан номер месяца (1 – январь, 2 – февраль, ...). Вывести число дней в этом месяце для невисокосного года (т. е. в феврале 28 дней).
3. Дано целое число в диапазоне от 0 до 9. Вывести строку – название соответствующей цифры на русском языке (0 – «ноль», 1 – «один», 2 – «два», ...).
4. Дано целое число в диапазоне от 1 до 5. Вывести строку – словесное описание соответствующей оценки (1 – «плохо», 2 – «неудовлетворительно», 3 – «удовлетворительно», 4 – «хорошо», 5 – «отлично»).
5. Арифметические действия над числами пронумерованы следующим образом: 1 – сложение, 2 – вычитание, 3 – умножение, 4 – деление. Дан номер действия и два числа A и B (В не равно нулю). Выполнить над числами указанное действие и вывести результат.
6. Единицы длины пронумерованы следующим образом: 1 – дециметр, 2 – километр, 3 – метр, 4 – миллиметр, 5 – сантиметр. Дан номер единицы длины и длина отрезка L в этих единицах (вещественное число). Вывести длину данного отрезка в метрах.
7. Единицы массы пронумерованы следующим образом: 1 – килограмм, 2 – миллиграмм, 3 – грамм, 4 – тонна, 5 – центнер. Дан номер единицы массы и масса тела M в этих единицах (вещественное число). Вывести массу данного тела в килограммах.
8. Составить программу, которая по возрасту человека (вводится с клавиатуры как целое число) определяет его принадлежность к возрастной группе: от 0 до 13 – мальчик; от 14 до 20 – юноша; от 21 до 70 – мужчина; более 70 – старец.
9. Локатор ориентирован на одну из сторон света («С» – север, «З» – запад, «Ю» – юг, «В» – восток) и может принимать одну из трех цифровых команд: -1 – поворот налево, 1 – поворот направо, 2 – поворот на 180 градусов. Дан символ C – исходная ориентация локатора и число N – посланная ему команда. Вывести ориентацию локатора после выполнения команды.
10. Элементы окружности пронумерованы следующим образом: 1 – радиус (R), 2 – диаметр (D), 3 – длина (L), 4 – площадь круга (S). Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данной окружности (в том же порядке). В качестве значения π использовать стандартную константу Pi.
11. Элементы равнобедренного прямоугольного треугольника пронумерованы следующим образом: 1 – катет (a), 2 – гипотенуза (c), 3 – высота, опущенная на гипотенузу (h), 4 – площадь (S). Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данного треугольника (в том же порядке).
12. Даны два целых числа: D (день) и M (месяц), определяющие правильную дату невисокосного года. Вывести значения D и M для даты, предшествующей указанной (например, дано D=1 M=1, надо вывести D=31 M=12; дано D=1 M=3 надо вывести D=28 M=2; дано D=15 M=12 надо вывести D=14 M=12).
Задание 3. Применение циклов.
Составить блок-схему и программу для заполнения таблицы значений функции y = f(x) на отрезке с указанным шагом изменения аргумента. Вид функции задается в задании № 1. Значение функции выводить с точностью до тысячных долей.
Результат вывести в следующем виде:
Теоретический материал.
Реализация подобного рода задач требует повторения действия (или нескольких действий) несколько раз, т. е. использования циклов.
В языке Pascal имеется три вида циклических структур: цикл с параметром for, цикл с предусловием while и цикл с постусловием repeat..until.
Цикл с параметром используется тогда, когда заранее известно количество повторов тела цикла. Число повторений здесь задается переменной, называемой параметром цикла, или управляющей переменной.
Данный оператор может быть представлен в двух форматах:
for <параметр цикла> := <S1> to <S2> do <тело цикла>;
for <параметр цикла> := <S1> downto <S2> do <тело цикла>;
где Sl и S2 – выражения, определяющие соответственно начальное и конечное значения параметра цикла.
Тело цикла может содержать один оператор или несколько операторов, заключенных в операторные скобки begin .. end (составной оператор). Если тело цикла – простой оператор, операторные скобки не пишутся.
При первом обращении к оператору for вначале вычисляются выражения S1, S2 и осуществляется присваивание <параметр цикла>:=S1.
После этого циклически повторяются следующие действия.
1. Проверяется условие <параметр цикла>:<=S2.
2. Если условие выполнено, то оператор for продолжает работу (выполняется оператор в теле цикла), если условие <параметр цикла>:<=S2 не выполнено, то оператор for завершает работу, и управление в программе передается на оператор, следующий за циклом.
3. Значение управляющей переменной изменяется на +1 (to) или -1 (downto) и далее с п. 1. Обратите внимание, что шаг изменения управляющей переменной – единица.
На использование управляющей переменной (параметра цикла) в цикле for налагаются следующие ограничения.
1. В качестве параметра должна использоваться простая переменная, описанная в текущем блоке.
2. Управляющая переменная должна иметь дискретный тип (как правило, integer, реже Char, Boolean).
3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной. При этом допустим любой скалярный тип, кроме вещественного.
4. В теле цикла не рекомендуется явное изменение значения управляющей переменной (например, оператором присваивания), т. к. параметр цикла изменяется автоматически.
Цикл с предусловием используется тогда, когда число повторений заранее неизвестно – надо выполнять цикл, пока не произойдет некоторое событие (пользователь нажмет на кнопку, точность вычислений уложится в заданный порог и т. д.). В операторе while проверка условия выполнения тела цикла производится в самом начале оператора.
Формат записи:
while <условие продолжения цикла> do
<тело цикла>;
Условие продолжения цикла – булевское (логическое) выражение, тело цикла – простой или составной оператор. Если тело цикла – простой оператор, операторные скобки не пишутся!
Особенность данного вида цикла состоит в том, что значение выражения условия вычисляется перед каждым выполнением тела цикла. Если результат равен True, тело цикла выполняется и снова вычисляется выражение условия.
Если результат равен False, происходят выход из цикла и переход к первому после while оператору.
Еще один важный момент, о котором нельзя забывать программисту – зацикливание (бесконечное выполнение цикла). Чтобы не происходило зацикливание программы, нужно, чтобы в теле цикла присутствовал либо оператор, изменяющий значение, проверяемого в условии продолжения цикла, либо оператор безусловного выхода из цикла (break).
Цикл с постусловием используется в тех случаях, когда заранее известно, что тело цикла повторится, по меньшей мере, один раз. Оператор цикла repeat..until аналогичен оператору while, но отличается от него, во-первых, тем, что условие проверяется после очередного выполнения операторов тела цикла и таким образом гарантируется хотя бы однократное выполнение цикла, а во-вторых, цикл завершается, когда условие, стоящее после until становится истинным, т. е. значение логического выражение – True (в операторе while цикл завершается, когда условие принимает значение False).
Формат записи:
repeat
<оператор;>
…
<оператор>
until <условие окончания цикла>;
Цикл работает следующим образом: выполняется тело цикла (операторы, заключенные между словами repeat и until), затем проверяется условие окончание цикла, если оно пока еще не выполнилось, то тело цикла выполняется вновь, затем проверяется условие, и т. д. Когда условие, наконец, станет истинным, цикла завершится, и далее будет выполняться следующий за циклом оператор.
Следует заметить, что тело цикла в данном случае может содержать как один, так и несколько операторов, однако, операторные скобки здесь не пишутся, т. к. repeat обозначает начало цикла, until – конец цикла.
Так же как и в случае с циклом while, при программировании операторов тела цикла следует обеспечить влияние, по крайней мере, одного из операторов тела цикла на значение условия, иначе цикл будет выполняться бесконечно.
Пример выполнения лабораторной работы.
Д
ля
примера рассмотрим функцию
аргумент которой изменятся в интервале [-π; π] с шагом π/5.
Составим блок-схему алгоритма (рис. 3.1).
Рис. 3.1. Блок-схема задачи табулирования функции.
Программную реализацию начинаем с описания переменных. Как видно из блок-схемы алгоритма, в программе понадобятся две переменные: x – для хранения значения аргумента, y – для хранения значения функции. Поскольку обепеременные могут иметь дробные значения, описываем их вещественным типом. Из соображений минимизации времени выполнения программы целесообразно шаг приращения аргумента x задать как величину постоянную, значение которой будет вычисляться единожды при описании константы. Заметим, что в языке Pascal имеется стандартная константа Pi, которую мы используем при вычислении шага.
Program Lab3;
Const h=Pi/5;