Avatar billede agg-zeus Nybegynder
05. november 2003 - 17:25 Der er 26 kommentarer og
1 løsning

Cleare et array !

Jeg har følgende procedure der skal sikre sig at alle værdierne i array'et har 0:

procedure TForm1.FormCreate(Sender: TObject);
Type
  k = array[0..60,0..60] of integer;
var
  kk: k;
  m,n: Integer;
begin
  a:= 300;
  b:= 300;
  timer1.Enabled:= False;
  timer2.enabled:= False;
  timer3.enabled:= False;
  timer4.enabled:= False;

    for n:= 0 to 60 do
    begin
    for m:= 0 to 60 do
      begin
      kk[n,m] := 0;
      end;
    end;

end;


Mit problem er bare at der er langt fra alle værdierne der bliver 0. Mange af dem bliver sat til nogle underlige tal jeg ikke ved hvor kommer fra!
Har jeg gjort noget galt, eller er der en anden bedre måde til at 'nulstille' et array ?
Avatar billede Slettet bruger
05. november 2003 - 17:30 #1
prøv med:

FillChar(k, SizeOf(k), 0);
Avatar billede agg-zeus Nybegynder
05. november 2003 - 17:33 #2
i stedet for det andet ? for hvis jeg gør det så siger den:

'(' expected but ',' found

og den henviser til det første komma !
Avatar billede Slettet bruger
05. november 2003 - 17:33 #3
Eller måske:

ZeroMemory(@k, SizeOf(k));
Avatar billede Slettet bruger
05. november 2003 - 17:34 #4
Hmm.. prøv det her:

procedure TForm1.FormCreate(Sender: TObject);
Type
  k = array[0..60,0..60] of integer;
var
  kk: k;
  m,n: Integer;
begin
  a:= 300;
  b:= 300;
  timer1.Enabled:= False;
  timer2.enabled:= False;
  timer3.enabled:= False;
  timer4.enabled:= False;

  ZeroMemory(@k, SizeOf(k));
end;
Avatar billede doc404 Novice
05. november 2003 - 17:40 #5
FillChar(kk,SizeOf(k),0) er helt fin...

hejhej >> du angav typen som 1st parameter ;-)
Avatar billede Slettet bruger
05. november 2003 - 17:42 #6
Ups... havde ik set det var en type :-)
Avatar billede agg-zeus Nybegynder
05. november 2003 - 17:44 #7
nu godtager den da koden, men nu brokker den sig over:

function timershift(t1,t2,t3,t4: boolean) : boolean;
begin

  timer1.enabled:= t1;
  timer2.enabled:= t2;
  timer3.enabled:= t3;
  timer4.enabled:= t4;

end;

Den siger: Undeclared Identifier: 'Timer1' osv.

hvorfor dog det ?
Avatar billede Slettet bruger
05. november 2003 - 17:46 #8
Sikker på du ikke er kommet til at slette din timer?? :)
Avatar billede agg-zeus Nybegynder
05. november 2003 - 17:47 #9
den brokker dig jo ikke når de er under en procedure... men i stedet for at have det stående så mange steder, så ville jeg lave en funktion, da der er mere overskueligt og nemmere at rette i... Men hvorfor brokker den sig ?
Avatar billede agg-zeus Nybegynder
05. november 2003 - 17:47 #10
timerne er der endnu :p
Avatar billede Slettet bruger
05. november 2003 - 17:49 #11
Er funktionen i en anden unit, for hvis den gør skal du tilføje uniten med timeren til uses.
Avatar billede agg-zeus Nybegynder
05. november 2003 - 17:49 #12
jeg bruger funktionen i dene procedure... men i min kode står funktionen før proceduren...


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

begin


if (key = VK_LEFT) then
begin

  timershift(True,False,False,False);

end;
if (key = VK_RIGHT) then
begin

  timershift(False,True,False,False);
  //timer1.Enabled:= False;
  //timer2.enabled:= True;
  //timer3.enabled:= False;
  //timer4.enabled:= False;
end;
if (key = VK_DOWN) then
begin

  timershift(False,False,True,False);
  //timer1.Enabled:= False;
  //timer2.enabled:= False;
  //timer3.enabled:= True;
  //timer4.enabled:= False;
end;
if (key = VK_UP) then
begin

  timershift(False,False,False,True);
  //timer1.Enabled:= False;
  //timer2.enabled:= False;
  //timer3.enabled:= False;
  //timer4.enabled:= True;
end;

end;
Avatar billede agg-zeus Nybegynder
05. november 2003 - 17:50 #13
jeg har kun 1 unit (Unit1) ...
Avatar billede Slettet bruger
05. november 2003 - 17:52 #14
Prøv med:

function timershift(t1,t2,t3,t4: boolean) : boolean;
begin

  <Formens navn>timer1.enabled:= t1;
  <Formens navn>timer2.enabled:= t2;
  <Formens navn>timer3.enabled:= t3;
  <Formens navn>timer4.enabled:= t4;

end;
Avatar billede Slettet bruger
05. november 2003 - 17:52 #15
Ups lige et punktum mellem <Formens navn> og timeren :P
Avatar billede agg-zeus Nybegynder
05. november 2003 - 17:56 #16
Yes, Takker ! nu virker det.. MEN ! :

kk[3,28] til kk[31,44] og
kk[33,31]til kk[33,60] og
kk[35,31] til kk[42,31] og
kk[49,59] til kk[50,60]
bliver sat til 0, men resten blive sat til alt lige fra -1 til 2.000.000.000

det fatter jeg ikke !
Avatar billede Slettet bruger
05. november 2003 - 18:01 #17
Hmm... lyder lidt underligt. Har du prøvet med ZeroMemory(@kk, SizeOf(kk));
Avatar billede agg-zeus Nybegynder
05. november 2003 - 18:09 #18
procedure TForm1.Timer3Timer(Sender: TObject);
type
k = array[0..60,0..60] of integer;
var
  kk: k;
begin
if (b > 580) then
begin

  timershift(False,False,False,False);
  showmessage('Du er DØD!'+inttostr(a)+','+inttostr(b));
  canvas.brush.Color:= clwhite;
  canvas.Rectangle(0,0,600,600);
  a:= 300;
  b:= 300;

  ZeroMemory(@kk, SizeOf(kk));

end;

b:= b+10;
x:=a div(10);
y:=b div(10);
if (kk[x,y] = 1) then

  timershift(False,False,False,False);
  showmessage('Du er DØD1!'+inttostr(a)+','+inttostr(b));
  canvas.brush.Color:= clwhite;
  canvas.Rectangle(0,0,600,600);
  a:= 300;
  b:= 300;

  ZeroMemory(@kk, SizeOf(kk));

end;

kk[x,y]:=1;
canvas.Brush.color:= clblue;
canvas.pen.color:= clblack;
canvas.rectangle(a,b,a+10,b+10);
end;


Så siger den: Declaration expected but identifier 'kk' found
Det er 5 linie nedefra den brokker sig... hvorfor det ? den brokker sig ikke i de andre 3 timere !
Avatar billede agg-zeus Nybegynder
05. november 2003 - 18:11 #19
er selvfølgelig kommet til at slette 'begin' .... hehe...
Avatar billede agg-zeus Nybegynder
05. november 2003 - 18:13 #20
http://www.gummicelle.dk/project1.exe

Den sætter nogle underlige tal ind i arrayet stadig ! Du kan se det i Filer i programmet... Tryk på piltasterne og se igen på array værdierne... Så har de ændret sig...
Avatar billede Slettet bruger
05. november 2003 - 18:35 #21
Ser lidt underlidt ud...

Det her virker ved mig:

procedure TForm1.Button1Click(Sender: TObject);
type
k = array[0..60,0..60] of integer;
var
kk: k;
I, J: Integer;
begin
ZeroMemory(@kk, SizeOf(kk));
for I := 0 to High(kk) do
for J := 0 to High(kk[I]) do
begin
  ListBox1.Items.Add(IntToStr(I)+':'+IntToStr(J)+ ' ' + IntToStr(kk[I,J]))
end;
end;
Avatar billede agg-zeus Nybegynder
05. november 2003 - 18:50 #22
gør det også hos mig... tror det ligger i at array'et bliver defineret under hver procedure og derved går noget galt ! Det virker sådan... Kan man ikke definere et array globalt for hele programmet ?
Avatar billede agg-zeus Nybegynder
05. november 2003 - 19:06 #23
tænkte på at sætte der her ind øverst i hver timer:

  if (a = 300 AND b = 300) then
    begin
      ZeroMemory(@kk, SizeOf(kk));
    end;

Men så siger den: Incompatible Types
a og b er defineret som Integer !
Avatar billede doc404 Novice
05. november 2003 - 19:41 #24
definer array'et under Private i din form
...
if (a = 300) AND (b= 300) then ..
Avatar billede agg-zeus Nybegynder
05. november 2003 - 20:01 #25
hvordan:

  private
    { Private declarations }
    Type
      k = array[0..60,0..60] of integer;
    var
      kk: k;

?

okay, kan godt se det andet nu.. dummefejl...
Avatar billede Slettet bruger
05. november 2003 - 21:11 #26
Hvis det skal defineres i array'et kan det se sådan ud:

type
  k = array[0..60,0..60] of integer;
  TForm1 = class(TForm)
  ...
  private
    { Private declarations }
    kk: k;
  ...
Avatar billede agg-zeus Nybegynder
05. november 2003 - 21:32 #27
jeg takker mange gange for hjælpen :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester