PDA

Visualizza la versione completa : [Pascal]ordire dei numeri


unit1
27-12-2004, 13:45
Il mio problema il seguente: devo ordinare prima 3 numeri da input e poi n numeri da input

cio devo prendere i numeri da input e poi riscriverli in ordine crescente

cso
27-12-2004, 13:56
penso che per il primo esempio potresti anche ordinare 3 interi ma per n numeri devi per forza usare gli array.

ti risulta???

marco_c
27-12-2004, 13:57
memorizzi i numeri in un vettore di n elementi.
poi ordini il vettore utilizzando uno dei classici algoritmi di ordinamento di vettori: bubblesort, quicksort, mergesort, heapsort...
se n' parlato anche recentemente sul forum di programmazione, fai una ricerca e trovi anche il codice

unit1
30-12-2004, 14:07
Grazie, mi siete stati molto di aiuto! il problema risolto!!!! :) :unz:

cso
30-12-2004, 14:16
Se vuoi postare il codice cos magari ti ottimizziamo i sorgenti e il tuo prof ti da un bel 9 e mezzo :)

unit1
30-12-2004, 14:43
Ho fatto solo quello di 3:



PROGRAM Ocresciente;
USES crt;
VAR
n:array[1..3] of real;
i,j:integer;
tmp:real;
BEGIN
clrscr;
i:=1;
REPEAT
write('Inserisci il ',i,' mo numero: ');
readln(n[i]);
i:=i+1;
UNTIL((i-1)=3);
IF(n[1]=n[2])or(n[1]=n[3])or(n[2]=n[3])THEN
writeln('Errore: 2 o 3 dei numeri inseriti sono uguali')
ELSE
FOR i:=0 TO 2 DO
FOR j:=(i+1) TO 3 DO
IF(n[j]<n[i])THEN
BEGIN
tmp:=n[i];
n[i]:=n[j];
n[j]:=tmp;
END;
i:=1;
writeln(' ');
REPEAT
writeln('Il: ',i,' e'': ',n[i]:5:2);
i:=i+1;
UNTIL((i-1)=3);
writeln(' ');
readln;
END.



l'altro in fase di costruzione, ma una valta capito l'algoritmo...

unit1
30-12-2004, 15:04
Effettivamente ti confesso una cosa:

Io nella guida del pascal ho trovato un comando "exit" molto simile ad un comando c, credendo che la prof testasse i programmi al PC lo ho messo in una verifica: risultato l'unico errore in una verifica da 8/5!!!

E penso pure che compiti come questo non siano fattibili da una 3 liceo Scientifico Tecnologico!

cso
30-12-2004, 15:50
ho modificato il programma in modo che se cambi la costante N e ci metti un valore + grande o piccolo ordina lo stesso:


PROGRAM Ordine_cresciente;

USES crt;

CONST n=7; {se vuoi ordinare 100 numeri metti n=100 :) }

VAR a: array[1..n] of real;
i,j: integer;
tmp: real;

BEGIN
clrscr;
i:=1;

REPEAT
write('Inserisci il ',i,' numero: ');
readln(a[i]);
i:=i+1;
UNTIL ((i-1)=n);

FOR i:=1 TO (n-1) DO {occhio all'N-1}
FOR j:=i+1 TO n DO
IF (a[j]<a[i]) THEN
BEGIN
tmp:=a[i];
a[i]:=a[j];
a[j]:=tmp;
END;
i:=1;
writeln;

REPEAT
writeln('Il ',i,' e'': ',a[i]:1:2);
i:=i+1;
UNTIL ((i-1)=n);

readln;
END.

unit1
07-01-2005, 08:19
grazie, ma ho un piccolo problemino ad creare quello di N.

come posso creare un array di n dimensioni?

cso
07-01-2005, 15:45
Originariamente inviato da cso
ho modificato il programma in modo che se cambi la costante N e ci metti un valore + grande o piccolo ordina lo stesso:


PROGRAM Ordine_cresciente;

USES crt;

CONST n=7; {se vuoi ordinare 100 numeri metti n=100 :) }

VAR a: array[1..n] of real;
i,j: integer;
tmp: real;

BEGIN
clrscr;
i:=1;

REPEAT
write('Inserisci il ',i,' numero: ');
readln(a[i]);
i:=i+1;
UNTIL ((i-1)=n);

FOR i:=1 TO (n-1) DO {occhio all'N-1}
FOR j:=i+1 TO n DO
IF (a[j]<a[i]) THEN
BEGIN
tmp:=a[i];
a[i]:=a[j];
a[j]:=tmp;
END;
i:=1;
writeln;

REPEAT
writeln('Il ',i,' e'': ',a[i]:1:2);
i:=i+1;
UNTIL ((i-1)=n);

readln;
END.

:)

Loading