Oppure

Loading
04/08/12 14:05
fabioser
Gentile GigiSoft, so che mi hai già invitato a sviluppare il programma da solo ma, come forse avrai intuito, sto studiando il linguaggio Pascal da completo autodidatta, e trovo notevoli difficoltà con i puntatori e le liste, perciò provo a chiederti lo stesso se puoi essere così gentile da fornirmi la soluzione in codice sorgente poichè io non riesco ad elaborarla da solo. Mi sarebbe infinitamente utile per progredire nello studio degli ordinamenti nelle liste. Grazie infinitamente fino da ora se vorrai aiutarmi. Ciao!!!:asd:
aaa
06/08/12 9:37
gigisoft
Postato originariamente da fabioser:

Gentile GigiSoft, so che mi hai già invitato a sviluppare il programma da solo ma, come forse avrai intuito, sto studiando il linguaggio Pascal da completo autodidatta, e trovo notevoli difficoltà con i puntatori e le liste, perciò provo a chiederti lo stesso se puoi essere così gentile da fornirmi la soluzione in codice sorgente poichè io non riesco ad elaborarla da solo. Mi sarebbe infinitamente utile per progredire nello studio degli ordinamenti nelle liste. Grazie infinitamente fino da ora se vorrai aiutarmi. Ciao!!!:asd:


Carissimo Fabioser,

mi pareva di essere stato chiaro nel Post Scriptum, se avessi voluto scriverti il codice, avrei inpiegato molto meno tempo di quanto ho fatto scrivendoti gli algoritmi, ma tu non avresti imparato niente.
Ma che forse pensi di essere l'unico autodidatta su questo sito?

Posso dirti solo una cosa, STUDIA, il materiale non manca, sul web soprattutto, leggi, studia, prova, guarda gli errori, e impara, se poi ci sono ancora problemi col codice, ripostalo e ne discutiamo;

Ciao. :k:
aaa
24/08/12 9:57
fabioser
Ho provato ad elaborare una soluzione che tiene conto delle indicazioni proposte, ma il risultato è sempre errore 216. Ecco il codice, in cui q ed r sono variabili puntatore locali alla procedura OrdinamentoLista:


program ListaOrdinataInSensoCrescente(input,output);
const bell=07;
type punt=^elem;
     elem= record
                 val  : integer;
                 next : punt;
           end;
var p : punt;
    n,min,temp,risposta : integer;

Function LeggiLista(k : integer): punt;
begin
     if k=0
     then p:=nil
     else begin
               new(p);
               read(p^.val);
               p^.next:=LeggiLista(k-1);
               LeggiLista:=p;
          end;
end;{fine function LeggiLista}
procedure OrdinamentoLista( var p : punt);
var q,r : punt;
begin
     q:=p;
     while q^.next<>nil
     do begin
             while p<>nil
             do begin
                     p^.val:=min;
                     p:=p^.next;
                     if p^.val<min
                     then begin
                               min:=p^.val;
                               r:=p;
                          end;
                end;
                temp:=r^.val;
                r^.val:=q^.val;
                q^.val:=temp;
                q:=q^.next;
        end;
end;{fine procedura OrdinamentoLista}
{corpo del programma}
begin
     repeat
           writeln('--------------------------- Dati di ingresso --------------------------------');
           writeln;
           writeln;
           write('Fornire la dimensione della lista: ');
           readln(n);
           if n>20
           then begin
                     writeln(chr(bell),'Errore nei dati di ingresso! - STOP -');
                     exit;
                end
           else begin
                     writeln;
                     writeln;
                     writeln('Fornire la lista in ingresso:');
                     writeln;
                     writeln;
                     p:=LeggiLista(n);
                     writeln;
                     writeln;
                     OrdinamentoLista(p);
                     writeln;
                     writeln;
                     while(p<>nil)
                     do begin
                             write(p^.val:3,' ');
                             p:=p^.next;
                        end;
                end;
                writeln;
                writeln('Finito?');
                writeln;
                writeln;
                writeln('Scrivere 1 per terminare 2 per continuare');
                writeln;
                writeln;
                readln(risposta);
     until(risposta=1);
     readln;

end.




Ringraziando chiunque sia in grado di fornire la soluzione corretta, saluto utenti e moderatori. Ciao!!!:asd:
aaa
24/08/12 10:09
fabioser
Ho dimenticato di dire che la soluzione da me elaborata fa riferimento al Caso 1. Grazie di nuovo e...Ciao!!!:asd:
aaa
24/08/12 18:27
fabioser
Forse ho commesso un errore nella procedura OrdinamentoLista, nel senso che i vari minimi, dal più piccolo al più grande vengono via via memorizzati nella lista denotata dal puntatore q e non p, per cui il codice dovrebbe essere il seguente:


program ListaOrdinataInSensoCrescente(input,output);
const bell=07;
type punt=^elem;
     elem= record
                 val  : integer;
                 next : punt;
           end;
var p,q : punt;
    n,min,temp,risposta : integer;
     
Function LeggiLista(k : integer): punt;
begin
     if k=0
     then p:=nil
     else begin
               new(p);
               read(p^.val);
               p^.next:=LeggiLista(k-1);
               LeggiLista:=p;
          end;
end;{fine function LeggiLista}
procedure OrdinamentoLista( var q : punt);
var r : punt;
begin
     q:=p;
     while q^.next<>nil
     do begin
             while p<>nil
             do begin
                     p^.val:=min;
                     p:=p^.next;
                     if p^.val<min
                     then begin
                               min:=p^.val;
                               r:=p;
                          end;
                end;
                temp:=r^.val;
                r^.val:=q^.val;
                q^.val:=temp;
                q:=q^.next;
        end;
end;{fine procedura OrdinamentoLista}
{corpo del programma}
begin
     repeat
           writeln('--------------------------- Dati di ingresso --------------------------------');
           writeln;
           writeln;
           write('Fornire la dimensione della lista: ');
           readln(n);
           if n>20
           then begin
                     writeln(chr(bell),'Errore nei dati di ingresso! - STOP -');
                     exit;
                end
           else begin
                     writeln;
                     writeln;
                     writeln('Fornire la lista in ingresso:');
                     writeln;
                     writeln;
                     p:=LeggiLista(n);
                     writeln;
                     writeln;
                     OrdinamentoLista(q);
                     writeln;
                     writeln;
                     while(q<>nil)
                     do begin
                             write(q^.val:3,' ');
                             q:=q^.next;
                        end;
                end;
                writeln;
                writeln('Finito?');
                writeln;
                writeln;
                writeln('Scrivere 1 per terminare 2 per continuare');
                writeln;
                writeln;
                readln(risposta);
     until(risposta=1);
     readln;
     
end.



Tuttavia il programma non mi viene ancora compilato bene, ovvero da sempre errore 216!!!:-?
aaa
25/08/12 12:22
fabioser
Qualcuno di voi membri del Forum è in grado di aiutarmi? Ne sarei infinitamente grato!!!
aaa
09/11/12 9:51
fabioser
Salve a tutti, membri esperti del forum. Il problema è sempre lo stesso...non riesco ad andare avanti...qualcuno di voi è in grado di dirmi dove sbaglio nella compilazione del programma del quale Gigisoft mi ha fornito le linee essenziali di risoluzione ? Potete fornirmi una formulazione in codice sorgente ? Ve ne sarei infinitamente grato. Ciao!!!:asd:
aaa
11/11/12 12:00
gabry97
magari rischio di fare la figura dello stupido perchè non ho letto attentamente tutta la discussione,ma se ho ben capito vuoi leggere una serie di numeri e poi ordinarli,ma vedo che usi procedure e funzioni complicate,quando secondo me basterebbe caricare i numeri da ordinare in un vettore e procedere con un semplicissimo ordinamento con bubble-sort!
aaa