Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.57 MB
Время: 0.006 c
5-1164729857
Doma
2006-11-28 19:04
2008.01.06
Как узнать всех наследников TForm и TDataModule в проекте?


3-1188540789
pyJIoH
2007-08-31 10:13
2008.01.06
Oracle. COLUMN_NAME, не тот порядок.


3-1188392155
amily
2007-08-29 16:55
2008.01.06
как исправить DBF


15-1196266367
Slider007
2007-11-28 19:12
2008.01.06
С днем рождения ! 28 ноября 2007 среда


2-1197368702
В. Алексей
2007-12-11 13:25
2008.01.06
Сдвиговый регистр в delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский