Четверг, 28 Марта 2024, 22:58

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Остановить процедуру через break
Остановить процедуру через break
AKukuruzДата: Четверг, 28 Июля 2016, 17:48 | Сообщение # 1
был не раз
Сейчас нет на сайте
Что надо сделать чтобы после трех раз процедура прекращала действие? То есть фигура не рисовалась.
Вводим переменную равную числу фигур при ее значении равное трем надо что-то делать...

после redraw ставил
Код
nr:=+1;
if nr :=>3 then break;

ругается на отсутствие оператора...
Не совсем понятно что там должен быть за оператор...

Код
uses graphABC;
var  nr,px1,py1:integer;

    

procedure MouseDown(x,y,mb:integer);
begin
px1:=x; //начальная позиция фигурs равна центру экрана
py1:=y;
drawrectangle(px1-25,py1-50,px1+25,py1+50);
lockdrawing;
redraw;
end;

procedure draw_r(); //рисуем
begin
onmousedown:=MouseDown;
end;


begin//основной цикл
SetWindowTitle('Графическое окно');
Setwindowsize(800,600); //размер окна
CenterWindow;//центр монитора

draw_r();

end.
bodya_WMДата: Четверг, 28 Июля 2016, 18:05 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Код

var
i: integer;

...

for i := 0 to 3 do
begin
// Что то делаем
if i > 3 then
break;
end;


Разработчик игрового движка WaveGameEnvironment2D

Сообщение отредактировал bodya_WM - Четверг, 28 Июля 2016, 18:05
AKukuruzДата: Пятница, 29 Июля 2016, 05:38 | Сообщение # 3
был не раз
Сейчас нет на сайте
Код
procedure draw_r(); //рисуем
begin
var nr: integer;
nr:=+1;
for nr := 0 to 3 do
onmousedown:=MouseDown;
if nr > 3 then
break;
end;


говорит break вне цикла
OrdanДата: Пятница, 29 Июля 2016, 07:25 | Сообщение # 4
Главный зомби
Сейчас нет на сайте
AKukuruz, после for nr := 0 to 3 do забыл бегин энд

Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)

Мои проекты ТЫК
Мои видяхи на ютубэ ТЫК

Если ты споришь с идиотом, вероятно тоже самое делает и он.
LertmindДата: Пятница, 29 Июля 2016, 08:42 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
AKukuruz, твой код очень странный и неверный, перепишу немного по-другому чтобы показать:
Код
program ideone;

procedure proc1(n: integer);
var
    i: integer;
begin
    for i := 0 to 10 do
    begin
        writeln(i);
        if i = n then
            break;
    end;
    writeln('procedure end'); // Выведется
end;

begin
    proc1(4);
end.

Этот код выведет:
Код
0
1
2
3
4
procedure end

А этот код не выведет procedure end:
Код
program ideone;

procedure proc1(n: integer);
var
    i: integer;
begin
    for i := 0 to 10 do
    begin
        writeln(i);
        if i = n then
            exit;
    end;
    writeln('procedure end'); // Не выведется
end;

begin
    proc1(4);
end.

break - выход из цикла, а exit - из всей процедуры/функции.


Сообщение отредактировал Lertmind - Пятница, 29 Июля 2016, 09:18
bodya_WMДата: Пятница, 29 Июля 2016, 08:51 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Цитата
после for nr := 0 to 3 do забыл бегин энд

я забыл что в PascalABC синаксис 70х годов.
В делфях если выражение в одну строку то можно не писать begin и end.

Добавлено (29 июля 2016, 08:51)
---------------------------------------------

Цитата
твой код очень странный и неверный

Особенно нет табуляций. Если бы код было больше - нечитабельно.


Разработчик игрового движка WaveGameEnvironment2D
OrdanДата: Пятница, 29 Июля 2016, 09:17 | Сообщение # 7
Главный зомби
Сейчас нет на сайте
bodya_WM, он не прервет цикл если под цикл попадает только onmousedown:=MouseDown;

Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)

Мои проекты ТЫК
Мои видяхи на ютубэ ТЫК

Если ты споришь с идиотом, вероятно тоже самое делает и он.
bodya_WMДата: Пятница, 29 Июля 2016, 09:28 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Цитата
он не прервет цикл если под цикл попадает только onmousedown:=MouseDown;

спутал с exit.


Разработчик игрового движка WaveGameEnvironment2D
AKukuruzДата: Воскресенье, 31 Июля 2016, 18:27 | Сообщение # 9
был не раз
Сейчас нет на сайте
Если в конце процедуры стоит break то прекращается выполнение цикла...
А у меня вроде и условие выполняется но при клике все равно рисуются фигуры. Кароч или я что-то не понимаю или что-то делаю не так...

Добавлено (31 июля 2016, 18:27)
---------------------------------------------
Цитата Lertmind ()
твой код очень странный и неверный, перепишу немного по-другому чтобы показать:

не спорю, пока делаю очень много ошибок... учусь по урокам на сайтах...

да спасибо) процедуры с параметрами я еще не писал.

Код
procedure draw_r(nr: integer); //рисуем
begin
begin
onmousedown:=MouseDown;
end;
nr:=+1;
if nr :=3 then
break;
end;


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

есть действие после него счетчик... есть условие, все вроде нормально...
я понимаю что есть ошибка, я ее не вижу!

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


Сообщение отредактировал AKukuruz - Воскресенье, 31 Июля 2016, 18:29
OrdanДата: Понедельник, 01 Августа 2016, 03:38 | Сообщение # 10
Главный зомби
Сейчас нет на сайте
AKukuruz, что то какая то ахинея а не код)

Код

procedure draw_r(); //рисуем
begin
var nr: integer;
nr:=+1;
for nr := 0 to 3 do
begin
onmousedown:=MouseDown;
if nr > 3 then
break;
end;
end;


Что бы остановить цикл, в его тело нужно включить break; у тебя он был вне тела.


Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)

Мои проекты ТЫК
Мои видяхи на ютубэ ТЫК

Если ты споришь с идиотом, вероятно тоже самое делает и он.
AKukuruzДата: Суббота, 06 Августа 2016, 18:33 | Сообщение # 11
был не раз
Сейчас нет на сайте
Вроде понятно... Но не до конца)).
Мне надо через вводимый параметр f ограничить число рисуемых фигур...
То есть нажал f раз и операция описываемая в событии не происходит.

Код
procedure draw_r(f: integer);
begin
var i: integer;//хранение числа фигур
i:=i+1; //при клике увеличивается на 1
for i := 1 to f do
begin
onmousedown:=MouseDown;
if i > f then
break;
end;


В главном цикле число фигур передается через параметр в процедуру... но программа не работает так как мне нужно...
сижу думаю почему...

пробовал repeat ... until f=3, тоже самое - не работает как хочу.
кстати про табуляцию это да) ну просто сейчас это не так важно... мне щас важн понять в чем я ошибку постоянно делаю))
систематически причем...


Сообщение отредактировал AKukuruz - Суббота, 06 Августа 2016, 18:34
GudleifrДата: Среда, 17 Августа 2016, 15:41 | Сообщение # 12
почти ветеран
Сейчас нет на сайте
Ну, AKukuruz, я рад, что за время моего отсутствия Вы наделали не очень много ошибок. Однако, огорчен, что все старые остались на месте:
1. непонимание, где кончается один оператор и начинается другой;
2. что работает до, а что после появления окна на экране;
3. присвоение указателя на ф-ию, не означает ее запуска.
За все это я уже Вас ругал (и все ответы есть в моих постах). Бросайте заниматься фигней и начинайте учиться программировать!



Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Остановить процедуру через break
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг