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?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
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!
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
É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 © 2025, 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!