Mi hiányzik ebből az algoritmusból? (FPC)
Dinamikus tömbbel szeretnék megoldani egy feladatot. Deklarálom a dinamikus tömböt, helyet foglalok neki(egy másik változót használok rá, amit folyamatosan növelek) ÉS a feladat végén kiíratom a tömb elemszámát. Na az a hiba hogy exitcode 201, vagyis a deklarálásnál rontottam el valamit, vagy a hely foglalásnál. Nem tudom. Itt a a kód:
Program valami;
Uses Crt;
Var i,j,szam: Longint;
tomb:array of Byte;
oszto,tombmeret: Longint;
Procedure beker;
Begin
Writeln('Kerek egy szamot');
Readln(szam);
Writeln('Melyik szamrendszerbe szeretned atvaltani?');
Readln(oszto);
End;
Procedure atvaltas;
Begin
tombmeret:=0;
j:=0;
Repeat
inc(j);
inc(tombmeret);
SetLength(tomb,tombmeret);
tomb[j]:=szam mod oszto;
szam:=szam div oszto;
Until szam<oszto;
inc(j);
tomb[j]:=szam;
For i:=j downto 1 do
Begin
Case length(tomb[i]) of
10:Write('A');
11:Write('B');
12:Write('C');
13:Write('D');
14:Write('E');
15:Write('F');
Else Write(tomb[i]);
End;
End;
End;
Begin
Clrscr;
beker;
Writeln('A(z) ',szam,', ',oszto,'-es(-as) szamrendszerben:');
atvaltas;
Writeln('Tombmeret: ',Length(tomb));
Readkey;
End.
@16:52 Dinamikus tömbnél nem kell megadni tartományt.
"Case length(tomb[i]) of"
Kapásból nem jó, a tomb[i]-re akkor lenne jó a length ha tomb[i] egy tömb lenne.
Mi nem használtuk a procedure begin end témát. Volt elején BEGIN, végén END oszt kész. Kis nézelődés után rájöttem ,hogy mire való. Szerintem azért ne vezess procedurát mert egyszer használni fogod.
Pascalban is érdemes jelőlni a begin end zárójeleket szóközzel. Minden beginnél az enter után nyomj egy szóközt. A következő enter már ahhoz a bekezdéshez fog igazodni ha jól emlékszem. Így átlátható.
K0szi az infót, nem is tudtam hogy mennyitől indexelődik.
Ez a kódban hogy nézne ki? A fentebb említett programban.
Ez lenne az első "dinamikus tömbös" feladatom. Nem iskolai anyag, csak sokkal szebb megoldás mint amit tanítanak.
Értem én hogy van ahol megvan határozva mekkora tömb elemszáma, ott azt is fogom használni,de ahol nem fix ott ez sokkal szebb mint egy "sokelemű" tömb. K0szi a választ előre is :)
Valahogy így nézne ki:
Program valami;
{$mode objfpc}{$H+}
Uses Crt;
Var
i,j,szam: Longint;
tomb:array of Byte;
oszto,tombmeret: Longint;
Procedure beker;
Begin
Writeln('Kerek egy szamot');
Readln(szam);
Writeln('Melyik szamrendszerbe szeretned atvaltani?');
Readln(oszto);
End;
Procedure atvaltas;
Begin
tombmeret:=0;
j:=0;
Repeat
inc(tombmeret);
SetLength(tomb,tombmeret);
tomb[j]:=szam mod oszto;
szam:=szam div oszto;
inc(j);
Until szam=0;
For i:=length(tomb)-1 downto 0 do
Case tomb[i] of
10:Write('A');
11:Write('B');
12:Write('C');
13:Write('D');
14:Write('E');
15:Write('F');
Else Write(tomb[i]);
End;
End;
Begin
Clrscr;
beker;
Writeln('A(z) ',szam,', ',oszto,'-s szamrendszerben:');
atvaltas;
writeln;
Writeln('Tombmeret: ',Length(tomb));
setlength(tomb,0);
Readkey;
End.
Infó a tömbökről: [link]
Külön a dinamikus tömb: [link]
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!