Problema nel trovare il numero maggiore di un array

di il
5 risposte

Problema nel trovare il numero maggiore di un array

Ciao a tutti, sono quello dell'esercizio del magazzino, se vi ricordate... Sono comunque riuscito a farlo bene quell'esercizio
Ora... Ho questo programma qui:
"Si scriva un programma che allochi dinamicamente un vettore di interi e che effettui le operazioni di: - ricerca di un valore all'interno del vettore restituendo la posizione se il valore è presente - ricerca del valore massimo e di quello minimo presenti nel vettore - reverse degli elementi del vettore Il tutto lavorando sui valori del vettore sia tramite notazione vettoriale che tramite l’aritmetica dei puntatori."

Io l'ho fatto, ho solo un problema nel trovare il valore massimo dell'array.
Ecco il mio codice, andate alla fine per la parte interessata.
#include <stdio.h>
#include <stdlib.h>

void main(void)

{
    int *P;
    int i = 0, k = 0, numCerca, numCelle, valori, scelta = 0;


    printf("Inserire il numero di celle del vettore: ");
    scanf("%d", &numCelle);

    P = (int*)malloc(numCelle * sizeof(int));

    for(i = 1; i <= numCelle; i++)
    {
        printf("Inserire il numero da inserire nella cella numero %d: ", i);
        scanf("%d", &valori);
        P[i] = valori;
    }



    printf("Vuoi stampare a video i numeri contenuti nell'array?\n");
    printf("Scrivere 0 per confermare, 1 per saltare questa fase.\n");
    scanf("%d", &scelta);

    if(scelta == 0)
    {
        for(i = 1; i <= numCelle; i++)
        {
            printf("%d\n", *(P + i));
        }
    }
    puts("");
    int flag = 0, scelta_2, scelta_3;
    printf("Si vuole ricerecare un elemento dell'array?\n");
    printf("Scrivere 0 per continuare, 1 per saltare questa fase di programma\n");
    scanf("%d", &scelta_2);

    if(scelta_2 == 0)
    {
        printf("Che elemento si vuole ricercare?\n");
        scanf("%d", &scelta_3);

        for(i = 1; i <= numCelle; i++)
        {
            if(scelta_3 == P[i])
            {
                printf("L'elemento e\' presente nella cella numero %d", i);
                puts("");
                flag = 1;
            }
        }

        if(flag == 0)
        {
            printf("L'elemento non e\' stato trovato\n");
            flag = 0;
        }
    }

    puts("");
    int scelta_4 = 0;
    printf("Vuoi eseguire il reverse degli elementi del vettore?\n");
    printf("Scrivere 0 per continuare, 1 per saltare questa fase di programma\n");
    scanf("%d", &scelta_4);

    if(scelta_4 == 0)
    {
        for(i = numCelle; i >= 1; )
        {
            printf("%d\n", P[i]);
            scelta_4 = 0;
            i--;
        }
    }
    puts("");
    int scelta_5 = 0, maggiore = 0, posizione = 0, minore = 0, scelta_6;
    printf("Si desidera trovare l'elemento piu' grande dell'array?\n");
    printf("Scrivere 0 per confermare, 1 per saltare questa fase di programma\n");
    scanf("%d", &scelta_5);


    if(scelta_5 == 0)
    {
        
        maggiore = P[0];
        for(i = 0; i < numCelle; i++)
        {
           
            
            if(maggiore < P[i])
            {
                maggiore = P[i];
            }
        }


    printf("Il numero maggiore e\': %d\n", maggiore);
    }

    printf("Si desidera trovare l'elemento più piccolo dell'array?\n");
    printf("Scrivere 0 per continuare, 1 per saltare questa fase di programma\n");
    scanf("%d", &scelta_6);

    if(scelta_6 == 0)
    {
        minore = P[0];
        for(i = 0; i < numCelle; i++)
        {
            
            if(minore > P[i])
            {
                minore = P[i];
            }
        }

    printf("Il numero minore e\': %d\n", minore);

    }

    puts("");


    system("pause");
    return 0;
}

Il problema è che il valore minimo lo trova tranquillamente, quello massimo no! Eppure il procedimento seguito è lo stesso, la dichiarazione e inizializzazione è la stessa, ma il programma non mi stampa il valore massimo bensì un numero che non c'entra niente! Sapreste illuminarmi?
Grazie mille in anticipo.

5 Risposte

  • Re: Problema nel trovare il numero maggiore di un array

    Potresti almeno specificare quali valori hai inserito?
    Ad ogni modo suggerisco di utilizzare un debugger o, in assenza di questo, inserire delle printf() all'interno delle parti incriminate per capire come si comporta.
    Così ti accorgi che P[0] contiene un valore casuale...
  • Re: Problema nel trovare il numero maggiore di un array

    For(i = 1; i <= numCelle; i++) ?
  • Re: Problema nel trovare il numero maggiore di un array

    Un semplice consiglio al posto di utilizzare tutte quelle variabili di scelta perchè non fai un bel menù ed usi il costrutto switch - case ?
    cosi il programma diventa di più facile lettura.
    veniamo ad alcuni errori che hai fatto
    ricordati che i vettori in c/c++ iniziano da zero e non da 1
    [/u][/i][/b]
    quando immetti i dati devi considerare anche il valore di indice zero cosa che non fai.
    for(i = 1; i <= numCelle; i++)
        {
            printf("Inserire il numero da inserire nella cella numero %d: ", i);
            scanf("%d", &valori);
            P[i] = valori;
        }
    sopra e il tuo codice di immissione dati
    per un corretto funzionamento il ciclo for deve essere impostato da 0 a i<numcelle
    sotto il tuo codice di ricerca minore
    {
           
            maggiore = P[0];
            for(i = 0; i < numCelle; i++)
            {
               
               
                if(maggiore < P[i])
                {
                    maggiore = P[i];
                }
    allora l'errore stà nel fatto che quando immetti i dati nel vettore li immetti a partire dalla locazione 1 mentre quando vai a ricercare il maggiore inizi dalla locazione 0.
    la quale non essendo stata assegnata avrà un valore casuale che risulterà essere > dei valori che tu immetti.
    ecco spiegato perchè il minimo viene trovato.
    per risolvere il problema basta che metti maggiore = 0
    0 se vuoi preimpostare maggiore=p[0] devi far partire il ciclo da 1.
    ma ricordati di inserire p[0] altrimenti saresti al punto di prima!
    spero di esserti stato di aiuto
  • Re: Problema nel trovare il numero maggiore di un array

    Ciao e grazie per aver risposto. Comunque, mi ero accorto del fatto che partivo da 1 dopo aver posto la domanda, tuttavia questo non risolve il mio problema. Cioè, i valori vengono salvati correttamente, poi però quando vado a fare il reverse mi viene tolto un valore e viene messo uno di questi numeri enormi che non c'entrano assolutamente nulla. E' in quel punto l'errore, poi dopo per forza nel trovare il maggiore mi viene restituito quel numero. (Cioè, di per sé l'algoritmo va bene, ma nel reverse mi viene sostituito un valore e non so il perché...).
  • Re: Problema nel trovare il numero maggiore di un array

    Ce l'ho fatta ragazziiiiii!! Grazie mille comunque per l'aiuto!!!
    Ciao!
Devi accedere o registrarti per scrivere nel forum
5 risposte