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?
Az is valami, ha már segíteni nem tudtunk :(
Kár, hogy most dolgoznom kell, azért kérdeznék még ezt-azt.
Végül megkaptam, amit kerestem. Igazából ez a case-s megoldás nem jutott eszembe (# 29). De akkor az is kiderült, hogy a Pascal sokkal egyszerűbben is meg tudja oldani
(Read(f, tomb[i].ho, tomb[i].hp,...)
Még egyszer nagyon köszönöm!
Én már nem tudom követni, ki kinek köszön és mit, de szerintem SimkoL volt itt az igazi james, aki rávilágított, hogy az agyonbonyolított és értelmetlen betűnevekkel súlyosbított beolvasási rituálé helyett elég a szimpla Read().
Egy árnyalatnyit módosítottam a recordján és a kiíratáson:
Nota bene, ebből az eredeti problémát jelentő beolvasás ennyi:
while not Eof(f) do
begin
Inc(i);
Read(f, tomb[i].ho, tomb[i].hp, tomb[i].hmp, tomb[i].bo, tomb[i].bp, tomb[i].bmp, tomb[i].t);
end;
Azt hiszem, ez nevezhető rövidítésnek ;)
Továbbá összekombináltam a programját az én tömbös recordommal, itt a hibrid:
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!