L'altro giorno studiando un altra materia di informatica ho provato ad implementare alcuni algoritmi di cui conosco qualche cenno.
Ho scritto quindi un programma che presa una lista di stringe (un array) in cui l'ordine delle stringhe è casuale,lo riordina secondo un principio lessicografico. (clicca per approfondire su Wikipedia.)
Dato l'utilizzo massiccio dei metodi durante la preparazione per la prova in itinere ormai ho preso l'abitudine di dividere in queste "camere stagne" il mio programma...
Cosa c'è da sapere?
parola1.compareTo(parola2)
: Supponiamo che parola1 e parola2 siano due stringhe, questo metodo restituisce un intero che indica quale stringa viene prima in ordine lessicografico,Se da un numero negativo, parola 1 va posta prima di parola 2, se positivo, viceversa.
Se invece si ottiene 0, le due parole sono esattamente uguali.
Descrizione dei metodi
Partiamo dai metodi "fondamentali"... il metodo find è una di quelle camere stagne di cui parlavo sopra (per metodo si intende una parte di codice "stagna", cioè che dati dei parametri restituisce un risultato, il programmatore quindi non si deve occupare di verificare cosa faccia esattamente il metodo, gli basta sapere cosa vuole sapere(parametri in ingresso) e cosa da(parametri in uscita))
questo metodo data un'arrai di stringhe ed una parola, restituisce l'indice in cui la parola andrebbe inserita, ad esempio se l'array contiene le parole(le parentesi indicano gli indici): barca(0),casa(1),mare(2) e noi inseriamo la parola "dattero" ci restituisce il numero 2.
Il metodo inserisci invece preso un indice, una stringa ed un array di stringhe, da in output un array di stringhe dove nell'indice dato è stata inserita la parola e le parole che stavano a partire da quel indice, vengono spostate di un posto (di volta in volta l'ultima parola viene persa)
Adesso possiamo passare al metodo centrale che è il metodo ordina, questo metodo prende un'array di stringhe e ne restituisce uno ordinato facendo uso dei due metodi utilizzati sopra.
Eccovi il codice... dovreste capirci qualcosa in più:
- public class Ordinamentok
- {
- {
- ,"Carrubba","Dimauro","Lanza","no name"};
- for(int i=0;i<ordinato.length;i++)
- {
- }
- }
- {
- for(int j =0;j<B.length;j++)
- {
- B[j]="~~";
- }
- for (int i=0;i<A.length;i++)
- {
- int indice=find(B,A[i]);
- B=inserisci(A[i],B,indice);
- }
- return B;
- }
- {
- if(c>0)
- {
- for(int i=0;i<c;i++)
- {
- out[i]=A[i];
- }
- }
- out[c]=parola;
- for(int j=c+1;j<out.length;j++)
- {
- out[j]=A[j-1];
- }
- return out;
- }
- {
- int sup=lista.length;
- int inf=0;
- while(((sup-(inf))/2)>=1)
- {
- int a=((sup-(inf))/2)+inf;
- if((parola.compareTo(lista[a]))<0)
- {
- sup=a;
- }
- else
- {
- inf=a;
- }
- }
- if(parola.compareTo(lista[sup])<0)
- return inf;
- return sup;
- }
- }
per qualsiasi chiarimento sono a vostra disposizione!
P.S. la prova è andata abbastanza bene! ho preso 30 ;-p
Nessun commento:
Posta un commento