Ricerca valore in vettore; C++

di il
8 risposte

Ricerca valore in vettore; C++

Salve raga, ho un problema con questa traccia che mi è stata assegnata in vista di un esame, ahimè, molto prossimo:

Il professore ha richiesto di creare un programma che ricerchi se un valore è presente all'interno di un vettore , e di indicarne la posizione se questo è presente.
Partendo dal fatto che è ambigua la traccia, perchè non riesco a capire se mi chiede di un vettore generico, o di uno inserito comunque prima dall'utente, ma prendiamo per vera la seconda opzione.
Il problema sorge perchè mi chiede di fare questo attraverso una funzione ( se dovessi farlo senza funzione lo saprei fare , cioè l'ho proprio già scritto un programma che lo fa e non mi riporta alcun errore, funzionando come deve).
Ora, il codice che ho scritto io è il seguente :

// Cercare valore in vettore
#include<iostream>
using namespace std;
#define N 6
typedef int vettore[N];
vettore vett;
int trovavett(vettore,int a){
	int i , esci,posizione,input; 
	cout<<"Quale valore vuoi cercare? ";
	cin>> input;
	while(i<N && esci==0){
		if (vett[i]=input)
		esci==1;
		else 
		cout<<" Nessun valore corrispondente "<<endl;
	}
	posizione =i;
	return posizione;
}
int main(){
	int posizione,a;
	for(int i=0;i<N;i++){
		cout<<"Inserire l'elemento del vettore : ";
		cin>> vett[i];
	}
	
	posizione=trovavett(vett,a);
	
	cout<<"La posizione del valore cercato e': "<<posizione<<endl;
	system("PAUSE");
	return 0;
	
}
Qualunque sia la posizione dell'elemento, il programma mi riporta sempre 0 come posizione. Ciò è dovuto al fatto che non ho, evidentemente, ben collegato il valore della posizione uscente dal sottoprogramma con quello del main. Ho già provato a non usare while , ma agendo anche con for, il risultato è lo stesso; anche cambiando la posizione delle varie parendesi {} , o ottengo come risultato che mi fa inserire un unico valore del vettore chiudendo il ciclo anticipatamente , o mi da sempre e comunque che il valore inserito non è presente .
Davvero non riesco a capire dove sia l'errore , potete aiutarmi in qualche modo?

8 Risposte

  • Re: Ricerca valore in vettore; C++

    In questa linea

    vett=input

    hai usato = invece di ==

    Per curiosità, a che serve il parametro a che passi alla funzione?
  • Re: Ricerca valore in vettore; C++

    oregon ha scritto:


    In questa linea

    vett=input

    hai usato = invece di ==



    Anche cambiando con vett==input il risultato rimane comunque sempre 0, ho anche provato a mettere posizione==i, ma nulla.

    oregon ha scritto:


    Per curiosità, a che serve il parametro a che passi alla funzione?


    In effetti a niente, ho provato a toglierlo, ma ancora niente. Il codice riscritto ora è il seguente :

    // Cercare valore in vettore
    #include<iostream>
    using namespace std;
    #define N 6
    typedef int vettore[N];
    vettore vett;
    int trovavett(vettore){
    	int i , esci,posizione,input; 
    	cout<<"Quale valore vuoi cercare? ";
    	cin>> input;
    	while(i<N && esci==0){
    		if (vett[i]==input)
    		esci==1;
    		else 
    		cout<<" Nessun valore corrispondente "<<endl;
    	}
    	posizione =i;
    	return posizione;
    }
    int main(){
    	int posizione;
    	for(int i=0;i<N;i++){
    		cout<<"Inserire l'elemento del vettore : ";
    		cin>> vett[i];
    	}
    	
    	posizione=trovavett(vett);
    	
    	cout<<"La posizione del valore cercato e': "<<posizione<<endl;
    	system("PAUSE");
    	return 0;
    	
    }
    
  • Re: Ricerca valore in vettore; C++

    Ci sono un po' di errori logici e di sintassi. Studia questo
    
    // Cercare valore in vettore
    #include<iostream>
    using namespace std;
    #define N 6
    typedef int vettore[N];
    vettore vett;
    
    int trovavett(vettore) {
    	int i=0, esci=0, posizione=-1, input;
    	cout << "Quale valore vuoi cercare? ";
    	cin >> input;
    
    	while (i<N && esci == 0) {
    		if (vett[i] == input)
    		{
    			posizione = i;
    			esci = 1;
    		}
    
    		i++;
    	}
    	
    	return posizione;
    }
    
    int main() {
    	int posizione;
    	for (int i = 0; i<N; i++) {
    		cout << "Inserire l'elemento del vettore : ";
    		cin >> vett[i];
    	}
    
    	posizione = trovavett(vett);
    
    	if (posizione == -1)
    		cout << "Elemento non trovato" << endl;
    	else
    		cout << "La posizione del valore cercato e': " << posizione << endl;
    	
    	system("PAUSE");
    	return 0;
    
    }
    Potresti modificare il codice in modo da chiedere il valore da cercare nel main e passarlo come argomento alla funzione.
  • Re: Ricerca valore in vettore; C++

    oregon ha scritto:


    Potresti modificare il codice in modo da chiedere il valore da cercare nel main e passarlo come argomento alla funzione.
    Allora ho provato con il codice che mi hai postato, e funziona. Ho provato però a scriverlo anche con l'input nel main, ma non mi ridà alcun valore, si blocca dopo l'inserimento del valore da cercare ( non chiude il programma, rimane semplicemente in stallo.)
    Il codice che ho scritto ora è questo :
    
    #include <iostream>
    using namespace std;
    #define N 6
    typedef int vettore[N];
    vettore vett;
    int trovavettore(vettore , int a){
         int i=0, esci =0, posizione =-1;
         while(i<N && esci==0){
         if(vett[i] ==a)
         esci==1;
         posizione=i;
    }
    return posizione;
    }
    
    int main(){
         int posizione, input;
         for( int i=0; i<N; i++){
              cuot<<“Inserire un elemento : “ ;
              cin>> vett[i];
         }
         cout<<“ Inserire il valore da cercare “;
         cin>> input;
         posizione= trovavettore(vett,input);
         if(posizione== -1)
         cout<<“Nessun valore corrispondente”<<endl;
         else 
         cout<<“ La posizione corrispondente e’ : “<<posizione<<endl;
         system(“PAUSE”);
         return 0;
         
    
    Ah, e ho capito tutto del codice che mi hai postato tu tranne una cosa , a che mi serve i++ nella funzione ?
  • Re: Ricerca valore in vettore; C++

    Nella if hai tolto le parentesi { } e nel ciclo non hai messo la linea i++;

    Perché lo hai fatto? Non hai compreso il codice ...

    i++ serve a far aumentare i di 1 per fare andare avanti il ciclo
  • Re: Ricerca valore in vettore; C++

    oregon ha scritto:


    Nella if hai tolto le parentesi { } e nel ciclo non hai messo la linea i++;

    Perché lo hai fatto? Non hai compreso il codice ...

    i++ serve a far aumentare i di 1 per fare andare avanti il ciclo
    Le parentesi le ho messe nel codice , questo purtroppo l’ho scritto da telefono perché non avevo il Wi-Fi sul computer e ho dovuto ricopiare a mano nel passaggio ho dimenticato le parentesi ( non solo quelle in realtà , anche quella conclusiva dopo return 0); per quanto riguarda i++ non l’ho messo volutamente perché non avevo capito a cosa servisse nel caso specifico che mi avevi detto, e mi sembrava stupido mettere una cosa che non sapevo a cosa servisse ; ho messo i++ nella riga del ciclo e adesso il programma mi funziona . L’ultima domanda che vorrei fare è questa , la posizione corrisponde partendo a contare da 0, se volessi partire da 1 , mi basterebbe dire nella funzione che :
    posizione= i+1 ?
  • Re: Ricerca valore in vettore; C++

    Ovviamente sì

    Quando posti codice sul forum deve essere esattamente quello che utilizzi altrimenti si perde tempo in inutili correzioni.
  • Re: Ricerca valore in vettore; C++

    oregon ha scritto:


    Ovviamente sì

    Quando posti codice sul forum deve essere esattamente quello che utilizzi altrimenti si perde tempo in inutili correzioni.
    Hai ragione , l’ho controllato anche più volte ma mi è sfuggita la cosa , mi spiace .
    Comunque ti ringrazio per l’aiuto , ho capito varie cose
Devi accedere o registrarti per scrivere nel forum
8 risposte