Скачиваний:
73
Добавлен:
02.05.2014
Размер:
103.42 Кб
Скачать

Данный практикум призван оказать помощь преподавателям в подборе задач для проведения лабораторного практикума, помочь учащимся колледжа в получении навыков разработки алгоритмов и программ. Автор старался дать минимум теоретических сведений об алгоритмизации и программировании на Паскале (этот материал дается на лекциях), а больше внимания уделить решению примеров. В качестве примеров выбирались наиболее типичные или интересные (с точки зрения автора). Решение каждого примера сопровождается краткими пояснениями и комментариями. Как правило приводится несколько вариантов решения каждого примера.

Некоторые задания по лабораторным работам содержат задания повышенной сложности.

Лабораторная работа 1

Разветвляющиеся алгоритмы и программы

Цель работы: Формирование первичных умений в разработке разветвляющихся программ

Что нужно знать для выполнения работы

1. Символы, используемые в схемах программ и правила их применения.

2. Структуру программы.

3. Оператор присваивания, математические и логические операции, их приоритет.

4. Операторы ввода-вывода read(ln), write(ln).

5. Стандартные математические функции Паскаля.

6. Условный оператор if … then…else.

7. Оператор выбора case … of…else…end.

Примеры выполнения задания лабораторной работы

Задача 1

Даны два числа a и b. Получите число maxab, равное наибольшему из исходных. Если исходные числа равны, то maxab положить равным любому из них.

Решение

Для решения задачи нужно ввести значения переменных a и b, сравнить их значения и в зависимости от результата сравнения maxab положить равным а или b.

Обратите внимание на то, что вместе с результатом выводятся и исходные данные. Это позволит упростить тестирование и повысить наглядность вывода. Во втором варианте решения данной задачи мы не сравнивая присваиваем переменной-результату maxab первое «попавшееся» значение, а затем сравниваем это значение со вторым числом.

Возможно и более “экзотическое” решение данной задачи, в котором maxab находится не прибегая к сравнению исходных чисел (Кнут Д. «Искусство программирования для ЭВМ» т.1). Вместо этого хитроумно используется стандартная функция Паскаля «abs» вычисления модуля числа.

Схема алгоритма

maxab:=b

Да Нет

maxab:=a

Рис. 1.1 Схема алгоритма программы задачи 1 (вариант 1)

maxab:=b

maxab:=a

Да

Нет

Рис. 1.2 Схема алгоритма программы задачи 1 (вариант 2)

Текст программы

program lr1_1_1;

{ Даны два числа a и b. Получите число maxab, равное наибольшему из исходных.

Если исходные числа равны, то maxab положить равным любому из них.

Разработал Назаров Л.В.}

uses

crt;

var

a,b,maxab:real;

begin

clrscr;

write(‘Введите два числа через пробел ’);

readln(a,b);

if a>=b then

maxab:=a

else

maxab:=b;

writeln(‘ a= ’,a:8:2,’ b= ‘b:8:2,’ maxab= ‘,maxab:8:2);

readkey;

end.

Основная часть программы, соответствующая второй схеме будет выглядеть так.

maxab:=a;

if maxab<b then

maxab:=b;

С точки зрения времени выполнения программы первый вариант предпочтителен, но на практике приходится пользоваться обоими. Например, если необходимо найти наибольший из трех, то какой бы вариант не был применен для нахождения наибольшего из первых двух, этот наибольший нужно сравнить с третьим, т.е. возникнет необходимость во втором варианте.

Контрольные примеры

Контрольный пример 1

Исходные данные: a=1, b=2; результат maxab=2.

Контрольный пример 2

Исходные данные: a=3, b=1; результат maxab=3.

Контрольный пример 3

Исходные данные: a=1, b=1; результат maxab=1.

Примечание. При записи результата мы не учитываем формат вывода его в программе.

Пример 2

Рассмотрим следующую задачу. Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D (рис. 1.3) (a>0; b>0).

Y

b

D

0 а X

Рис. 1.3

Решение

Точка М(х,у) принадлежит замкнутому множеству D, если ее абсцисса не меньше 0 и не больше а, а ордината не меньше 0 и не больше b.

Схема алгоритма (вариант 1)

Нет Нет

Да Да

Нет

Да

Нет

Да

Рис. 1.4. Схема программы (вариант 1)

В данном варианте в каждом блоке «решение» проверяется простое условие (вычисляется булевское выражение), имеющее вид «арифметическое выражение» «знак сравнения» «арифметическое выражение», которое может принимать одно из двух значений: «истина» (true) или «ложь» (false).

Вместо нескольких простых выражений можно записать одно сложное, мы придем к другому варианту решения нашей задачи (вариант 2).

Схема алгоритма (вариант 2)

Нет Да

Рис. 5. Схема программы (вариант 2).

Учитывая законы булевой алгебры (законы де Моргана), сложное выражение во втором варианте можно записать: не(x<0 или x>a или y<0 или y>b)?. Если данное выражение принимает значение «истина», то точка принадлежит области, иначе не принадлежит.

Текст программы (вариант 1)

program lr1_2_1;

{ Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D. D – прямоугольник с координатами вершин (0;0), (a;0), (a;b), (0;b) (a>0; b>0).

Исходные данные: a, b, x, y.

Результат: сообщение на экране «Точка не принадлежит» или «Точка принадлежит»

Разработал Назаров Л.В.}

uses

crt;

var

a,b,x,y:real;

begin

clrscr; {очистка экрана}

{Ввод исходных данных}

write(‘Введите через пробел значения a,b,x,y’);

readln(a,b,x,y);

{Оределение принадлежности точки множеству}

if x0 then

if xa then

if y0 then

if yb then

writeln(‘Точка принадлежит’)

else

writeln(‘Точка не принадлежит’)

else

writeln(‘Точка не принадлежит’)

else

writeln(‘Точка не принадлежит’)

else

writeln(‘Точка не принадлежит’);

readkey; {ожидание нажатия клавиши}

end.

Текст программы (вариант 2)

program lr1_2_2;

uses

crt;

var

a,b,x,y:real;

begin

clrscr; {очистка экрана}

{Ввод исходных данных}

write(‘Введите через пробел значения a,b,x,y’);

readln(a,b,x,y);

{Оределение принадлежности точки множеству}

if (x0) and (xa) and (y0) and (yb) then

writeln(‘Точка принадлежит’)

else

writeln(‘Точка не принадлежит’);

radkey; {ожидание нажатия клавиши}

end.

Возможны и другие варианты реализации определения принадлежности точки:

{Оределение принадлежности точки множеству}

if (x<0) or (x>a) or (y<0) or (y>b) then

writeln(‘Точка не принадлежит’)

else

writeln(‘Точка принадлежит’);

или

{Оределение принадлежности точки множеству}

if not (x<0) or (x>a) or (y<0) or (y>b) then

writeln(‘Точка принадлежит’)

else

writeln(‘Точка не принадлежит’);

Контрольные примеры

Контрольный пример 1:

Исходные данные: a=4; b=2; x=2;y=1

Результат: ‘Точка принадлежит’

Контрольный пример 2:

Исходные данные: a=4; b=2; x=2;y=0

Результат: ‘Точка принадлежит’

Контрольный пример 3:

Исходные данные: a=4; b=2; x=0;y=0

Результат: ‘Точка принадлежит’

Контрольный пример 4:

Исходные данные: a= 4; b=2; x=-2;y=1

Результат: ‘Точка не принадлежит’

Контрольный пример 5:

Исходные данные: a=4; b=2; x=2;y=3

Результат: ‘Точка не принадлежит’

Недостаток вышеприведенных алгоритмов и программ в том, что они не предусматривают контроль вводимой информации. Для первой лабораторной работы контроль не обязателен. Дело в том, что для качественной реализации контроля понадобятся более сложные конструкции языка Паскаль (например оператор цикла repeat…until).

Для иллюстрации применения структуры «выбор» и, следовательно, оператора case, решим следующую задачу.

Пример 3

Дана оценка по десятибалльной системе. Получить ее эквивалент по пятибалльной системе. Предполагается, что между системами имеется следующее соответствие:

10-балльная 5-балльная

0 1

1-3 2

4-5 3

6-7 4

8-10 5

Данную задачу можно решить и с помощью структуры «ветвление» (оператора if…then…else), но удобней воспользоваться структурой «выбор».

Схема программы

oc5:=1

0

oc5:=2

1..3

oc5:=3

4,5

oc5:=4

6,7

oc5:=5

Иначе 8..10

Рис. 1.6. Схема программы

Текст программы

program lr1_3_1;

{Дана оценка по десятибалльной системе. Получить ее эквивалент

по пятибалльной системе. Предполагается, что между системами

имеется следующее соответствие:

10-балльная 5-балльная

0 1

1-3 2

4-5 3

6-7 4

8-10 5

Разработал Назаров Л.В.

}

uses

crt;

var

oc10,oc5:byte;

begin

clrscr;

write('Введите оценку по десятибалльной системе ');

readln(oc10);

case oc10 of

0 : oc5:=1;

1..3 : oc5:=2;

4,5 : oc5:=3;

6,7 : oc5:=4;

8..10: oc5:=5

else

begin

writeln(oc10,' -такой оценки нет. ');

readkey;

exit; {Выход из программы}

end;

end;

writeln(‘Оценке ’,oc10,' по 10-балльной системе соответствует ',oc5,' по 5-балльной');

readkey;

end.

Задания

1. Напишите программу, запрашивающую возраст пользователя. Если ему не менее 18 лет, сообщите, что он имеет право голосовать, в противном случае вычислите, через сколько лет ему будет предоставлено это право.

2. Напишите программу, которая спрашивала бы сокращенное имя, а печатала полное для пяти ваших друзей. Ввод незнакомого имени должен провоцировать заявление типа «Я С ВАМИ НЕЗНАКОМА». Ответ, содержащий сокращенное имя, помещается в символьную переменную, а затем сравнивается последовательно с сокращенными именами пяти знакомых. Если введенное имя совпадает с каким-либо из использованных в программе, то вывести соответствующее полное имя.

3. Составьте программу для определения подходящего возраста кандидатуры для вступления в брак, используя следующее соображение: возраст девушки равен половине возраста мужчины+7, возраст мужчины определяется соответственно как удвоенный возраст девушки-14. В начале выполнения программы на экране должен появиться вопрос МУЖЧИНА или ЖЕНЩИНА? ВВЕДИТЕ М, если Вы мужчина, или Ж, если женщина и свой возраст. В зависимости от ответа выводятся соответствующие рекомендации.

4. Заданы координаты двух точек. Определите, расположены ли они на одной окружности с центром в начале координат. Результат присвоить символьной переменной. Две точки находятся на одной окружности, если длины радиус-векторов, соединяющих эти точки с началом координат, равны (проверку на равенство осуществить с точностью до е=1.0Е-3)

5. Введите номер месяца в году. Выведите на экран сообщение о времени года.

6. Введите номер дня недели. Выведите на экран название дня.

7. В киоске продается газета стоимостью 3 коп. и журнал стоимостью 20 коп. Составьте программу, которая спрашивает о желании покупателя (журнал или газета?), принимает деньги (сумма денег вводится с клавиатуры) и печатает причитающуюся сдачу. Покупателю нужно задать, по крайней мере, 2 вопроса: 1.”ЧТО ХОТИТЕ КУПИТЬ? ЖУРНАЛ ИЛИ ГАЗЕТУ?” После ввода ответа нужно показать стоимость соответствующего издания и задать вопрос: 2.”СКОЛЬКО ВЫ ПЛАТИТЕ ?” Сумма денег покупателя вводится с клавиатуры (в числовую переменную). Далее сравнивается эта сумма со стоимостью покупки и печатается соответствующее итоговое сообщение.

8. Даны радиус круга и сторона квадрата. Проверьте, пройдет ли квадрат в круг?

9. Ввести три числа, найти наименьшее отношение этих чисел.

10. Даны радиус круга и сторона квадрата. Проверьте, пройдет ли круг в квадрат?

11. Функция sign(x) задана аналитически cледующим образом

1, если х>0;

sign(x)= 0, если х=0;

-1, если х<0;

Введите значение х, выведите значение функции sign(x).

12. На плоскости расположена окружность радиуса R с центром в начале координат. Ввести заданные координаты точки и определить, находится ли она на окружности. Результат присвоить символьной переменной. Точка находится на окружности, если длина радиус-вектора, соединяющего начало координат с заданной точкой, равна R (проверку на равенство осуществлять с точностью до е=1.0Е-3)

13. Напишите программу, печатающую корни квадратного уравнения ax2 + bx + c =0. Если уравнение не имеет корней, то выдать соответствующее сообщение.

14. Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D (рис. 1.7).

Y

1

D

0 2 X

Рис. 1.7

15. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D (рис. 1.8). ABC – равносторонний.

Y

С

А В

0 2 X

Рис. 1.8

16. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D, заданному системой ограничений:

х + у  1,

2х - у  1,

у  0

17. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D (рис. 1.9).

Y

1

0 1 X

Рис. 1.9

18. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D (рис. 1.10).

Y

1

-1 1

X

-1

Рис. 1.10

19. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D (рис. 1.11).

Соседние файлы в папке Лабораторный практикум по программированию на Паскале