PDA

View Full Version : Aiuto Informatica



Thuslands
3rd January 2007, 19:57
Non sapevo dove postare ,cosi posto qui.

Un problemino semplice semplice per chi ci capisce di informatica.


Si tratta di un quesito abbastanza elementare credo ma, aimhè, fin'ora non solo non sono riuscito a trovare una risposta ragionandoci , non riesco a trovarla neanche sul mio libro , che non spiega affatto bene la cosa.


Nel cercare di scrivere programmini sempre piu complicati sto cercando di capire da solo molti meccanismi che il mio libro spiega malissimo facendo ricorso a moltissimi esempi difficili da generalizzare:

Fin'ora c'è una cosa che mi tornerebbe molto utile nel 90% dei programmi che devo implementare ma non riesco ancora a venirne a capo...

Come si riordina in ordine crescente o decrescente un array?


Ho molte idee a riguardo , ma non riesco a implementarlo.

Grazie in anticipo



ps: ho provato a pensarle tutte, ma il nocciolo della questione , credo, sia quello di non riuscire ad indicare l'x-esimo elemento dell'array, per poter poi riscrivere un'altro array i cui elementi soddisfano la seguente banalità :

array[x]<array[x+1]

Hador
3rd January 2007, 20:01
con che metodo? in che linguaggio?
divide et impera?

Axelfolie
3rd January 2007, 20:03
http://it.wikipedia.org/wiki/Bubble_sort

Hador
3rd January 2007, 20:06
http://it.wikipedia.org/wiki/Merge_sort

Thuslands
3rd January 2007, 20:11
Al di la del dividi e conquista , il mio proglema è scrivere l'algoritmo in codice sorgente. Il linguaggio è java.


Ho fatto diversi programmini fin'ora , alcuni anche abbastanza complessi , ma la maggior parte non riesto a portarla a termine se non trovo un modo per ordinare i dati di un array in ordine crescente o decrescente.

Un esempio pratico: programmino che prende in input 10 voti e stampa i 5 migliori. Utilizzando un'array , voi , come fareste?

Thuslands
3rd January 2007, 20:13
http://it.wikipedia.org/wiki/Bubble_sort


Interessante , grazie

Arcotemo
3rd January 2007, 20:17
ce ne sono diversi di programmi "sort" , cerca su html.it

ci sono ottime guide li

Hador
3rd January 2007, 20:30
usa un algoritmo di sort (il mejo è il merge sort, poi dipende se stai facendo programmazione o algoritmi, altrimenti semplicemente usa il metodo del buble sort) e fai stampare i primi 5...

Zaider
3rd January 2007, 20:31
Io conosco solo il bubble sort.
il dividi et impera non serviva per altre cose? Oo

Thuslands
3rd January 2007, 21:40
public void bubbleSort(int[] x)
{
int temp = 0;
int j = x.length;
while(j>0)
{
for(int i=0; i<j-1; i++)
{
if(x[i]>x[i+1])
{
temp=x[i];
x[i]=x[i+1];
x[i+1]=temp;
};
};
j--;
};
}


Questo l'ho capito , ma ci sono alcune cose che dal basso della mia ignoranza informatica non capisco.

1. mettere i ; dopo le parentesi graffe?
2. in pseudocodice : Prendi il valore contenuto nella cella i, confrontalo con la cella i+1. Se il valore della cella successiva è superiore , inverti l'ordine. ( in pratica prevede un ordinamento decrescente) e fin qui non ci sono problemi , lo spiega anche il principio impirico. Ma, al posto di i+1 viene messa una variabile temp, intera e inizializzata a 0.
in pratica la variabile temp funziona come un terzo bicchiere , quando vogliamo invertire il liquido contenuto in 2 bicchieri?


3.Come lo stampo l'array ordinato ottenuto?

basta un semplice :

for ( int counter=1;counter<x.length;counterr++)
System.out.printf("%d\n",x[counter])
?


Perche il compilatore mi sta segnando un errore che propio non capisco.

Jarsil
3rd January 2007, 22:00
In Java non saprei dirti, in php ci sono una nutrita serie di funzioni che servono proprio a ordinare le array nel modo che preferisci...
Questo è un esempio molto banale che mi viene in mente ora su 2 piedi...


$a = array ();
// funzione che ti popola l'array con indice [x] e valore [i]
.....
// ordina i valori dell'array in senso decrescente - non gli indici
// ma i valori, gli indici vengono riscritti!
rsort($a);
// Diciamo che vuoi i 5 risultati che escono per primi
// (ovvero saranno dal piu' grande al piu' piccolo)
while($x<5) { // <5 perché le array partono da 0, quindi 0..4 sono 5 elementi.
print($a[$x]);
$x++;
}

Oltre a rsort ce ne sono molte altre anche piu' raffinate, non penso che a java manchino ste funzionalità senza scomodare funzioni complesse.

Axet
3rd January 2007, 22:04
Il codice per stampare l'array è corretto, ricordati il ";" dopo il s.o.p e occhio che nel for hai scritto counteRR++, con due R invece che una sola.

La seconda domanda non l'ho capita :O

Hador
3rd January 2007, 22:31
si funge da "terzo bicchiere", variabile locale, temporale o che dir si voglia :)

Thuslands
3rd January 2007, 23:00
Ho finito il programma , gira perfettamente.

Molto carino , so 4 facciate di quaderno di codice ed il mio primo programmino abbastanza complesso ( ci sono dentro 11 metodi :angel: )


Domattina penso di inserire il 12 esimo e siccome gia so che molto probabilmente non riusciro a farlo da solo tornero a rompervi le palle qui :)



Grazie a tutti , mi sete stati d'aiuto :thumbup:

Hador
3rd January 2007, 23:14
QUADERNO?
ma dove la fai informatica? :sneer:

Kith
3rd January 2007, 23:16
hador niubbo il divide et impera non è un algoritmo di ordinamento :p
è un modo di affrontare un problema ricorsivamente :D

Hador
3rd January 2007, 23:17
e dove lo ho scritto? lo so benissimo, è il merge sort che utilizza il divide et impera, come scritto sotto :)

27 in algoritmi eh :sneer:

Kith
3rd January 2007, 23:19
:sneer: cmq di algoritmi di ordinamento ce ne son troppi, se devi ordinare 10 numeri fatti un algoritmo tuo a caso tanto non cambia niente :D

Hador
3rd January 2007, 23:22
blablabla olog(n)

un incubo sto o piccolo/grande di log(n) cazzo :sneer:

Kith
3rd January 2007, 23:29
utile sopratuttto, tempo di calcolo di un algoritmo :nod:

era utile forse 50 anni fa....
ora si ragiona a teraflop chisseneincula :sneer: