Eine Prozentangabe in eine Schleife implementieren



  • ich habe mir einen Zahlengenerator geschrieben, bei dem der Benutzer Anfangswert, Endwert und Schritte eingeben kann und dann die Zahlen einfach hochgezählt werden und in eine .txt Datei geschrieben werden.

    #include <iostream>
    #include <fstream>
    
    	using namespace std;
    
    int main()
    {
    
    	double Schritte;
    	double Anfangswert;
    	double Endwert;
    
    	cout<<"Anfangswert:"<<endl;
    	cin>>Anfangswert;
    
    	cout<<"Endwert:"<<endl;
    	cin>>Endwert;
    
    	cout<<"Schritte:"<<endl;
    	cin>>Schritte;
    
    	ofstream myfile;
    	myfile.open ("Zahlenliste.txt");
    
    	for (double i = Anfangswert ; i < Endwert  ; i += Schritte)
    	{
    	myfile << i << endl;
    	}
    
    	myfile << Endwert << endl;
    
    cout<<"Fertig"<<endl;
    
    myfile.close();
    
    getchar();
    getchar();
    
    	return 0;
    }
    

    Nun möchte ich noch eine Ausgabe( in form einer Schleife ) erstellen, die in Prozent ausgiebt, wie weit das Programm schon ist.
    Wie bewerkstellige ich das?

    Bei meinem ersten Programm habe ich das wie folgt erledigt ( sorry für die nicht ganz eindeutigen Variablne 😉 )

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main () {
    
    	int MaxE;
    	int b = 0;
    	int p = 1; //Prozent
    	int c = 0;
    	int Rechnung;
    
    	cout<<"Endwert: "<<endl;
    	cin>>MaxE;
    
    	Rechnung = MaxE;
    	Rechnung /=100;
    
    	MaxE += 1;
    
    	ofstream myfile;
    	myfile.open ("Zahlenliste.txt");
    
    	while (b != MaxE)
    	{
    		c ++;
    		if ( c == Rechnung)
    		{
    			cout<<p<<" Prozent"<<endl;
    
    			p ++;
    
    			c -= Rechnung ;
    		}
    		myfile << b << std::endl;
    		b++;
    	}
    
    	cout<<"Fertig"<<endl;
    	getchar();
    	myfile.close();
    	return 0;
    }
    

    Hinweis: das funktioniert im ersten Programm nicht!
    Da die im ersten Programm gezeigte Schleife bei einer Eingabe ( Anfangswert = -50 , Endwert = 100 , Schritte = 1) 150 mal durchlaufen wird.Für die Prozant ausgabe muss dann also ALLE 1,5 Schritte Prozent um 1 erhöht werden. <--- Die Schleife läuft hier aber nur in ganzzahligen Schritten durch !



  • guten morgen

    Genau deswegen werden Prozentangaben auch berechnet und nicht einfach hochgezählt, da du keine halbe Schritte in deiner Schleife machst.

    Und dein zweites Problem ist, das in Rechnung niemals 1,5 stehen kann da es ein INT ist, bei der Berechnung wird die nachkommstelle einfach abgeschnitten.

    Ich würde dir raten es so umzubauen, das du die Prozent bei jeder Ausgabe berechnest und imIf den Modulo Operator benutzt. Deswiteren solltest du dir Überlegen, ob du die Schrittweite der Prozentausgabe bei Differenzen <1000 (oder 500) in 10% Schritten machst.

    Mfg Marco


  • Mod

    Entweder: Rechne nicht in Integern, wenn du gebrochene Ergebnisse willst. 150/100 == 1 !
    Oder (vermutlich besser): Rechne in jedem Schritt neu aus, wie weit du fortgeschritten bist, anstatt (ungenaue) Schrittweiten aufeinander zu addieren.


Log in to reply