Статьи /  Pascal /  
Pascal Операторы ввода и вывода

Pascal. Оператор множественного выбора - Case.

При ветвлении алгоритма, как правило, используется оператор if. С помощью этого оператора можно реализовать множественный выбор, если использовать систему вложенных операторов if.

If <условие> then ...
    else if <условие> then …
    else if <условие> then … ;

Для этой конструкции существует альтернатива:

Case <выражение> of
    <список констант 1> :
        begin
            <группа операторов>;
        end;
    …
    <список констант N> :
        begin
            <группа операторов>;
        end;
    else begin
        <альтернативная группа операторов>;
end;

Сравнивая выражение с списками констант, case выбирает подходящую ветку и выполняет вложенные в нее операторы. Вместо выражения конструкция case может содержать переменную. Альтернативная ветка else не обязательна.


Задача: в строке текста записаны слова, разделенные пробелами. Количество слов может быть произвольным. Удалить все пробелы перед первым словом и после последнего слова.

Описание алгоритма:

  1. Удаляются все пробелы перед первым символов, пока в первой позиции не окажется отличный от пробела символ.

  2. Производится просмотр остальных символов, пока не встретится пробел.

  3. Производится удаление всех пробелов и вставки одного пробела.

Program case1;
uses crt;
var I, len, p : integer; s:string;
{i – номер текущей позиции строки, len – длина строки, p – номер текущего состояния}
begin
    clrscr;
    writeln('s: ');
    readln(s);
    len := length(s);
    i := 1;
    p := 0;
    while (i <= len) do
        case p of
            0: if (s[i] = ' ') then begin
            delete(s, 1, 1);
            len := len – 1;
            end
            else p := 1;
            1: if (s[i] <> ' ') then
                i := i + 1
                else p := 2;
            2 : if (s[i] = ' ') then begin
                delete(s, I, 1);
                len := len – 1;
            end
            else begin
                insert(‘ ’, s, i);
                len := len – 1;
                i := I + 1;
                p := 1;
            end;
        end;
    writeln(s);
    readln;
end.