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
 21/33 tabaki ***** válasza:
Jobb, ha nem szólok bele, mert közben teleírtátok az oldalt, én meg mindig későn futok a hülyeségeimmel. Küzdök inkább a saját változatommal.
2015. ápr. 6. 20:25
Hasznos számodra ez a válasz?
 22/33 ejbenjaro ***** válasza:

„(érettségi feladat, ugyebár -- mellesleg ejbenjaro programja nekem „An unhandled exception occurred at $0806F400 : EStringListError : List index (1) out of bounds $0806F400” hibaüzenettel le is áll)”


tabaki, valószínűleg azért száll el a program, mert te az érettségis adatfájllal teszteled, de a program nem ahhoz íródott, lévén az akkor még nem volt nekem. Szerintem az érettségin nem feltétel, hogy csak az „alaprendszert” használd, tudod ha nem muszáj nem kell újra feltalálni a kereket ;).

2015. ápr. 6. 21:01
Hasznos számodra ez a válasz?
 23/33 tabaki ***** válasza:

@ejbenjaro:


Persze, hogy igazad van, és eszem ágában sincs dilettáns létemre téged kóstolgatni.

Egyrészt valóban az érettségi adatfájlján teszteltem, másrészt már értesültem Kérdező gondjairól a számára új függvényekkel kapcsolatban -- na ja, így könnyű okosnak lenni. Amúgy meg csakugyan senki nem tiltja az érettségizőknek, hogy másoknál okosabbak lévén kiaknázzák a unitokban rejlő lehetőségeket.


Itt közlök egy saját változatot, amelyik bezzeg az adott fájlhoz igazodik, úgyhogy adatellenőrzés nuku, egyébként a megoldásaiban a szuterénszinten szárnyal a unithasználattól való irtózás jegyében. A konstansok ilyetén használatát meg valamiért mulatságosnak találtam... és igen, a telefonszámot tulajdonképpen semmi értelme számmá alakítani, de eddig mindenki megtette, kínos lett volna kilógni a sorból :) Nálam ehhez longint kellett, a sima integerrel mínuszok csúsztak be.


[link]

2015. ápr. 6. 22:47
Hasznos számodra ez a válasz?
 24/33 tabaki ***** válasza:

Módosított változat, remélem, nem néztem el túl sokat. kissé már zizi vagyok:

[link]

2015. ápr. 7. 01:17
Hasznos számodra ez a válasz?
 25/33 anonim ***** válasza:
A rekordba nem kellene betenni egy "szokoz" nevű char típusú változót, amelyet mindenegyes integer olvasás után meg kellene hívni kivéve természetesen az utolsó olvasás után? (Kérdező említette, hogy mindenegyes szám után a fájl szóközt tartalmaz)...
2015. ápr. 7. 05:07
Hasznos számodra ez a válasz?
 26/33 anonim ***** válasza:

Még valami, kritérium hogy egy vagy kétjegyű lehet a szám, tehát háromjegyű már nem? Ekkor elég lenne csak byte változókat használni az olvasáshoz (szerintem), illetve ha negatív számok is lehetnek, akkor a shortint-et.

Előző válaszban írtam hogy szóköz változót kellene bevezetni, nem tudom hogy én értem -e félre a feladatot...

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

@#25:

Ööö... az miért lenne hasznos?

2015. ápr. 7. 07:59
Hasznos számodra ez a válasz?
 28/33 anonim ***** válasza:

SimkoL megoldásába építettem az enyémet, amit az utóbbi két válaszban fejtettem ki, ha -99 és +99 közti intervallumot kell csak átfogni (háromjegyű már nem lehet a szám) akkor ez megfelelő lesz:


program szamla;


type

THivas = record

ho, hp, hmp, bo, bp, bmp, t : shortint;

szokoz : char;

end;


var tomb : array[1..200] of THivas;

f : text;

i : byte = 0;

k : byte;


begin

Assign(f,'c:\hivasok.txt');

Reset(f);

while not Eof(f) do

begin

Inc(i);

Read(f, tomb[i].ho, tomb[i].szokoz, tomb[i].hp, tomb[i].szokoz, tomb[i].hmp, tomb[i].szokoz, tomb[i].bo, tomb[i].szokoz, tomb[i].bp, tomb[i].szokoz, tomb[i].bmp, tomb[i].szokoz, tomb[i].t);

end;

for k := 1 to i do

begin

WriteLn(tomb[k].ho);

WriteLn(tomb[k].hp);

WriteLn(tomb[k].hmp);

WriteLn(tomb[k].bo);

WriteLn(tomb[k].bp);

WriteLn(tomb[k].bmp);

WriteLn(tomb[k].t);

end;

Close(f);

ReadLn;

end.

2015. ápr. 7. 08:00
Hasznos számodra ez a válasz?
 29/33 anonim válasza:

Itt van az eredeti kódod ciklusban, ha még érdekel.



program project12345;

uses crt;

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

b,i,j,d,e: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;

e:=0;

repeat


val(COPY(S,1+2*e+d,1), b,j);

if ord(s[2+2*e+d])<>32 then begin

val(COPY(S,1+2*e+d,2), b,j);


inc(d);

end;

case e of

0:(k[i].ho):=b;

1:(k[i].hp):=b;

2:(k[i].hmp):=b;

3:(k[i].bo):=b;

4:(k[i].bp):=b;

5:(k[i].bmp):=b;

end;

inc(e);

until e=6;

readln(f, k[i].t);

inc(i);

end;


close(f);

readkey;

end.

2015. ápr. 7. 10:13
Hasznos számodra ez a válasz?
 30/33 A kérdező kommentje:
Köszi ,, tanulóprogramozó'' sokat segítettél. A többieknek is nagyon szépen köszönöm, sokat tanultam a kódjaitokból.
2015. ápr. 7. 10:36
1 2 3 4

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

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!