05.09.2010, 18:15 | #81 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Код:
LABEL v1; VAR a :Integer; BEGIN writeln ('Ќ*ЁиЁ зЁб«® ¬®¦Ґв вл ўл©Ја*Ґи!!!'); v1: ReadLn (a); if a=73 then writeln ('’л Ї®Ї*«!!!ЏаЁ§ вў®©') else writeln ('’л *Ґ Ї®Ї*«!!! Џ®Їа®Ўг© Ґйс г вҐЎп ®Ўп§*⥫м*® Ї®«гзЁбп!'); GOTO v1; END. 1. Изменен тип переменной а - незачем ей быть вещественной, если речь идет о числе монет, которое может быть только целым неотрицательным. 2. Убран ReadLn в конце - он не нужен, поскольку программа и без того зациклена на оператор ввода. Ну а теперь - самое главное. Я НАСТОЯТЕЛЬНО рекомендую, осваивая программирование, ЗАБЫТЬ об операторе GOTO и переходах по меткам. Работа с GOTO - сверхдурной стиль программирования. Это не мои измышления, это давно и прочно принятая у программистов концепция. Программы с GOTO презрительно называют "лапшой". Посмотрите, если интересно, моё решение Вашей задачи. Внесены следующие изменения: 1. Убран GOTO. 2. Предусмотрен выход из бесконечного цикла. 3. Надписи, во избежание проблем с кодировкой, сделаны на английском языке. Код:
VAR a:Word; c:Char; BEGIN c:='Y'; Writeln('Try to guess the number of coins - maybe you will win!!!'); Repeat Write('Number of coins = '); ReadLn(a); if a=73 then writeln('You won!!! The prize is yours!') else begin writeln('You missed!!! Try again and you will have the success!'); Write('Next attempt (Y/N)? '); Readln(c); end; Until (a=73) or (c='n') or (c='N'); if a=73 then readln; END. |
05.09.2010, 18:21 | #83 (permalink) |
Снова перешел на Vist'у
Регистрация: 17.04.2010
Сообщений: 1,685
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 293
|
Vladimir_S спасибо! на счёт GOTO - я про циклы всё прочитал но так и не понял зачем они нужны и как их ставить, Repeat я просто не мог придумать куда поставить поэтому воспользовался способом который я больше всего понял - GOTO.
p/s/ я не собирался монетки я хотел сделать чтобы после сообщения о призе вылазило какое нить изображение, но для начала мне надо было заставить работать программу. p/p/s/ Real поставил потому что без него программа (без цикла естественно) не хотела запускатся. Она запустилась и потом решил запихнуть цикл. |
05.09.2010, 19:38 | #84 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Бродяга
По другому циклы называются командами повторения. В Pascal известно три основных вида циклов: с предусловием, с постусловием, с параметрами. Циклы нужны для реализации многократного повторения последовательности действий до наступления события. К примеру, дан исполнитель, умеющий двигаться в указанном направлении. Чтобы он при движении не разбился о препятствие, для него предусмотрено логическое событие "в этом направлении свободно". При истинности можно продолжать движение, при ложности - нужно стоять на месте. Подобное событие называется условием, его можно использовать в качестве критерия для выхода из цикла. В теле цикла можно в данном случае прописать команду на движение. Другой пример: вам нужно вычислить факториал числа N. Факториал - произведение всех целых чисел от 1 до N включительно. Чтобы последовательно перемножать все числа, можно пойти двумя путями - первый: написать длинную формулу, содержащую все числа; второй - задать цикл с параметрами, в котором счетчик цикла будет изменяться от 1 до N с шагом 1, в теле цикла прописать короткую команду произведение:=произведение*счетчик_цикла. Первый путь может быть реализован, если заранее известно значение N и это число достаточно маленькое, в противном случае слишком длинная строка с формулой вызовет ошибку переполнения. Второй путь будет более грамотным и потребует меньших усилий, к тому же возможно вычисление факториала достаточно больших чисел.
__________________
Убить всех человеков! |
05.09.2010, 20:03 | #85 (permalink) |
Снова перешел на Vist'у
Регистрация: 17.04.2010
Сообщений: 1,685
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 293
|
AlexZir спасибо. в учебнике всё написано на примерах и не всегда понятно что написано, да ещё спросить не у кого.
вот ещё ошибочка: решил усложнить прошлую программу - сделать так чтобы после сообщения о призе вылазила картинка подарка. подарок нарисовал (в тетради и потом перенёс координатами по расчётам) но почему то не запускается. и лог вылета мне не понятен (на скрине). p/s/ проблема исправлена. скажите для того чтобы впихнуть рисунок надо ставить подраздел? |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
05.09.2010, 20:09 | #86 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Похоже, в слове Device букву "с" вляпали в русском регистре. Во всяком случае, именно на нее он ругается. Перенабейте это слово.
|
05.09.2010, 20:14 | #88 (permalink) |
Снова перешел на Vist'у
Регистрация: 17.04.2010
Сообщений: 1,685
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 293
|
Vladimir_S я тоже подумал, но сначала принял за глупость. потом решил перестраховатся и исправил. но всё равно спасибо!
kreol я уже приучился везде ставить - если выдали бы ошибку тогда убрал но паскаль молчит. это главное |
05.09.2010, 20:23 | #89 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Тогда уж ставьте readln после закрытия графического режима, а не до closegraph. При использовании readln в графическом режиме автоматически происходит переключение в текстовый режим и последующие команды модуля graph могут вызвать ошибки. Также попробуйте переменной device присвоить значение detect. Это позволит в автоматическом режиме определить тип видеодрайвера.
__________________
Убить всех человеков! |
05.09.2010, 20:33 | #90 (permalink) |
Снова перешел на Vist'у
Регистрация: 17.04.2010
Сообщений: 1,685
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 293
|
readln был в образце поэтому я его перед closegraph ставлю.
получилось вставить изображение после слова о призе. з.ы. Vladimir_S у меня англицкие буквы не распознаёт и просьба о числах появилась на англицком. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|