Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31

    [C] inserimento numeri nel vettore e non far inserire numeri gia presenti

    provavo a fare un altro esercizio che chiede di riempire un vettore con numeri interi e di contrallare se il numero è gia presente, in questo caso far uscire un messaggio che dice appunto numero gia presente e continuare l'inserimento, il problema è che non funziona, sapete aiutarmi?
    quello che ho scritto io è:

    #include <stdio.h>
    #include <conio.h>
    int main()
    {
    int vet[5];
    int i;

    for(i=0; (i<5)&&(vet[i]!=vet[i+1]); i++)
    {
    printf("digita numero: ");
    scanf("%d",& vet[i]);
    fflush(stdin);

    if(vet[i]==vet[i+1])
    {
    printf("numero gia presente nel vettore");
    }
    }
    getch();
    }


    grazie a chiunque voglia rispondermi

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Non è impostato bene... ogni volta che leggi un elemento dell'array, prima lo devi leggere da tastiera (supponiamo con una variabile di appoggio), poi devi controllare in tutto il sottoarray che hai creato fino a quel momento se il valore esiste già: se questo si verifica, stampi un messaggio di errore e chiedi nuovamente l'immissione del valore, altrimenti lo salvi nell'array in posizione i-esima, dove i è l'indice del ciclo (indice che devi incrementare ovviamente solo quando l'immissione avviene effettivamente... se viene rifiutata, non va incrementato).
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    Originariamente inviato da YuYevon
    Non è impostato bene... ogni volta che leggi un elemento dell'array, prima lo devi leggere da tastiera (supponiamo con una variabile di appoggio), poi devi controllare in tutto il sottoarray che hai creato fino a quel momento se il valore esiste già: se questo si verifica, stampi un messaggio di errore e chiedi nuovamente l'immissione del valore, altrimenti lo salvi nell'array in posizione i-esima, dove i è l'indice del ciclo (indice che devi incrementare ovviamente solo quando l'immissione avviene effettivamente... se viene rifiutata, non va incrementato).
    Grazie! gentilissimo! Solo che ehm...o.o mica potresti tradurre in codice quanto detto?^^ se non ti chiedo troppo, senno fa nulla grazie comunque dello spunto di riflessione, sei anche tu di Napoli grazie ancora

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da hevan
    Grazie! gentilissimo! Solo che ehm...o.o mica potresti tradurre in codice quanto detto?^^ se non ti chiedo troppo
    Posso e non mi chiedi molto... il problema è un altro: sicuro che ti servirebbe a qualcosa? Credo sia molto meglio se provi a scrivertelo da solo... la pratica forma molto più della semplice "lettura", questo è vero semrpe ma in particolar modo quando si programma...

    Originariamente inviato da hevan
    senno fa nulla grazie comunque dello spunto di riflessione
    Sfruttalo... prova a scrivere il codice, e se non ci riesci riprovaci, e se proprio non ci riesci mettilo da parte qualche giorno, continua a studiare o a ripetere quello che già hai studiato e poi riprovaci ancora fin quando non ci riesci. Non c'è altro modo per imparare, parola di chi di cose da imparare ne ha ancora un bel po'... :)

    Originariamente inviato da hevan
    sei anche tu di Napoli :zizi: grazie ancora :ciauz:
    ;D
    every day above ground is a good one

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    Originariamente inviato da YuYevon
    Posso e non mi chiedi molto... il problema è un altro: sicuro che ti servirebbe a qualcosa? Credo sia molto meglio se provi a scrivertelo da solo... la pratica forma molto più della semplice "lettura", questo è vero semrpe ma in particolar modo quando si programma...



    Sfruttalo... prova a scrivere il codice, e se non ci riesci riprovaci, e se proprio non ci riesci mettilo da parte qualche giorno, continua a studiare o a ripetere quello che già hai studiato e poi riprovaci ancora fin quando non ci riesci. Non c'è altro modo per imparare, parola di chi di cose da imparare ne ha ancora un bel po'...



    ;D
    ^^ tutto giusto, hai ragione, pero' a volte anche solo guardare e studiare gli esercizi degli altri aiuta, anche perchè ne dovrei fare anche altri...quindi se non ti chiedo troppo a scriverlo... in caso contrario ci riprovero' ma ci sto su da parecchio inoltre sono molto impegnato e non ho neanche il tempo materiale di dedicarmici troppissimo, cmq grazie per aver risposto...(sei stato l'unico..)
    ciauuuz

  6. #6
    codice:
    #include <stdio.h>
    
    /* La macro ARRSIZE consente di calcolare il numero di elementi di un array di cui siano note le dimensioni a compile-time */
    #define ARRSIZE(arr)    (sizeof(arr)/sizeof(*(arr)))
    
    /* Cerca un elemento in un vettore di int; restituisce l'indice dell'elemento o -1 castato a unsigned long se non ha trovato nulla */
    unsigned long findInVector(int Value, int * Vector, size_t VectorSize);
    
    /* Entrypoint */
    int main(void)
    {
        /* Vettore in cui andiamo a memorizzare gli elementi */
        int vector[5];
        /* Posizione corrente nel vettore */
        int pos;
        /* Ciclo che si ripete per ogni elemento del vettore */
        for(pos=0;pos<ARRSIZE(vector);pos++)
        {
            /* Acquisizione del numero */
            printf("Inserisci un numero per vector[%d]: ",pos);
            if(scanf("%d",&vector[pos])!=1)
            {
                /* Se la scanf restituisce un valore diverso da 1 significa che non è riuscita ad ottenere il numero (l'utente ha inserito una valore non numerico) */
                puts("Valore non valido.");
                /* Svuota il buffer di input */
                while(getchar()!='\n')
                    ;
                /* Torna indietro di una posizione */
                pos--;
                /* Procede con la prossima iterazione */
                continue;
            }
            /* Cerca l'elemento nella parte di vettore finora caricata (escluso il valore corrente) */
            if(findInVector(vector[pos],vector,(size_t)pos)!=(unsigned long)-1)
            {
                /* Se lo trova notifica l'errore */
                puts("Numero gia' inserito.");
                /* Torna indietro di una posizione */
                pos--;
                /* Procede con la prossima iterazione */
                continue;
            }
        }
        /* Tutto ok */
        return 0;
    }
    
    /* Cerca un elemento in un vettore di int; restituisce l'indice dell'elemento o -1 castato a unsigned long se non ha trovato nulla */
    unsigned long findInVector(int Value, int * Vector, size_t VectorSize)
    {
        /* Posizione corrente */
        unsigned long pos;
        /* Ciclo che si ripete per ogni elemento del vettore */
        for(pos=0;pos<VectorSize;pos++)
        {
            /* Se il valore dell'elemento è uguale al valore da cercare la ricerca è finita */
            if(Vector[pos]==Value)
                return pos;
        }
        /* Se si arriva qui significa che non è stato trovato nulla */
        return (unsigned long)-1;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    Graie MItaly ,gentilissimo! provero' a studiarmi il tuo listato, Solo che pensavo potesse essere risolto in modo più semplice °_° ci sono cose che non ho mai visto^^ sono ancora ignorante in materia, cmq grazie per la disponibilità;

  8. #8
    Senza dubbio si può risolvere in maniera più semplice, ma personalmente preferisco scrivere codice più pulito piuttosto che troppo compatto. Ad esempio, la funzione di ricerca poteva essere incorporata del main, ma così ora hai lì una funzione che potrai riutilizzare in seguito, e il programma risulta meglio strutturato. La macro ARRSIZE è semplicemente per comodità e per chiarezza (la uso praticamente sempre). Il resto delle "complicazioni" sono fondamentalmente per gestire ogni errore possibile da parte dell'utente senza fare danni, una delle cose che bisognerebbe sempre fare per evitare problemi.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.