Avatar billede velle Nybegynder
12. juni 2002 - 14:03 Der er 15 kommentarer og
1 løsning

Mange loops inden i hinanden

type
  minstreng = String[8];
...

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Array[1..8] of byte;
  j: integer;
  f: file of minstreng;
  Temp: minstreng;
begin
AssignFile(f,'talfil.dat');
Rewrite(f);

for i[1]:=0 to 1 do
for i[2]:=0 to 1 do
for i[3]:=0 to 1 do
for i[4]:=0 to 1 do
for i[5]:=0 to 1 do
for i[6]:=0 to 1 do
for i[7]:=0 to 1 do
for i[8]:=0 to 1 do
  begin
  Temp:= IntToStr(i[1]);
  for i:=2 to 8 do
    Temp:= Temp + IntToStr(i[j]);
  Write(f,temp);
  end;

Close(f);
end;

Sådan et program ville jeg gerne have lavet! Altså det skal skrive alle muligheder for en byte. Men det kan man ikke, fordi Delphi ikke vil køre et loop med en arrayværdi (tror jeg da). Det synes jeg ikke er ret smart, fordi alternativet bliver at jeg skal lave 8 i-variabler. Og i blokken skal jeg skrive Temp:= IntToStr(i1)+IntToStr(i2)...+IntToStr(i8);

Det er måske lige til at overleve i dette program. MEn jeg skal bruge denne metode til et andet program (der giver lidt mere mening :] ) noget hvor den mulighed ikke dur.

Jeg tænkte om der var en anden måde at ordne dette problem på?

VH Velle
Avatar billede athlon-pascal Juniormester
12. juni 2002 - 14:06 #1
for i:=2 to 8 do //erstattes med:
for j:=2 to 8 do
Avatar billede athlon-pascal Juniormester
12. juni 2002 - 14:06 #2
Svar.
Avatar billede athlon-pascal Juniormester
12. juni 2002 - 14:07 #3
Altså:
  for j:=2 to 8 do //det er her jeg har rettet!
    Temp:= Temp + IntToStr(i[j]);
Avatar billede martinlind Nybegynder
12. juni 2002 - 14:19 #4
Man tæller IKKE et array op, men derimod det index man bruger til at indexere sig ind i array'et med. Så det nok noget mere grundlæggende du ikke har fået helt fat i, prøv evt. at kigge lidt i onlinehjælpen under syntax, var's og typer

/Martin
Avatar billede martinlind Nybegynder
12. juni 2002 - 14:21 #5
VAR
  Cnt : Interger;
  Str : String;
begin
  Str := '';
  for Cnt := 0 to 255 do Str := Str + Chr(Cnt) + #13#10;
  ShowMessage(Str);
end;
Avatar billede velle Nybegynder
12. juni 2002 - 14:38 #6
nej nej!

Det er en ren fejl at jeg er kommet til at skrive i inden i blokken, der skulle have stået j.

til Martin:

Jeg vil heller ikke "tælle et array op" men jeg vil tælle de enkelte integerværdier i Array'et op. Det er jo trods alt integer værdier, og jeg synes at de burde kunne tælles op lige så vel som en almindelig integervariabel.

Det smarte ved at bruge ArrayVærdier, som jeg har gjort er, at jeg kan bruge et loop inden i blokken til at skrive en streng over hvad de forskellige "loops i-værdier" (pladser) har af værdi.

Håber I forstår.
Avatar billede martinlind Nybegynder
12. juni 2002 - 14:46 #7
Sådan  ???

VAR
  Cnt : Integer;
begin
  for Cnt := Low(I) to High(I) do
    I[Cnt] := I[Cnt] + 7; 
end;
Avatar billede velle Nybegynder
12. juni 2002 - 15:24 #8
nej! jeg tror ikke rigtigt jeg kan forklare det bedre.
Avatar billede hreiff Nybegynder
12. juni 2002 - 15:36 #9
Det her virker hos mig:

procedure TForm1.FormCreate(Sender: TObject);
var
  i: array[1..2] of byte;
begin
  for i[1]:=1 to 2 do
    for i[2] := 1 to 2 do
      showmessage(inttostr(i[1])+' '+inttostr(i[2]));
end;
Avatar billede hreiff Nybegynder
12. juni 2002 - 15:41 #10
når du bruger closefile i stedet for close , og udskifter i med j virker det (hos mig)
Avatar billede hreiff Nybegynder
12. juni 2002 - 15:42 #11
dvs No problemos med det her:
(der laves en 3kb fil)

type
  minstreng = String[8];

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Array[1..8] of byte;
  j: integer;
  f: file of minstreng;
  Temp: minstreng;
begin
AssignFile(f,'talfil.dat');
Rewrite(f);

for i[1]:=0 to 1 do
for i[2]:=0 to 1 do
for i[3]:=0 to 1 do
for i[4]:=0 to 1 do
for i[5]:=0 to 1 do
for i[6]:=0 to 1 do
for i[7]:=0 to 1 do
for i[8]:=0 to 1 do
  begin
  Temp:= IntToStr(i[1]);
  for j:=2 to 8 do
    Temp:= Temp + IntToStr(i[j]);
  Write(f,temp);
  end;

Closefile(f);
end;
Avatar billede velle Nybegynder
12. juni 2002 - 16:06 #12
Det virker ikke hos mig!!! For hver af "for-linierne" siger den:

[Error] Unit1.pas(36): For loop control variable must be simple local variable

Jeg bruger Borland Delphi Enterprise 6, hvad bruger du?

(alle de andre fejl: i der skulle have været j og Close der skulle have været CloseFile, er fikset (jeg skrev det direkte ind på eksp., og derfor opdagede jeg ikke de fejl inden jeg postede det.))
Avatar billede hreiff Nybegynder
12. juni 2002 - 16:35 #13
Jeg har den første Delphi her. (1)
Det er nok fordi den er så primitiv at det virker.
Rart at se at der er visse fordele ved ikke at opdatere i tide og utide.

Du kan jo prøve med

type
  r = record
    i: byte;
  end;
var
  i: array[1..8] of r


for i[1].i := 0 to 1 do

osv.

det er måske en mere simpel variabel??
Avatar billede hreiff Nybegynder
12. juni 2002 - 16:36 #14
(det virker - også - hos mig)
Avatar billede velle Nybegynder
12. juni 2002 - 17:26 #15
Jeg har ikke lige prøvet med record-løsningen, men jeg gør det nok senere. Men jeg må vel hellere acceptere :-) når det nu virker for dig.

VH Velle
Avatar billede hreiff Nybegynder
13. juni 2002 - 13:39 #16
Man skal vel kun give point hvis man får løst sit problem ???
Hvis det ikke virker må du lige sige til - så får du dine point tilbage.
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