Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб работа 7 Инф 162500.doc
Скачиваний:
5
Добавлен:
13.09.2019
Размер:
389.12 Кб
Скачать

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;