n° 219
Novembre 2017
Dicembre 13, 2017, 07:15:44 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: come si può verificare velocemente se un valore è contenuto in un vettore? [C]  (Letto 2825 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
not96
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 1


Mostra profilo
« inserita:: Luglio 27, 2013, 09:45:26 »

premetto che sono alle prime armi.
Ho provato a fare questo programma ma non capisco perché mi dia errore.

Codice:
#include <stdio.h>
#define true 1
#define false 0

int verifica (int vettore[5], int );
int main()
{
    int vettore[5]={0,2,3,4,5,},leggi, risposta ;
    printf("\ninserisci il numero\n");
    scanf("%d", &leggi );
    risposta= verifica (vettore[5], leggi);
    printf("\n %d", risposta );
    return 0;
}

int verifica(int vettore[5], int leggi)
{
    int contatore=0, risposta =0;
    for( contatore=0; contatore<=5; contatore++ )
   
        if (vettore[contatore]== leggi )
            risposta =true;
       
    return risposta;
}

ma  mi da questo errore.




grazie
Registrato
M.A.W. 1968
** LEGGETE IL REGOLAMENTO ! **
Global Moderator
Hero Member
*****

Karma: +224/-19
Scollegato Scollegato

Messaggi: 2988


Discrete And Combinatorial Mathematics


Mostra profilo WWW
« Risposta #1 inserita:: Luglio 28, 2013, 05:07:23 »

Il listato proposto contiene diversi errori di varia natura.
Eccone una possibile versione corretta, didatticamente valida e parzialmente commentata:

Codice:
#include <stdio.h>

#define MAX_SIZE 5

/*
** Questa e' la maniera piu' corretta di emulare una
** variabile booleana in C'89
*/
typedef enum {FALSE, TRUE} Boole_t;

/*
** Sempre buona norma passare come parametri
** sia il vettore che la sua dimensione/i.
*/
Boole_t verifica (int vettore[], const size_t size, const int dato);

int main()
{
    /*
    ** Il vettore deve essere inizializzato correttamente:
    ** nel sorgente proposto c'è una virgola di troppo
    */
    int vettore[MAX_SIZE] = {0,2,3,4,5};

    /* Molto meglio separare le dichiarazioni */
    int leggi, i;
    Boole_t risposta;

    printf("Il vettore contiene i seguenti elementi: %d",
           vettore[0]);
    for (i = 1; i < MAX_SIZE; ++i)
    {
        printf(", %d", vettore[i]);
    }

    printf("\n\n> Inserisci il numero da cercare: ");
    scanf("%d", &leggi);

    risposta = verifica(vettore, MAX_SIZE, leggi);
    /* Studia l'operatore ternario! */
    printf("\nELEMENTO%sTROVATO.\n", risposta ? " " : " NON ");
    return 0;
}

Boole_t verifica(int vettore[], const size_t size, const int leggi)
{
    Boole_t res = FALSE;

    /*
    ** Inutile usare nomi kilometrici per una banale
    ** variabile d'induzione.
    */
    size_t i;

    for(i = 0; i < size; ++i)
    {
        if (leggi == vettore[i])
        {
            res = TRUE;
            /* Ho trovato l'elemento, inutile continuare */
            break;
        }
    }

    return res;
}


Naturalmente si può migliorare ampiamente e in più direzioni, ma questo è pur sempre un inizio decoroso.
Nota bene che, se è noto a priori che il vettore è ordinato (ad esempio in senso ascendente) esistono algoritmi molto più efficienti, a partire dalla ricerca binaria.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.

Un blog? Io? Occhiolino
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines