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