Kezdőoldal » Számítástechnika » Programozás » Pascal Lazarus programozás,...

Pascal Lazarus programozás, miért nem írja ki az tömbelemeket?

Figyelt kérdés

program adatbazis;

VAR n,j,uj:integer;

TYPE Tember=record

nev:string;

varos:string;

fizetes:longint;

end;

Procedure beiras(VAR uj:Tember);

begin

write('Nev:',j,':');

readln(uj.nev);

write('varos:',j,':');

readln(uj.varos);

write('Fizetes:',j,':');

readln(uj.fizetes);

end;

VAR a,i,k:integer;

f:textfile;

seged:Tember;

tomb:array[1..20] of Tember;

begin

write('N:');

readln(n);

For j:=1 to n do begin

beiras(tomb[j]);

end;

For j:=1 to n-1 do begin

for k:=2 to n do begin

if tomb[j].nev>tomb[k].nev then

begin

seged:=tomb[j];

tomb[j]:=tomb[k];

tomb[k]:=seged;

end;

end;

end;

assign(f, 'C:\kimenet.txt');

rewrite(f);

writeln(f,n);

for i:=1 to n do begin

writeln(tomb[i].nev);

writeln(tomb[i].fizetes);

writeln(tomb[i].varos);

end;

close(f);

readln;

end.


2018. jan. 8. 21:20
 1/10 anonim ***** válasza:
Mi akar lenni ez az idehányt valami?
2018. jan. 8. 21:39
Hasznos számodra ez a válasz?
 2/10 uno20001 ***** válasza:
Mert nem a fájlba írod ki, hanem a standard kimenetre. Ez kellene: writeln(f, ...);
2018. jan. 8. 21:41
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:
0%
ez melyik program nyelv semmi formája nincs
2018. jan. 8. 21:44
Hasznos számodra ez a válasz?
 4/10 sharkxxx ***** válasza:

  assign(f, 'C:\kimenet.txt');

  rewrite(f);

  writeln(f,n);

  for i:=1 to n do begin

    writeln(f, tomb[i].nev);

    writeln(f, tomb[i].fizetes);

    writeln(f, tomb[i].varos);

  end;

  close(f);

2018. jan. 8. 21:57
Hasznos számodra ez a válasz?
 5/10 tabaki ***** válasza:

Csak én nem értem, hogy mifenét akarsz a beiras procedúrával? Gyanítom, hogy oda egy function kéne, amelynek a visszatérési értéke lenne a tömbelem, amelyet később valahogy így kéne a tömbbe raknod:

for j := 1 to n do tomb[j] := beiras;

Most a procedure beolvas néhány adatot, aztán szevasz, nem csinál velük semmit. Ciklusban.

2018. jan. 8. 22:26
Hasznos számodra ez a válasz?
 6/10 tabaki ***** válasza:

+ Ha az az izé a végén rendezés akar lenni, akkor hajítófát sem ér.


Egy kicsit fésültem a kódodon; Természetesen rengeteg teendő van még hátra, de olyasmit csinál, mint amit megcéloztál, és alkalmas lehet a továbblépésre:

[link]

2018. jan. 9. 01:16
Hasznos számodra ez a válasz?
 7/10 tabaki ***** válasza:

Egyébként az előző kérdésednél SimkoL linkjében minden szükséges ott van. Én megtoldom még egy SimkoL-oldallal, hadd legyen formája is a programjaidnak (igen, a behúzásokat a GyK nyeli le, de akad még csinosítani való):

[link]

Ehhez még a következőt tenném hozzá:

A kód zsúfoltsága a lefordított program méretét semmilyen módon nem befolyásolja, ezért jobb, ha az áttekinthetőség jegyében szellősen, szóközökkel tagolva írod. Ez sok esetben a szerkesztő Keresés és Csere funkcióinak használatát is könnyíti. A begin az utána következő blokkhoz tartozik, értelmesebb azt is külön sorba tördelned. Itt az előző kód helytakarékosabb változata (a Lazarus sorhosszán belül maradva):


const MAXADAT=20;type Tember=record nev:string;varos:string;fizetes:dword;end;

var i,j,adatszam:integer;seged:Tember;tomb:array[1..MAXADAT]of Tember;f:text;

function Beiras:Tember;begin WriteLn(#10#13,j,'. ember');Write(' Nev: ');

ReadLn(beiras.nev);Write(' Telepules: ');ReadLn(beiras.varos);

Write(' Fizetes: ');ReadLn(beiras.fizetes);WriteLn;end;begin i:=0;

Write('Ird be a beolvasando adatok szamat (1-20): ');repeat ReadLn(adatszam);

if(adatszam>0)and(adatszam<=MAXADAT)then Inc(i)else Write('Hibas szám! Ujra: ');

until i>0;for j:=1 to adatszam do tomb[j]:=Beiras;for i:=adatszam-1 downto 1 do

for j:=1 to i do if UpCase(tomb[j].nev)>UpCase(tomb[j+1].nev) then begin

seged := tomb[j];tomb[j] := tomb[j+1];tomb[j+1]:=seged;end;

Assign(f,'kimenet.txt');{$I-}ReWrite(f){$I+};if IOResult=0 then begin

WriteLn(f,adatszam);for i:=1 to adatszam do begin WriteLn(f,tomb[i].nev);

WriteLn(f,tomb[i].fizetes);WriteLn(f,tomb[i].varos);end;Close(f);end else

WriteLn('Hiba! Nem jott letre a kimenet.txt fajl!');ReadLn;end.


Lefordítás után tapasztalsz méretbeli különbséget? Melyiket javítgatnád szívesebben?

2018. jan. 9. 14:19
Hasznos számodra ez a válasz?
 8/10 tabaki ***** válasza:
+ Mi vaan? A Close(f); közepén eltörte a sort? A GyK rejtelmei...
2018. jan. 9. 14:27
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:
Tabak: A hibakezelési képességeiden te is reszelgethetnél egy keveset.
2018. jan. 9. 14:44
Hasznos számodra ez a válasz?
 10/10 tabaki ***** válasza:

@#9:

No igen, a minimum a try/except használata volna, talán tényleg nem sok értelme volt az {$mode objfpc} direktívát kerülgetnem, ráadásul egy ódivatú másiknak a használatával. Az input hibalehetőségeit egyelőre szándékosan hagytam benne, nem akartam egyszerre túl nagy átépítést, meg aztán jusson még Kérdezőnek felfedezni való a szűkebben vett feladaton túl is.

2018. jan. 9. 15:52
Hasznos számodra ez a válasz?

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!