PDA

View Full Version : [c++] ricerca ed indicazione posizioni in un vettore


enrico.pix
16-06-2010, 13:10
sto perdendo tempo. sto facendo una cosa inutile, ma ormai mi sono impuntato.
teoricamente ha senso quello che sto scrivendo.
crea un vettore "posizioni" di "volte" interi. fai un ciclo j, dall'elemento 0 all'ultimo elemento di questo vettore. per ognuno di questi elementi fai la ricerca. se la ricerca da esito positivo assegna all'elemento j del vettore "posizioni" il valore i del ciclo della ricerca.

però non funge come dovrebbe. mi indica solo l'ultima posizione in cui è stato avvistato l'elemento.... dategli un'occhiata vi prego

#include <cstdlib>
#include <iostream>
#define MAXDIM 20

using namespace std;

int main(int argc, char *argv[])
{
int i,j;
int dim,elemento,posizione;
int volte=0;
bool trovato;
int vett[MAXDIM];

cout<<"Inserisci la dimensione del vettore\t"<<endl;
cin>>dim;

while((dim>0)&&(dim<=MAXDIM)){
for(i=0;i<dim;i++){//legge i valori
cout<<"Inserisci il valore per la posizione "<<i<<endl;
cin>>vett[i];
}
cout<<"Inserisci l'elemento da cercare\t"<<endl;
cin>>elemento;//legge l'elemento da cercare
trovato=false;//imposta trovato=falso
for(i=0;i<dim;i++){//ricerca elemento
if (vett[i]==elemento){
volte++;//aumenta dimensione vettore posizioni.
}
}
int posizioni[volte];
for(j=0;j<volte;j++){
for(i=0;i<dim;i++){
if (vett[i]==elemento){
posizioni[j]=i;
trovato=true;
}
}
}

if (trovato==true){
cout<<"L'elemento e' stato trovato "<<volte<<" volte nelle posizioni:\n";
for(i=0;i<volte;i++){
cout<<posizioni[i]<<endl;
}
}
else{
cout<<"L'elemento non e' stato trovato"<<endl;
}



system("PAUSE");
return EXIT_SUCCESS;
}
}

Z80Fan
18-06-2010, 22:25
Ciao.
int posizioni[volte];
Non lo puoi scrivere. I vettori li devi dichiarare solo con delle costanti. Il compilatore non ti dà errore se lo scrivi, ma è logicamente sbagliato. Devi fare come per "vett" dove hai usato la costante MAXDIM.

Poi il tuo algoritmo è sbagliato in diversi punti. Il problema sta nei 2 for annidiati (j e i). Ti consiglio di toglierli e fare l'inserimento in "posizioni" nel primo ciclo "i", dove aumenti "volte".

Poi, perchè usi un while per controllare l'input?? un if non andava bene???