image

Урок 10. Немного про Case и goto.

Здравствуйте, дорогие читатели! Сегодня мы с вами поговорим про оператор выбора — case  и оператор безусловного перехода — goto.

Если вы спросите любого программиста или учителя информатики, что такое goto, они скажут вам, что goto — зло. Но иногда, может быть, он необходим(для общего развития). Что же такое goto? Давайте разбираться.

GoTo

Goto — оператор безусловного перехода. Все, что необходимо вам — специальная метка. Вместо того, чтобы объяснять вам, что надо делать с этой меткой и куда ее вставлять, я решу простую задачу и вы сразу все поймете.

Условие задачи: считывать число и суммировать его со всеми предыдущими числами, пока это число меньше десяти и больше минус десяти.

Решение:

program example;
label 1; //Объявляем все метки через запятую
var s, a: integer; // Блок меток расположен перед блоком объявление переменных.
begin
s := 0;
a := 0;
1: // Наша метка
S := S + a; // Плюсуем
read(a); //Считываем а
if (a > 10) or (a < -10) then write(s) // Если (a > 10) or (a < -10), прекращаем работу программы
else goto 1; // Иначе перемещаемся в метку
end.

Более подробно про goto мы поговорим в следующий раз.

Case

Чаще всего case называют оператором выбора. Итак, предположим, что переменная по условию задачи может принимать ограниченный диапазон значений или только конкретные значения. Текущее значение переменной (селектора) сравнивается со значениями-случаями, перечисленными в теле оператора case. Если значение селектора совпадает с каким-либо значением в операторе case, то выполняется ветка, относящаяся к данному случаю.

Общая форма записи:

case <селектор (логическое выражение, математическое выражение, переменная)> of
значение1 : оператор;
значение2 : оператор;
. . . . . . . . . .
значениеN : оператор
else оператор;
end;

В операторе может быть несколько действий, то есть использоваться begin, end, а может быть пустой оператор. Значений может быть несколько.

Кстати, вы заметили, что значения выступают в роли меток? 🙂

Приведем два классических примера задач, в которых требуется case.

Задача 1.
С клавиатуры вводится цифра. Вывести ее буквенное представление.

Program Numbers;
Var
  a : integer; 
Begin
  write('Введите цифру: '); 
  readln(a);
      case a of
        0 : writeln ('Вы ввели ноль.');
        1 : writeln ('Вы ввели единицу.');
        2 : writeln ('Вы ввели двойку.');
        3 : writeln ('Вы ввели цифру три.');
        4 : writeln ('Вы ввели цифру четыре.');
        5 : writeln ('Вы ввели цифру пять.');
        6 : writeln ('Вы ввели цифру шесть.');
        7 : writeln ('Вы ввели цифру семь.');
        8 : writeln ('Вы ввели цифру восемь.');
        9 : writeln ('Вы ввели цифру девять.')
        else writeln('Вы ввели не цифру.'); 
      end;
end.

Задача 2.

Составьте программу, имитирующую своеобразный калькулятор, где 1-сумма двух чисел, 2-разность двух чисел, 3-произведение двух чисел, 4-целая часть от деления, 5-остаток от деления,6 — квадратный корень числа, иначе введен неизвестный номер операции.

Решение.

program Calc;

var
  a, b: real;
  i, c, d: integer;

begin
  writeln('Калькулятор.');
  writeln('1 - сумма двух чисел;'); 
  writeln('2 - разность двух чисел;'); 
  writeln('3 - произведение двух чисел;'); 
  writeln('4 - целая часть от деления;'); 
  writeln('5 - остаток от деления;');
  writeln('6 - квадратный корень числа.');
  write('Введите цифру: '); 
  readln(i);
  case i of
    1: 
      begin
        write('Введите два числа: ');
        read(a, b);
        writeln(a + b);
      end;
    2: 
      begin
        write('Введите два числа: ');
        read(a, b);
        writeln(a - b);
      end;
    3: 
      begin
        write('Введите два числа: ');
        read(a, b);
        writeln(a * b);
      end;
    4: 
      begin
        write('Введите два числа: ');
        read(c, d);
        writeln(c div d);
      end;
    5: 
      begin
        write('Введите два числа: ');
        read(c, d);
        writeln(c mod d); 
      end;
    6: 
      begin
        write('Введите число: ');
        read(c);
        writeln(sqrt(c):3:3);
      end;
  else writeln('Ошибка.');
  end;
end.

На сегодня все! Если у вас возникли вопросы,  вы можете написать их сюда или на почту (help@learnpascal.ru). И не забывайте кликать по кнопочкам!

  • Александр

    Очень хороший сайт, за два дня многому научился)