Уважаемый студент!

Данную работу Вы можете заказать у нас за символическую цену, связавшись с нами любым удобным для Вас способом:

Мы ответим Вам в самое ближайшее время. Всегда рады помочь!


Лабораторная работа 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» вычисления модуля числа.

 

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

 

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).

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

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

Схема алгоритма (вариант 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),  но удобней воспользоваться структурой «выбор».

 

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

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. Даны радиус круга и сторона квадрата. Проверьте, пройдет ли квадрат в круг?

  1. Ввести три числа, найти наименьшее отношение этих чисел.
  1. Даны радиус круга и сторона квадрата. Проверьте, пройдет ли круг в квадрат?
  1. Функция sign(x) задана аналитически cледующим образом

                                              1,    если х>0;

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

                                             -1,    если х<0;

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

12. На плоскости расположена окружность радиуса R с центром в начале координат. Ввести  заданные координаты точки и определить, находится  ли  она  на  окружности.  Результат присвоить символьной переменной.    Точка    находится   на   окружности,   если   длина радиус-вектора,  соединяющего  начало координат с заданной точкой, равна   R  (проверку  на  равенство  осуществлять  с  точностью  до е=1.0Е-3)
  1. Напишите программу, печатающую корни квадратного уравнения ax2 + bx + c =0. Если уравнение не имеет корней, то выдать соответствующее сообщение.
  1. Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D (рис. 1.7).
  1. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D (рис. 1.8). DABC – равносторонний.
  1. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D, заданному системой ограничений
  1. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D (рис. 1.9).
  1. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D (рис. 1.10).
  1. Даны координаты точки М(х,у). Определить, принадлежит ли данная точка замкнутому множеству D (рис. 1.11).
  1. Ввести два положительных числа и показать, что среднее арифметическое этих чисел не меньше их среднего геометрического.
  1. Ввести два положительных числа и показать, что среднее геометрическое этих чисел не меньше их среднего гармонического.
  1. Даны длины трех отрезков. Определить, можно ли из этих отрезков сложить треугольник?
  1. Даны длины сторон треугольника. Определить, является ли данный треугольник равнобедренным?
  1. Даны длины сторон треугольника. Определить, является ли данный треугольник равносторонним?
  1. Даны длины сторон треугольника. Определить, является ли данный треугольник разносторонним?
  1. Даны в градусах величины двух углов треугольника. Определить, является ли данный треугольник равнобедренным?
  1. Найти наибольшее значение из трех f(1), f(2) и f(3), где f(x) = sin(5x).
  1. Даны в градусах величины двух углов треугольника. Определить, является ли данный треугольник остроугольным?
  1. Прямоугольник задан координатами своих вершин. Определить, принадлежит ли точка с заданными координатами области прямоугольника.
  1. Прямоугольник задан координатами своих вершин. Определить, принадлежит ли окружность с заданным радиусом и координатами центра области прямоугольника.

 

Задания второго уровня

 

  1. В каждой больничной палате четыре койки. Введите количество палат, количество больных мужчин и количество больных женщин. Определите, можно ли разместить всех больных по палатам (естественно, в одну палату кладут больных одного пола).
  2. 2. В каждой больничной палате четыре койки. Введите количество палат, количество больных мужчин и количество больных женщин. Определить, сколько всего свободных мест. Сколько больных каждого пола можно еще положить в больницу?
  3. Напишите программу,  запрашивающую  у  тренера  сборной колледжа  по  лыжам  время  в  минутах и секундах (с точностью до сотых долей секунды) трех победителей 10-километровой гонки. Если какие-то результаты различаются меньше, чем на секунду, напечатать:
  4.             ВОТ ТАК БОРЬБА ШЛА ЗА___________ МЕДАЛЬ!
  5. Ввести значение х. Расположить в порядке убывания значения x*sin(x), ln.
  6. Написать программу, реализующую задачу из примера 3 не использующую условного оператора и оператора выбора. Другими словами, программа должна быть линейной.
  7. Написать программу нахождения наибольшего из трех заданных чисел a, b, c, не использующую условного оператора и оператора выбора. Другими словами, программа должна быть линейной.
  8. Треугольник задан координатами вершин. Определить, принадлежит ли точка с заданными координатами области треугольника.
  9. Треугольник задан координатами вершин. Определить количество общих точек данного треугольника с отрезком, заданным координатами концов.
  10. Определить количество общих точек у двух отрезков, заданных координатами своих концов.
  11. Две окружности заданы своими радиусами и координатами центра. Определить количество общих точек у этих окружностей.