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;
}