Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171

    problema funzione in c

    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;

    }

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: problema funzione in c

    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:

    codice:
    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...
    every day above ground is a good one

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    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 :|
    every day above ground is a good one

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ecco, mi sembrava strano.. cmq quell'if ci stava bene nel while.. fare 2 confronti (di cui il primo sbagliato) è inutile

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Re: Re: problema funzione in c

    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    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
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.