Kezdőoldal » Számítástechnika » Programozás » Pascal programkód. Valaki...

Pascal programkód. Valaki rátudna nézni, hogy lehet-e rövidebben megoldani a feladatot?

Figyelt kérdés

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?



2015. ápr. 6. 15:17
1 2 3 4
 31/33 tabaki ***** válasza:

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.

2015. ápr. 7. 14:10
Hasznos számodra ez a válasz?
 32/33 anonim válasza:

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!

2015. ápr. 7. 15:07
Hasznos számodra ez a válasz?
 33/33 tabaki ***** válasza:

É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:

[link]

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:

[link]

2015. ápr. 7. 22:23
Hasznos számodra ez a válasz?
1 2 3 4

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!