Pascal programkód. Valaki rátudna nézni, hogy lehet-e rövidebben megoldani a feladatot?
A feladat az volt, hogy egy szöveges állományból olvassunk be egy-vagy két számjegyű számokat, amelyeket szóközök választanak el egymástól.
Az én megoldásom:
program project12345;
const c=100;
type
q=record
ho:integer;
hp:integer;
hmp:integer;
bo:integer;
bp:integer;
bmp:integer;
t:integer;
end;
tomb=array[1..c] of q;
var
r,i,j,d:integer;
f:text;
k:tomb;
s:string;
begin
assign(f,'hivasok.txt');
reset(f);
i:=1;
while not eof(f) do begin
readln(f,s);
d:=0;
r:=1;
val(COPY(S,d,r), (k[i].ho),j);
if ord(s[r+1])<>32 then begin
r:=2;
val(COPY(S,d,r), (k[i].ho),j);
inc(d);
end;
val(COPY(S,3+d,r), (k[i].hp),j);
if j<>0 then begin
r:=1;
val(COPY(S,3+d,r), (k[i].hp),j);
end;
if ord(s[3+d+1])<>32 then begin
r:=2;
val(COPY(S,3+d,r), (k[i].hp),j);
inc(d);
end;
val(COPY(S,5+d,r), (k[i].hmp),j);
if j<>0 then begin
r:=1;
val(COPY(S,5+d,r), (k[i].hmp),j);
end;
if ord(s[5+d+1])<>32 then begin
r:=2;
val(COPY(S,5+d,r), (k[i].hmp),j);
inc(d);
end;
val(COPY(S,7+d,r), (k[i].bo),j);
if j<>0 then begin
r:=1;
val(COPY(S,7+d,r), (k[i].bo),j);
end;
if ord(s[7+d+1])<>32 then begin
r:=2;
val(COPY(S,7+d,r), (k[i].bo),j);
inc(d);
end;
val(COPY(S,9+d,r), (k[i].bp),j);
if j<>0 then begin
r:=1;
val(COPY(S,9+d,r), (k[i].bp),j);
end;
if ord(s[9+d+1])<>32 then begin
r:=2;
val(COPY(S,9+d,r), (k[i].bp),j);
inc(d);
end;
val(COPY(S,11+d,r), (k[i].bmp),j);
if j<>0 then begin
r:=1;
val(COPY(S,11+d,r), (k[i].bmp),j);
end;
if ord(s[11+d+1])<>32 then begin
r:=2;
val(COPY(S,11+d,r), (k[i].bmp),j);
inc(d);
end;
readln(f, k[i].t);
inc(i);
end;
close(f);
readln;
end.
Nem lehetne valami ciklussal lerövidíteni?
"Hogyan kellene..."
Igen, érthető, hogy erre vagy kíváncsi, de pont ahhoz kellene az idő, hogy ebből a tohuvabohuból kihámozzuk, hogy mit akarsz egyáltalán. Hacsak SimkoL ide nem téved addig, nem hiszem, hogy más kedvet érezne erre az önkínzásra. Légy türelemmel.
Itt egy rövidebb verzió: [link]
Free Pascalban készült. A rekordodban a t elemet nem igen tudtam hova tenni, így bár benne hagytam, de nem használtam fel. Ha konkrétabb feladatleírást adsz lehet, hogy szebben is meg lehet oldani.
Hazaértem:) A kód láttán azt hiszem először, hogy sok bort ittam. Akkor egy pár kérdés:
- ha egy sor hat számot tartalmaz miért hét mező van a rekordban
- kell-e egyáltalán a rekord típusú tömb, nem elég egy sima tömbbe 'benyalni' és 'reptiben' számolni ha szükség van rá, hogy hányadik sor
- lehet-e a Free Pascal 'előnyeit' kihasználni
Hirtelen ennyi.
A kód a 2006-os érettségi feladatsor utolsó feladatának [link]
egy sajátos megoldásának egy részlete. A lényeg csak annyi lett volna, hogy hogyan lehet megoldani, hogy a beolvasott számjegyről nem tudjuk, hogy egy-vagy két számjegyű-e. A válaszokat köszönöm. Sajnos az alternatív megoldás logikáját nem értem, mert olyan függvényeket használ, amelyek nem tudom, hogyan működnek, de a ma estémet azzal töltöm, hogy utánuk nézek.
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!