Determinare il valore massimo di un vettore [C]

"Null reference exception"? no, grazie, prendo un "unexpected T_VARIABLE"... Questo è il forum per imparare l'arte della programmazione o per chiedere un parere su una sessione di debug particolarmente ostica.
Regole del forum
Ricorda di indicare chiaramente nell'oggetto il linguaggio ([C#] oppure [PHP], [Java], [HTML], ...), se la discussione ne riguarda uno in particolare!
Rispondi
Avatar utente
BFC_leojr
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 164
Iscritto il: gio mag 02, 2013 8:10 pm

Determinare il valore massimo di un vettore [C]

Messaggio 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

System
System
Bot ufficiale TurboLab.it
Bot
Messaggi:
Iscritto il: sab dic 31, 2016 6:19 pm
Contatta: Contatta

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

Messaggio da System » sab apr 05, 2014 11:19 pm


Avatar utente
developerwinme
Livello: Workstation (10/15)
Livello: Workstation (10/15)
Messaggi: 1319
Iscritto il: mer mag 01, 2013 1:35 pm
Località: Como
Contatta:

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

Messaggio 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
Marco Adriani
developerwinme.wordpress.com

Avatar utente
BFC_leojr
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 164
Iscritto il: gio mag 02, 2013 8:10 pm

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

Messaggio 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;
}

Avatar utente
developerwinme
Livello: Workstation (10/15)
Livello: Workstation (10/15)
Messaggi: 1319
Iscritto il: mer mag 01, 2013 1:35 pm
Località: Como
Contatta:

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

Messaggio 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.
Marco Adriani
developerwinme.wordpress.com

Avatar utente
BFC_leojr
Livello: DVD-ROM (5/15)
Livello: DVD-ROM (5/15)
Messaggi: 164
Iscritto il: gio mag 02, 2013 8:10 pm

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

Messaggio da BFC_leojr »

Grazie mille ora funziona

System
System
Bot ufficiale TurboLab.it
Bot
Messaggi:
Iscritto il: sab dic 31, 2016 6:19 pm
Contatta: Contatta

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

Messaggio da System » dom apr 06, 2014 9:06 pm


Rispondi
  • Argomenti simili
    Risposte
    Visite
    Ultimo messaggio