Oppure

Loading
21/12/12 16:34
boostareo
ciao!
come potrei fare un programma così:
richieder ad un utente di inserire un numero n di elementi di un vettore ( numero naturale max 100)
costituito da numeri reali!
inserire gli n numeri reali di valore diverso e ordinare il vettore stampando i valori del vettore a video!
la procedura di ordinamento consiste nell'utilizzare il metodo dell'inserimento (inseration sort) seguenti passaggi
ne indicano il funzionamento.

5 2 4 6 1 3
2 5 4 6 1 3
2 4 5 6 1 3
2 4 5 6 1 3
1 2 3 4 5 6

guardate come varia la posizione dei numeri!
ciao grazie! :k:
aaa
22/12/12 8:40
Poggi Marco
Dove trovi difficoltà? (Posta il codice del tuo tentativo.)

L' algoritmo inseration sort proposto nel tuo esempio, non sembra avere nessuna logica.
Vedi questo esempio: it.wikipedia.org/wiki/…

Ecco un esempio di come implementare il codice:
PROCEDURE InsertionSort(var Menge: MengeRealTyp; Links, Rechts: INTEGER;)
VAR
 Index,Einfuegeposition: INTEGER;
 Zwischenspeicher:real;
BEGIN
  FOR Index := Links + 1 TO Rechts DO
  BEGIN
    Zwischenspeicher := Menge[Index];
    Einfuegeposition := Index;
    WHILE ((Menge[Einfugeposition - 1] > Zwischenspeicher) AND
           (Einfuegeposition > Links)) DO
    BEGIN
      Menge[Einfuegeposition] := Menge[Einfuegeposition - 1];
      Einfuegeposition := Einfuegeposition - 1;
    END;
    Menge[Einfuegeposition] := Zwischenspeicher;
  END;
END;
Ultima modifica effettuata da Poggi Marco 22/12/12 8:52
aaa
22/12/12 17:30
boostareo
io non ho neancora visto le procedure forse è per quello che non lo capisco!
grazie per il link, ora mi vedo le procedure e provo a capire il tuo
grazie ancora
aaa
22/12/12 18:00
boostareo
ma si riesce a fare senza procedure?
aaa
22/12/12 18:36
Poggi Marco
Si, è possibile farlo anche senza sottoprogrammi. Basta dichiarare le variabili locali, come globali.
aaa
23/12/12 15:15
boostareo
non capisco ancora!
aaa
23/12/12 18:51
Poggi Marco
Riporto la procedura come se fosse un unico programma:
PROGRAM InsertionSort;
var Menge: array[1..20] of real; 
     Links, Rechts, Index,Einfuegeposition: INTEGER;
     Zwischenspeicher:real;

BEGIN
  Rechts:=20;
  links:=1;
  (* ordinamento del vettore del vettore *)
  FOR Index := Links + 1 TO Rechts DO
  BEGIN
    Zwischenspeicher := Menge[Index];
    Einfuegeposition := Index;
    WHILE ((Menge[Einfugeposition - 1] > Zwischenspeicher) AND
           (Einfuegeposition > Links)) DO
    BEGIN
      Menge[Einfuegeposition] := Menge[Einfuegeposition - 1];
      Einfuegeposition := Einfuegeposition - 1;
    END;
    Menge[Einfuegeposition] := Zwischenspeicher;
  END;
END.


Postato originariamente da boostareo:non capisco ancora!

Posta il tuo tentativo.
aaa
13/01/13 17:08
boostareo
grazie mille dell'aiuto! ho fatto alla fine!
Ultima modifica effettuata da boostareo 13/01/13 17:09
aaa