- Fájlformátumok a gyakorlatban: ProRes, H.265, AV1
- "3D-s" hővezető csövekkel jön a Cooler Master legfrissebb CPU-hűtője
- Olcsóbb fajtájúnak ígérkező Team Group SSD a PCI Express 5.0-s halmazban
- Több memóriát kapott az RTX PRO 5000 új kiadása
- Obsbot blog: 4K-s produkciós kamera professzionális babérokra törőknek
- Milyen billentyűzetet vegyek?
- AMD vs. INTEL vs. NVIDIA
- Fejhallgató erősítő és DAC topik
- Powerbank topik
- Fujifilm X
- eGPU tapasztalatok
- OLED TV topic
- Samsung Galaxy Tab S6 Lite 10.4 - az, ami
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- "3D-s" hővezető csövekkel jön a Cooler Master legfrissebb CPU-hűtője
Ú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]
Új hozzászólás Aktív témák
- Bomba ár! HP ProBook 430 G3 - i3-6GEN I 4GB I 128SSD I HDMI I 13,3" HD I Cam I W10 I Garancia!
- Bomba ár! HP ProBook 430 G5 - i3-7GEN I 4GB I 128GB SSD I HDMI I 13,3" FHD I Cam I W11 I Garancia!
- Bomba ár! HP EliteBook 845 G11 - Ryzen 5 8540U I 16GB I 512SSD I 14,1" Touch I Cam I W11 I NBD Gari!
- Bomba ár! HP EliteBook 845 G10 - Ryzen 5 7540U I 16GB I 512SSD I 14,1" Touch I Cam I W11 I NBD Gari!
- Bomba ár! HP EliteBook 845 G9 - Ryzen 5 6650U I 16GB I 512SSD I 14,1" Touch I Cam I W11 I NBD Gari!
- LG 27GR93U-B - 27" IPS - UHD 4K - 144Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDR 400
- Dell XPS 13 9370 - 9380 UHD touch, 16GB RAM, 256-512GB SSD, jó akku, szép állapot, számla, garancia
- Apple MacBook Pro 13" 2019 256/8GB Akku:40 ciklus! Magyar
- Bomba ár! HP Probook 440 G10 - i3-1315U I 16GB I 256SSD I 14" FHD I W11 I Cam I Garancia!
- ÚJ AKKU!!! Ár/ÉRTÉK BAJNOK! Dell Latitude 5330 i3-1215U 6mag! 16GB 512GB 13.3" FHD 1 év gar
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő