Цель работы:
— проверка с помощью ЭВМ понимания порядка выполнения условных операторов языка Паскаль;
— знакомство с сообщениями транслятора языка Паскаль при обнаружении ошибок в записи условных операторов;
— получение практических навыков по отладке условных операторов.
Задание:
- Проанализировать программы TEST1A и занести результаты её работы в таблицу.
- Рассмотреть программу TEST1B и исправить имеющиеся в ней ошибки.
- Составить программу, определяющую положение точки в и вне заданной области (индивидуальное задание). Занести результату в таблицу.
Текст программы TEST1A:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
program TEST1A; var C1,C2,S,P: 0..1; (* Пpинимают значения только 0 и 1 *) begin write ('Введите пеpеменные C1,C2,P: 0 или 1 '); readln (C1, C2, P); (* Входные данные - 8 ваpиантов *) if P=0 then begin if (C1=0) and (C2=0) { A1 } (* Оба - нули *) then S:=0 else (* Если хотя бы одна единица *) if ((C1=0) and (C2=1)) or ((C1=1) and (C2=0)) { A2 } then S:=1 else begin (* Оба = 1 *) S:=0; P:=1 end end (* if P=0 *) else (* P=1 *) if (C1=1) and (C2=1) { A3 } (* Оба - 1 *) then S:=1 else (* Хотя бы один нуль *) if (C1=1) or (C2=1) { A4 } then S:=0 else begin (* Оба - нули *) S:=1; P:=0 end; writeln ('S=',S,' P=',P) end. |
Заполним таблицу входных и выходных данных программы TEST1A:
Входные данные | Выходные данные | |||||
С1 |
С2 |
Р |
S | P | ||
Анализ | Выполнение | Анализ | Выполнение | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 0 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 1 | 1 |
1 | 1 | 0 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 |
Текст программы TEST1B:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
program TEST1B; var X,I,J: integer; A,B : Boolean; begin readln (I,J); ifI=0then A:=False; if J>0and J<=9 ten A:=True; if A then B:=True;else B:=False; if A orB then X:=0; if not B then if J mod 2=0 then X:=J div 2 else X:=J; if I>1 then I:=I-1;X:=I else X:=J; end. |
При компиляции были получены следующие сообщения о ошибках:
Unknown identifier
Then expected
Error in statement
Then expected
“;” expexted
На основе этих сообщений были произведены изменения в тексте программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
program TEST1B; var X,I,J: integer; A,B : Boolean; begin readln (I,J); if I=0 then A:=False; if (J>0) and (J<=9) then A:=True; if A then B:=True else B:=False; if (A) or (B) then X:=0; if not B then if J mod 2=0 then X:=J div 2 else X:=J; if (I>1) then begin I:=I-1;X:=I ; end else begin X:=J; end; end. |
Индивидуальное задание.
Составить программу, определяющую, принадлежит ли точка, координаты которой вводятся с клавиатуры, заданной области. На рисунке эта область закрашена.
По этому заданию была составлена следующая программа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Program laB1; uses crt; var x,y: real; z: real; b: boolean; begin clrscr; textcolor(2); Write('input koordinate x='); readln(x); Write('input koordinate y='); readln(y); b:=false ; if (y <=0) and (x<=0.5) then begin z:=sqrt(x*x+y*y); if z>=1 then b:=true else b:=false; end; if b=true then writeln('b=true'); if b=false then writeln('b=false'); readln; end. |
Таблица результатов работы программы:
Входные данные | Выходные данные | |||
х | у | b (анализ) | b (выполнение) | |
-1 | -1 | True | True | |
-0.25 | -0.25 | False | False | |
-0.25 | 0.74 | False | False | |
1 | -0.25 | False | False |