Simulierte Division gibt mir keinen Wert aus.

berwing

Grünschnabel
Hallo Leute,

Ich habe ein Tutorial für den C++ Einstieg gemacht und bin es nochmal durchgegangen. Da werden an manchen Stellen Aufgaben an den "Schüler" gestellt mit den entsprechenden Lösungen.
Die Lösung wollte ich noch nicht öffnen, da ich es dann nicht richtig lernen werde.
Die Aufgabe besteht darin, eine Division sowie eine Multiplikation zweier Werte durch die Operatoren + und - mit Hilfe einer Schleifer durchzuführen/simulieren.

Nun zu meinem Problem mit der Division. Ich habe versucht es mit diesem Code zu simulieren:

Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{    
       cout<<"Geben Sie die Zahl ein, die geteilt werden soll:\n";            //erklärt sich von selbst
       int zahl1;
       cin>>zahl1;
       
       cout<<"Geben Sie nun die Zahl ein, mit der geteilt werden soll:\n";    //ebenso hoffe ich
       int zahl2;
       cin>>zahl2;
       
       int ergebnis;
       int rechnung = zahl1;  //soll die Zwischenschritte darstellen
       
       for(int i; rechnung >= 0; ++i && rechnung - zahl2)             //Knackpunkt!
       {
           int ergebnis = i;
       }   

       cout<<zahl1<<" durch "<<zahl2<<" ergibt: "<<ergebnis<<"\n";            //Ausgabe der Werte
       system("PAUSE");
}


Die Schleife soll unter der Bedingung, dass rechnung größergleich 0 ist, int i um einen erhöhen und gleichzeitig zahl2 von rechnung abziehen.


Das bedeutet pro Abzug von zahl2 auf rechnung, erhöht sich int i um einen unter der bedingung, dass rechnung größergleich 0 bleibt, bis zum Ende.


Dann soll am Ende die Anzahl (int i) der Abzüge von zahl2 auf rechnung als Ergebnis ausgegeben werden und der Rest soll ignoriert werden.


Das Problem ist nur, nach dem Bestätigen von zahl2 wird einfach nur ein Zeilenumbruch gemacht und es bleibt leer, nicht einmal der Code danach wird ausgeführt, was ja bedeutet, dass es in der Schleife einen Fehler gibt.

Nur weiß ich nicht welchen und der Compiler sagt auch zu(Dev-C++).

Hoffe auf Hilfe Mfg Berwing
 
Zuletzt bearbeitet:
Hi,

du hast eine Endlosschleife produziert.
Du überprüfst ob "rechnung" kleiner oder gleich 0 geworden ist als Abbruchbedingung. Aber du änderst "rechnung" nie.
Da müste irgendwas stehen wie:

Code:
rechnung -= zahl2
Benny
 
Aber von rechnung wird doch zahl2 abgezogen:

Code:
for(int i; rechnung >= 0; ++i && rechnung - zahl2)

Da am Ende, dadurch muss sich der Wert von rechnung ja um zahl2 verringern und somit verändern müsste.


MfG
 
Zuletzt bearbeitet:
Es wird zwar abgezogen aber du musst es auch wieder "rechnung" zuweisen.
Wenn du es nur Abziehst wird es lediglich temporär zwischengespeichert.

Probiers doch einfach mal mit:
Code:
for(int i; rechnung >= 0; ++i && (rechnung -= zahl2) )
 
Cool danke immerhin wirds jetzt bis zum Ende ausgefürht.
Nur gibts jetzt das Problem, dass er mir als ergebnis von 10 durch 2 = 2293672 gibt.


MfG
 
Tipp: Achte mal auf den Scope deiner for-Schleife ;)
(okay vllt. hasse da noch keine Ahnung von :D Also, einfach mal das int for dem ergebnis in der for-Schleife weg machen ;))

2293672 ist schlicht weil ergebnis keinen Wert zugewiesen bekommen hat.
 
Doch von den Scopes hab ich schon gehört und weiß sie auch zu benutzen, nur wurde ergebnis ja schon außerhalb des Scopes definiert also müsste sich nur sein Wert ändern und nicht gleich die ganze Variable gekillt werden oder?

Naja ich habs mal versucht mit 20 durch 1 und bekomme jetzt 31915064 heraus :D.


MfG
 
So hier der aktuelle gesamte Code:
Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{    
       cout<<"Geben Sie die Zahl ein, die geteilt werden soll:\n";
       int zahl1;
       cin>>zahl1;
       
       cout<<"Geben Sie nun die Zahl ein, mit der geteilt werden soll:\n";
       int zahl2;
       cin>>zahl2;
       
       int ergebnis;
       int rechnung = zahl1;
       for(int i; rechnung >= 0; ++i && (rechnung -= zahl2))
       {
           ergebnis = i;
       }   
       cout<<zahl1<<" durch "<<zahl2<<" ergibt: "<<ergebnis<<"\n";       
       system("PAUSE");
}


Geht aber nicht ich kanns mir nicht erklären.


MfG
 
Dein "i" ist nicht initialisiert. Und das weist du dann immer dem Ergebnis zu.
Eine for-Schleife solltest du immer mit

Code:
for( int i = 0;...

beginnen.

Benny
 
Zurück