program Index1; type { egy azonositoban (ld. TEmber vagy Emberek) a kezdo nagy T betu arra utal, hogy az egy adat Tipust jelento azonosito. (az azonositok (identifier) azok a szavak amelyeket te adod valami programozasi elem nevek. pl: valozok, konstansok tipusok (asszem tobb nincs)) } { egy ember adatai } TEmber = record Nev: string[30]; { ez csaj/faszi neve } Kor: integer; { kora (tudod: -32768 .. 32767) } end; { emberek listaja } TEmberek = array[1..10] of TEmber; var Emberek: TEmberek; { keszitunk egy konkret listat } Ember1, Ember2: TEmber; { egy-ket hely kell emberek ide-oda pakolasahoz } EmberekSzama: integer; { ennyi embert tartunk epp nyilvan } i: integer; { mindenfele szamlalgatashoz } procedure Beolvasas; begin { az emberek listajanak beolvasasa } EmberekSzama := 0; { ennyi emberunk van most } repeat Write('Nev: '); { megmutatjuk, hogy mit kerdezunk } ReadLn(Ember1.Nev); { varjuk ra a valaszt, az embernek a nevet } if Ember1.Nev <> '' then { ha meg nem fejezzuk be a listat, azaz } begin { irtunk be valami nevet, akkor } Write('Kor: '); { megmutatjuk, hogy mit kerdezunk } ReadLn(Ember1.Kor); { varjuk ra a valaszt, az ember korat } Inc(EmberekSzama); { most mar egyel tobb emberunk van } Emberek[EmberekSzama] := Ember1; { berakjuk ot a lista vegere } end; until Ember1.Nev = ''; end; procedure Listazas; begin { ellenorzeskepp kilistazzuk uuket } for i := 1 to EmberekSzama do { az elsotol az utolsoig } begin WriteLn(Emberek[i].Nev, ' ', Emberek[i].Kor); end; end; procedure Rendezes; var Csere: boolean; { itt jelezzuk, hogy tortent-e meg mozgolodas, } { azaz helyCSERE } begin repeat Csere := False; { jelezzuk, hogy meg senki nem mozdult a helyerol ebben a menetben } for i := 1 to EmberekSzama - 1 do begin if Emberek[i].Nev > Emberek[i + 1].Nev then { ha az i-edik } begin { ember neve az ABC szerint kesobb van mint az utana kovetkezoe (az i+1-edike), akkor megcsereljuk uket } Ember1 := Emberek[i]; { felrerakjuk az i-ediket } Emberek[i] := Emberek[i + 1]; { a helyere allitjuk az i+1-ediket } Emberek[i + 1] := Ember1; { a felreallitottat betuszkoljuk az } { uj helyere, az i+1-edik helyre } { ok ketten most mar jo sorrendben jonnek. a kovetkezo ket ember akiket majd sorbarakunk, az i+1-edik es az i+2-edik. vagyis, ha egyel odebbrol az i+1-edik helyrol nezzuk akkor megint csak az (i+1)-edik es az (i+1)+1-edik. vagyis a cserelgeto algoritmus ugyan ugy mukodik majd rajuk is, de ezt hiaba is magyaraznam tovabb, tul evidens szamomra ahhoz, hogy ertelmesen le tudjam irni. de ennyi kommentet nem szabad irni mer elveszik kozte a program, ugyhogy nyugodtan torold is ki ezeket a sorokat az attekinthetoseg kedveert } Csere := True; { jelezzuk, hogy csinaltunk helycseret, marpedig akkor ujra at kell nezni a mindenkit, hogy sorrendben vannak-e mar } end; end; until not Csere; { addig nezegetjuk a gyerekeket, amig mar nem kell } { helyet csereltetnunk koztuk } end; begin Beolvasas; { celszeru nevnek c,b,a-t beirni a gyors proba kedveert } Rendezes; { ennyivel lett hosszabb a foprogram } Listazas; end.