Форум: "Начинающим";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];
Внизмассив Найти похожие ветки
← →
b86 © (2007-12-08 13:33) [0]привет. у меня у меня в программе сбой, ни как не могу его вычислить.
procedure vpravo;
begin
x:=(l div 50) ;
y:=(t div 50);
G[x,y]:=y*11+x+1;
reshytka; {в этой в процедуре вручную задаётся массив А}
begin
if x-1>=0 then
begin
for t:=1 to n do
if g[x-1,y]<>А(t) then l:=l-50
else l:=l;
end;
end;end;
в результате сравнение if g[x-1,y]<>А(t) игнорируется или g[x,y] задается какое-то астрономическое число.
помогите, буду очень признателен
← →
Dib@zol © (2007-12-08 13:44) [1]Телепаты все в Астрале, вернутся не скоро.
Поэтому объясняй, ЧТО делает твоя прога, и КАК она это делает. В частности, нафик нужны все эти переменные. Про каждую из них. И где тут вообще массив "А"? Я вижу только вызов функции А с параметром t.
← →
Dib@zol © (2007-12-08 13:45) [2]ЗЫ Первая проблема в том, что чорт его знает какое у тебя в N лежит число. Если оно равно 0, то цикл ессно не работает.
← →
b86 © (2007-12-08 14:31) [3]Смысл такой, меня надо передвигать картинку по полю. для этого я с помощью массива поле разбиваю на квадраты
и каждому квадрату задаю свой номер
x:=(l div 50) ;
y:=(t div 50);
G[x,y]:=y*11+x+1; //здесь l и t image.left и image.top соответственно
получается G[x,y] так клетка на которой находиться рисунок.
reshytka; - процедура, где в ручную вбиваеться 29 элементов матрицы А. это те квадраты куда, картинка попадать не должна
при копирование накосячил, там цикл не для t, а для w.
for w:=1 to n do
if g[x-1,y]<>А(w) then l:=l-50 //так должно выглядеть
теперь суть вопроса ясна?
← →
Юрий Зотов © (2007-12-08 14:32) [4]> b86 © (08.12.07 13:33)
Что мешает пройти код отладчиком и проверить значения переменных?
← →
b86 © (2007-12-08 15:10) [5]я попробовал подставлять в
for w:=1 to 29 do
if g[x-1,y]<>А(w) then l:=l-50
else l:=l;
end;
число на которое должно было выдать вариант else, a он всё равно выдаёт then.
← →
Dib@zol © (2007-12-08 15:12) [6]Выкладывай весь код. По тем обрывкам, что ты приводишь, разобраться нереально.
← →
Германн © (2007-12-08 15:16) [7]
> b86 © (08.12.07 15:10) [5]
>
> я попробовал подставлять в
> for w:=1 to 29 do
> if g[x-1,y]<>А(w) then l:=l-50
> else l:=l;
> end;
> число на которое должно было выдать вариант else, a он всё
> равно выдаёт then.
>
Какого типа переменные g и A?
← →
{RASkov} © (2007-12-08 15:20) [8]> [5] b86 © (08.12.07 15:10)
> число на которое должно было выдать вариант else
А в чем глубокий смысл вот этого:
> else l:=l;
?
:)
← →
Anatoly Podgoretsky © (2007-12-08 15:28) [9]
> Какого типа переменные g и A?
А где тут переменная A?
← →
b86 © (2007-12-08 15:29) [10]я проверил код отладчиком, получаеться он каждый раз g[x-1,y]<>А(w) присваивает l:=l-50 и в результате получает -1150, ну или что-то типо того.
Как сделать чтоб, он только при нужном значение А(w) присваивал?
← →
b86 © (2007-12-08 15:30) [11]g и a - массивы
← →
Германн © (2007-12-08 15:36) [12]
> b86 © (08.12.07 15:30) [11]
>
> g и a - массивы
>
"Я ж тебе не спрашиваю, шо голова болит.
Я же тебе спрашиваю што ж ты будешь пить?"
Какого типа переменные g и A?
← →
{RASkov} © (2007-12-08 15:37) [13]> [11] b86 © (08.12.07 15:30)
Ты так и не хочешь скобочки подправить? Или ты "скопипастил" сюда код из редактора?
Тогда
> g и a - массивы
врешь - "а" не массив!
← →
b86 © (2007-12-08 15:40) [14]в исходники нормальные скобки
← →
Riply © (2007-12-08 15:42) [15]Читаю ветку как военную хронику "допрос партизана" :)
← →
Dib@zol © (2007-12-08 15:42) [16]Епт, да выложи ты наконец этот исходник!
← →
b86 © (2007-12-08 15:45) [17]весь исходник
var t,w,k,x,y,l,:integer;
procedure TForm1.Image4Click(Sender: TObject);
begin
naverh;
end;
procedure TForm1.Image5Click(Sender: TObject);
begin
vniz;
end;
procedure TForm1.Image10Click(Sender: TObject);
begin
vlevo;
end;
procedure TForm1.Image11Click(Sender: TObject);
begin
vpravo;
end;
procedure schet;
begin
dre;
x:=(l div 50) ;
y:=(t div 50);
G[x,y]:=y*11+x+1;
end;
procedure TForm1.form1(Sender: TObject);
begin
reshytka;
end;
procedure dre;
begin
l:=form1.Image2.Left;
t:=form1.Image2.Top;
end;
procedure erd;
begin
form1.Image2.Left:=l;
form1.Image2.Top:=t;
end;
procedure TForm1.Image2Click(Sender: TObject);
begin
schet;
label3.Caption:=inttostr(g[x,y]);
end;
procedure reshytka;
begin
a[1]:=12; a[2]:=13; a[3]:=15; a[4]:=16; a[5]:=17;
a[6]:=96; a[7]:=107; a[8]:=109; a[9]:=110; a[10]:=93;
a[11]:=18; a[12]:=20; a[13]:=21; a[14]:=35; a[5]:=37;
a[16]:=38; a[17]:=39; a[18]:=46; a[19]:=52; a[20]:=53;
a[21]:=54; a[22]:=55; a[23]:=57; a[24]:=68; a[25]:=74;
a[26]:=85; a[27]:=90; a[28]:=91; a[29]:=92;
end;
procedure vlevo;
begin
schet;
k:=y;
if od<>0 then
begin
if x+1<=10 then
l:=l+50;
end; erd;end;
procedure vpravo;
begin
schet;
reshytka;
k:=y;
if od<>0 then
begin
if x-1>=0 then // если поле не кончается, то
begin
for w:=1 to 29 do
if g[x-1,y]=a[w] then l:=l
else l:=l-50;
form1.Label1.Caption:=inttostr(g[x,y]);
end;
end;erd;end;
procedure naverh;
begin
schet;
w:=x;
if od<>0 then
begin
if y-1>=0 then
t:=t-50;
end;erd;end;
procedure vniz;
begin
schet;
w:=x;
if od<>0 then
begin
if y+1<=10 then
t:=t+50;
end;erd;end;
procedure TForm1.Button2Click(Sender: TObject);
begin
label1.caption:=inttostr(image2.Left);
end;
end.
← →
turbouser © (2007-12-08 15:49) [18]
> end; erd;end;
Я аж испугался за свое зрение 8-()
← →
Anatoly Podgoretsky © (2007-12-08 15:55) [19]Опять это странное l:=l
← →
{RASkov} © (2007-12-08 16:00) [20]> [15] Riply © (08.12.07 15:42)
:)
Сегодня партизанский день....
Один - место нахождения полей ввода скрывает, другой массив маскирует...
....Или сегодня день тренировки телепаторов )
> [17] b86 © (08.12.07 15:45)
> весь исходник
не весь! ( Что есть G, od....
А читать, и тем более понять, этот кусок "кода" трудно....
Кстати.... если приведешь код в порядок, то наверняка и сам ошибку найдешь.... поверь мне :)
> [19] Anatoly Podgoretsky © (08.12.07 15:55)
Это своеобразное "шифрование" исходного кода :)
← →
Dib@zol © (2007-12-08 16:10) [21]Плин. Сделай милость, выложи ВЕСЬ свой проект, а не повыдерганными из него кусками код. Уверяю тебя, этот так сказать код никто не позарится спереть, так как во-первых всё это делается, простите меня, не через *$пу а по-нормальному, а во-вторых, сам код никаких мега свежих идей не содержит. Лучше заархивируй папку с проектом (только удали пока что екзешник, всё равно потом перекомпилировать), и выложи архив на http://www.webfile.ru
Мы все очень просим. :)
← →
Германн © (2007-12-08 16:11) [22]
> turbouser © (08.12.07 15:49) [18]
>
>
> > end; erd;end;
>
> Я аж испугался за свое зрение 8-()
>
Тут не за зрение бояться следует :)
← →
b86 (2007-12-08 16:21) [23]Ставлю вопрос чётко! Почему вот здесь
for w:=1 to 29 do
if g[x-1,y]<>a[w] then l:=l-50
он мне отнимает 29 раз 50 от l и как сделать чтобы он отнял один раз в случае не совпадения!
я выложил весь проект ещё раз вам говорю!
← →
Dib@zol © (2007-12-08 16:30) [24]> я выложил весь проект ещё раз вам говорю!
Лжош. Массив G не объявлен, это во-первых. Также, во вторых, не объявлен массив А. Не объявлена переменная OD. Не указано тело процедуры ERD. Продолжать?
> Ставлю вопрос чётко! Почему вот здесь
Именно потому что эти два элемента не равны друг другу. Компьютер не может взять и наврать. Это программист может взять и накосячить, а потом удивляться, почему комп врёт. Тут же ситуация не ясна совершенно, и помоему от толпы энтузиастов, взявшихся тебе помочь, остался я один. У остальных, имхо, не хватило терпения ждать кода для анализа.
Из (1) и (2) делаем однозначный вывод: ВЫКЛАДЫВАЙ ПРОЕКТ!!!
← →
Anatoly Podgoretsky © (2007-12-08 16:31) [25]
> Сделай милость, выложи ВЕСЬ свой проект, а не повыдерганными
> из него кусками код.
Откуда ты видишь повыдергиванный код, его бы компилятор не пропустил, этот код из головы, поэтому зачем нам обсуждать какой то нереальный код?
← →
{RASkov} © (2007-12-08 16:32) [26]> [23] b86 (08.12.07 16:21)
> он мне отнимает 29 раз 50 от l и как сделать чтобы он отнял
> один раз в случае не совпадения!
Break ?for w:=1 to 29 do
if g[x-1,y]<>a[w] then begin
l:=l-50;
Break;
end;
← →
b86 © (2007-12-08 16:37) [27]ВЕСЬ! Как есть!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, Menus, StdCtrls;
type
TForm1 = class(TForm)
Image2: TImage;
Image3: TImage;
Image1: TImage;
Image4: TImage;
Image5: TImage;
Image10: TImage;
Image11: TImage;
Image6: TImage;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Button2: TButton;
Label2: TLabel;
Label3: TLabel;
Button3: TButton;
Label4: TLabel;
procedure Image4Click(Sender: TObject);
procedure Image5Click(Sender: TObject);
procedure Image10Click(Sender: TObject);
procedure Image11Click(Sender: TObject);
procedure form1(Sender: TObject);
procedure Image2Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure dre;
procedure erd;
procedure schet;
procedure reshytka;
procedure vlevo;
procedure vpravo;
procedure naverh;
procedure vniz;
var w,k,x,y,l,t,od:integer;
A:array[1..29] of integer;
G:array[0..10,0..10] of integer;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Image4Click(Sender: TObject);
begin
naverh;
end;
procedure TForm1.Image5Click(Sender: TObject);
begin
vniz;
end;
procedure TForm1.Image10Click(Sender: TObject);
begin
vpravo
end;
procedure TForm1.Image11Click(Sender: TObject);
begin
vlevo;
end;
procedure schet;
begin
dre;
x:=(l div 50) ;
y:=(t div 50);
G[x,y]:=y*11+x+1;
end;
procedure TForm1.form1(Sender: TObject);
begin
od:=15;
reshytka;
end;
procedure dre;
begin
l:=form1.Image2.Left;
t:=form1.Image2.Top;
end;
procedure erd;
begin
form1.Image2.Left:=l;
form1.Image2.Top:=t;
end;
procedure TForm1.Image2Click(Sender: TObject);
begin
schet;
label3.Caption:=inttostr(g[x,y]);
end;
procedure reshytka;
begin
a[1]:=12; a[2]:=13; a[3]:=15; a[4]:=16; a[5]:=17;
a[6]:=96; a[7]:=107; a[8]:=109; a[9]:=110; a[10]:=93;
a[11]:=18; a[12]:=20; a[13]:=21; a[14]:=35; a[15]:=37;
a[16]:=38; a[17]:=39; a[18]:=46; a[19]:=52; a[20]:=53;
a[21]:=54; a[22]:=55; a[23]:=57; a[24]:=68; a[25]:=74;
a[26]:=85; a[27]:=90; a[28]:=91; a[29]:=92;
end;
procedure vpravo ;
begin
schet;
k:=y;
if od<>0 then
begin
if x+1<=10 then
l:=l+50;
end; erd;end;
procedure vlevo;
begin
schet;
reshytka;
k:=y;
if od<>0 then
begin
if x-1>=0 then // если поле не кончается, то
begin
for w:=1 to 29 do
if a[w]<>g[x-1,y] then l:=l-50;
form1.Label1.Caption:=inttostr(g[x,y]);
end;
end;erd;end;
procedure naverh;
begin
schet;
w:=x;
if od<>0 then
begin
if y-1>=0 then
t:=t-50;
end;erd;end;
procedure vniz;
begin
schet;
w:=x;
if od<>0 then
begin
if y+1<=10 then
t:=t+50;
end;erd;end;
procedure TForm1.Button2Click(Sender: TObject);
begin
label1.caption:=inttostr(image2.Left);
end;
end.
← →
Германн © (2007-12-08 16:38) [28]
> Ставлю вопрос чётко! Почему вот здесь
> for w:=1 to 29 do
> if g[x-1,y]<>a[w] then l:=l-50
> он мне отнимает 29 раз 50 от l и как сделать чтобы он отнял
> один раз в случае не совпадения!
>
<telepator>
Потому что либо g, либо A, либо и то и другое переменные вещественного типа.
</telepator>
← →
Германн © (2007-12-08 16:47) [29]
> procedure form1(Sender: TObject);
:)))
← →
{RASkov} © (2007-12-08 16:50) [30]> [28] Германн © (08.12.07 16:38)
>
> > Ставлю вопрос чётко! Почему вот здесь
> > for w:=1 to 29 do
> > if g[x-1,y]<>a[w] then l:=l-50
> > он мне отнимает 29 раз 50 от l и как сделать чтобы он
> отнял
> > один раз в случае не совпадения!
> >
>
> <telepator>
> Потому что либо g, либо A, либо и то и другое переменные вещественного типа.
> </telepator>
???
Если это было бы так, то не было бы и этого
он мне отнимает 29 раз 50 от l
Тут вообще синтаксис не пустит у в/чисел нет индексов... как и у целочисленных....
> [27] b86 © (08.12.07 16:37)
См [26]
?
> [29] Германн © (08.12.07 16:47)
Я не ошибся в [20].... это шифрация кода )
Form1.form1 - сильно :)
:о)
← →
b86 (2007-12-08 16:51) [31]
> > procedure form1(Sender: TObject);
И чЁ?
← →
Dib@zol © (2007-12-08 16:54) [32]> И чЁ?
И пошли тупые наезды...
Юзай Break, как было тебе сказано умными людьми, и згинь с глаз долой %-)
← →
Anatoly Podgoretsky © (2007-12-08 16:56) [33]> b86 (08.12.2007 16:37:27) [27]
Весь код не значит весь, а только относящийся к проблеме.
← →
b86 (2007-12-08 16:56) [34]я не наеэжаю! я не понимаю! Спасибо вам большое, чт о со мной возитесь, но ведь не получается! с Break не работает! он как работает?
← →
Dib@zol © (2007-12-08 16:58) [35]Где не получается? У меня всё отлично бегает назад:
procedure vlevo;
begin
schet;
reshytka;
k:=y;
if od<>0 then
begin
if x-1>=0 then // если поле не кончается, то
begin
for w:=1 to 29 do
if a[w]<>g[x-1,y] then begin
l:=l-50;
break;
end;
form1.Label1.Caption:=inttostr(g[x,y]);
end;
end;erd;end;
← →
b86 (2007-12-08 17:05) [36]у меня image2 стоит в том положение где не может двигаться, а он двигается! Как break работает?
← →
{RASkov} © (2007-12-08 17:06) [37]> [36] b86 (08.12.07 17:05)
> Как break работает?
Только не говори что и у тебя справки нет :(
← →
b86 (2007-12-08 17:07) [38]нету. я методом тыка развиваюсь. почему он пропускает l:=l-50?
← →
Dib@zol © (2007-12-08 17:09) [39]Break заставляет цикл прекратиться на текущем такте, и поэтому твоя процедура не может пройти по всем элементам массива.
ЗЫ И вообще: что ты такое пишешь? По-моему, эта реализация далека от идеала. Скажи что ты делаешь, авось дадим какой-нить ценный совет.
← →
{RASkov} © (2007-12-08 17:12) [40]for n = 0 to 10 do begin
if n=10 then Break; //Немедленный выход из цикла
if n<5 then Continue; //Переход сразу к концу текущего шага цикла
< Этот код будет выполняться при N>=5 и n<10 >
end;
Так в реале не делается, можно было и границы циклу сделать, но для примера....
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.006 c