**
Подойдя к перекрестку, пешеход решает, переходить ли ему улицу или
остановиться. На решение влияет характер пешехода и ещё два фактора: сигнал
светофора и близость опасно движущегося транспорта. Напишите программу с
процедурой, которая принимает и печатает решение в зависимости от переданных
в неё трех параметров, а именно.
· Параметр A = true, если горит зеленый;
· Параметр B = true, если поблизости опасно движется транспорт;
· Параметр C – это число, определяющее характер пешехода так:
1 - послушный и осторожный — учитывает и светофор и опасность;
2 - послушный, но беспечный — смотрит только на светофор;
3 - хитрый вольнодумец — идет только на красный, если это ничем не грозит;
4 - непримиримый вольнодумец — идет только на красный;
5 - экстремал — идет только на красный, и так, чтобы грозила опасность;
6 - «безбашенный» — идет, несмотря ни на что;
7 - запуганный — никогда не идет через дорогу, а ищет подземный переход.
А вот код:
Program Пешеход;
var
A,B,N,M:boolean;
C:integer;
s:string;
t:string;
d:string;
procedure perehod(A:boolean;B:boolean;C:integer;s:string;t:string;N:boolean;d:string;M:boolean);
begin
If s=‘Зеленый’ then
begin
A:=True;
end;
if (s=‘Красный’) or (s=‘Желтый’) then
begin
A:=False;
end;
If (t=‘движется транспорт’) or (t=‘едет машина’) or (t=‘едет автомобиль’) then
begin
B:=true;
end;
If (t=‘не движется транспорт’) or (t=‘не едет машине’) or (t=‘не едет автомобиль’) then
begin
B:=False;
end;
If (d=‘переходит’) or (d=‘да’) then
begin
N:=true;
end;
If (d=‘не переходит’) or (d=‘нет’) then //1)(not A and not B and not N) O:=‘Послушный и осторожный учитывает и светофор и опасность’//
begin
N:=False;
end;
while C<=7 do
begin
case C of
1:begin
M:=(not A and B and not N);
writeln(‘Послушный и осторожный. Учитывает и светофор и опасность.’);
end;
2: begin
M:=(A and B and N);
writeln(‘Послушный, но беспечный. Учитывает только светофор.’);
end;
3: begin
M:=(not A and not B and N);
writeln(‘Хитрый и вольнодумец. Идет на красный, если нет транспорта.’);
end;
4: begin
M:=(not A) and (B or not B) and (N);
writeln(‘Непримермый вольнодумец. Идет только на красный.’);
end;
5:begin
M:= (not A and B and N);
writeln(‘Экмтремал. Идет на красный и так чтобы грозила опасность’);
end;
6:begin
M:=((A or not A) and (B or not B) and (N));
writeln(‘Безбашенный. Идет несмотря ни начто.’);
end;
7:begin
M:=((A or not A) and (B or not B) and (not N));
writeln(‘Запуганный. Пользуестя подземным переходом.’);
end;
end;
end;
end;
begin
writeln(‘Какой знак светофора горит?’);
readln(s);
writeln(‘Движется ли опасный транспорт?’);
readln(t);
Writeln(‘Введите цифру определяющую характер пшехода.’);
readln(d);
perehod(A,B,C,s,t,d,N,M);
readln;
end.
Ошибка такая: нельзя преобразовать тип string к boolean. Как исправить эту ошибку?
Спасибо.Эта ошибка устранена. Теперь другая ошибка: Программа задает вопросы и получает ответы, а конечный результат не выводит. Цикл while я убрал. Где-то алгоритмическая ошибка.
Здравствуйте.Возможно ошибка вот в чем.
У вас в коде есть такие строчки.
Writeln(‘Введите цифру определяющую характер пшехода.’);
readln(d);
хотя за характер пешехода отвечает параметр С,тем более как я понял из вашего кода вы хотите сделать параметр d как решение задачи,такой вывод я сделал из вот этих строчек
If (d=‘переходит’) or (d=‘да’) then
begin
N:=true;
end;
If (d=‘не переходит’) or (d=‘нет’) then //1)(not A and not B and not N) O:=‘Послушный и осторожный учитывает и светофор и опасность’//
begin
N:=False;
end;
ибо вопрос задачи перейдет или нет.Отсюда ошибки следующие:видимо для вашей процедуры нужно лишь 3 входных параметра описанных в задаче,а выходным параметром будет число 0 или 1,которое будет говорить о том переходит ли пешеход дорогу или нет.
Спасибо за ответ. Вот я ее уже написал но только для четырех действий пешехода.Программа работает. Остальные три я не знаю как определить. Эти три параметра следующие: 1)Идет на красный независимо от движения транспорта; 2) Идет при любом цвете светофора и движении либо отсутствии транспорта; 3) Не идет при любом раскладе. Цикл while убрал.
Program Пешеход;
var
A,B,N:boolean;//логические переменные цвет светофора, едет ли автомобиль и идет ли пешеход//
C:integer;//число определяющее характер пешехода//
cvet:string;
avto:string;
pesh:string;
H:string;
procedure perehod (A:boolean;B:boolean;N:boolean;C:integer);
begin
If cvet=‘зеленый’ then A:=True;
If cvet=‘красный’ then A:=False;
Writeln(A);
If avto=‘да’ then B:=True;
If avto=‘нет’ then B:=False;
Writeln(B);
If pesh = ‘да’ then N:=true;
If pesh = ‘нет’ then N:= false;
Writeln(N);
If (not A and B and not N) then C:=1;
If (A and B and N) then C:=2;
If (not A and not B and N) then C:=3;
If (not A and B and N) then C:=4;
Case C of
1:H:=(‘послушный и осторожный — учитывает и светофор и опасность.’);
2:H:=(‘послушный, но беспечный — смотрит только на светофор.’);
3:H:=(‘хитрый вольнодумец — идет только на красный, если это ничем не грозит.’);
4:H:=(‘экстремал — идет только на красный, и так, чтобы грозила опасность.’);
end;
end;
begin
writeln(‘Какой сигнал светофора красный или зеленый?’);
readln(cvet);
writeln(‘Движется ли машина?’);
readln(avto);
Writeln(‘Идет ли пещеход?’);
readln(pesh);
perehod(A,B,N,C);
writeln(H);
end.
Мне кажется вы не совсем правильно поняли задачу,у вас параметр С как вычисляемый,а он у вас должен быть входным.Обратите внимание на вот эти строчки задачи "Напишите программу с
процедурой, которая принимает и печатает решение в зависимости от переданных
в неё трех параметров, а именно…"Решение относительно того,будет переходить через дорогу или нет.
т.е ваша процедура принимает 3 параметра A,B,C
потом посредством case через селектор С,вы работаете с конкретным типажом пешехода и для каждого типажа пишете код,где на выходе будет только фраза или число означающая переходит ли дорогу или нет.
Если не прав поправьте.
Число С будет вводить пользователь.работать будем через case.Входить в процедуру будем от 3 параметров.
Будет нечто такое.
К примеру А=1, В=0,а С=1
то в case вы провалимся по 1(ибо С=1),а проверка будет такой
if A=1 and B=0 then writeln(‘Переходит’);
else writeln(‘Не переходит’);
Поясню,1 типаж согласно которому пешеход переходит на Зеленый и только когда нет машин,ибо написано “послушный и осторожный — учитывает и светофор и опасность;” мы это и проверили.И так со всеми 7-ю типажами.
То есть мы привязываем A- светофор, B-машина, которая едет или едет и C- пешеход, который переходит или не переходит. А вы 4-й, 6-й и 7-й типаж напишите пожалуйста.
я решил уже переделать блок case сам,ибо есть ошибки,думаю так будет проще.
1:if (A=True) and (B=False) then writeln(‘Переходит.’) else writeln(‘Не переходит.’);
2:If (A=True) then writeln(‘Переходит.’) else writeln (‘Не переходит.’);
3:If (A=False) and (B=False) then writeln(‘Переходит.’) else writeln (‘Не переходит’);
4:If (A=False) then writeln(‘Переходит’) else writeln(‘Не переходит.’);
5:If (A=False) and (B=True) then writeln(‘Переходит’) else writeln(‘Не переходит.’);
6:writeln(‘Переходит’);
7:writeln(‘Не Переходит’);