Aiuto programma in c

di il
4 risposte

Aiuto programma in c

Ciao ragazzi, sto cercando di scrivere un esercizio in c per l'università ma ahimè mi trovo in serie difficoltà.
Il testo dell'esercizio è il seguente:

Si scriva una funzione in C, denominata cerca, che ricerchi la presenza di un elemento in un vettore di interi. La funzione riceve in ingresso tre parametri: 1. un vettore di interi vettore[] nel quale ricercare il valore; 2. un valore intero dimensione che indica quanti elementi contiene il vettore; 3. il valore intero elem che deve essere ricercato. La funzione deve restituire: 1. se il valore elem è presente nel vettore, allora la funzione restituisce l’indice della posizione nella quale si trova tale valore; 2. se il valore elem è presente più volte, si restituisca l’indice di tutte le occorrenze; 3. se il valore elem non è presente nel vettore, si restituisca -1. Si modifichi poi la funzione cerca definendo la funzione cerca_vettore_ordinato che faccia le stesse cose descritte in precedenza ma su un vettore ordinato

Ho provato a buttare giù uno straccio di codice ma ovviamente non funziona niente.
#include<stdio.h>
#include<stdlib.h>

int funzione_cerca (int vettore[], int dimensione, int elem); //prototipo della mia funzione
//alla funzione verranno passati tre argomenti di tipo intero e la stessa dovrà restituire un valore di tipo intero

int main() {
	
	int vettore[8]={10,5,15,20,25,40,5,56};
	int dimensione=8;
	int elem=20;
	int appoggio;
	
	funzione_cerca (&vettore[dimensione],dimensione,elem);
	appoggio=funzione_cerca(&vettore[dimensione],dimensione,elem);
	
	printf("%d",appoggio);
	return 0;
}

int funzione_cerca (int vettore[], int dimensione, int elem) {
	
	int m,posizione;
	
	for(m=0; m<dimensione; m++) {
		
		if(vettore[m]==elem) {
			posizione=m; 
			return posizione;	
		}
		
		else return -1;
	}
	
}
Se provo a cercare il valore 20 perchè la funzione non mi restituisce il valore 3 (posizione del valore nell'array) quando vado a stamparlo con printf?
Ogni suggerimento è ben accetto anche perchè non so più cosa inventarmi
Grazie in anticipo

4 Risposte

  • Re: Aiuto programma in c

    Ci sono un paio di errori.

    1) Come mai fai due chiamate alla funzione funzione_cerca? Basta giustamente solo quella in cui memorizzi anche il valore di ritorno.
    2) In quella chiamata c'è un errore, la versione corretta è:
    appoggio=funzione_cerca(vettore,dimensione,elem);
    perchè tu devi passargli tutto il vettore degli interi e non solo una parte di essa.

    Per quanto riguarda la funzione non c'è alcun errore se non quello del return in caso di non corrispondenza tra il numero ricercato con tutti quelli del vettore. Lo devi spostare alla fine di tutta la funzione e non tramite else altrimenti se l'elemento non sta nella posizione 0 ritornerà sempre -1.
    Quindi lo devi spostare al termine del ciclo for che in caso di fallimento della funzione ti ritorna -1.

    Ecco il codice completo con le modifiche:
    
    #include<stdio.h>
    #include<stdlib.h>
    
    int funzione_cerca (int vettore[], int dimensione, int elem); //prototipo della mia funzione
    //alla funzione verranno passati tre argomenti di tipo intero e la stessa dovrà restituire un valore di tipo intero
    
    int main() {
    
       int vettore[8]={10,5,15,20,25,40,5,56};
       int dimensione=8;
       int elem=20;
       int appoggio;
    
       appoggio=funzione_cerca(vettore,dimensione,elem);
    
       printf("%d",appoggio);
       return 0;
    }
    
    int funzione_cerca (int vettore[], int dimensione, int elem)
    {
       int m,posizione;
    
       for(m=0; m<dimensione; m++) 
        {
          if(vettore[m]==elem) {
             posizione=m;
             return posizione;
          }
       }
       return -1;
    }
    
  • Re: Aiuto programma in c

    Ti ringrazio sei stato chiarissimo
  • Re: Aiuto programma in c

    Penso che vada modificata la funzione cerca, il prototipo dovrebbe essere:

    int * funzione_cerca (int vettore[], int dimensione, int elem);

    dove va restituito un vettore con tutti gli indici, com'è specificato dal punto 2. Se invece l'occorrenza si trova solo una volta allora il vettore ha un solo elemento.

    Si potrebbe restiutire pure un vettore dove nel primo elemento è scritto quante occorrenze sono state trovate, comodo per le eventuali scansioni. Oppure una struct con due campi quanti numero_elementi_trovati e il vettore degli indici di occorrenze.
  • Re: Aiuto programma in c

    SVNiko ha scritto:


    Penso che vada modificata la funzione cerca, il prototipo dovrebbe essere:

    int * funzione_cerca (int vettore[], int dimensione, int elem);

    dove va restituito un vettore con tutti gli indici, com'è specificato dal punto 2. Se invece l'occorrenza si trova solo una volta allora il vettore ha un solo elemento.

    Si potrebbe restiutire pure un vettore dove nel primo elemento è scritto quante occorrenze sono state trovate, comodo per le eventuali scansioni. Oppure una struct con due campi quanti numero_elementi_trovati e il vettore degli indici di occorrenze.
    Grazie, proverò a seguire il tuo consiglio anche se al mio livello attuale di programmazione la vedo dura...
Devi accedere o registrarti per scrivere nel forum
4 risposte