Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

массив [D7]


Страницы:   1 2 3

b86 ©   (2007-12-08 13:33:00) 

привет. у меня у меня в программе сбой, ни как не могу его вычислить.
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] задается какое-то астрономическое число.
помогите, буду очень признателен


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

for n = 0 to 10 do begin
if n=10 then Break; //Немедленный выход из цикла
if n<5 then Continue;  //Переход сразу к концу текущего шага цикла
< Этот код будет выполняться при N>=5 и n<10 >
end;
Так в реале не делается, можно было и границы циклу сделать, но для примера....


Dib@zol   (2007-12-08 17:09:00) [22]

Break заставляет цикл прекратиться на текущем такте, и поэтому твоя процедура не может пройти по всем элементам массива.

ЗЫ И вообще: что ты такое пишешь? По-моему, эта реализация далека от идеала. Скажи что ты делаешь, авось дадим какой-нить ценный совет.


b86   (2007-12-08 17:07:00) [23]

нету. я методом тыка развиваюсь. почему он пропускает l:=l-50?


{RASkov}   (2007-12-08 17:06:00) [24]

> [36] b86   (08.12.07 17:05)
> Как break работает?

Только не говори что и у тебя справки нет :(


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

у меня image2 стоит в том положение где не может двигаться, а он двигается! Как break работает?


Dib@zol   (2007-12-08 16:58:00) [26]

Где не получается? У меня всё отлично бегает назад:

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 16:56:00) [27]

я не наеэжаю! я не понимаю! Спасибо вам большое, чт о со мной возитесь, но ведь не получается! с Break не работает! он как работает?


Anatoly Podgoretsky   (2007-12-08 16:56:00) [28]

> b86  (08.12.2007 16:37:27)  [27]

Весь код не значит весь, а только относящийся к проблеме.


Dib@zol   (2007-12-08 16:54:00) [29]

> И чЁ?
И пошли тупые наезды...
Юзай Break, как было тебе сказано умными людьми, и згинь с глаз долой %-)


b86   (2007-12-08 16:51:00) [30]


> > procedure form1(Sender: TObject);

И чЁ?


{RASkov}   (2007-12-08 16:50:00) [31]

> [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 - сильно :)
:о)


Германн   (2007-12-08 16:47:00) [32]


> procedure form1(Sender: TObject);

:)))


Германн   (2007-12-08 16:38:00) [33]


> Ставлю вопрос чётко! Почему вот здесь
> for w:=1 to 29 do
>              if g[x-1,y]<>a[w] then l:=l-50
> он мне отнимает 29 раз 50 от  l и как сделать чтобы он отнял
> один раз в случае не совпадения!
>

<telepator>
Потому что либо g, либо A, либо и то и другое переменные вещественного типа.
</telepator>


b86   (2007-12-08 16:37:00) [34]

ВЕСЬ! Как есть!

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.


{RASkov}   (2007-12-08 16:32:00) [35]

> [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;


Anatoly Podgoretsky   (2007-12-08 16:31:00) [36]


> Сделай милость, выложи ВЕСЬ свой проект, а не повыдерганными
> из него кусками код.

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


Dib@zol   (2007-12-08 16:30:00) [37]

> я выложил весь проект ещё раз вам говорю!

Лжош. Массив G не объявлен, это во-первых. Также, во вторых, не объявлен массив А. Не объявлена переменная OD. Не указано тело процедуры ERD. Продолжать?

> Ставлю вопрос чётко! Почему вот здесь
Именно потому что эти два элемента не равны друг другу. Компьютер не может взять и наврать. Это программист может взять и накосячить, а потом удивляться, почему комп врёт. Тут же ситуация не ясна совершенно, и помоему от толпы энтузиастов, взявшихся тебе помочь, остался я один. У остальных, имхо, не хватило терпения ждать кода для анализа.

Из (1) и (2) делаем однозначный вывод: ВЫКЛАДЫВАЙ ПРОЕКТ!!!


b86   (2007-12-08 16:21:00) [38]

Ставлю вопрос чётко! Почему вот здесь
for w:=1 to 29 do
             if g[x-1,y]<>a[w] then l:=l-50
он мне отнимает 29 раз 50 от  l и как сделать чтобы он отнял один раз в случае не совпадения!
я выложил весь проект ещё раз вам говорю!


Германн   (2007-12-08 16:11:00) [39]


> turbouser ©   (08.12.07 15:49) [18]
>
>
> > end; erd;end;
>
> Я аж испугался за свое зрение 8-()
>

Тут не за зрение бояться следует :)


Dib@zol   (2007-12-08 16:10:00) [40]

Плин. Сделай милость, выложи ВЕСЬ свой проект, а не повыдерганными из него кусками код. Уверяю тебя, этот так сказать код никто не позарится спереть, так как во-первых всё это делается, простите меня, не через *$пу а по-нормальному, а во-вторых, сам код никаких мега свежих идей не содержит. Лучше заархивируй папку с проектом (только удали пока что екзешник, всё равно потом перекомпилировать), и выложи архив на http://www.webfile.ru

Мы все очень просим. :)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо