Esercizio in Delphi

stellacometa
Ragazzi devo fare un esercizio in cui creo una funzione che restituisce l'elenco delle quantità di alcuni prodotti di un certo genere in ordine, crescente, di marca... Io l'ho fatto così ma mi da errore nella compilazione...

function ordina(l:puntatore):puntatore;//ordina una lista secondo il prezzo     //funzione che data una lista ne restituisce un altra costituita dagli stessi articoli ordinati per prezzo
var pos,pos_1:puntatore;
    bool:boolean;

procedure scambia(r,s:puntatore);
var z:puntatore;
begin
new(z);
z^.marca:=r^.marca;
z^.quantita:=r^.quantita;
z^.prezzo:=r^.prezzo;
r^.marca:=s^.marca;
r^.quantita:=s^.quantita;
r^.prezzo:=s^.prezzo;
s^.marca:=z^.marca;
s^.quantita:=z^.quantita;
s^.prezzo:=z^.prezzo;
dispose(z);
end;

begin
if (l=nil) then
             begin
               writeln('non ci sono elementi del genere inserito');
               ordina:=NIL;
             end
else
  begin
    REPEAT
      bool:=FALSE;
      pos:=l;
      pos_1:=l^.next;
      while(pos_1<>NIL) do
        begin
          if(pos^.prezzo>pos_1^.prezzo) then
                                         begin
                                           scambia(pos,pos_1);
                                           bool:=TRUE;
                                         end;
          pos:=pos_1;
          pos_1:=pos_1^.next;
        end;
    UNTIL(bool=FALSE);
    ordina:=l;
  end;
end;


function elenco_prez:puntatore;
var aus,p:puntatore;
begin
  aus:=nil;                    // questa è la lista ke restituirà la funzione
    while (p <> nil) do          // entro nella lista generale
     begin                             // se il genere è uguale
       if p^.genere=gen then
        ordina(p);   // faccio partire la funzione di
       p:=p^.next;                               // inserimento ordinato
     end;
 elenco_prez:=aus;
end;



Mi date una manina? :cry: :cry:

Risposte
stellacometa
e poi nel main assegno ad una variabile y il valore della funzione...ma non funziona...

stellacometa
Ho modificato così:

function ordina(l:puntatore):puntatore;//ordina una lista secondo il prezzo     //funzione che data una lista ne restituisce un altra costituita dagli stessi articoli ordinati per prezzo
var pos,pos_1:puntatore;
    bool:boolean;

procedure scambia(r,s:puntatore);
var z:puntatore;
begin
new(z);
z^.marca:=r^.marca;
z^.quantita:=r^.quantita;
z^.prezzo:=r^.prezzo;
r^.marca:=s^.marca;
r^.quantita:=s^.quantita;
r^.prezzo:=s^.prezzo;
s^.marca:=z^.marca;
s^.quantita:=z^.quantita;
s^.prezzo:=z^.prezzo;
dispose(z);
end;

begin
if (l=nil) then
             begin
               writeln('non ci sono elementi del genere inserito');
               ordina:=NIL;
             end
else
  begin
    REPEAT
      bool:=FALSE;
      pos:=l;
      pos_1:=l^.next;
      while(pos_1<>NIL) do
        begin
          if(pos^.prezzo>pos_1^.prezzo) then
                                         begin
                                           scambia(pos,pos_1);
                                           bool:=TRUE;
                                         end;
          pos:=pos_1;
          pos_1:=pos_1^.next;
        end;
    UNTIL(bool=FALSE);
    ordina:=l;
  end;
end;


function elenco_prez:puntatore;
var aus,p:puntatore;
begin
  aus:=nil;                    // questa è la lista ke restituirà la funzione
    while (p <> nil) do          // entro nella lista generale
     begin                             // se il genere è uguale
       if p^.genere=gen then
        ordina(p);   // faccio partire la funzione di
       p:=p^.next;                               // inserimento ordinato
     end;
 elenco_prez:=aus;
end;



E poi nel main:

              writeln ('Inserisci Genere del prodotto');
              readln(gen);
              p:=elenco_prez;
              while p<> nil do
                begin
                  write (p^.prezzo);
                  write ('---> ');
                  p:=p^.next;
                end;


Ma non stampa niente..HELP! :(

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.