Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 05.09.2010, 18:15   #81 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Прервана, потому что после оператора Goto v1 не поставлен разделитель. Правильная версия:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 05.09.2010, 18:17   #82 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

в строке с goto точки с запятой нет.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 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)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Бродяга

По другому циклы называются командами повторения. В Pascal известно три основных вида циклов: с предусловием, с постусловием, с параметрами. Циклы нужны для реализации многократного повторения последовательности действий до наступления события.
К примеру, дан исполнитель, умеющий двигаться в указанном направлении. Чтобы он при движении не разбился о препятствие, для него предусмотрено логическое событие "в этом направлении свободно". При истинности можно продолжать движение, при ложности - нужно стоять на месте. Подобное событие называется условием, его можно использовать в качестве критерия для выхода из цикла. В теле цикла можно в данном случае прописать команду на движение.
Другой пример: вам нужно вычислить факториал числа N. Факториал - произведение всех целых чисел от 1 до N включительно. Чтобы последовательно перемножать все числа, можно пойти двумя путями - первый: написать длинную формулу, содержащую все числа; второй - задать цикл с параметрами, в котором счетчик цикла будет изменяться от 1 до N с шагом 1, в теле цикла прописать короткую команду произведение:=произведение*счетчик_цикла. Первый путь может быть реализован, если заранее известно значение N и это число достаточно маленькое, в противном случае слишком длинная строка с формулой вызовет ошибку переполнения. Второй путь будет более грамотным и потребует меньших усилий, к тому же возможно вычисление факториала достаточно больших чисел.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 05.09.2010, 20:03   #85 (permalink)
Бродяга
Снова перешел на Vist'у
 
Аватар для Бродяга
 
Регистрация: 17.04.2010
Сообщений: 1,685
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 293
По умолчанию

AlexZir спасибо. в учебнике всё написано на примерах и не всегда понятно что написано, да ещё спросить не у кого.
вот ещё ошибочка: решил усложнить прошлую программу - сделать так чтобы после сообщения о призе вылазила картинка подарка. подарок нарисовал (в тетради и потом перенёс координатами по расчётам) но почему то не запускается. и лог вылета мне не понятен (на скрине).

p/s/ проблема исправлена. скажите для того чтобы впихнуть рисунок надо ставить подраздел?
Миниатюры
aacuiye.jpg  
Бродяга вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 05.09.2010, 20:09   #86 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Похоже, в слове Device букву "с" вляпали в русском регистре. Во всяком случае, именно на нее он ругается. Перенабейте это слово.
Vladimir_S вне форума   Ответить с цитированием
Старый 05.09.2010, 20:11   #87 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

в этой программе readln не нужен... у тебя тут бесконечный цикл..(не успел отписаться..) как удалить свое сообщение?
kreol вне форума   Ответить с цитированием
Старый 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)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Тогда уж ставьте readln после закрытия графического режима, а не до closegraph. При использовании readln в графическом режиме автоматически происходит переключение в текстовый режим и последующие команды модуля graph могут вызвать ошибки. Также попробуйте переменной device присвоить значение detect. Это позволит в автоматическом режиме определить тип видеодрайвера.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 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
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 07:02.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.