12. juni 2002 - 14:03Der 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å?
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
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.
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;
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;
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.))
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
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.
Synes godt om
Ny brugerNybegynder
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.