Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Jednostruko ulancana lista. Problem sa procedurom u specijalanom slucaju.

[es] :: Pascal / Delphi / Kylix :: Jednostruko ulancana lista. Problem sa procedurom u specijalanom slucaju.

[ Pregleda: 3725 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

overdose

Član broj: 33563
Poruke: 51
*.cvz.es



Profil

icon Jednostruko ulancana lista. Problem sa procedurom u specijalanom slucaju.09.09.2004. u 10:25 - pre 238 meseci
Tekst zadatka glasi:

Napisati potprogram na programskom jeziku Pascal kojim se iz jednostruko ulančane liste zapisa o studentima izbacuju svi oni zapisi kod kojih je prosečna ocena manja od 8, kao i potprogram koji ispisuje prosečne ocene za sve studente o čijim ocenama postoje zapisi u listi. Prosečna ocena se računa tako što se poziva funkcija kojoj se prosleđuje zapis za koji se traži prosečna ocena. Ne treba pisati potprogram za unos liste, pretpostaviti da je već napisan, da se zove UnosListe i da kao rezultat vraća pokazivač na početak liste koju formira. Program najpre poziva potprogram za unos liste, zatim potprogram za ispis prosečnih ocena za sve studente u listi, zatim potprogram za izbacivanje zapisa po opisanom kriterijumu, a onda ponovo potprogram za ispis prosečnih ocena za sve studente u listi. Na kraju u glavnom programu treba dealocirati listu. Zapis o studentu sadrži sledeća polja: redni broj indeksa (u opsegu od 1 do 1000), godinu upisa, broj položenih ispita i niz od najviše 40 ocena većih od 5, dobijenih na tim ispitima.
Napomena: Potprogrami treba da razmenjuju podatke samo putem lista argumenata. Rešenje zadatka gde potprogrami direktno koriste promenljive glavnog programa ne donosi pun broj poena.


Kod je prilozen u atacmentu. Sve je proslo dobro osim u jednom specijalnom slucaju. Potrebno je analizirati proceduru 'Izbaci' koja pravi problem. Naime, kada poslednji unos (student) ima prosek <= 8 tada dolazi do runtime error-a. Drugim recima, kada prvi zapis u listi zadovoljava kriterijum za izbacivanje tada dolazi do problema (relevantan deo procedure sledi)

Code:

.
.
.
else
          begin
            stari:=tekuci;
            tekuci:=stari^.sledeci;
            stari^.sledeci:=nil;
            dispose(stari)
          end
.
.
.


Program je cak radio, samo pogresno, kada je koriscen drugi kompajler. Tada, u tom specijalnom slucaju, je ispisivan samo taj student koji ima prosek <= 8 (!?), a njegov redni broj je bio potpuno netacan i veliki. Dakle,neki za*** je sigurno, samo ne vidim gde ?

OverDose
Prikačeni fajlovi
 
Odgovor na temu

stalker
Branko Kokanovic
Beograd

Član broj: 11897
Poruke: 606
*.etf.bg.ac.yu



+2 Profil

icon Re: Jednostruko ulancana lista. Problem sa procedurom u specijalanom slucaju.09.09.2004. u 11:22 - pre 238 meseci
Mislim da treba ovako:
Code:

                  tekuci:=tekuci^.sledeci;
                  dispose(ListaZaObradu);
                  ListaZaObradu:=tekuci;

Necu da objasnjavam jer si ostatak lepo uradio, tako da pretpostavljam da znas sta hocu da kazem. Kompajlirao sam sa fpc-om (gpc nemam) i radi lepo.
P.S. I meni je ovo lepa vezba pred ispit;)
 
Odgovor na temu

overdose

Član broj: 33563
Poruke: 51
*.cvz.es



Profil

icon Re: Jednostruko ulancana lista. Problem sa procedurom u specijalanom slucaju.09.09.2004. u 11:51 - pre 238 meseci
stalker, hvala na brzom odgovoru ! Sada je sve korektno. :) Greska u mom delu koda je bila sto sam baratao sa pokazivacem tekuci (koji sam poistovetio sa ListaZaObradu) umesto sa ListaZaObradu, jer kad procedura vrati listu glavnom programu onda se poziva procedura za ispis kojoj se predaje pokazivac na pocetak liste koji u mom slucaju pokazuje ni na sta (jer je uradjen dispose prvog, a pokazivac ListaZaObradu nije azuriran).

over
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Jednostruko ulancana lista. Problem sa procedurom u specijalanom slucaju.

[ Pregleda: 3725 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.