Объясните, почему программа не выдает результата?program friday;var...

0 голосов
37 просмотров

Объясните, почему программа не выдает результата?
program friday;var n,a,l,i:longint;k,p:integer;label goback;beginwrite('введите месяцы и день');read(n,k);if k<=5 thenp:=1+(5-k);if k=6 thenp:=7;if k=7 thenp:=6;a:=0;l:=0;for i:=1 to n dobegingoback:l:=l+1;p:=p+7;if p>30 thenp:=p-30;if p=13 thenbegina:=a+1;goto gobackendelse goto goback;if l=n thenbreakend;write(a)end.


Информатика (112 баллов) | 37 просмотров
0

Можно объяснить значение BS?

0

Что программа должна делать, давайте начнем с этого

Дан 1 ответ
0 голосов

Программа не работает, по тому, что в цикле после условия "if p=13", в блоке else у вас идет "зацикливание". По goto вы прыгаете опять обратно в начало итерации цикла.
Очевидно, что успешность выполнения завершения цикла зависит от значения P, так как в любом случаи, если P != 13, вы возращаетесь в начало цикла.

Маленькое лирическое отступление:
Отформатированный код будет приведен в коментариях, если кому-то не ясно.

Ваш код сложно назвать "спагетти кодом", т.к. у вас все довольно очевидно, с тем лишь отличием, что вы используете дериктиву goto, от неё откажитесь в вашей практике, сложнее понять как будет функционировать ваша программа, хотя вашем коллегам по старше будет это очевидно, при наличии опыта.

P.S.
Создайте новый вопрос с описанием задачи и скиньте мне сообщением ссылку.

Спасибо за отметку "Лучший ответ" и нажатую кнопочку "спасибо" тут и в моем профиле.

(1.4k баллов)
0

Что ни пиши с отступами впереди - все сотрет)

0

А что до не может считаться частью вопроса, так это и не часть вопроса, это так, приложение) Ну и если не может считаться, отправьте пожалуйста ссылочку на местоположения этого в правилах, меня терзают сомнения, что это не так, а сам я там такого не вижу. Беспокоюсь о безосновательности данного утверждения.