C++ Anfängerfragen



  • Hey Leute,
    ich habe vor ein par Tagen angefangen C++ zu lernen.
    Dazu benutze ich dieses http://tutorial.schornboeck.net/inhalt.htm Tutorial. Zurzeit bin ich bei dem Kapitel 3 Operatoren und komme leider nicht so richtig vorran.

    #include<iostream>
        using namespace std;
    
        int main()
        {
            cout<<"Bitte geben Sie 2 Zahlen ein:\n";
            int a,b;
            cin>>a;
            cin>>b;
    
            //dividieren:
            {
                int temp=a;
                int erg=0;
                while(temp-b >= 0)
                {
                    temp-=b;
                    ++erg;
                }
                cout<<b<<" ist in "<<a<<" "<<erg<<" mal enthalten (Rest "<<temp<<")\n";
            }
    
            //multiplizieren
            {
                int erg=0;
                for(int i=0;i<b;++i)
                {
                    erg+=a;
                }
                cout<<a<<" mal "<<b<<" ist "<<erg<<"\n";
            }
        }
    

    Bei diesem Programm wird auf umständliche Weise multipliziert und dividiert.
    Aber ich verstehe nicht ganz wie.

    Bei dem multiplizieren wird ja gesagt, dass i 0 ist es kleiner als b ist (also die Schleife aufhört sobald es größer wird) und es immer um eins ansteigt.
    Wenn ich dass dan mal selber ausrechne würde es ja so aussehen.

    Erg=0 a=7 b=4

    0=0+7
    1=7+7
    2=14+7
    3=21+7
    4=28+7

    Dann ist es vorbei da i nun größer als 4 ist.
    Aber wieso ist es 35 anstatt 28? Ich bin mir ziemlich sicher dass man erst bei 1 0+7 macht aber wieso? I ist immer der erste wert richtig?

    Beim dividieren wird es dann ganz komisch.

    Temp ist ja a und in der Rechnung steht auch b also ist das vom Sinn her erstmal total leicht.

    Müsste also sein:
    7=7-4
    7=3
    Rest: 3

    danach:
    erg=erg+1
    und da wir erg im Programm ja festgelegt haben (erg=0) würde es immer 0=0+1 sein also passt es einmal rein hier passt es noch aber bei Beispielen wie
    10 und 3 z.B. nichtmehr. Was ist daran falsch? Wie muss man es rechnen?

    Dann werden vorher noch Variablentypen aufgelistet.
    Aber wie werden diese unterteilt?
    Es gibt ja z.B. float, double, long double
    Die Gleitkommazahl wird dadurch immer genauer. Aber wie finde ich heraus, wie genau es ist und was ich nehmen muss?

    Und hat zum Schluss hat jemand oder kann es jemand vielleicht kurz programmieren einen total einfachen Taschenrechner der entweder alles ausrechnet von 2 Zahlen also bei 7 und 4:

    7/4
    7*4
    7+4
    7-4

    oder man es auswählen kann. Würde mir sowas gerne mal anschauen.

    danke schonmal :xmas1:
    darkii-



  • Und hat zum Schluss hat jemand oder kann es jemand vielleicht kurz programmieren einen total einfachen Taschenrechner der entweder alles ausrechnet von 2 Zahlen also bei 7 und 4:

    schau dir das ma an.....

    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <conio.h>
    using namespace std;
    double prozent1 (double w,double p);
    double prozent2 (double g,double p);
    double prozent3 (double w,double g);
    double func (double *zahl1, double *pzahl2);
    double potenz(double a,double b);
    int main()
    {   string exit;
        double zahl1,zahl2;
        do
        {
        cout<<"-------------------\n";
        cout<<"Mein Taschenrechner\n";
        cout<<"-------------------\n";
        cout<<"\nWaehlen Sie aus : \n";
        cout<<"(1) Addition\n";
        cout<<"(2) Multiplikation\n";
        cout<<"(3) Division\n";
        cout<<"(4) Subtraktion\n";
        cout<<"(5) Potenzrechnung\n";
        cout<<"(6) Prozentrechnung\n";
        cout<<"(7) Exit\n";
        switch (getch())
           {
           case '1':
                {
                func(&zahl1,&zahl2);
                cout<<zahl1<<" + "<<zahl2<<" = "<<zahl1 + zahl2<<endl;
                break;
                }      
           case '2':
                {
                func(&zahl1,&zahl2);
                cout<<zahl1<<" * "<<zahl2<<" = "<<zahl1 * zahl2<<endl;
                break;
                }      
           case '3':
                {
                func(&zahl1,&zahl2);
                if (zahl1>0 ,zahl2>0)
                    {
                    cout<<zahl1<<" / "<<zahl2<<" = "<<zahl1 / zahl2<<endl;
                    }
                else
                    {
                    if(zahl1>0,zahl2==0)
                    {
                    cout<<"Teilen durch 0 unmoeglich!";
                    }
                    else
                    cout<<zahl1<<" / "<<zahl2<<" =  0"<<endl;
                    }
                break;
                }      
           case '4':
                {
                func(&zahl1,&zahl2);
                cout<<zahl1<<" - "<<zahl2<<" = "<<zahl1 - zahl2<<endl;
                break;
                }      
           case '5':
                {
                system("cls");
                double a,b;
                cout<<"Bitte geben Sie eine Zahl ein :";
                cin>>a;
                cout<<"Geben Sie die Potenz an :";
                cin>>b;
                cout<<"Das Ergebniss betraegt : "<<potenz(a,b)<<endl;
                break;
                }
           case '6':
                {
                system("cls");
                cout<<"Was moechten Sie Berechnen?\nWaehlen Sie aus:\n";
                cout<<"(1) Grundwert [G]\n";
                cout<<"(2) Prozentwert [W]\n";
                cout<<"(3) Prozentsatz [p]\n";
                switch (getch())
                     {
                     case '1':
                             {
                             system("cls");
                             double w,p;
                             cout<<"bitte geben Sie den Prozentwert W ein: ";
                             cin>>w;
                             cout<<"bitte geben Sie den Prozentsatz p ein: ";
                             cin>>p;
                             cout<<"G = 100*p/W = "<<prozent1(w,p)<<"\n";
                             break;
                             }
                     case '2':
                             {
                             system("cls");     
                             double p,g;
                             cout<<"bitte geben Sie den Grundwert G ein: ";
                             cin>>g;
                             cout<<"bitte geben Sie den Prozentsatz p ein: ";
                             cin>>p;
                             cout<<"W= G*p/100 = "<<prozent2(p,g)<<"\n";
                             break;
                             }
                     case '3':
                             {
                             system("cls");
                             double w,g;
                             cout<<"bitte geben Sie den Grundwert G ein: ";
                             cin>>g;
                             cout<<"bitte geben Sie den Prozentwert W ein: ";
                             cin>>w;
                             cout<<"p= 100*W/G = "<<prozent3(w,g)<<" %\n";
                             break;
                             }
                      }
    
                break;
                }
           case '7':
                return 0; 
           default:
                   cout<<"Falsche Eingabe!\n";     
           }
        system("pause");
        system("cls");
        cout<<"Moechten Sie das Programm beenden j/n ? :";
        cin>>exit;
        system("cls");
        }
      while (exit=="n");     
    }
    
    double potenz (double a,double b)
    {
    if (b==0)
        return 1;
    else
        return a * potenz(a,b-1);
    }
    
    double func (double *pzahl1,double *pzahl2)
    {
     system("cls");
     cout<<"Bitte Geben Sie die erste Zahl ein :";
     cin>>*pzahl1;
     cout<<"Bitte Geben Sie die zweite Zahl ein :";
     cin>>*pzahl2;
    }
    
    double prozent1 (double w,double p)
    {
           return 100*p/w;
    }
    
    double prozent2 (double g,double p)
    {
           return g*p/100;
    
    double prozent3 (double w,double g)
    {
           return 100*w/g;
    }
    
     :xmas1:
    


  • @chi,
    Habe bei deinem Code getch() mit cin ersetzt. Ausserdem haben eine Klammer und ein Return gefehlt.

    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <conio.h>
    using namespace std;
    double prozent1 (double w,double p);
    double prozent2 (double g,double p);
    double prozent3 (double w,double g);
    double func (double *zahl1, double *pzahl2);
    double potenz(double a,double b);
    int main()
    {   string exit;
        double zahl1,zahl2;
    	char eingabe = 0;
        do
        {
        cout<<"-------------------\n";
        cout<<"Mein Taschenrechner\n";
        cout<<"-------------------\n";
        cout<<"\nWaehlen Sie aus : \n";
        cout<<"(1) Addition\n";
        cout<<"(2) Multiplikation\n";
        cout<<"(3) Division\n";
        cout<<"(4) Subtraktion\n";
        cout<<"(5) Potenzrechnung\n";
        cout<<"(6) Prozentrechnung\n";
        cout<<"(7) Exit\n";
    	cin >> eingabe;
        switch (eingabe)
           {
           case '1':
                {
                func(&zahl1,&zahl2);
                cout<<zahl1<<" + "<<zahl2<<" = "<<zahl1 + zahl2<<endl;
                break;
                }      
           case '2':
                {
                func(&zahl1,&zahl2);
                cout<<zahl1<<" * "<<zahl2<<" = "<<zahl1 * zahl2<<endl;
                break;
                }      
           case '3':
                {
                func(&zahl1,&zahl2);
                if (zahl1>0 ,zahl2>0)
                    {
                    cout<<zahl1<<" / "<<zahl2<<" = "<<zahl1 / zahl2<<endl;
                    }
                else
                    {
                    if(zahl1>0,zahl2==0)
                    {
                    cout<<"Teilen durch 0 unmoeglich!";
                    }
                    else
                    cout<<zahl1<<" / "<<zahl2<<" =  0"<<endl;
                    }
                break;
                }      
           case '4':
                {
                func(&zahl1,&zahl2);
                cout<<zahl1<<" - "<<zahl2<<" = "<<zahl1 - zahl2<<endl;
                break;
                }      
           case '5':
                {
                system("cls");
                double a,b;
                cout<<"Bitte geben Sie eine Zahl ein :";
                cin>>a;
                cout<<"Geben Sie die Potenz an :";
                cin>>b;
                cout<<"Das Ergebniss betraegt : "<<potenz(a,b)<<endl;
                break;
                }
           case '6':
                {
                system("cls");
                cout<<"Was moechten Sie Berechnen?\nWaehlen Sie aus:\n";
                cout<<"(1) Grundwert [G]\n";
                cout<<"(2) Prozentwert [W]\n";
                cout<<"(3) Prozentsatz [p]\n";
    			cin >> eingabe;
                switch (eingabe)
                     {
                     case '1':
                             {
                             system("cls");
                             double w,p;
                             cout<<"bitte geben Sie den Prozentwert W ein: ";
                             cin>>w;
                             cout<<"bitte geben Sie den Prozentsatz p ein: ";
                             cin>>p;
                             cout<<"G = 100*p/W = "<<prozent1(w,p)<<"\n";
                             break;
                             }
                     case '2':
                             {
                             system("cls");    
                             double p,g;
                             cout<<"bitte geben Sie den Grundwert G ein: ";
                             cin>>g;
                             cout<<"bitte geben Sie den Prozentsatz p ein: ";
                             cin>>p;
                             cout<<"W= G*p/100 = "<<prozent2(p,g)<<"\n";
                             break;
                             }
                     case '3':
                             {
                             system("cls");
                             double w,g;
                             cout<<"bitte geben Sie den Grundwert G ein: ";
                             cin>>g;
                             cout<<"bitte geben Sie den Prozentwert W ein: ";
                             cin>>w;
                             cout<<"p= 100*W/G = "<<prozent3(w,g)<<" %\n";
                             break;
                             }
                      }
    
                break;
                }
           case '7':
                return 0;
           default:
                   cout<<"Falsche Eingabe!\n";    
           }
        system("pause");
        system("cls");
        cout<<"Moechten Sie das Programm beenden j/n ? :";
        cin>>exit;
        system("cls");
        }
      while (exit=="n");    
    }
    
    double potenz (double a,double b)
    {
    if (b==0)
        return 1;
    else
        return a * potenz(a,b-1);
    }
    
    double func (double *pzahl1,double *pzahl2)
    {
     system("cls");
     cout<<"Bitte Geben Sie die erste Zahl ein :";
     cin>>*pzahl1;
     cout<<"Bitte Geben Sie die zweite Zahl ein :";
     cin>>*pzahl2;
     return 0;
    }
    
    double prozent1 (double w,double p)
    {
           return 100*p/w;
    }
    
    double prozent2 (double g,double p)
    {
           return g*p/100;
    }
    
    double prozent3 (double w,double g)
    {
           return 100*w/g;
    }
    


  • danke labviewer,
    war ich wieder unachtsam........ 😮

    :xmas1:



  • bump



  • Tutorial ordentlich lesen.
    Siehe Kommentare.
    Wenn man das probiert sieht man aber doch ob das Programm funktioniert oder nicht?
    Gibt es eigentlich noch die berühmten Leerzeichen? Furchtbar.

    #include<iostream>
        using namespace std;
    
        int main()
        {
            cout<<"Bitte geben Sie 2 Zahlen ein:\n";
            int a,b;
            cin>>a; //* sei 7
            cin>>b; //* sei 4
    
            //dividieren:
            {
                int temp=a; //* Hilfsvariable
                int erg=0; //* Ergebniszähler deklarieren und initialisieren
                while(temp-b >= 0) //* Schleife. Prüfung ob a - b größer/gleich 0
                {
                    temp-=b; //* temp = temp - b => 7 - 4 ist 3 (temp) 
                    ++erg; //* Ergebniszähler erhöhen um eins
                    //* Zurück zur Schleife. a - b ist kleiner 0, also
                    //* Abbruch Schleife
                }
                cout<<b<<" ist in "<<a<<" "<<erg<<" mal enthalten (Rest "<<temp<<")\n"; //* Noch irgendwelche Fragen
            }
    
            //multiplizieren
            {
                int erg=0; //* Ergebniszähler deklarieren und initialisieren (0)
                for(int i=0;i<b;++i) //* Schleifenvariable i deklarieren und initialisieren
                {
                    erg+=a; //* erg = erg + a
                    //* Wenn i = 4 ist, bricht Schleife ab wegen Prüfung i < b (4)
                    //* Und bei i = 3 => 21 + 7 = 28 
                }
                cout<<a<<" mal "<<b<<" ist "<<erg<<"\n"; //* 7 * 4 ist und bleibt 28
            }
        }
    


  • Also vom Sinn her habe ich es jetzt sehr gut verstanden,
    einziges Problem ist, ich verstehe die Schleife nicht ganz.
    Könnte man es vllt so sehen?

    erg 0: temp=7-4
    erg 1: temp=3-4 (dort würde es kleiner werden also wird abgebrochen)
    dieses ++erg sagt an, das immer +1 zum Ergebnis dazukommt wenn man diese Rechnung durchführt oder?

    Dann zum multiplizieren:
    Ist dort vllt ein kleiner Fehler drinnen?
    Verstehe es eigentlich total es wird auch wieder sofort abgebrochen ABER
    es wird ja vorgegeben, dass er es abbricht wenn i größer als b ist was dort nicht der fall ist. Sie sind gleich. Also müsste dort nicht "=>" hin?



  • darkii- schrieb:

    Verstehe es eigentlich total

    Erste Fehlannahme. Du verstehst es (noch) nicht.

    darkii- schrieb:

    es wird ja vorgegeben, dass er es abbricht wenn i größer als b ist

    for(int i=0;i<b;++i)
    

    Ok, eine kleine Erklärung zum Zeichen "<". Dieses Zeichen steht für "kleiner als". Die Abbruchbedingung in der Schleife lautet also:

    Solange i kleiner ist als b.

    Die Schleife wird also solange durchlaufen wie i kleiner ist als b.

    Jetzt die 100-Punkte Frage: Welchen Wert hat i wenn es zum erstenmal _nicht_ mehr kleiner ist als b? richtig, wenn es gleich b. Beispiel:
    kleiner?
    0 < 4 ja
    1 < 4 ja
    2 < 4 ja
    3 < 4 ja
    4 < 4 nein -> Abbruch

    Zusatzfrage: wie oft wurde die Schleife in dem Beispiel ausgeführt:

    a) 4 mal
    b) 5 mal

    Natürlich 4 mal (0-3) Weil beim 5ten Vergleich die Abbruchbedingung ja erfüllt wurde... Und die Abbruchbedingung wird vor Ausführung der Schleife getestet, nicht danach (das wäre sonst eine do-while schleife)

    und 4 * 7 = 28. Der Code stimmt also.



  • -verstanden-



  • Also ich hätte nocheinmal eine Frage:
    Ist jetzt bisschen doof aber davor hatte ich garnicht darauf geachtet.
    Was macht cin.get() genau?
    Ich habe es so verstanden, dass es das gleiche wie cin<< ist nur dass es dieses objekt dann auch gleich ausgibt..richtig?
    und
    hat jemand nochmal eine andere erklärung/ein Tutorial für Arrays?
    Verstehe die irgendwie nicht ganz. Habe das hier gelesen: http://tutorial.schornboeck.net/arrays.htm



  • darkii- schrieb:

    Was macht cin.get() genau?
    Ich habe es so verstanden, dass es das gleiche wie cin<< ist nur dass es dieses objekt dann auch gleich ausgibt..richtig?

    Dafür ist www.cplusplus.com dein Freund.

    darkii- schrieb:

    hat jemand nochmal eine andere erklärung/ein Tutorial für Arrays?
    Verstehe die irgendwie nicht ganz.

    Was verstehst du an Arrays nicht? Und vielleicht wäre es besser, dir ein Buch zu besorgen, da lernt man meistens mehr als mit Internet-Tutorials.



  • bin auch gerade auf der suche nach einem buch



  • darkii- schrieb:

    bin auch gerade auf der suche nach einem buch

    Thinking in C++ 1/2 sind frei verfügbar als E-Book.
    Und dann gäbe es noch den C++-Primer, mit dem viele angefangen haben.



  • Nexus schrieb:

    Was verstehst du an Arrays nicht?



  • _matze schrieb:

    Nexus schrieb:

    Was verstehst du an Arrays nicht?

    😕
    Was willst du uns damit sagen?

    EDIT:
    Was ist jetzt eigentlich mit der Diskette? 🙂 - Hat sie geschmeckt?



  • drakon schrieb:

    😕
    Was willst du uns damit sagen?

    Na dass er die Frage beantworten soll, wenn er ein Verständnisproblem hat. Sonst kann ihm schlecht geholfen werden.

    drakon schrieb:

    EDIT:
    Was ist jetzt eigentlich mit der Diskette? 🙂 - Hat sie geschmeckt?

    Hehe, war nicht nötig. 😃 Er wusste es auch nicht wirklich zu interpretieren...



  • Nexus schrieb:

    Was verstehst du an Arrays nicht?

    Verstehe es allgemein einfach garnicht was es so richtig bedeuten soll mit 10 etc.
    Kurz gesagt: Alles 😃



  • Ein Array ist eigentlich nichts anderes,als eine Sammlung von Objekten. Das heisst, anstatt

    int zahl1;
    int zahl2;
    int zahl3;
    ...
    

    zu schreiben kannst du das hier machen:

    int zahlen[10];
    

    Das bedeutet, dass zahlen ein Array ist, dass 10 Zahlen halten kann, welche man von 0-9 ansprechen kann.

    int zahlen[10]; //10 Elemente soll das Array enhalten
    zahlen[0] = 2; //erste Zahl wird 2
    zahlen[1] = 3; //zweite Zahl wird 2
    ...
    zahlen[9] = 99; // 10te Zahl wird 99
    
    zahlen[10] = 2; // nicht erlaubt, da 10 das 11te Element darstellt und somit nicht vorhanden ist
    

    So einfach ist das. Das schöne daran ist, dass man auch durchiterieren kann, was bei den benannten Objekten nicht möglich ist.

    //gibt alle Zahlen aus
    for (int i = 0; i < 10; i++)
       std::cout << zahlen[i];
    

    Wenn du das immernoch nicht verstehst, hol dir unbedingt ein bereits erwähntes Buch. Da wird das ganze nochmal genau erklärt.



  • 3D-Spiele mit C++ und Directx in 21 Tagen
    Tipps zur Socket-Programmierung unter C++
    Vergleich Delphi und Visual C++
    C++ Grundlagen - Quellcode Beispiele
    C++ in 21 Tagen
    C++ mini E-Book
    C++ mit dem Borland C++ Builder
    C++ Programmieren mit Stil
    C++ Referenz
    C++ Wochenend Crashkurs
    C++-Programmierung - Programmiersprache, Programmiertechnik, Datenorganisation
    EDUCATION Jetzt lerne ich Visual C++ 6
    Intensivkurs C++
    Jesse Liberty - Jetzt lerne ich C++ - Jubiläumsausgabe
    Jetzt lerne ich Visual C++ 6 [Markt&Technik, Dirk Louis]
    Konzept der C++ Standard Template Library
    Markt & Technik - Jetzt lerne ich C++
    Programmieren in C - C++
    Spieleprogrammierung in C++
    Visual C++ 6 in 21 Tagen
    Visual C++ for Dummies Quick Reference
    Visual C++ Kompendium
    Visual C++.NET - Das Buch
    Visual Studio C++ .NET ebook
    Windows-Programmierung mit C++

    Kennt ihr vielleicht welche von denen?
    Wäre da vllt ein richtig gutes dabei?
    Könnte ich leichter bekommen.



  • Im 3. Post auf dieser Seite habe ich 2 genannt. Davon kannst du dir eines (2 Teile) bereits jetzt runterladen. Soll sehr gut für Anfänger sein. (ich vertraue da mal denen, die es hier gelesen habe..)


Anmelden zum Antworten