Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.06;
Скачать: CL | DM;

Вниз

массив   Найти похожие ветки 

 
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;
Так в реале не делается, можно было и границы циклу сделать, но для примера....


 
b86   (2007-12-08 17:13) [41]

я пишу игружку. g[x,y] положение на поле героя. a[w] массив стен, который герой пройти не может. вот и получается, что при
for w:=1 to 29 do
            if a[w]<>g[x-1,y] then begin
             l:=l-50;
             break;
            end;
он залазит на стену. вот.


 
Германн ©   (2007-12-08 17:16) [42]

Скоро и Расков с Дибазолом туда залезут с горя :)


 
b86   (2007-12-08 17:16) [43]


> Скоро и Расков с Дибазолом туда залезут с горя :)

очень смешно


 
Dib@zol ©   (2007-12-08 17:17) [44]

procedure vlevo;
var
 collide : boolean;
begin
collide:=false;
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 collide:=true;
 if not collide then dec(l, 50);
end;
end;erd;end;

Так пойдёт?


 
b86   (2007-12-08 17:18) [45]

dec(l, 50);- это что?


 
Dib@zol ©   (2007-12-08 17:19) [46]

всё равно что l:=l-50; только текста меньше, и работает быстрее.

ЗЫ Ну как, работает наконец???


 
Anatoly Podgoretsky ©   (2007-12-08 17:19) [47]

> Dib@zol  (08.12.2007 17:17:44)  [44]

> Так пойдёт?

Ты его с ума сведешь.


 
{RASkov} ©   (2007-12-08 17:21) [48]

> [38] b86   (08.12.07 17:07)
> нету. я методом тыка развиваюсь

Методом тыка - это конечно хорошо)
Но начни с основ.... хотябы оформление кода делай читабельным.... глобальные переменные - зло, особенно с такими именами как у тебя, вот догадайся, что значт G...
А имена объектам(компонентам), ....научись давать "правильные" имена - это большой плюс в отладке.

> [42] Германн ©   (08.12.07 17:16)

Не дождетесь :)
Сегодня, да и обычно, у меня настроение мирное )


 
b86   (2007-12-08 17:25) [49]


> Так пойдёт?

он не ходит влево совсем.


 
{RASkov} ©   (2007-12-08 17:28) [50]

> [49] b86   (08.12.07 17:25)
> он не ходит влево совсем.

Да он просто - Правельный весь :)


 
{RASkov} ©   (2007-12-08 17:29) [51]

> Правельный

Угу... как у меня правописание:)


 
Германн ©   (2007-12-08 17:34) [52]


> {RASkov} ©   (08.12.07 17:29) [51]

"У меня правильнописание хромает. Оно хорошее, но хромает."
(с) Винни Пух


 
Dib@zol ©   (2007-12-08 17:40) [53]

Короче, счас я (дописываю уже) выложу сюда свою МЕГА ИГРУЛЮ про лабЕринт :) Ибо надоело уже ;)


 
b86   (2007-12-08 17:42) [54]

Блин! Заработало! Всем спасибо! тока я с этим не разобрался!
if a[w]=g[x-1,y] then collide:=true;
if not collide then dec(l, 50);
обьясните пожалуйста и всё! надеюсь!!!


 
{RASkov} ©   (2007-12-08 17:43) [55]

> [53] Dib@zol ©   (08.12.07 17:40)

Все-таки спёр идею.... :)


 
b86   (2007-12-08 17:43) [56]

Отдельное спасибо Dib@zolу


 
b86   (2007-12-08 17:44) [57]

{RASkov} тебе тоже большой РАХМАТ


 
{RASkov} ©   (2007-12-08 17:51) [58]

> [54] b86   (08.12.07 17:42)

тогда можно сделать так:
....
for w:=1 to 29 do if a[w]=g[x-1,y] then Exit;
Dec(l, 50);
end;


> [57] b86   (08.12.07 17:44)

ню-ню... тебе того же )


 
Dib@zol ©   (2007-12-08 17:52) [59]

http://webfile.ru/1632789

Вощем вот :)

Картинку персонажа найти не смог так что ногами не бейте =)


 
_Denis_ ©   (2007-12-08 18:33) [60]


> Картинку персонажа найти не смог так что ногами не бейте
> =)

Маладэц, Dib@zol! Так держать! NFS отдыхает :D



Страницы: 1 2 вся ветка

Текущий архив: 2008.01.06;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.015 c
2-1196783184
MMstep
2007-12-04 18:46
2008.01.06
Сохранение данных


2-1197135168
ученик
2007-12-08 20:32
2008.01.06
Помогите с маской для MaskEdit


15-1196426548
Автор
2007-11-30 15:42
2008.01.06
О разделе "Статьи"


15-1196661516
slomalsa_comp
2007-12-03 08:58
2008.01.06
Не крутится винчестер SATA :(


2-1197224693
slavon
2007-12-09 21:24
2008.01.06
Создание массива компонентов в real-time