------------- if <выражение логического типа> then <оператор 1> {здесь без ;} else <оператор 2>; ------------ где <оператор 1> и <оператор 2> - ЛЮБОЙ ОПЕРАТОР но ТОЛЬКО ОДИН.
Если Вам нужно поставить вместо <оператор 1> или <оператор 2> НЕСКОЛЬКО операторов, используйте СОСТАВНОЙ оператор, т е begin <оператор>; ... <оператор>; end; - который формально считается ОДНИМ оператором! ------------
------------- if <выражение логического типа> then <оператор 1>; ------------
Теперь можно сделать программу-2, которая тоже решает квадратное уравнение, но вычисляет корни при любых (вещественных) исходных данных. Программа-2 описана здесь: ( используется оператор IF).
case <выражение логического типа> of <мишень1>:<оператор1>; <мишень2>:<оператор2>; <мишень3>:<оператор3>; <мишень4>:<оператор4>; . . . [ else <операторы> ] end; (Квадратные скобки обозначают необязательность)Состоит из выражения (селектора) и списков операторов, каждому из которых предшествует "мишень" того же типа, что и селектор. Это значит, что в данный момент выполняется тот оператор, "мишень" перед которым соответствует текущему значению селектора. Если совпадения значений не происходит, то не выполняется ни один из операторов, входящих в case или же выполняются операторы, стоящие после необязательного слова else, (если они есть).
"Мишень" состоит из любого количества констант или поддиапазонов, разделенных запятыми, за которым следует двоеточие (:), например:
var BSt: char; os,curlens, herons, egrets, terns,rr: word; begin write('simv -> '); readln(BSt); case BSt of 'k'..'m': terns:= 21; 'o'..'p','r'..'s': Os := Os + 1; 'C', 'c': Curlens := Curlens + 1; 'H', 'h': Herons := Herons + 1; 'E', 'e': Egrets := Egrets + 1; 'T', 't': Terns := Terns + 1; else RR := 0; RR := RR+1; RR := RR + 1; readln; end; {case} end.
Поддиапазон записывается в виде двух констант, разделенных двумя точками "..". Тип константы должен соответствовать типу селектора. Оператор (только ОДИН! Иначе используйте СОСТАВНОЙ оператор), стоящий после двоеточия (:), выполняется в том случае, если значение селектора совпадает со значением константы или, если его значение попадает в диапазон значений. Если более одной мишени соответствуют значению селектора, выполняется оператор только первой (по порядку)из них.
При использовании оператора перехода должны соблюдаться следующие правила:
- Метка, которая указывается в операторе перехода, должна находиться в том же блоке или модуле, что и сам оператор перехода. Другими словами, не допускаются переходы из процедуры или функции или внутрь нее.
- Переход извне внутрь структурного оператора (например, внутрь оператора case, if, оператора цикла)(то есть переход
на более глубокий уровень вложенности) может вызвать
непредсказуемые эффекты, хотя компилятор не выдает сообщения об
ошибке.
Пример - вводим символы с клавиатуры. Программа подсчитывает - сколько введено заглавных латинских гласных, сколько цифр, сколько двоеточий. goto используется для многократного повторения действий. :
Program Scet_simv; var sim: char; Sk_glasn, Sk_cifr, sk_dvtc: Integer; label idi_suda; begin Sk_glasn:=0; Sk_cifr:=0; sk_dvtc:=0; idi_suda: write('Введите символ (~ -выход)--> '); readln(sim); case sim of 'A','E','I','O','U': inc(Sk_glasn); '0'..'9': inc(Sk_cifr); ':': inc(sk_dvtc); end; writeln('Гласных: ',Sk_glasn,' Цифр: ',Sk_cifr,' : ',sk_dvtc); if sim <> '~' then goto idi_suda; end.
Примечания:
1.Рекомендуется инициализировать переменные, не надеясь что компьютер это сделает сам.
2.Процедура inc(X) соответствует X:=X+1; а inc(X,N) соответствует X:=X+N;.
При выполнении имейте в виду следующее:
Пример программы:
Program Lab12_2; {Тренируемся использовать оператор case , а также прочитывать нажатия клавиш ( без эхо-повтора )} uses crt; {Чтобы использовать readkey, textattr, sound, nosound, delay, clrscr} var ch1,ch2: char; BEGIN ch1 := #0; ch2 := #0; { цикл чтения нажатий клавиш до тех пор, пока не нажмут Esc (код 27) } textattr := $1b; clrscr; writeln('Программа реагирует на клавиши:'); writeln(' F1 F2 a s d Выход - Esc. '); writeln(' попробуйте...'); while ch1 <> #27 do begin ch1 := readkey; {Нажатие клавиши прочтено. ( Для спец. клавиш требуется прочесть 2 символа, первый из которых = #0 )Cм. об этом в документации для программиста, приложение В, расширенные коды клавишей.} if ch1 = #0 then ch2 := readkey; {Теперь можно для любой клавиши задать какое-нибудь действие. Для букв a,s,d - зададам звуки частотой 800, 1000, 1200 Гц. - по 0,03 сек звучания.} case ch1 of #0: case ch2 of #59{F1}: begin textattr := $1B;clrscr; gotoxy(30,12); write('Нажата F1');end; #60{F2}: begin textattr := $30;clrscr; gotoxy(30,12); write('Нажата F2');end; end {case ch2}; 'a': begin sound(800); delay(30); nosound; end; 's': begin sound(1000); delay(30); nosound; end; 'd': begin sound(1200); delay(30); nosound; end; end {case ch1}; end {while}; textattr := $70; clrscr; END {Программы}.
Примечания:
Опробована в Турбо-7, работает, только нет звука (на современных компьютерах. На старых AT286 звук нормальный ).
Программа работает во Free Pascal, но издаёт только системный звук beep, то есть высота и длительность не регулируется. В Инете появлялся модуль CRT для Делфи, но я его не пробовал.