Problem bei Berechnung von bestimmten Werten



  • Hi!

    so ich hab leider nen kleines Problem in meinem Programm.
    Wäre supi wenn mir da jemand helfen könnte^^

    Also erstmal die Aufgabenstellung:

    Lese kontinuierlich Werte ein und gib dann den Durchschnitt, den min und den max Wert der letzten 5 Eingaben aus.
    Das Programm wird nach der Eingabe -123 beendet.

    Nun hier mein bisheriges Programm:

    #include "stdafx.h"
    
    int main(int argc, char* argv[])
    {
    
    	// Variablendeklaration
    
    	int wert[5];
    	double durchschnitt;
    	int i;
    	int min;
    	int max;
    
    	// Erstellung
    
    	printf("\t\t\t   Me\xe1wertanalyse \n\n\n");
    
    	printf("\tZur Beendigung des Programmes Bitte -123 eingeben!!!\n\n\n\n");
    
    	do
    	{
    			printf("Bitte Wert eingeben: ");	// Eingabe
    			scanf("%i", & wert[4]);
    
    			durchschnitt = (wert[0] + wert[1] + wert[2] + wert[3] + wert[4]) /5;	// Berechnung des Durchschnittes
    			printf("\n\nDer Durchschnitts betr\x84gt: %lf\n\n", durchschnitt);		// Ausgabe des Durchschnittes
    
    				min=0;
    
    				int min = wert[4];
    
    				for(i=1; i<5; i++)		// Herraussuchen des min Wertes
    				{
    					if(wert[i] <= min)
    					{
    						min = wert[i];
    					}
    				}
    
    				printf("min Wert betraegt: %i\n\n", min);	// Ausgabe des min Wertes
    
    					max=0;			// Herraussuchen des max Wertes
    
    					int max=wert[4];
    
    					for(i=1; i<5; i++)
    					{
    						if(wert[i] > max)
    						{
    							max = wert[i];
    						}
    					}
    
    					printf("max Wert betraegt: %i\n\n\n\n", max);	// Ausgabe des max Wertes
    
    						for(i=0; i<4; i++)	// Array Werte Verschiebung
    						{
    							wert[i] = wert[i+1];
    						}				
    	}
    	while(wert[4]!=-123);	// Beendigung des Programmes bei der Eingabe von -123 
    
    	printf("\n\n\n");
    
    	return 0;
    }
    

    So nun mein Problem ist, dass die Ersten 5 Eingaben beim Durchschnitt und beim min Wert nur blödsinn ausgben. Das ist ja weil die Variablen irgend nen Wert annehmen wenn nichts initalisiert wurde.
    Doch wenn ich alle Arrywerte am Anfang auf Null setzen würde, hätt ich ja immer noch nen Problem mit dem min Wert bei den ersten 5 Eingaben.

    Hat da jemand vielleicht ne idee wie ich das hinkriegen könnte?

    Schon mal danke XD

    baba Tess



  • Du musst einen counter von 0 bis 5 mitlaufen lassen der dir sagt wieviele werte schon gültig sind.
    Kurt



  • int main(){
       double x;
       in>>x;
       double min=x;
       double max=x;
       double sum=x;
       double count=1;
       in>>x;
       while(x!=123){
          if(x<min) min=x;
          if(x>max) max=x;
          sub+=x;
          ++count;
       }
       cout<<min<<' '<<sum/count<<' '<<max<<'\n;
       return 0;
    }
    

    ups, ich gebe ja die statistik für alle werte aus.



  • Und wie soll das funktionieren kann mir noch nichts drunter vorstellen



  • ungefähr so

    #include <stdio.h>
    
    int main(int argc, char* argv[]){
        // Variablendeklaration
        int wert[5];
        double durchschnitt;
        int i;
        int min;
        int max;
    
        int numvals=0; // Anzahl der gültigen werte -1.
    
        // Erstellung   
        printf("\t\t\t   Me\xe1wertanalyse \n\n\n");
        printf("\tZur Beendigung des Programmes Bitte -123 eingeben!!!\n\n\n\n");
    
        do {
           printf("Bitte Wert eingeben: ");    // Eingabe
           scanf("%i", & wert[numvals]);
           durchschnitt = 0;
           for ( i = 0; i <= numvals; ++i )      // Berechnung des Durchschnittes
              durchschnitt += wert[i];
           durchschnitt = (double)durchschnitt / ( numvals+1 );
           printf("\n\nDer Durchschnitts betr\x84gt: %lf\n\n", durchschnitt); // Ausgabe des Durchschnittes
    
           min = wert[0];
           for(i=0; i<=numvals; i++)   // Herraussuchen des min Wertes
              if(wert[i] < min)
                  min = wert[i];
    
           printf("min Wert betraegt: %i\n\n", min);    // Ausgabe des min Wertes    
    
           max=wert[0];               // Herraussuchen des max Wertes
           for(i=0; i<=numvals; i++)
               if(wert[i] > max)
                   max = wert[i];
    
            printf("max Wert betraegt: %i\n\n\n\n", max);    // Ausgabe des max Wertes
    
            if ( numvals == 4 ) {      // Array Werte Verschiebung           
               for(i=0; i<4; i++)    
                   wert[i] = wert[i+1];
            }             
            if ( numvals < 4 )
                numvals++; 
        }
        while(wert[numvals]!=-123);    // Beendigung des Programmes bei der Eingabe von -123
        printf("\n\n\n");
        return 0;
    }
    

    Kurt



  • oder ohne "Array Werte Verschiebung":

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	const int EINGABE_ZAHL = 5;
    	int index=0, eingabe=0, anzahlEingaben=0;
    	int werte[EINGABE_ZAHL];
    
    	while(true)
    	{
    		cout << "Bitte gib eine Zahl ein.\nGib zum Beenden die Zahl -123 ein." << endl;
    		cin >> eingabe;
    
    		if(eingabe == -123)
    			break;
    
    		werte[index] = eingabe;
    		index = (index + 1) % EINGABE_ZAHL;
    		++anzahlEingaben;
    	}
    
    	if(anzahlEingaben < EINGABE_ZAHL)
    		cout << "Schade, das waren " << (EINGABE_ZAHL - anzahlEingaben) << " Eingaben zu wenig." << endl;
    	else
    	{
    		int min,max,sum;		
    		double mittel;
    		min = max = sum = werte[0];
    		for(index=1; index<EINGABE_ZAHL; ++index)
    		{
    			if(werte[index] < min)
    				min = werte[index];
    
    			if(werte[index] > max)
    				max = werte[index];
    
    			sum += werte[index];
    		}
    		cout << "Minimum:\t" << min << endl;
    		cout << "Maximum:\t" << max << endl;
    		cout << "Mittelwert:\t" << sum << "/" << EINGABE_ZAHL << " = " << sum/static_cast<double>(EINGABE_ZAHL) << endl;
    	}
    
    	//cin.clear(); //hat nicht funktioniert! warum nur???
    	if(cin.peek()==10)
    		cin.get();
    
    	cin.get();
    }
    


  • Sehe gerade,

    double mittel;
    

    ist überflüssig.


Anmelden zum Antworten