- Milyen okostelefont vegyek?
- Samsung Galaxy S25 - végre van kicsi!
- iPhone topik
- Samsung Galaxy A54 - türelemjáték
- Okosóra is érkezett az új Honor készülékek mellett
- Még annál is egyedibbé tehetjük a Realme GT 8 Pro-t
- Samsung Galaxy Watch7 - kötelező kör
- Újjáéled a Motorola Moto G100
- Mindenkire rálicitál az új Oppo kameratelefonja
- Apple Watch Ultra - első nekifutás
Új hozzászólás Aktív témák
-
VladimirR
nagyúr
válasz
#16741888 #978 üzenetére
csinalsz egy rekordot az auto adataival, es ket mutatoval
-egyik mutato mutasson a lista legelso elemere, masik a lista kovetkezo elemre (az utolsonal a kovetkezore mutato legyen nil)
-egyik mutato mutasson az elozo, masik a kovetkezo elemre (elso elemnel az elozore, utolso elemnel a kovetkezore mutato mutato erteke legyen nil (ezt reszletezem)
pelda1:
p_listaelem=^listaelem; (* ez lesz az alabbi rekor tipusu mutato *)
listaelem=record
marka:string
tipus:string;
szin:string;
rendszam:string;
gyartaseve:string;
prev:p_listaelem; (* ez mutat az elozo elemre *)
next:p_listaelem; (* ez mutat a kovetkezo elemre *)
end;
pelda2:
p_listaelem=^listaelem; (* ez lesz az alabbi rekor tipusu mutato *)
listaelem=record
marka:string
tipus:string;
szin:string;
rendszam:string;
gyartaseve:string;
first:p_listaelem; (* ez mutat az elso elemre *)
next:p_listaelem; (* ez mutat a kovetkezo elemre *)
end;
lista letrehozasa:
kell egy elem, es egy temp elem, amibe az adatfeltoltes tortenik, s amit majd a listahoz fuzol
var elem=p_listaelem;
temp=p_listaelem;
letrehozzuk, es feltoltjuk a listat (a beolvasas nincs benne):
for i:=1 to 30 do begin
(* marka, tipus, szin, rendszam es gyartaseve valtozok beolvasasa *)
new(temp); (* memoriafoglalas egy listaelem szamara *)
temp^.marka:=marka;
temp^.tipus:=tipus;
temp^.szin:=szin;
temp^.rendszam:=rendszam;
temp^.gyartaseve:=gyartaseve;
if i=1 then (* ha az elso elemet hozzuk letre, vagyis a listank meg ures, nincs aktualis eleme *)
temp^.prev:=nil; (* akkor az elozore mutato mutato legyen nil *)
else begin (* egyebkent *)
temp^.prev:=elem; (* az elozo legyen az aktualis elem *)
elem^.next:=temp; (* az aktualis elem kovetkezoje pedig legyen a jelenlegi *)
end;
temp^.next:=nil; (* mivel jelenleg nincs kovetkezo elem, ezert az legyen nil *)
elem:=temp; (* legyen az ujonnan letrehozott elem az aktualis *)
end;
ugras a lista elejere (addig megyunk, amig nem lesz elozo elem):
while elem^.prev <> nil do
elem:=elem^.prev;
ugras a lista vegere (addig megyunk, amig nem lesz kovetkezo elem):
while elem^.next <> nil do
elem:=elem^.next;
listaelem beszurasa az aktualis elem moge:
new(temp); (* memoria foglalasa az uj listaelemnek *)
temp^.prev:=elem; (* az uj elem elott levo a jelenlegi elem lesz *)
temp^.next:=elem^.next; (* az uj elem utan a jelenlegi elemet koveto elem lesz *)
temp^.prev^.next:=temp; (* az uj elem elott levo elemnek megmondjuk, hogy az uj elem lesz mogotte (tudom, hulyen hangszik) *)
temp^.next^.prev:=temp; (* az uj elem utan jovo elemnek megmondjuk, hogy az uj elem lesz elotte (tudom, ez is) *)
a program vegen illik (kvazi kotelezo) torolni a listankat, felszabaditva ezzel a memoriat:
ehhez eloszor a lista elejere (vagy vegere) kell allnunk (fentebbi kod), es sorbamenni az elemeken, majd mindet torolni
ha elol allunk a kovetkezokeppen torlunk (ha a vegen, akkor a next, es a prev ertelemszeruen felcserelendo)
while elem^.next <> nil do begin
temp:=elem; (* fogjuk az aktualis elemet *)
elem:=elem^.next; (* majd az azt kovetot tesszuk aktualissa *)
dispose(temp); (* vegul felszabaditjuk az elem altal foglalt memoriat *)
end;
mivel ezzel nem toroljuk az utolso elemet (aminel ugye a next nil volt), ezert azt kulon kell torolnunk
dispose(elem);
erdemes egyebkent a tesztelesi szakaszban a program elejen es vegen is megszamolni a szabad memoriat
program elejen:
size:=memavail;
program vegen:
writeln;
writeln(size);
size:=memavail;
writeln(size);
ha a ket ertek nem egyezik, akkor valami gubanc van a kodban: vagy tobb elemet hoztunk letre, mint amennyivel szamoltunk es vagy emiatt, vagy az esetlegesen a torlesnel levo hibabol adodoan kevesebbet toroltunk, mint amennyi van
ekkor erdemes lepesenkent ellenorizni a memoriameretet
megnezzuk, hogy mekkora egy
sizeof(elem);
majd a letrehozas utan is lekerdezzuk a szabad memoriat, es ebbol kivojnuk az elemek szamanak, es azok meretenek szorzatat, es ekkor meg kell kapnunk a kezdetbeni szabad memoria meretet
remelem tudtam seginteni, amr eleg reg pascaloztam, de akkor ugyahogy mentek ezek a dinamikus listak
ha valami kellene meg, vagy ebbol nem tiszta valami (pedig erot vettem magamon, es kommenteztem is), akkor kerdezz nyugodtan
peldaprogi itt => Bovebben: [link] -
Lortech
addikt
válasz
#16741888 #942 üzenetére
Hát ez így elég érdekes kérdés.
(vagy lehet, hogy csak nekem fura
)
Attól függ minek felelteted meg a logikai értékeket.
Pl ha i/h jelenti az igaz/hamist, akkor c:=readkey (var c:char), és egy if c=''i'' then logikai:=true else logikai:=false; szelekcióval oldod meg a megfeleltetést.
szerk: javítva
[Szerkesztve]
Új hozzászólás Aktív témák
- AOC 25 AG251FG 240HZ
- Fujitsu ,15,6",8.gen.i5,világító.bill, 4G LTE,8-32GB/128-512,jó akku,Win.11,szép
- HP,15.6",FullHD,8.gen.core i5 (8X4,0Ghz)8-32GB RAM,256GB-1TB SSD,nagyon jó akku,Win.11,szép
- Újszerű Dell Latitude 7440 -14"FHD+1 IPS - i5-1345U 16GB - 512GB - Win11 - 1 év garancia + Dokkoló +
- 2év Garancia,Lenovo Slim 3,i5 12450H(12x4,4Ghz)15,6"FullHD IPS,Magyar vil.bill,16GBDDR5 RAM,512SSD
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Apple iPhone 13 Pro Max Graphite ProMotion 120 Hz, Pro kamerák 128 GB-100%-3hó gari!
- Telenor 5G Indoor WiFi Router (FA7550) + töltő
- HIBÁTLAN iPhone 13 Pro 128GB Sierra Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3750, 96% Akkumulátor
- HIBÁTLAN iPhone 14 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3093, 91% Akkumulátor
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: Promenade Publishing House Kft.
Város: Budapest