Pagina 1 di 1

Determinare il valore massimo di un vettore [C]

Inviato: sab apr 05, 2014 11:19 pm
da BFC_leojr
Ciao a tutti. Sto facendo un programma in C in cui tra le altre cose deve dirmi il valore massimo e la posizione tra una serie di numeri in un vettore. Ho provato in molti modi anche cercando su internet ma non riesco, invece del numero massimo mi da come risultato sempre l'ultimo numero inserito. Questo è il pezzo di codice, cosa sbaglio?

http://prntscr.com/37bpin

Re: Determinare il valore massimo di un vettore [C]

Inviato: dom apr 06, 2014 3:38 pm
da developerwinme
A meno che non mi sia sfuggito qualcosa di evidentemente sbagliato, direi che il frammento di codice è giusto (a patto che le variabili di cui non si vede l'inizializzazione siano correttamente inizializzate), sicuro di testarlo con un input corretto (ad esempio, casuale)? :s

Re: Determinare il valore massimo di un vettore [C]

Inviato: dom apr 06, 2014 4:08 pm
da BFC_leojr
Questo è il codice completo, io credo comunque che sia giusto:

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>

#define n_max 20

int main()
{
    float voto[n_max];  //Voto vettore
    char i_n[n_max];    //Iniziali nome vettore
    char i_c[n_max];    //Iniziali cognome vettore
    int pos;            //Posizione
    int scelta;         //Scelta nel case
    int num_stud;       //Numero studenti
    int pos_voto_max;   //Posizione voto alto
    float voto_max;     //Voto massimo

    for (pos=0;pos<n_max;pos++) {
        voto[pos]=0;
        i_n[pos]=' ';
        i_c[pos]=' ';
    }

    printf("Numero studenti: ");
    scanf("%d", &num_stud);

    while (num_stud>n_max || num_stud<1) {
        printf("Errore");

        printf("Numero studenti: ");
        scanf("%d", &num_stud);
    }

    for (pos=0;pos<num_stud;pos++) {
        printf("\nInserisci voto: ");
        scanf("%f", &voto);

        printf("Inserisci iniziale nome: ");
        scanf(" %c", &i_n);

        printf("Inserisci iniziale cognome: ");
        scanf(" %c", &i_c);
    }

    printf("\nInserisci la tua scelta (1-11, 0 per finire): ");
    scanf("%d", &scelta);

    switch (scelta) {
        case 1:
         printf("\nVoto, iniziale nome, iniziale cognome del primo studente: %.1f %c %c", voto[0],i_n[0],i_c[0]);
         break;

        case 2:
         printf("\nVoto, inizale nome, iniziale cognome dell'ultimo studente: %.1f %c %c", voto[num_stud-1],i_n[num_stud-1],i_c[num_stud-1]);
         break;

        case 3:
         voto_max=0;
         pos_voto_max=0;
            for(pos=0;pos<num_stud;pos++) {
                if(voto[pos]>voto_max) {
                    voto_max=voto[pos];
                    pos_voto_max=pos;
                }

            }
         printf("Il voto massimo e' %.2f e la sua posizione e' %d", voto_max,pos_voto_max);

    }

    return 0;
}

Re: Determinare il valore massimo di un vettore [C]

Inviato: dom apr 06, 2014 7:18 pm
da developerwinme
Direi che un problema sta sicuramente in questo frammento:

Codice: Seleziona tutto

    for (pos=0;pos<num_stud;pos++) {
        printf("\nInserisci voto: ");
        scanf("%f", &voto);

        printf("Inserisci iniziale nome: ");
        scanf(" %c", &i_n);

        printf("Inserisci iniziale cognome: ");
        scanf(" %c", &i_c);
    }
Se passi alla funzione scanf il puntatore al primo elemento del vettore tutte le volte che viene eseguito il ciclo, il vettore non viene correttamente inizializzato. Devi sostituire il codice che ho quotato con questo:

Codice: Seleziona tutto

	for (pos = 0; pos<num_stud; pos++) {
		printf( "\nInserisci voto: " );
		scanf( "%f", &voto[pos] );

		printf( "Inserisci iniziale nome: " );
		scanf( " %c", &i_n[pos] );

		printf( "Inserisci iniziale cognome: " );
		scanf( " %c", &i_c[pos] );
	}
Non ho fatto caso alla presenza di eventuali altri errori, ma da una veloce occhiata direi che ora dovrebbe funzionare, fermo restando che magari si possono fare ulteriori miglioramenti/ottimizzazioni.

Ti suggerisco comunque di dotarti di un IDE (il mio consigliato è il sempre ottimo Visual Studio 2013 Express per Windows Desktop: http://www.visualstudio.com/it-it/downl ... Families_2 ) che ti permetta di eseguire debug del codice per imparare a scovare gli errori.

Re: Determinare il valore massimo di un vettore [C]

Inviato: dom apr 06, 2014 9:06 pm
da BFC_leojr
Grazie mille ora funziona