PDA

Visualizza la versione completa : [C] ricerca elemento in vettore di interi


mauro86
13-01-2015, 13:30
ciao ho bisogno di un aiuto per questo esercizio,il testo dice:

"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."

io ho scritto il codice in questo modo:


# include <stdio.h>
# include <stdlib.h>
# define MAX 100


//Funzione cerca
int cerca(int vettore[10], int elem, int dimensione) {
int i;
int posizione;
for (i = 0; i < dimensione; i++) { //scorro il vettore
if (vettore[i] == elem) {
posizione = i;
return(posizione);
}
}
return(-1);
}




int main() {


//Dichiarazioni


int vettore[MAX];
int i;
int dimensione, elem;
int risultato_ricerca;


printf("inserisci la dimensione del vettore\n");
scanf_s("%d", &dimensione);
if (dimensione > 100 || dimensione < 0){
printf("grandezza inserita non valida\n");
scanf_s("%d", &dimensione);
}


printf("inserisci dei valori nel vettore:\n");
for (i = 0; i < dimensione; i++){
scanf_s("%d",&vettore[i]);
}
printf("Vettore:\n");
for (i = 0; i < dimensione; i++) {
printf("%d ,", vettore[i]);
}


printf("valore da cercare:\n");
scanf_s("%d", &elem);
printf("elem = %d\n", elem);
risultato_ricerca = cerca(vettore,dimensione,elem);
printf("%d\n",risultato_ricerca);


system("pause");
return(0);
}




il problema che mi trovo ad avere è che non mi stampa l'indice della posizione,anzi nel caso che l'elemento sia presente o meno mi restituisce sempre il valore -1,per cui come posso risolvere??
grazie a tutti

LeleFT
13-01-2015, 13:51
La tua funzione riceve i seguenti parametri esattamente in questo ordine: vettore, elemento da cercare, dimensione vettore

Tu la richiami in questo modo:



cerca(vettore,dimensione,elem);



Cioè, mettendo prima la dimensione e poi l'elemento da cercare. Ovviamente non va bene.


Ciao. :ciauz:

mauro86
14-01-2015, 11:08
Grazie mille per la spiegazione,ora il programma funziona.:)

mauro86
14-01-2015, 11:14
un altra cosa però, così come ho scritto io la funzione mi restituisce l'indice della prima occorrenza del valore che vado a cercare,me se è presente più di una volta avrei bisogno che mi restituisse gli indici di tutte le occorrenze pertanto io ho modificato il codice in questo modo:



int cerca(int vettore[10], int elem, int dimensione) {
int i;
int posizione;
for (i = 0; i < dimensione; i++) { //scorro il vettore

do{
posizione = i + 1;
printf("il valore cercato si trova in posizione:\n");
return(posizione);
} while (vettore[i] == elem);
}

printf("il valore inserito non si trova nel vettore dato\n");
return(-1);
}


soltanto che è sbagliato perchè pur inserendo un vettore in cui ripeto il numero che vado a cercare ,il valore di ritorno mi dà che è sempre 1. qualcuno mi dice dov'è che sbaglio??

LeleFT
14-01-2015, 12:21
2 considerazioni:

1) L'istruzione "return" fa terminare la funzione, ritornando, appunto, ciò che è il suo argomento. Da qui dovresti capire perchè quel codice non ha alcun senso, anzi è completamente sbagliato.

2) Se vuoi che una funzione ritorni "più valori", allora il suo valore di ritorno (perchè, sia matematicamente che a livello di programmazione, una funzione ha uno ed un solo valore di ritorno, altrimenti, per definizione, non sarebbe una funzione) non può essere un intero (perchè un intero è, per definizione, uno solo numero), ma dovrebbe essere un "vettore di interi". Nel vettore andranno memorizzate tutte le posizioni trovate.


Dal codice che hai postato mi sembra evidente che ti manchi la base di cosa sia una funzione (a livello matematico e a livello di programmazione) e di come queste funzionino (scusa il gioco di parole).


Ciao. :ciauz:

mauro86
19-01-2015, 12:53
ok non sono un genio in programmazione ma ci sto provando sul serio quindi ti chiedo un altra dritta..
per quanto riguarda il valore di ritorno quello che hai scritto è giusto pertanto ho pensato di fare restituire alla mia funzione un puntatore ad array dinamico e sperando che l'idea sia corretta ho modificato il codice in questo modo:



# include <stdio.h>
# include <stdlib.h>
# define MAX 100


//Funzione cerca
int *cerca(int vettore[10], int elem, int dimensione,int*p) {
int i, j = 0;
for (i = 0; i < dimensione; i++) { //scorro il vettore
if (vettore[i] == elem) {
p[j] = i;
j++;
}
}
return(p);
}


int main() {


//Dichiarazioni


int vettore[MAX];
int i,*p;
int dimensione, elem;
int risultato_ricerca;


printf("inserisci la dimensione del vettore\n");
scanf_s("%d", &dimensione);
if (dimensione > 100 || dimensione < 0){
printf("grandezza inserita non valida\n");
scanf_s("%d", &dimensione);
}
p = (int*)malloc(dimensione*sizeof(int)); //allocazione dell'array in modo dinamico la cui dimensione sarà uguale a vettore[10] nel caso limite in cui quest'ultimo contenga un solo numero
if (p == NULL) {
exit(1);
}


printf("inserisci dei valori nel vettore:\n");
for (i = 0; i < dimensione; i++){
scanf_s("%d", &vettore[i]);
}
printf("Vettore:\n");
for (i = 0; i < dimensione; i++) {
printf("%d ,", vettore[i]);
}


printf("valore da cercare:\n");
scanf_s("%d", &elem);
printf("elem = %d\n", elem);
risultato_ricerca = *cerca(vettore, elem, dimensione,p);
printf("%d\n", risultato_ricerca);



system("pause");
return(0);
}



però non funziona lo stesso...come posso fare?:cry::cry::cry:

Loading