Salve, il mio problema è questo:
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 un valore intero, ed in particolare: 1. se il valore elem è presente nel vettore, allora la funzione restituisce l’indice della posizione alla 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 sul vettore ordinato.
Sono riuscito ad implementare il mio programma in questo modo; il problema è che non mi restituisce tutte le occorrenze di un valore, ma solo la prima occorrenza; mi potete aiutare?
codice:#include <stdio.h> #include <stdlib.h> int cerca(int *vettore,int dimensione,int valore) { int i,indice,trovato_elem;//variabili ciclo for(i=0;i<dimensione;i++)//scorre il vettore { if(vettore[i]==valore)//se il valore viene trovato all'interno del vettore { return i;//restituisce l'indice in cui si trova l'elemento } } return -1;//se l'elemento non è presente restituisce -1 } int cerca_ordinato(int *vettore,int dimensione,int valore) { int i;//variabile ciclo int tmp;//variabile temporanea per ordinamento int d=dimensione;//dimensione vettore int primo;//questa variabile contiene il primo nuemro dell'intervallo preso in considerazione int ultimo;//ultimo elemento dell'array primo=0; ultimo=dimensione-1; int meta;//metà intervallo /*CICLO PER ORDINARE IL VETTORE*/ while(d>0) { for(i=0; i<d;i++) { if(vettore[i]>vettore[i+1]) { tmp=vettore[i]; vettore[i]=vettore[i+1]; vettore[i+1]=tmp; } } d--; } /*FINE ORDINAMENTO*/ if (ultimo<0) return -1; while(primo<=ultimo) { meta=(primo+ultimo)/2;//divide il vettore il due parti if(vettore[meta]==valore) { return meta; } if(vettore[meta]<valore)//se l'emento non è presente allora si restringe l'intervallo primo=meta+1; else ultimo=meta-1; } return -1;//se l'elemento non è presente nel vettore allora ritorna il valore -1 } int main(int argc, char *argv[]) { int i,valore,dimensione,*p; printf("Quanti numeri vuoi inserire?:" ); scanf("%d",&dimensione); p=(int*)malloc(dimensione*sizeof(int));//allochiamo la memoria for(i=0;i<dimensione;i++) { printf("Inserire elemento del vettore: ");//chiede l'inserimento degli elementi scanf("%d", &p[i]);//legge i valori da tastiera } printf("Numero da cercare:");//chiede il numero da cercare nel vettore scanf("%d",&valore);//legge il numero da cercare printf("La posizione del valore inserito nel vettore e': %d\n", cerca(p++,dimensione,valore)); printf("La posizione del valore inserito nel vettore ordinato e': %d\n", cerca_ordinato(p,dimensione,valore)); system("pause"); free(p); return 0; }

Rispondi quotando

