Taschenrechner der anderen Art



  • Interessanter wäre wohl noch die Frage ob auch negative Zahlen erlaubt sein sollen. Dann würde die Berechnung der Multiplikation dort oben so auch nur für positive Zahlen funktionieren.

    Wo ist das Problem? Vergiss das Struktogramm, wenn du nicht mal weißt, wie die ganzzahlige Division funktioniert bringt dir das ganze Struktogramm nichts. Du musst erstmal verstehen was das Ergebnis einer Division ist, aber das hab ich dir eigentlich bereits gesagt.
    In der Grundschule hat man für sowas auch kleine Papierklötze bekommen. Bei 9/3 hat man dann einen 9-Klötze großen Streifen dahergenommen und gezählt wie viele 3-klötzige Streifen auf den Streifen mit den 9 Klötzen passen. Schwupps, hatte man das Ergebnis der Division.
    Also was musst du machen um das Ergebnis zu kriegen? Richtig, zählen wie oft die 3 in die 9 passt. Das in einer Schleife zu realisieren sollte jetzt ja wohl kein Problem mehr sein. Ansonsten würde ich mir Gedanken über Mathenachhilfe machen und mir ein gutes Buch über C oder C++, oder was auch immer der Lehrer meint euch da beizubringen, kaufen.

    Greetz



  • Hmm,

    ich weiß einfach nicht was ich hier ändern soll:

    int division (int &x, int &y) 
    {int ergeb; int i; 
    
    ergeb=0; 
    for(i=0; i<x; i++); 
        { 
         ergeb=ergeb-y; 
        } 
        return ergeb; 
    }
    

    Oder wie ich diese Schleife machen soll...



  • Hallo natco,

    einen Hinweis zur Übersichtlichkeit. Wenn Du einer Variable ein Ergebniss zuweist, dass aus einer Berechnung mit der Variablen entsteht kannst Du Kurzschreibweisen verwenden.

    Für

    ergeb = ergeb - y;
    

    kannst Du z. B.

    ergeb -= y;
    

    schreiben. Das gleiche gilt für die anderen drei Grundrechenarten.

    ergeb += y; // ist das gleiche wie ergeb = ergeb + y;
    ergeb -= y; // ist das gleiche wie ergeb = ergeb - y;
    ergeb *= y; // ist das gleiche wie ergeb = ergeb * y;
    ergeb /= y; // ist das gleiche wie ergeb = ergeb / y;
    

    Zu Deinem Problem möchte ich nur darauf Hinweisen, dass in Deiner jetzigen for-Schleife das Abbruchkriterium (i<x) nicht stimmt und Du darüber hinaus den Falschen Wert mit der return-Anweisung zurück gibst.

    Hoffe das hilft Dir auf den Richtigen Weg.

    Viele Grüße
    Knecht



  • Hab das jetzt so gemacht: 😃

    #include <stdio.h>
    
    void eingabe (int &x, int &y)
    {
    	printf("Erste Zahl eingeben:");
    	scanf("%i",&x);
    	printf("Zweite Zahl eingeben:");
    	scanf("%i",&y);
    }
    
    int division (int &x, int &y)
    {int ergeb; int i;
    
    ergeb=0;
    for(i=0; i<x; i++);
    	if(x>y);
    	{
    	 ergeb=x-y;
    	}
    	return ergeb=x/y;
    }
    
    void ausgabe (int &x, int &y, int &ergeb)
    {
    	printf("%i / %i = %i",x,y,ergeb);
    }
    
    void main()
    {int x,y,ergeb;
    
    eingabe(x,y);
    ergeb=division(x,y);
    ausgabe(x,y,ergeb);
    }
    

    Dabei wird aber das Substrahieren so zu sagen überbrückt :P. Naja, besser als gar nichts :>



  • Wenn du die Division wirklich auf die Subtraktion zurückführen willst, ist deine Berechnungsschleife Humbug. Das geht etwa so:

    int division(int x,int y)
    {
      int i;
      for(i=0;x>y;++i) x-=y;
      return i;
    }
    


  • Hab jetzt versucht mir rest zu arbeiten, follgendes ist rausgekommen, aber funzt irgendwie net:

    Könnt Ihr mir sagen warum?

    #include <stdio.h>
    
    void eingabe (int &x, int &y)
    {
    	printf("Erste Zahl eingeben:");
    	scanf("%i",&x);
    	printf("Zweite Zahl eingeben:");
    	scanf("%i",&y);
    }
    
    int division (int &x, int &y)
    {int ergeb; int rest;
    
    rest=x;
    ergeb=0;
    
    while (y <= rest);
    	{
    	rest=rest-y;
    	ergeb=ergeb+1;
    	}
    	return ergeb;
    }
    
    void ausgabe (int &x, int &y, int &ergeb)
    {
    	printf("%i / %i = %i",x,y,ergeb);
    }
    
    void main()
    {int x,y,ergeb;
    
    eingabe(x,y);
    ergeb=division(x,y);
    ausgabe(x,y,ergeb);
    }
    


  • Du berechnest zwar den Divisionsrest, aber du gibst ihn nicht zurück, ergo erfährt das Hauptprogramm auch nichts davon.



  • ich weiss nicht warum das noch keinen aufgefallen ist - das ; bei dem while am ende find ich merkwuerdig {o;

    while (y <= rest);
    {
        rest-=y;
        ergeb+=1;
    }
    


  • CStoll schrieb:

    Wenn du die Division wirklich auf die Subtraktion zurückführen willst, ist deine Berechnungsschleife Humbug. Das geht etwa so:

    int division(int x,int y)
    {
      int i;
      for(i=0;x>y;++i) x-=y;
      return i;
    }
    

    ... hat das x > y didaktische Gründe oder war das ganze nur eine grobe "Skizze"? 😕 😕



  • hä schrieb:

    ... hat das x > y didaktische Gründe

    Entweder das - oder ich hab' mich einfach verschrieben.
    (wohl eher ersteres :D)


Anmelden zum Antworten