Pascal. Операторы условного и безусловного перехода

Программирование Программирование на Pascal Паскаль для школьников (учебник) Pascal. Операторы условного и безусловного перехода

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 1 год, 2 мес. назад.

Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Автор
    Сообщения
  • #3733

    Оператор безусловного перехода

    Большинство программистов считают использование в программе оператора безусловного перехода, знаком дурного тона и редко используют его. Но, не смотря на это, знать его надо, так как может оказаться, что Вы не сможете придумать альтернативного решения проблемы. Имя данного оператора Goto, смысловое значение в программе «перейти к …», а его общий вид такой:

    Goto m;

    m – метка, заранее заданная в разделе описания меток. Следующая программа показывает как работает оператор безусловного перехода.

    program goto_primer; {имя программы}
    uses crt;            {подключение модуля}
    label m;             {описание метки m}
    begin
      write('Karl Marx '); {вывод строки}
      goto m;              {требование перейти к метки}
      write('clever');     {этот оператор пропускается}
      m: write('fool');    {выполняется переход в эту область}
      readkey;             {для останова программы}
    end.

    В этой программе нет никаких условий, но именно о них будет идти далее речь.

    Условный оператор (IF..THEN..ELSE)

    В Паскале проверить какую-то часть программы для определения дальнейшего пути, по которому ей следует идти, есть оператор If. В зависимости от выполнения логического условия он указывает, какой блок выполниться следующим. Существует две формы записи: полная и краткая. Вторая отличается от первой тем что в ней имеется ветвь Else (иначе).

    Общий вид краткой формы:

    If <условие A> Then <оператор 1>;

    Общий вид полной формы:

    If <условие A> Then <оператор 1>
    
    Else <оператор 2>;

    В краткой форме выполняется оператор 1 тогда, когда условие A истинно, иначе управление переходит к следующему оператору. В полной форме если условие A истинно, то выполняется оператор 1, иначе выполняется оператор 2. Следует запомнить, что перед else точка с запятой не ставится.

    Простейший пример:
    If a>b Then a:=a+b Else b:=b+a;

    Оператор IF проверяет правда ли, что a больше b. Если правда, то выполняем присвоение после THEN a:=a+b, в противном случае (если ложь) выполняем то, что следует после ELSEb:=b+a.

    В результате выполнения этой строчки в Паскале, переменной a присваивается значение выражения справа, т.е. значение a будет равно 45.

    Пример программы с условным оператором, записанным в краткой форме:

    program if_else;
    uses crt;
    var Dima, Misha: integer;
    begin
      Misha:=18;
      write('Сколько лет Диме? '); {вывод сообщения}
      read(Dima);                  {ввод данных}
      if Dima=Misha then  {если возраст Димы равен возрасту Мише, то ...}
        write('Миша и Дима ровесники');
      readkey;
    end.

    Пример программы с условным оператором, записанным в полной форме:

    program if_else;
    uses crt;
    var Dima, Misha: integer;
    begin
      Misha:=18;
      write('Сколько лет Диме? ');
      read(Dima);
      if Dima=Misha then (* если возраст Димы равен возрасту Мише,
        то выполняется оператор 1 *)
        write('Миша и Дима ровесники') {оператор 1}
      else write('Миша и Дима не ровесники'); {иначе ...}
      readkey;
    end.

    В Паскале можно вкладывать один условный оператор в другой, причем делать это можно множество раз. При этом следует отметить, что каждому Then соответствует ближайшее Else.

    Еще один пример — перевод килограммов в фунты.

    Program Converter_1;
    Uses Crt;
    
    Const pound = 0.45359237;
    
    Var m:real;
        f:byte;
    
    Begin
    	ClrScr;
    	Write('Выберите режим конвертации: 1) фунт -> кг; 2) кг -> фунт');
    	ReadLn(f);
    	Write('Введите массу: ')
    	ReadLn(m);
    	If f=1 Then m := m * pound Else m := m / pound;
    	Write('Результат равен: ', m);
    	ReadLn()
    End.

    Оператор выбора

    Когда количество альтернатив больше двух применяется оператор выбора Case. Его вид:

    Case <селектор> Of
    
    <значение селектора>: <оператор 1>;
    
    <значение селектора>: <оператор 2>;
    
    . . .
    
    <значение селектора>: <оператор N>;
    
    Else <оператор>
    
    End;

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

    Кнопка 1 — Coca-Cola
    Кнопка 2 — Fanta
    Кнопка 3 — Sprite
    Кнопка 4 — Aqua Minerale
    Кнопка 5 — Тархун

    Т.е. когда Вы нажмете кнопку 3, то автомат выдаст Вам Sprite, конечно если Вы заплатили до этого =). По подобному принципу работает оператор CASE. Приведу пример программы для автомата с напитками.

    Если селектором оператора If было логическое выражение, то в Case им выступает переменная, которая может быть целого, перечислимого, интервального или символьного типа. В случае совпадения селектора со значения выполняется соответствующий оператор. Задать значение селектору можно тремя способами:

    1) перечислением: 1, 10, 100, 1000

    2) диапазоном: ‘d’..’k’

    3) перечислением и диапазоном: 1..10, 20, 30, 50, 70..100

    Выполнятся в операторе выбора, может только одна ветка (идущая раньше), даже когда селектор совпадает с несколькими значениями. Также, в отличие от If в Case можно ставить точку с запятой перед Else.

    Пример программы выбора напитков:

    Program Napitki;
    
    Uses Crt;
    
    Var button:1..8;
    
    Begin
    	ClrScr;
    	WriteLn('Choose:' , #13, #10, '1: Coca-Cola', #13, #10, '2: Fanta', #13, #10, '3: Sprite', #13, #10, '4: Aqua Minerale');
    	ReadLn(button);
    	Case button of
    		1 : WriteLn('Вы выбрали Coca-Cola! ');
    		2 : WriteLn('Вы выбрали Fanta! ');
    		3, 4 : WriteLn('Извините, этого напитка нет.');
    		Else WriteLn('Такого напитка нет!');
      End;
    	ReadLn
    End.

    Программа выполняется в зависимости от значения переменной button. Не обращайте внимания на #13, #10 — это всего лишь спецсимволы перевода строки и возврата каретки, я их использовал просто для красивого вывода списка напитков.

    Другой пример использования оператора case на pascal — программа, выбора валюты:

    program case_primer;
    uses crt;
    var money: char;
    begin
      write('Первая буква кода денежной единицы: ');
      readln(money); {ввод значение в переменную}
      case money of
       'A', 'a': writeln ('Французский франк');
       'B', 'b': writeln ('Динар');
       'C', 'c': writeln ('Юань');
       'E', 'e': writeln ('Испанская песета');
       'G', 'g': writeln ('Английский фунт стерлингов');
       'I', 'i': writeln ('Итальянская лира');
       'J', 'j': writeln ('Иена');
       'R', 'r': writeln ('Рубль');
       'U', 'u': writeln ('Доллар США');
       'X', 'x': writeln ('Восточнокарибский доллар');
       else writeln ('Неизвестная единица')
      end;
      readkey;
    end.

    Программа проверяет селектор на соответствие его с имеющимися значениями. Если совпадений не находится, то выполняется блок Else.

Просмотр 1 сообщения - с 1 по 1 (всего 1)

Для ответа в этой теме необходимо авторизоваться.