Помогите с ошибкой в программе

Книга адресована школьникам средних и старших классов, желающим испытать себя в «олимпийских схватках». Может быть полезна студентам-первокурсникам и преподавателям информатики.

Модераторы: Oleg_D, Модераторы

Помогите с ошибкой в программе

Сообщение pishite » 30.05.2014 17:28:57

Заранее прошу прощение если публику не в той теме. Начал учить паскаль по этой замечательной книжки, но столкнулся с проблемой помогите её найти и объясните где я допустил ошибку.

Код: Выделить всё
{ программа бортовой пк }

var

S: string ;

A, B, C, D, E, F, G : Boolean;

begin

Write('Улица A:'); Readln(S); A:=S='1';

Write('Улица B:'); Readln(S); B:=S='1';

Write('Шлагбаум F:'); Readln(S); F:=S='1';

Write('Улица С: '); Readln(S); C:=S='1';

Write('Улица D:'); Readln(S); D:=S='1';

Write('Улица E:'); Readln(S); E:=S='1';

Write('Шлагбаум G:'); Readln(S); G:=S='1';

if A and B not F or C and D or E not G

then S:='Поехали'

else S:='Постоим';

Writeln(S); Readln;

end.


Выводит ошибки при компиляции:
First compilation of c:\fpc\programm\z_p_13_1.pas
Z_P_13_1.pas(13,22) Fatal: Syntax error, "THEN" expected but "not" found
Z_P_13_1.pas(0) Fatal: Compilation aborted
pishite
незнакомец
 
Сообщения: 5
Зарегистрирован: 30.05.2014 17:18:14

Re: Помогите с ошибкой в программе

Сообщение скалогрыз » 30.05.2014 17:35:24

"Песни о Паскале"? :D вспоминается анекдот "Индусы не пишут код, они его поют и танцуют"

Есть мнение, что это не просто "перепеши" програмку, а задача - "расставить правильно скобки в if " (либо октровенная безалаберность редактора)

Попробуй так
Код: Выделить всё
{ программа бортовой пк }
var
  S: string ;
  A, B, C, D, E, F, G : Boolean;
begin
  Write('Улица A:'); Readln(S); A:=S='1';
  Write('Улица B:'); Readln(S); B:=S='1';
  Write('Шлагбаум F:'); Readln(S); F:=S='1';
  Write('Улица С: '); Readln(S); C:=S='1';
  Write('Улица D:'); Readln(S); D:=S='1';
  Write('Улица E:'); Readln(S); E:=S='1';
  Write('Шлагбаум G:'); Readln(S); G:=S='1';
  if A and B and not F or C and D or E and not G
    then S:='Поехали'
    else S:='Постоим';
  Writeln(S); Readln;
end.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помогите с ошибкой в программе

Сообщение pishite » 30.05.2014 17:51:46

По ответу книги программа должна выглядеть так:
Изображение
Спасибо помогли люди добрые на ответах маил.ру

Код: Выделить всё
{ программа бортовой пк }
var
        S: string ;
        A, B, C, D, E, F, G : Boolean;
begin
        Write('Улица A:'); Readln(S); A:=S='1';
        Write('Улица B:'); Readln(S); B:=S='1';
        Write('Шлагбаум F:'); Readln(S); F:=S='1';
        Write('Улица С:'); Readln(S); C:=S='1';
        Write('Улица D:'); Readln(S); D:=S='1';
        Write('Улица E:'); Readln(S); E:=S='1';
        Write('Шлагбаум G:'); Readln(S); G:=S='1';
  [b]      if ((A and B) and not F) or (C and D) or (E and not G)[/b] -  Вот как надо было писать решение в книги опечатка!!! Спасибо пользователю с маил.ру Женёк Мастер
                then Writeln('Поехали')
                else Writeln('Постоим');
        Writeln(S); Readln;
end.
pishite
незнакомец
 
Сообщения: 5
Зарегистрирован: 30.05.2014 17:18:14

Re: Помогите с ошибкой в программе

Сообщение скалогрыз » 30.05.2014 18:40:57

pishite, ты не начал учить паскаль, ты начал изучать социальные сети. :mrgreen:

я уже написал тебе в личку, но заодним скажу здесь:
изначально ты невнимательно переписал "решающий оператор" (если он был дан в книге).
Как итог, программа отказалась компилироватся.
Обратившись за помощью (вместо того чтобы себя перепроверить), ты получил решение задачи.
Как результат, задачку ты сам не решил.

Вывод: логические выражения не поняты и не выучены. Но ничего, впереди ещё будет шанс исправится... на крайняк Женёк поможет :mrgreen: :mrgreen: :mrgreen:
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помогите с ошибкой в программе

Сообщение pishite » 30.05.2014 19:57:57

скалогрыз писал(а):pishite, ты не начал учить паскаль, ты начал изучать социальные сети. :mrgreen:

я уже написал тебе в личку, но заодним скажу здесь:
изначально ты невнимательно переписал "решающий оператор" (если он был дан в книге).
Как итог, программа отказалась компилироватся.
Обратившись за помощью (вместо того чтобы себя перепроверить), ты получил решение задачи.
Как результат, задачку ты сам не решил.

Вывод: логические выражения не поняты и не выучены. Но ничего, впереди ещё будет шанс исправится... на крайняк Женёк поможет :mrgreen: :mrgreen: :mrgreen:


действительно это мне минус прошу прощения за свою невнимательность.

Добавлено спустя 11 минут 35 секунд:
Решил провести работу по ошибкам и написал аналогичную программу не подглядывая в книгу.

Код: Выделить всё
{ программа - дорога на работу! }
const
        center='Через центр пройти:';
        avto='Через автовокзал пройти:';
        vino='Через Винзавод пройти:';
var
        S1, S2, S3: string;
        A, B, C, D, E, F, G : boolean;
begin
        Write('Центр:'); Readln(S1); A:=S1='да';
        Write('Набережная:'); Readln(S1); B:=S1='да';
        Write('Открыт шлагбаум?'); Readln(S1); F:=S1='да';
        Write('Автовокзал:'); Readln(S2); C:=S2='да';
        Write('Набережная:'); Readln(S2); D:=S2='да';
        Write('Винзавод:'); Readln(S3); E:=S3='да';
        Write('Открыт шлагбаум?'); Readln(S3); G:=S3='да';
        if ((A and B) and not F) or (C and D) or (E and not G)
        then Writeln('Вас ждет работа')
        else Writeln('Ищите другие пути');
        Writeln(center, '',S1);
        Writeln(avto, '',S2);
        Writeln(vino, '',S3);
        Readln;
end.
pishite
незнакомец
 
Сообщения: 5
Зарегистрирован: 30.05.2014 17:18:14

Re: Помогите с ошибкой в программе

Сообщение Oleg_D » 30.05.2014 22:37:40

pishite писал(а): if ((A and B) and not F) or (C and D) or (E and not G) - Вот как надо было писать решение в книги опечатка!!!

Это выражение эквивалентно тому же, но без скобок, как в книге:
if A and B and not F or C and D or E and not G
Лишние скобки - это не ошибка, конечно, но немного засоряют текст.
А в вашем первом решении так было, напомню:
if A and B not F or C and D or E not G
Разберитесь ещё раз с приоритетом операций:
1. not
2. and
3. or

скалогрыз писал(а):"Песни о Паскале"? вспоминается анекдот "Индусы не пишут код, они его поют и танцуют"

:D :D :D
Oleg_D
постоялец
 
Сообщения: 390
Зарегистрирован: 09.05.2011 11:28:36

Re: Помогите с ошибкой в программе

Сообщение скалогрыз » 31.05.2014 01:28:32

reshite, вот тебе задание на закрепление материала.
Попробуй в этот раз Женька не привлекать! ;)
taskreshite.PNG
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помогите с ошибкой в программе

Сообщение pishite » 31.05.2014 13:58:01

Код: Выделить всё
{ программа - дорога в школу! }
var
        S:string;
        A, B, C, D, E, F, G:boolean;
begin
        Writeln('Введите "да" если проезд открыт и "нет" если проезд закрыт');
        Write('Шлагбаум F:'); Readln(S); F:=S='да';
        Write('Улица A:'); Readln(S); A:=S='да';
        Write('Улица С:'); Readln(S); C:=S='да';
        Write('Улица B:'); Readln(S); B:=S='да';
        Write('Улица E:'); Readln(S); E:=S='да';
        Write('Шлагбаум G:'); Readln(S); G:=S='да';
        Write('Улица D:'); Readln(S); D:=S='да';
        if not F and A or C and B or E and not G and D
        then Writeln('Проезд свободен!')
        else Writeln('Ищите другие пути!');
        Writeln(S);
        Writeln('Нажмите "Enter"');
        Readln;
end.


Вот готово, но при вводе значения ''да'' у меня почему-то выводиться - else Writeln('Ищите другие пути!');
Приоритеты поставлены вроде как правильно, пробовал и со скобками и без них. Сначала Выполняется "not" потом "and",а после "or". Или тут проблемы при при образовании строковой переменой в нулевую?

Добавлено спустя 3 минуты 12 секунд:
Все я понял я заношу данные в 1 переменную и они теряется при вводе новых параметров. Я должен назначить несколько переменных и будет все хорошо.

Код: Выделить всё
{ программа - дорога в школу! }
var
        S, Q, W:string;
        A, B, C, D, E, F, G:boolean;
begin
        Writeln('Введите "да" если проезд открыт и "нет" если проезд закрыт');
        Write('Шлагбаум F:'); Readln(S); F:=S='да';
        Write('Улица A:'); Readln(S); A:=S='да';
        Write('Улица С:'); Readln(Q); C:=Q='да';
        Write('Улица B:'); Readln(Q); B:=Q='да';
        Write('Улица E:'); Readln(W); E:=W='да';
        Write('Шлагбаум G:'); Readln(W); G:=W='да';
        Write('Улица D:'); Readln(W); D:=W='да';
        if not F and A or C and B or E and not G and D
        then Writeln('Проезд свободен!')
        else Writeln('Ищите другие пути!');
        Writeln('*************************************');
        Writeln('Через 1 дорогу:',S, 'Через 2 дорогу:', Q, 'Через 3 дорогу:', W);
        Writeln('Нажмите "Enter"');
        Readln;
end.


Добавлено спустя 4 минуты 1 секунду:
Ура сработало!!!!! :D
pishite
незнакомец
 
Сообщения: 5
Зарегистрирован: 30.05.2014 17:18:14

Re: Помогите с ошибкой в программе

Сообщение скалогрыз » 31.05.2014 19:51:15

зачёт! с заданием справился!
но если попробуешь переписать на 1 или 0 вместо, "да" и "нет", всё может лучше получится. Да и дополнительные переменные не понядобятся.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помогите с ошибкой в программе

Сообщение Little_Roo » 01.06.2014 00:19:17

Тег [code] снова не в чести??? :(
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 638
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Помогите с ошибкой в программе

Сообщение pishite » 02.06.2014 17:52:39

Переменные M1, M2 и M3 отражают итог подбрасывания трех монет и содержат
TRUE, если выпал«орел». Пусть программа напечатает TRUE для следующих случаев: 1)
у всех монет выпал«орел»; 2) у всех монет выпала«решка»; 3) все три монеты упали
одинаково; 4) у первой –«решка», у остальных –«орел»; 5) у первой –«орел», а две
остальные упали одинаково.
Код: Выделить всё
var M1, M2, M3 : boolean;
begin
{ Ввод переменных организуйте здесь}
Writeln(M1 and M2 and M3);
Writeln(not M1 and not M2 and not M3);
Writeln((M1=M2) and (M2=M3));
Writeln(not M1 and M2 and M3);
Writeln(M1 and (M2=M3));
end.


Это решение книги, можете задать аналогичную программу дабы закрепить материал, сам без подсказки не смог написать программу или статью где шире расписано про правду и лож.

Добавлено спустя 21 час 18 минут 33 секунды:
Вроде как переосмыслил решение и не много понял...
pishite
незнакомец
 
Сообщения: 5
Зарегистрирован: 30.05.2014 17:18:14


Вернуться в Книга "Песни о Паскале"

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru