Каталог Индекс раздела
Назад Оглавление Вперед

Лабораторная работа N 2
ПРОГРАММЫ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ

1. ЦЕЛЬ РАБОТЫ: Закрепление знаний о программах разветвляющейся структуры, составление программы и работа с ней.

2. ОСНОВНЫЕ СВЕДЕНИЯ

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

2.1. Условный оператор IF

В программе разветвляющейся структуры имеется один или несколько условных операторов.

Условный оператор в языке Паскаль имеет формат:

if  <условие> then <оператор1> else <оператор2>;  (полная форма)   
или
if <условие> <оператор1>;   (сокращенная форма).

Точка с запятой перед зарезервированным словом else не ставится.

При выполнении условия исполняется оператор1, при невыполнении - оператор2 (при полной форме условного оператора). Для неполной формы условного оператора при выполнении условия исполняется оператор1, в противном случае оператор1 пропускается и исполняется оператор, следующий за условным оператором.

Оператор1 и оператор2 могут представлять простые операторы (один оператор), в этом случае они не заключаются в операторные скобки. Если же оператор1 и/или оператор2 представляют составной оператор (несколько операторов), то их нужно заключить в операторные скобки begin : end.

В качестве примера приведем программу вычисления наибольшего из значений функции y1=x2+1, y2=7-x2 или y=x+1 для любого x .

 program    razvetvl ; {программа разветвляющейся структуры}
   var  
        x , y1 , y2 , y3 ,  max :  real;
   begin
    writeln ('Введите x');     readln (x);
     y1:=x*x+1;      y2:=7-x*x ;      y3:=x+1;
     if  y1> y2   then   max:=y1 else max:=y2;
     if   y3 > max   then         max:=y3;
     writeln (' y1=',y1: 6:2'  y2=',y2: 6:2, '  y3=',y3: 6:2,);
     writeln ('при x=',x: 6:2,'  наибольшее  значение функций=',max: 6:2);
 end. 

2.2. Оператор варианта Case

Если количество разветвлений программы больше двух, то используется оператор вариантов Case, который является более общим случаем условного оператора. Оператор Case выполняет один из нескольких операторов в зависимости от значения селектора. Если селектор не совпадает ни с одним из значений, то выполняется оператор после else или следующий после case, если else отсутствует.

Селектор может быть целого, символьного, перечислимого, интервального типа или выражением.

Например, определим время года по введенному номеру месяца.

Program  lab3; {  множественный выбор}
Label m; 
 Var    num: integer;
 begin
 m: writeln ('Введите номер месяца');
    readln (num);
    write ('Время года: ', num);
    case num of { выбор значений селектора num}
      1, 2, 12:   writeln ('Зима');
      3..5:       writeln  ('Весна');
      6..8:       writeln ('Лето');
      9..11:      writeln ('Осень');
      else    
        begin writeln ('нет с таким номером месяца!'); goto m  ; end; 
    end {завершение оператора case}
end.

В приведенном примере программы при вводе номера месяца от 1 до 12 на экране печатается соответствующее время года и выполнение программы заканчивается. Если же номер месяца превышает 12 или меньше 0, то выводится сообщение о неверном вводе месяца, для чего служит зарезервированное слово else и выполняется переход на ввод нового значения месяца с помощью метки m. В данной программе num - селектор.

3. ВЫПОЛНЕНИЕ РАБОТЫ

  1. Набрать и откомпилировать приведенные выше программы, исправить выявленные ошибки. Ввести несколько вариантов значений аргумента (в различных интервалах), вычислить функцию вручную и сравнить с полученными по программе результатами.
  2. Составить программы разветвляющейся структуры согласно вариантам задания 1 (используя IF) и задания 2 (используя CASE) , откомпилировать ее, ввести исходные данные, проверить полученный результат.

Варианты задания 1

  1. Даны четыре числа X, Y, W и Z. Определить сколько среди них отрицательных.
  2. Даны четыре числа K, L, M и N. Определить порядковый номер наименьшего среди этих чисел.
  3. Даны два числа Y и Z. Большее из этих двух чисел заменить их полусуммой, а меньшее удвоенным произведением.
  4. Даны три числа Х, Y и Z. Меньшее среди них заменить на 0 .
  5. Даны четыре числа А, В, С и D. Найти разность между наибольшим и наименьшим среди них.
  6. Даны три числа K, M и N. Поменять их значения местами таким образом, чтобы K < M < N.
  7. Даны четыре разных числа X, F, Y, Z. Найти среди них два наибольших.
  8. Даны три числа L, M и N. Поменять местами большее и меньшее из этих чисел .

Варианты задания 2

  1. Вводится число экзаменов N<=20. Напечатать фразу "Мы успешно сдали N экзаменов", согласовав слово "экзамен" с числом N. Предусмотреть ситуацию ввода N<0.
  2. Вводится число - номер месяца. Вывести количество дней в месяце (год невисокосный). Предусмотреть неправильный ввод номера месяца.
  3. Вводится число лет (N<=25). Напечатать фразу "Мне N лет", согласовав слово "лет" с числом N. Предусмотреть ситуацию ввода N<0.
  4. Вводится число книг N<=10. Вывести фразу "Я взял из библиотеки N книг", согласовав слово "книга" с числом N. Предусмотреть ситуацию ввода N<0.
  5. Вводится число карандашей N<=10. Вывести фразу "Я купил N карандашей", согласовав слово "карандаш" с числом N. Предусмотреть ситуацию ввода N<0.
  6. Вводится число версий N<=10. Вывести фразу "Следователь проверил N версий", согласовав слово "версия" с числом N. Предусмотреть ситуацию ввода N<0.
  7. Вводится число программ N<=10. Напечатать фразу "Я разработал N программ", согласовав слово "программа" с числом N. Предусмотреть ситуацию ввода N<0.
  8. Вводится целое число С. Если -9<=C<=9 вывести величину числа в словес ной форме с учетом знака, в противном случае - предупреждающее сообщение и повторный ввод.

4. КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Какой алгоритм является алгоритмом разветвляющейся структуры?
  2. Что такое условный оператор? Оператор выбора?
  3. Полная и сокращенная формы условного оператора.
  4. Что такое составной оператор? Формат его записи.
  5. В каких случаях применяется полная форма условного оператора?
  6. Что такое метка? Описывается ли метка в программе?
  7. Что такое оператор безусловного перехода?
  8. В каких случаях нельзя обойтись без операторов безусловного перехода?
  9. В каких случаях надо использовать CASE вместо IF?

Каталог Индекс раздела
Назад Оглавление Вперед