ALGORITMI NOTEVOLI Con gli Array Prof. Carla Fanchin a.s. 2009/10 RICERCA Qualcuno alla festa ha il costume da … ZORRO ARRAY DEI COSTUMI PRESENTI ALLA FESTA STREGA COSTUMECERCATO MAGO (dato in input) ROSPO ZUCCA GNOMO RICERCA ZUCCA CERCATO PRIMO TENTATIVO (SBAGLIATO!!!) FOR (i=0;i<5;i++) { STREGA MAGO ROSPO ZUCCA GNOMO IF ( CERCATO==COSTUMI[i] ) cout << “Trovato” << endl; ELSE cout << “NON Trovato” << endl; } Array COSTUMI[5] Soluzione 1 (flag TROVATO) #include <iostream> #include <stdio.h> using namespace std; int main() { string COSTUME[5]={"STREGA","MAGO","ROSPO","ZUCCA","GNOMO"}; int i; string CERCATO="ZUCCA"; bool TROVATO=false; for (i=0;i<5;i++) { if ( CERCATO==COSTUME[i] ) TROVATO=true; } // FUORI dal ciclo if ( TROVATO==true ) cout << "Trovato" << endl; else cout << "NON Trovato" << endl; system("pause"); } Soluzione 2 – Contatore di “non trovato” #include <iostream> #include <stdio.h> using namespace std; int main() { string COSTUME[5]={"STREGA","MAGO","ROSPO","ZUCCA","GNOMO"}; int i; string CERCATO="ZUCCA"; int CONTA=0; for (i=0;i<5;i++) { if ( CERCATO==COSTUME[i] ) cout << "Trovato" << endl; else CONTA++; } // FUORI dal ciclo if ( CONTA==5 ) cout << "NON trovato" << endl; system("pause"); } ELENCO senza RIPETIZIONI Quanti sono i costumi (diversi) che si sono presentati alla festa ? STREGA STREGA MAGO STREGA MAGO ELENCO senza RIPETIZIONI i=0 j=0 STREGA STREGA MAGO STREGA MAGO Devo utilizzare un array di appoggio, della stessa dimensione di quello originale (nel caso in cui i costumi fossero TUTTI diversi). Devo scorrere il primo array (con indice i) e per ogni elemento effettuare una RICERCA (v. algoritmo precedente) nel secondo If (trovato==false) { vett2[ j] = vett1 [i] ; j++ } ORDINAMENTO ( algoritmo classico a CICLI FISSI, considerando che il primo elemento abbia indice 1 e che l’array abbia n elementi) FOR i = 1 TO (n – 1) FOR j = (i + 1) TO n if vett [ i ] > vett [ j ] SWAP (vett [ i ] , vett [ j ] ) NB. Cicli FOR annidati FOR i = 1 TO 10 FOR j = 1 TO 10 write ( i , j) Output prodotto: 1,1 – 1, 2 - …… - 1, 10 2,1 – 2, 2 - …… - 2, 10 … 10, 1 - …………..10, 10