• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Начинающему нужна помощь

Прервана, потому что после оператора 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.
 
в строке с goto точки с запятой нет.
 
Vladimir_S спасибо! на счёт GOTO - я про циклы всё прочитал но так и не понял зачем они нужны и как их ставить, Repeat я просто не мог придумать куда поставить поэтому воспользовался способом который я больше всего понял - GOTO.

p/s/ я не собирался монетки я хотел сделать чтобы после сообщения о призе вылазило какое нить изображение, но для начала мне надо было заставить работать программу.

p/p/s/ Real поставил потому что без него программа (без цикла естественно) не хотела запускатся. Она запустилась и потом решил запихнуть цикл.
 
Бродяга

По другому циклы называются командами повторения. В Pascal известно три основных вида циклов: с предусловием, с постусловием, с параметрами. Циклы нужны для реализации многократного повторения последовательности действий до наступления события.
К примеру, дан исполнитель, умеющий двигаться в указанном направлении. Чтобы он при движении не разбился о препятствие, для него предусмотрено логическое событие "в этом направлении свободно". При истинности можно продолжать движение, при ложности - нужно стоять на месте. Подобное событие называется условием, его можно использовать в качестве критерия для выхода из цикла. В теле цикла можно в данном случае прописать команду на движение.
Другой пример: вам нужно вычислить факториал числа N. Факториал - произведение всех целых чисел от 1 до N включительно. Чтобы последовательно перемножать все числа, можно пойти двумя путями - первый: написать длинную формулу, содержащую все числа; второй - задать цикл с параметрами, в котором счетчик цикла будет изменяться от 1 до N с шагом 1, в теле цикла прописать короткую команду произведение:=произведение*счетчик_цикла. Первый путь может быть реализован, если заранее известно значение N и это число достаточно маленькое, в противном случае слишком длинная строка с формулой вызовет ошибку переполнения. Второй путь будет более грамотным и потребует меньших усилий, к тому же возможно вычисление факториала достаточно больших чисел.
 
AlexZir спасибо. в учебнике всё написано на примерах и не всегда понятно что написано, да ещё спросить не у кого.
вот ещё ошибочка: решил усложнить прошлую программу - сделать так чтобы после сообщения о призе вылазила картинка подарка. подарок нарисовал (в тетради и потом перенёс координатами по расчётам) но почему то не запускается. и лог вылета мне не понятен (на скрине).

p/s/ проблема исправлена. скажите для того чтобы впихнуть рисунок надо ставить подраздел?
 

Вложения

  • Безымяй.webp
    Безымяй.webp
    138.4 KB · Просмотры: 45
Похоже, в слове Device букву "с" вляпали в русском регистре. Во всяком случае, именно на нее он ругается. Перенабейте это слово.
 
в этой программе readln не нужен... у тебя тут бесконечный цикл..(не успел отписаться..) как удалить свое сообщение?
 
Vladimir_S я тоже подумал, но сначала принял за глупость. потом решил перестраховатся и исправил. но всё равно спасибо!
kreol я уже приучился везде ставить - если выдали бы ошибку тогда убрал но паскаль молчит. это главное
 
Тогда уж ставьте readln после закрытия графического режима, а не до closegraph. При использовании readln в графическом режиме автоматически происходит переключение в текстовый режим и последующие команды модуля graph могут вызвать ошибки. Также попробуйте переменной device присвоить значение detect. Это позволит в автоматическом режиме определить тип видеодрайвера.
 
readln был в образце поэтому я его перед closegraph ставлю.
получилось вставить изображение после слова о призе.

з.ы. Vladimir_S у меня англицкие буквы не распознаёт и просьба о числах появилась на англицком.
 
Как понять ваше
у меня англицкие буквы не распознаёт и просьба о числах появилась на англицком.
???

Вы пишите, что ваша среда программирования не распознаёт команды на языке, который используется для ввода ключевых слов. Может, всё же речь идёт о кириллице? С её отображением бывают проблемы, так как используется расширенная (национальная) часть кодовой таблицы, а не стандартная.
 
Да уж. Признаться, я тоже не постиг смысла этой сентенции.
 
в программе слова в скобках и кавычках выдаёт по английски. так что заменить кирилицу английскими буквами не выйдет - фри паскаль не переводит
 
я опять с проблемой.
По самоучителю сейчас намечается "контрольная"
Сценарий контрольной: ночь, подлетает НЛО, в домике зажигается свет. НЛО улетает, свет гаснет.
выполнение не понравилось да и половину сценария я не понял как реализовать поэтому я плюнул на пример и решил сделать сам, с урезаным сценарием и немного по своему.
Идея та же - про НЛО хотел реализовать свет в окне но отказался изза проблемы - у НЛО кончился бензин (образно конечно - она вместо того чтобы двигатся по экрану стоит на месте и мигует мультипликацией.
в этом и заключается проблема - как заставить её лететь?
вот программа:
Код:
Uses   Graph;
VAR   a, Device, Mode :Integer;
BEGIN
Device:=0;
InitGraph (Device, Mode, 'C:\FPC\2.4.0\units');
setcolor (White);
Setfillstyle (1, Blue);
rectangle (40, 40, 600, 600);
line (40, 350, 600, 350);
FloodFill (50,50, white);
setfillstyle (1, white);
circle (550, 100, 50);
Floodfill (550, 100, white);
setfillstyle (1, Green);
floodfill (599, 599, White);
setfillstyle (1, red);
rectangle (500, 420, 550, 450);
floodfill (505, 425, white);
setfillstyle (1, black);
rectangle (520, 425, 540, 440);
floodfill (521, 426, white);
setfillstyle (1, brown);
Line (525, 390, 500, 420);
Line (525, 390, 550, 420);
floodfill (525, 391, white);
setfillstyle (1, brown);
Line (100, 420, 130, 445);
Line (100, 420, 70, 445);
rectangle (70, 445, 130, 500);
floodfill (100, 421, white);
setfillstyle (1, red);
floodfill (71, 446, white);
setfillstyle (1, brown);
rectangle (80, 455, 120, 500);
floodfill (81, 456, white);
setfillstyle (1, brown);
rectangle (185, 445, 195, 500);
floodfill (186, 456, white);
setfillstyle (1, lightgreen);
Circle (190, 425, 25);
floodfill (190, 425, white);
setfillstyle (1, brown);
rectangle (350, 445, 360, 500);
floodfill (351, 446, white);
setfillstyle (1, lightgreen);
Circle (355, 425, 25);
floodfill (355, 425, white);
a:=130;
repeat
Setcolor (White);
setfillstyle (1, Red);
Ellipse (a, 300, 0, 360,  90, 40);
floodfill (a, 300, White);
Setcolor (Blue);
setfillstyle (1, Blue);
Ellipse (a, 300, 0, 360,  90, 40);
floodfill (a, 300, Blue);
a:=a+2
until a>300;
  CloseGraph
END.
Сама программа во вложении.

p/s/ прошу за примитивизм не ругать, мне охота именно так - по своему и выходя за рамки высщих программистов
 

Вложения

у НЛО кончился бензин (образно конечно - она вместо того чтобы двигатся по экрану стоит на месте и мигует мультипликацией.
в этом и заключается проблема - как заставить её лететь?
Не знаю - у меня оно двигается горизонтально до середины экрана, потом исчезает.
 
а у меня мигает на месте (слева). видео записал но оно в непонятном формате который стороними прогами не читается (хотя мож винамп читает)а чтоже мне делать? можно ли как то по другому запустить? на других компах пойдёт? (Друг просит передать ему какую нить созданую мною прогу хочу эту)
 
Последнее редактирование:
Но зато я не вижу ни деревьев, ни домика. ЧиднО!
 
а как называется программа в архиве? Вован или Воваван?
 
А я архив не качал - взял ту, что в посте выложена.
 
хм странно, у меня фон, луна, домики, деревья, и этот несчасный овал появляются и овал начинает мигать (красный, полосочка по вертикали, синий, красный,полосочка, синий и так далее)
 
Назад
Сверху