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



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

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

Наверх




Память: 0.58 MB
Время: 0.015 c
2-1197288574
alshtam
2007-12-10 15:09
2008.01.06
firbird


2-1197042910
Zheksik
2007-12-07 18:55
2008.01.06
Почему 0.20 <= 0.20 ложь???


3-1188552430
DmitriyG.
2007-08-31 13:27
2008.01.06
Проблемы с записью изменений TClientDataSet в базу


2-1197352608
Alexandr Malygin
2007-12-11 08:56
2008.01.06
арифметика


15-1196689348
Сергей М.
2007-12-03 16:42
2008.01.06
bash