PDA

Visualizza la versione completa : [C] problema funzione di ricerca valore in un array


processore
08-06-2009, 12:32
salve io dovrei fare questo esercizio.

per la ricerca di un valore: la funzione di ricerca di un valore deve restituire
un puntatore all'elemento dell'array contenente il valore cercato. nel caso
l'elemento non sia presente, deve restituire un puntatore a NULL;

ho scritto questo codice pero non funziona.
cosa ho sbagliato ?
grazie


#include <stdio.h>



void stampa(int*);
int ricerca (int, int*);

main(){
int arr[10];
int i;
int num_ric;
int *pa;
pa = arr;

int ric;
//immissione
printf("inserire gli elementi nell'array\n");
for(i=0; i<10;i++){

scanf("%d", &arr[i]);
}
stampa(arr);

//num da ricercare
printf("inserire un numero da ricercare\n");
scanf("%d", &num_ric);

ric = ricerca(num_ric, arr);
printf("%d", ric);

system("pause");
}

void stampa(int *a){
int i;
for(i=0; i<10;i++)
printf("%d\n", a[i]);

}

int ricerca(int a, int *b){
int i;
while (a!= *b && i<10)
i++;
if(a == b[i])
return (i);

else
return NULL;

}

Stoicenko
08-06-2009, 12:37
io direi di togliere la condizione a != *b (che è inutile) nel while perchè sennò se sono uguali esce dal ciclo prima di fare (a == b[i]) con il suo return

YuYevon
08-06-2009, 12:43
Utilizza i tag code per postare il codice la prossima volta... come da regolamento :]

Per quanto riguarda il problema, dire innanzitutto che c'è qualcosa che non va qui:



int ricerca(int a, int *b){
int i;
while (a!= *b && i<10)
i++;
...


innanzitutto ti conviene azzera esplicitamente i, e poi comunque all'interno del predicato del while tu confronti a sempre con il primo elemento dell'array b... (*b), mentre invece dovresti confrontarlo con l'elemento i-esimo, quindi dovresti sostituire *b con b[i] oppure se ti piace la notazione a puntatore con *(b + i).

Tra l'altro fai attenzione che la traccia dice che la funzione deve restituire un puntatore all'elemento, e non l'indice...

YuYevon
08-06-2009, 12:47
Originariamente inviato da Stoicenko
io direi di togliere la condizione a != *b (che è inutile) nel while perchè sennò se sono uguali esce dal ciclo prima di fare (a == b[i]) con il suo return

No quell'if non sta nel while... purtroppo quando si posta il codice senza indentazione è facile confondersi :|

Stoicenko
08-06-2009, 13:03
ecco, mi sembrava strano.. cmq quell'if ci stava bene nel while.. fare 2 confronti (di cui il primo sbagliato) è inutile

LeleFT
08-06-2009, 14:45
Originariamente inviato da YuYevon
Utilizza i tag code per postare il codice la prossima volta... come da regolamento :]


Quoto e aggiungo anche di fare attenzione ai titoli: "problema funzione in c" è un titolo che si adatta tranquillamente all'80% delle discussioni qui presenti per il linguaggio C.

Correggo il titolo.


Ciao. :ciauz:

processore
08-06-2009, 18:29
scusate potreste scrivermi il codice di come va fatta quella funzione.
e come dice il testo che ritorni un puntatore all'elemento.
scusate ma sto iniziando ora a imparare qualcosa di c.
grazie

YuYevon
08-06-2009, 19:06
Ma te l'ho già detto... devi sostituire *(b + i) (o direttamente b[i]) a *b nel while... per quanto riguarda il valore di ritorno, non dovresti avere problemi a capire quale sia la modifica da apportare... anziché restituire "i" (che è solo l'indirce) devi restituire "l'indirizzo di base dell'array + i", ovviamente modificando il tipo del valore di ritorno della funzione che non è più "int" ma "int *".

Non ti scrivo il codice perché si tratta di semplicissime modifiche che devi apportare... e poi se sei alle prime armi a maggior ragione dovresti tentare di farlo da solo ;)

Loading