Программисты! Нужна помощь!, FMSLogo, пока я не сошел с ума....

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (2) [1] 2   К последнему непрочитанному ЗАКРЫТА [ НОВАЯ ТЕМА ]
wHiteHands
28.02.2014 - 13:24
Статус: Offline


Пилот выходного дня.

Регистрация: 5.08.10
Сообщений: 688
1
Для раздела ЭВМ.
В общем, сейчас с ребенком информатику решали. У них FMSLogo проходят. В общем-то идея мне понравилась, простой, доступный язык, для детишек самое то. Всё наглядно и просто. Ессно, я его не знал, но так как в своё время клепал спектрумы, то на раз щёлкал бэйсик, а позже, в универе паскаль и си, то пролистав учебник, потер руки и.....

Не, в общем то всё написали, разобрались, всё хорошо, но уткунлся я в непонятный мне баг, а может быть фича такая? Короче, дурдом в следующем:

Назначаем переменную:

make "a first readlist

Анализируем, и если не соответствует условиям, то печатаем, к примеру:

if and (:a<1) (:a>10) [pr[Nevernyi vvod]]

И хрен..... Не выводит он эти слова. Если подставить туда любую другую комманду (label, stop, halt, следующий объект, без разницы), да хоть набор комманд по порядку - всё исполняет. Но почему, блять, именно print не работает? Идиотизм какой-то... Несколько учебников по синтаксису скурил уже.... Причем эта хрень именно при анализе if and.
if or , например, работает. Поэтому приходится сравнение делать двумя разными строчками, что мне, как аккуратному и ответственному, в свое время, программеру, как то не по душе, глаз режет, ведь можно в одну строчку сравнить? Можно. Собственно, я на этом моменте заострился, ребенку объяснил, что программа должна быть проще и аккуратнее, ни к чему по строчкам компилятор гонять. И впух на этом долбанном принте.
Кто встречался, Всё-таки глюк или что?
Я щас с ума сойду.....


Решено! Зарапортовался.... Всём спасибо.

Это сообщение отредактировал wHiteHands - 28.02.2014 - 14:11
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
KPAKEH
28.02.2014 - 13:28
3
Статус: Offline


Весельчак

Регистрация: 17.01.13
Сообщений: 183
А как переменная может быть меньше 1 AND больше 10 одновременно? Может всё-таки OR нужно? Или тогда (:a > 1) and (:a < 10)

Это сообщение отредактировал KPAKEH - 28.02.2014 - 13:28
 
[^]
wHiteHands
28.02.2014 - 13:30
0
Статус: Offline


Пилот выходного дня.

Регистрация: 5.08.10
Сообщений: 688
Цитата (KPAKEH @ 28.02.2014 - 13:28)
А как переменная может быть меньше 1 AND больше 10 одновременно? Может всё-таки OR нужно? Или тогда (:a > 1) and (:a < 10)

Нет, тут задача стоит именно отбросить переменные в диапазоне от 1 до 10. Ну, представьте, что у вас меню из 10 пунктов. С первого по 10-й вы можете выбрать, а нулевой, или там, 11 не получится, прога должна ругнуться тем самым принтом и начать заново. Я просто не описывал.
 
[^]
Марат
28.02.2014 - 13:31
2
Статус: Offline


Шутник

Регистрация: 27.06.08
Сообщений: 72
Ну да, учитывая, что вы пишете про две разные строчки, скорее всего имеется ввиду OR.
 
[^]
пусто
28.02.2014 - 13:33
4
Статус: Offline


Ярила

Регистрация: 23.05.13
Сообщений: 1773
Цитата (wHiteHands @ 28.02.2014 - 14:30)
Цитата (KPAKEH @ 28.02.2014 - 13:28)
А как переменная может быть меньше 1 AND больше 10 одновременно? Может всё-таки OR нужно? Или тогда (:a > 1) and (:a < 10)

Нет, тут задача стоит именно отбросить переменные в диапазоне от 1 до 10. Ну, представьте, что у вас меню из 10 пунктов. С первого по 10-й вы можете выбрать, а нулевой, или там, 11

Так тебе и пишут, что надо ИЛИ ставить, а не И. Хреновый ты какой то программист.
 
[^]
skeletron
28.02.2014 - 13:33
1
Статус: Offline


Балагур

Регистрация: 24.03.11
Сообщений: 929
Цитата
Ну, представьте, что у вас меню из 10 пунктов. С первого по 10-й вы можете выбрать, а нулевой, или там, 11 не получится, прога должна ругнуться тем самым принтом и начать заново.

тогда однозначно OR.
Опередили. "щелкал бейсик, паскаль и си", а логические конструкции строить не научился? советую тебе учить ребенка сначала алгоритм строить. продумывая логику. а не сразу садиться код лабать. тогда такие бока будуь вылазить намного реже.

Это сообщение отредактировал skeletron - 28.02.2014 - 13:36
 
[^]
Fedul3
28.02.2014 - 13:33
1
Статус: Offline


Приколист

Регистрация: 18.02.14
Сообщений: 221
Все верно. НУжно ОR использовать. НЕт такого А которое сразу меньше 1 и больше 10
 
[^]
olicheg
28.02.2014 - 13:34
0
Статус: Offline


Шутник

Регистрация: 14.11.12
Сообщений: 0
а комбинация if ... else ... в FMSLogo есть? думаю есть. выведи на печать и в елсе
 
[^]
Марат
28.02.2014 - 13:34
1
Статус: Offline


Шутник

Регистрация: 27.06.08
Сообщений: 72
Цитата (wHiteHands @ 28.02.2014 - 13:30)
Нет, тут задача стоит именно отбросить переменные в диапазоне от 1 до 10. Ну, представьте, что у вас меню из 10 пунктов. С первого по 10-й вы можете выбрать, а нулевой, или там, 11 не получится, прога должна ругнуться тем самым принтом и начать заново. Я просто не описывал.

Значит логическое ИЛИ: неправильный ввод это а меньше 1 ИЛИ а больше десяти.
 
[^]
wHiteHands
28.02.2014 - 13:35
0
Статус: Offline


Пилот выходного дня.

Регистрация: 5.08.10
Сообщений: 688
Блин. По порядку еще раз.

if :a<1 [pr[nevernyi vvod]]
if :a>10 [pr[nevernyi vvod]
if :a=1 [следующее действие]
......
if a=10 [следующее действие]

Первые две строчки в этом случае ТОЧНО через and делаются. Не нужно исключение, нужен отброс. Да и отрабатывает она ВСЁ, что угодно, кроме print.
 
[^]
hatepeople
28.02.2014 - 13:38
0
Статус: Offline


Ярила

Регистрация: 4.06.10
Сообщений: 1006
Цитата
; simple examples
IFELSE 1=1 [PRINT [Yes it is true]] [PRINT [No it is false]]
Yes it is true

IFELSE 1=0 [PRINT [Yes it is true]] [PRINT [No it is false]]
No it is false

; example where IFELSE outputs a value
TO MAX :a :b
  OUTPUT (IFELSE :a > :b [:a] [:b])
END

SHOW MAX 1 2
2

source: http://fmslogo.sourceforge.net/manual/

А так да, OR

Это сообщение отредактировал hatepeople - 28.02.2014 - 13:41
 
[^]
пусто
28.02.2014 - 13:38
4
Статус: Offline


Ярила

Регистрация: 23.05.13
Сообщений: 1773
Цитата (wHiteHands @ 28.02.2014 - 14:35)
Блин. По порядку еще раз.

if :a<1 [pr[nevernyi vvod]]
if :a>10 [pr[nevernyi vvod]
if :a=1 [следующее действие]
......
if a=10 [следующее действие]

Первые две строчки в этом случае ТОЧНО через and делаются. Не нужно исключение, нужен отброс. Да и отрабатывает она ВСЁ, что угодно, кроме print.

Ой дурак faceoff.gif
 
[^]
skeletron
28.02.2014 - 13:38
0
Статус: Offline


Балагур

Регистрация: 24.03.11
Сообщений: 929
Цитата
if :a<1 [pr[nevernyi vvod]]
if :a>10 [pr[nevernyi vvod]
if :a=1 [следующее действие]
......
if a=10 [следующее действие]

...
if (a < 1) || (a > 10) {
printf("Wrong output\n");
} else {
do something
}
....

С сей сам переведешь на лого?

Это сообщение отредактировал skeletron - 28.02.2014 - 13:40
 
[^]
Mucmepukc
28.02.2014 - 13:39
7
Статус: Offline


Весельчак

Регистрация: 8.05.13
Сообщений: 152
Цитата
Ой дурак

ну что так сразу. может просто - индус!
 
[^]
Марат
28.02.2014 - 13:40
0
Статус: Offline


Шутник

Регистрация: 27.06.08
Сообщений: 72
Цитата (wHiteHands @ 28.02.2014 - 13:35)
Первые две строчки в этом случае ТОЧНО через and делаются.

Они бы делались через AND, если была бы вложенность. А так как написали вы - через OR.
 
[^]
wHiteHands
28.02.2014 - 13:40
0
Статус: Offline


Пилот выходного дня.

Регистрация: 5.08.10
Сообщений: 688
Так, ребят, давайте начнём с того, что я знаю, как применить ELSE, OR и прочее. А вот ребенок еще нет. Они это тупо не проходили. У него в конспекте русским по белому написано if and с примерами.
Всем "НЕХРЕНОВЫМ" программистам, еще раз повторю: в данном случае всё работает и всё выполняет, кроме, почему-то (ПОЧЕМУ БЛЯ!!!) команды print!

Меня самого OR подмывало подставить, но, блин, в задании AND. И, ведь работает.

Это сообщение отредактировал wHiteHands - 28.02.2014 - 13:42
 
[^]
skeletron
28.02.2014 - 13:42
0
Статус: Offline


Балагур

Регистрация: 24.03.11
Сообщений: 929
Цитата
Так, ребят, давайте начнём с того, что я знаю, как применить ELSE, OR и прочее. А вот ребенок еще нет. Они это тупо не проходили. У него в конспекте русским по белому написано if and с примерами.Всем "НЕХРЕНОВЫМ" программистам, еще раз повторю: в данном случае всё работает и всё выполняет, кроме, почему-то (ПОЧЕМУ БЛЯ!!!) команды print!

конкретнее что выполняет?
ты понимаешь, что сравнивает логический оператор? и что он возвращает?
 
[^]
ofox
28.02.2014 - 13:42
0
Статус: Offline


Балагур

Регистрация: 30.05.13
Сообщений: 987
может тупо попробуй pint вместо pr?
 
[^]
kornezzotti
28.02.2014 - 13:44
0
Статус: Offline


Шутник

Регистрация: 14.01.13
Сообщений: 41
Цитата (wHiteHands @ 28.02.2014 - 14:35)
Так, ребят, давайте начнём с того, что я знаю, как применить ELSE, OR и прочее. А вот ребенок еще нет. Они это тупо не проходили. У него в конспекте русским по белому написано if and с примерами.
Всем "НЕХРЕНОВЫМ" программистам, еще раз повторю: в данном случае всё работает и всё выполняет, кроме, почему-то (ПОЧЕМУ БЛЯ!!!) команды print!

А NOT они уже знают?
 
[^]
skeletron
28.02.2014 - 13:45
0
Статус: Offline


Балагур

Регистрация: 24.03.11
Сообщений: 929
Цитата
может тупо попробуй pint вместо pr?

можно. тогда, наверное, значение одной и той же переменной будет ОДНОВРЕМЕННО меньше 1 и больше 10?
ТС, измени логику так, чтобы проверялся верный диапазон (от 1 до 10) и выполнялась логика. а если нет - то тогда вывод "неверный вывод". тогда там будет логическое И и ты будешь крут в глазах сына.
 
[^]
kornezzotti
28.02.2014 - 13:48
1
Статус: Offline


Шутник

Регистрация: 14.01.13
Сообщений: 41
Допустим вводим 13. Если (13<1)И(13>10) тогда печать(неверно). Но 13 не меньше 1. Как он выведет? У тебя логическое "И" тоесть выполнение обоих условий а не одного из двух(ИЛИ). Следовательно задание ЛАЖА или на дополнительное изучение.
 
[^]
Марат
28.02.2014 - 13:48
1
Статус: Offline


Шутник

Регистрация: 27.06.08
Сообщений: 72
Во-первых, (a < 10) and (a > 1) можно проверить, а остальные действия вложить в блок при таких ограничениях.

Во-вторых, каким образом все работает у вас кроме оператора принт. Не должно не работать ничего. Приведите пож-ста пример работающего варианта.
 
[^]
wHiteHands
28.02.2014 - 13:49
0
Статус: Offline


Пилот выходного дня.

Регистрация: 5.08.10
Сообщений: 688
Цитата
конкретнее что выполняет?
ты понимаешь, что сравнивает логический оператор? и что он возвращает?

смотри:
if and (:a<1) (:a>10) [rt 90 label [nevernyi vvod] wait 200 menu] - работает. Без проблем.
if and (:a<1) (:a>10) [pr[nevernyi vvod]] - работает, только ничего не пишет.
if and (:a<1) (:a>10) [pr[nevernyi vvod] wait 200 menu] просто пропускает принт, а дальше всё исполняет. menu в данном случае начинает весь процесс сначала.

Цитата
может тупо попробуй pint вместо pr?

Пробовал.

Всем, кто там про дураков и индусов, ну вы, блин, пройдите мимо тогда.... Я уже и так ебанулся на отличненько.....
 
[^]
skeletron
28.02.2014 - 13:50
1
Статус: Offline


Балагур

Регистрация: 24.03.11
Сообщений: 929
Цитата
Во-вторых, каким образом все работает у вас кроме оператора принт. Не должно не работать ничего. Приведите пож-ста пример работающего варианта.

Может, эксепшены кидаются, а ТС думает, что программа работает? есть такое в этом языке?
 
[^]
kornezzotti
28.02.2014 - 13:50
1
Статус: Offline


Шутник

Регистрация: 14.01.13
Сообщений: 41
Цитата (skeletron @ 28.02.2014 - 14:45)
Цитата
может тупо попробуй pint вместо pr?

можно. тогда, наверное, значение одной и той же переменной будет ОДНОВРЕМЕННО меньше 1 и больше 10?
ТС, измени логику так, чтобы проверялся верный диапазон (от 1 до 10) и выполнялась логика. а если нет - то тогда вывод "неверный вывод". тогда там будет логическое И и ты будешь крут в глазах сына.

if and (:a>1) (:a<10) ... else [pr[Nevernyi vvod]]
типа так.
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 4293
0 Пользователей:
Страницы: (2) [1] 2  ЗАКРЫТА [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх