Errore che non capisco nel risultato finale

di Anonimizzato20404 il
14 risposte
Salve ragazzi, stavo sviluppando un programma per il calcolo della percentuale di ragazzi più alta o bassa rispetto ad un dato valore in una classe.
Solo che andando a compilare il programma, mi ritrovo un errore che non capisco dove sia.
Il programma è:
/* Prove d'esame - Blocco 2 - 1
Si dichiari un vettore VET di numeri reali, di cardinalità N, atto a contenenere i valori delle altezze degli studenti di 
una classe. Si richieda all'utente l'inserimento di M valori di altezze. Si progetti poi una funzione che restituisca, 
come parametro di ritorno, la percentuale di studenti con una altezza superiore ad un certo valore di riferimento 
H fornito come parametro di ingresso dalla funzione. */

#include <iostream>
#include <cmath>
using namespace std;

typedef int AltezzeClasse[100];

void Inserimento(AltezzeClasse C, int& N);
float Percent (const AltezzeClasse C, const int N, int& bassi, int& alti, float& H, float& Perce);

int main (){
	
	AltezzeClasse C;
	int N;
	int bassi;
	int alti;
	float H;
	float Percentuale;
	
	Inserimento (C, N);
	
	cout << Percent (C, N, bassi, alti, H, Percentuale);
	
return 0;
}

void Inserimento(AltezzeClasse C, int& N){
	cout << "Inserire la cardinalita' del vettore delle altezze della classe:" << endl;
	cin >> N;
	
	cout << "Ora bisogna inserire i valori delle altezze della classe." << endl;
	for (int i=0; i<N; i++){
		cout << "L'altezza del ragazzo " << i+1 << " e': ";
		cin >> C[i];
	}
}

float Percent (const AltezzeClasse C, const int N, int& bassi, int& alti, float& H, float& Perce){
	cout << "Inserire il valore di riferimento:" << endl;
	cin >> H;
	
	for (int i=0; i<N; i++)
		if (H>=C[i]){
			bassi++;
		}
		else{
			alti ++;
		}

	
	cout << "La percentuale di ragazzi piu' alti del valore H e':" << endl;
	Perce = ((alti/(N) * 100);

return Perce;
}
Non capisco perché non venga numericamente il risultato.. Dov'è l'errore ?

14 Risposte

  • Ho corretto inizializzando le variabili "alti" e "bassi" ma niente da fare, continua a darmi valori sballati.
    Eppure non mi pare che sbagli nemmeno nel richiamo della funzione.
  • Non è possibile che non ti dia altri messaggi d'errore.

    Ho tentato e ho avuto un errore nella linea

    Perce = ((alti/(N) * 100);
  • Non mi segnala alcun errore su Perce..
    Non so, non capisco.. Ho provato un po' a semplificare la funzione, alla luce del fatto che a me serve giusto sapere il numero di alunni più alti:
    
    float Percent (const AltezzeClasse C, const int N, int& alti, float& H, float& Perce){
    	cout << "Inserire il valore di riferimento:" << endl;
    	cin >> H;
    	
    	alti = 0;
    	
    	for (int i=0; i<N; i++)
    		if (H<C[i]){
    			alti++;
    		}
    
    	
    	cout << "La percentuale di ragazzi piu' alti del valore H e':" << endl;
        Perce = (alti/N)*100;
    
    return Perce;		
    
    Ma niente, continua a darmi un valore totalmente sbagliato. Che errore commetto ?
  • Ripeto ... guarda bene quella linea come l'avevi scritta...!

    Adesso il codice si ferma ad una return ... e poi? E la variabile alti non esiste!

    Non credo che tu non abbia altri messaggi ... mostra una schermata
  • Ti giuro, non ho messaggi quando compilo il programma.
    Anche perché se avessi messaggi di errore non avrei l'opportunità di testare il programma, non partirebbe la compilazione.

    L'errore è quindi sulla linea della percentuale.. Mmm..
    Ma è un errore aritmetico o di linguaggio di programmazione ?
  • Perdonami, perché la variabile alti non esiste ? L'ho inizializzata, ho anche provato un cout con alti e mi da un valore corretto. Non capisco.
  • Vuoi mandare una schermata dell'IDE con l'errore?

    Comunque, confronta la dichiarazione della funzione Perce in testa al programma con la funzione Perce vera e propria ... con attenzione
  • Pittella ha scritto:


    Perdonami, perché la variabile alti non esiste ? L'ho inizializzata, ho anche provato un cout con alti e mi da un valore corretto. Non capisco.
    Hai modificato il post e prima di modificarlo la variabile alti non esisteva.

    Se modifichi il codice nei post a cui ti ho già risposto, non ci capiamo più nulla.
  • Oregon, ho modificato un po' di messaggi dietro, forse parli di una situazione che ho già modificato.
    Il programma che ho sviluppato fino ad ora è:
    
    /* Prove d'esame - Blocco 2 - 1
    Si dichiari un vettore VET di numeri reali, di cardinalità N, atto a contenenere i valori delle altezze degli studenti di 
    una classe. Si richieda all'utente l'inserimento di M valori di altezze. Si progetti poi una funzione che restituisca, 
    come parametro di ritorno, la percentuale di studenti con una altezza superiore ad un certo valore di riferimento 
    H fornito come parametro di ingresso dalla funzione. */
    
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    typedef int AltezzeClasse[100];
    
    void Inserimento(AltezzeClasse C, int& N);
    float Percent (const AltezzeClasse C, const int N, int& alti, float& H, float& Perce);
    
    int main (){
    	
    	AltezzeClasse C;
    	int N;
    	int alti;
    	float H;
    	float Percentuale;
    	
    	Inserimento (C, N);
    	
    	cout << Percent (C, N, alti, H, Percentuale);
    	
    return 0;
    }
    
    void Inserimento(AltezzeClasse C, int& N){
    	cout << "Inserire la cardinalita' del vettore delle altezze della classe:" << endl;
    	cin >> N;
    	
    	cout << "Ora bisogna inserire i valori delle altezze della classe." << endl;
    	for (int i=0; i<N; i++){
    		cout << "L'altezza del ragazzo " << i+1 << " e': ";
    		cin >> C[i];
    	}
    }
    
    float Percent (const AltezzeClasse C, const int N, int& alti, float& H, float& Perce){
    	cout << "Inserire il valore di riferimento:" << endl;
    	cin >> H;
    	
    	alti = 0;
    	
    	for (int i=0; i<N; i++)
    		if (H<C[i]){
    			alti++;
    		}
    
    	cout << "La percentuale di ragazzi piu' alti del valore H e':" << endl;
        Perce = (alti/N)*100;
    
    return Perce;
    }
    Il compilatore non mi segnala alcun problema, avvio il programma, lo provo ma non ottengo il risultato corretto.
    Ora, quel che non capisco è dov'è l'errore. Ho anche confrontato la dichiarazione della funzione Perce e poi la funzione in se non trovo corrispondenze sbagliate.
  • Ora hai corretto il codice ... quali dati inserisci che non ti tornano?
  • oregon ha scritto:


    Ora hai corretto il codice ... quali dati inserisci che non ti tornano?
    Non mi calcola la percentuale, esce sempre 0.
    Non capisco perché, bah. Eppure non noto errori.
  • Il calcolo fallo così

    Perce = ((float)alti/N)*100;
  • Ora si che viene!
    Posso chiederti perché ?
  • Alti e N sono valori interi e hai un risultato intero della divisione se non indichi che uno è float
Devi accedere o registrarti per scrivere nel forum
14 risposte