[ query @ 28.05.2005. 19:58 ] @
Aplikaciju sam napravila bez pointer-a i radi, ali za skolu treba da izmjenim sve koristeci pointere. Dodala sam aplikaciju kao zipfile. Verzija Delphi-a je 6. Nadam se da mi neko moze pomoci. Unaprijed hvala. |
[ query @ 28.05.2005. 19:58 ] @
[ bancika @ 29.05.2005. 21:36 ] @
Lepo je to, samo gde ubaciti pointere?
Mozes ti umesto svakog tipa da stavis npr ^Integer pa posle da koristis ^promenljiva, ali ne verujem da si na to mislila :) [ Rapaic Rajko @ 02.06.2005. 15:21 ] @
Kako gde, pa ima record-e, cak i array of records, zar ne?
Medjutim, zamena record-a, i record array-a pointerima na iste zahteva dobro poznavanje pointera. A sem toga, u ovom projektu ima bas podosta posla oko toga, tako da... Rajko P.S. 'Aj napisacu sutra uopsteno kako se koriste pointeri pri radu sa record-ima. Ili vise nije aktuelno ovo pitanje...? [ query @ 02.06.2005. 18:16 ] @
Evo napravila sam sve sa pointerima, ali imam mali problemcica.
Nadam se da ce neko htjeti da pogleda na ovaj zipfile i pomogne mi, stvarno bi mu bila zahvalna. Nego problem je sljedeci: Dodajem novi podatak za dvd-e i kazem ok. Vrati mi se u prethodni formular i doda mi novi podatak, ali odjednom mi zamjeni npr. prvi i drugi record. Malo je tesko objasniti, ali evo malo nekih podataka: lista ---------- a b Odem na Dodaj podatak [Toevoegen] i recimo ubacim sljedeci podatak npr. slovo d i [OK]. Vratim se na prethodni formular gdje mi je lista dobijem sljedeci raspored: Lista ----- b b c Znaci doda mi ovo slovo c, ali mi zamjeni slovo a sa b. Rezulat treba da je: lista ---- a b c A jesam zapetljala, ali nadam se da ce me neko skontati. Unaprijed hvala. [ query @ 03.06.2005. 17:48 ] @
Ima li ovdje ljudi sto se bave sa Delphi-om i hoce pomoci?
Ovdje mi je izgleda problem: Code: lnpNewNode^.lnpPrevious := lnpFront^.lnpPrevious; lnpFront^.lnpPrevious^.lnpNext := lnpNewNode; lnpNewNode^.lnpNext := lnpFront; lnpFront^.lnpPrevious := lnpNewNode; Sta nije u redu sa ovim kodovima? Unaprijed hvala. [ Toyo @ 04.06.2005. 11:12 ] @
Ajde da ti ja malo pomognem.
Promeni sledecu proceduru ovako: Code: procedure TfrmAddChangeDvd.btnOKClick(Sender: TObject); begin crDvd.sTitle := edtTitel.Text; crDvd.iReleaseYear := StrToInt(edtJaar.Text); crDvd.sActor := edtHoofdrolspeler.Text; crDvd.iRunTime := StrToInt(edtSpeelduur.Text); crDvd.iZone := StrToInt(edtZoneNummer.Text); crDvd.sDescription := mmOmschrijving.Text; if toevoegen then begin untDvdData.AddDvds(crDvd); ClearFields; Close end else begin untDvdData.DeleteCurrentDvd; untDvdData.AddDvds(crDvd); ClearFields; Close end; end; Zatim imas gresku prilikom ispisa forme. Iz datoteke ti se ucitavaju 3 sloga a ti ispisujes samo 2. Ta 3 sloga su bila a b b a ti si videla samo a b. Kada si dodala novi elemenat ispisao se i onaj drugi b sto nisi videla da uopste postoji. Problem u toj proceduri je bio u tome da je while petlja izlazila iz ispisa, kada je dosla do zadnjeg elementa a njega nije ispisala. Promeni proceduru ovako: Code: procedure TfrmDVDMngr.ShowForm(Sender :TObject); var sDvdInfo : String; iCurrent: Integer; begin iCurrent := lstbxDVD.ItemIndex; lstbxDVD.Clear; untDvdData.MoveFirst; while not untDvdData.EndOfList do begin untDvdData.GetCurrentDvd(crDvd); sDvdInfo := 'Titel:' + ' ' + crDvd.sTitle + ' ' + 'Jaar van uitgave:' + ' ' + IntToStr(crDvd.iReleaseYear) + ' ' + 'Hoofdrolspeler:' + ' ' + crDvd.sActor + ' ' + 'Speelduur:' + ' ' + IntToStr(crDvd.iRunTime) + ' ' + 'ZoneNummer:' + ' ' + IntToStr(crDvd.iZone); lstbxDVD.Items.Add(sDvdInfo); untDvdData.MoveNext end; if untDvdData.NrOfDvds > 0 then begin untDvdData.GetCurrentDvd(crDvd); sDvdInfo := 'Titel:' + ' ' + crDvd.sTitle + ' ' + 'Jaar van uitgave:' + ' ' + IntToStr(crDvd.iReleaseYear) + ' ' + 'Hoofdrolspeler:' + ' ' + crDvd.sActor + ' ' + 'Speelduur:' + ' ' + IntToStr(crDvd.iRunTime) + ' ' + 'ZoneNummer:' + ' ' + IntToStr(crDvd.iZone); lstbxDVD.Items.Add(sDvdInfo); end; untDvdData.MoveTo(iCurrent); end; Ne znam zasto si radila sa cirkularnom dvostruko povezanom listom. Dosta ti je samo First i First^.Next. Znaci jednostruka lista koja se zavrsava kada je Current = nil Ja bih to sve uradio od pocetka. Nesto mi smrdi da tu ima jos gresaka. E, da kada dodas novi element, mora da osvezis listu, da bi se on prikazao. Nadam se da sam ti malo pomogao. :) Pozdrav. [ query @ 04.06.2005. 15:54 ] @
Hvala ti stvarno mnogo na objasnjenju. Bar neko da se smilovao i posvetio paznju mom problemu. :-)
Sad cu pokusati promjenuti i nadam se da ce raditi. Jos jednom hvalaaaaaaaaaaa. [ query @ 04.06.2005. 19:04 ] @
E super sve radi. Samo gdje da ubacim funkciju Smaller? Treba da mi alfabetski sortira.
Unaprijed hvala. [ Toyo @ 05.06.2005. 12:57 ] @
Sortiranje bi trebalo da se vrsi prilikom ubacivanja novog clana.
Znaci ides nekako ovako: tmp:= lnpfront tmp := pozicija ispred prvog veceg. promenis sve u funkciji za ubacivanje iz lnpFront u tmp. Znaci da se ne ubacuje na kraj vec iza elementa na koji pokazuje tmp. [ query @ 05.06.2005. 16:28 ] @
@Toyo, stvarno ti hvala.
Napravila sam ovu proceduru, ali nesto mi previse velika. Code: procedure Sorteren (crDVD: TDvdRecord); var lnpNewNode, lnpOldNode: TListNodePtr; toegevoegd: boolean; begin toegevoegd := false; lnpOldNode := lnpFront; lnpNewNode := lnpFront; repeat if lnpNewNode = nil then begin //dodati na kraju new(lnpNewNode); lnpNewNode^.drDVD := crDVD; lnpNewNode^.lnpNext := nil; if lnpFront = nil then lnpFront := lnpNewNode //ako je prazna lista else lnpOldNode^.lnpNext := lnpNewNode; toegevoegd := true end else if lnpNewNode^.drDVD.sTitle > crDVD.sTitle then begin //mjesto pronadjeno, sada dodati if lnpNewNode <> lnpOldNode then begin new (lnpNewNode); lnpNewNode^.drDVD := crDvd; lnpNewNode^.lnpNext := lnpOldNode^.lnpNext; lnpOldNode^.lnpNext := lnpNewNode; end else begin //dodati na prvo mjesto new(lnpNewNode); lnpNewNode^.drDVD := crDVD; lnpNewNode^.lnpNext := lnpOldNode; lnpFront := lnpNewNode end; toegevoegd:=true; end else begin //veci je pronadjen, sad proci kroz listu lnpOldNode := lnpNewNode; lnpNewNode := lnpNewNode^.lnpNext; end until toegevoegd; end; I ako je ubacim u Add proceduru za novi record, javlja mi error. Dali je ovo pretjerano sto sam napravila. Mozda ima nesto na laksi nacin? Jos jednom hvala. :-) Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|