Handlungen in C++ unbegrenzt durchführen können

Anti_Held

Freund des Hauses
Hallo

Ich habe mit C++ ein kleines Programm gemacht ich kann das noch nicht lange wie man sieht :lol:

Das Programm kann Zahlen unterscheiden je nach ihrem Wert jetzt will ich aber noch das man diese Handlung beliebig oft machen kann und das Programm nicht jedes mal neu starten muss.

Wie geht das ?

Das Programm ^^ http://www.megaupload.com/?d=LZCXVJ09
 
Hey,

wäre einfacher gewesen, wenn du den Sourcecode mit hochlädst ;) aber ich schreib mal eben ein Beispielprogramm mit den Funktionen aus deinem Programm und via Schleifen für dich.
Ich editier das in einigen Minuten rein.

Gruß
roobsi
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Anti_Held
Ahh stimmt :oops:


#include <iostream>
using namespace std;

int main()
{
cout<<"Willkommen beim Zahlenvergleich\n";
cout<<"Bitte geben Sie eine Zahl ein\n";
int a;
cin>>a;
cout<<"Bitte geben Sie noch eine Zahl ein\n";
int b;
cin>>b;
cout<<"Bitte geben Sie eine Zahl ein\n";
int c;
cin>>c;

if(a>b && a>c)
{
cout<<a<<" ist am tollsten\a\n";
}
if(b>a && b>c)
{
cout<<b<<" ist am tollsten\a\n ";
}
if(c>a && c>b)
{
cout<<c<<" ist am tollsten\a\n";
}

if(a<b && a<c)
{
cout<<a<<" ist am kleinsten\a\n";
}
if(b<a && b<c)
{
cout<<b<<" ist am kleinstem\a\n ";
}
if(c<a && c<b)
{
cout<<c<<" ist am kleinsten\a\n";
}
if(a==b && a==c && b==c)
{
cout<<"Alle sind gleich\a\n";
}
cout<<"\n";
cin.get();
cin.get();
cin.get();

}


Was ich auch noch gerne hätte wäre das das " Willkommen..." nur beim ersten mal kommt


Bitte mit Erklärung^^
 
hey,

hier der Sourcecode, kompiliere ihn, spiel mit ihm rum. Ich hoffe, es ist verständlich kommentiert, bin ja noch kein Profi.


Code:
#include <iostream.h>
#include <stdlib.h>

int Zahl1, Zahl2, Zahl3, Kontrollvariable = 1, Willkommensvariable  = 0;
// Die Kontrollvariable nutzen wir, um den Nutzer entscheiden zu lassen, ob er wieder die Zahlen vergleichen will, Willkommensvariable für Willkommensgruß.
main()
{
    while (Kontrollvariable ==1) // Die While-Schleife, die die beliebige Anwendung steuert
    {
      system("cls"); // Reinigt die Konsole vor jeder Anwendung vom Text, der vom letzten mal über bleibt. Wenn du das entfernst, bleibt der Text der vorherigen Anwendung.

      if (Willkommensvariable == 0) // Willkommensvariable wird gebraucht und genutzt, um nur einmal den Gruß zu zeigen.
      {
          cout << "Willkommen beim Zahlenvergleich!\n\n";
          Willkommensvariable++; // Erhöht Willkommensvariable um 1 bei jedem Durchlauf. Somit ist sie nicht mehr 0 und es wird nur einmal gemacht.
      }
      cout << "Geben Sie die erste Zahl ein: ";
      cin >> Zahl1; // Einlesen 1. Zahl
      cout << "\nGeben Sie die zweite Zahl ein: ";
      cin >> Zahl2; // Einlesen 2. Zahl
      cout << "\nGeben Sie die dritte Zahl ein: ";
      cin >> Zahl3; // Einlesen 3. Zahl

      if (Zahl1 > Zahl2 && Zahl1 > Zahl3) // auf Deutsch^^: wenn (Zahl1 größer Zahl2 UND Zahl 1 größer Zahl3)
      {
          cout <<"\nDie groesste Zahl ist " << Zahl1 <<" \n";
      }
      else if (Zahl2 > Zahl1 && Zahl2 > Zahl3)// auf Deutsch^^: wenn (Zahl2 größer Zahl1 UND Zahl2 größer Zahl3)
      {
          cout <<"\n Die groesste Zahl ist " << Zahl2 <<" \n";
      }
      else if (Zahl3 > Zahl1 && Zahl3 > Zahl2) // auf Deutsch^^: wenn (Zahl3 größer Zahl1 UND Zahl3 größer Zahl2)
      {
          cout <<"\n Die groesste Zahl ist " << Zahl3 <<" \n";
      }
      else // ansonsten. else bedeutet, wenn diese Bedingung(en) nicht eintreffen. Anschließend kommt die Anweisung.
      {
          cout <<"\nKeine Zahl ist die groesste, da entweder mehrer oder alle gleich sind. \n"; // Besser konnte ich es leider nicht formulieren.
      }
      cout <<"\n\nMoechten Sie noch einmal?\n (Ja = 1) (Nein = 0)\n"; // Eleganter kann ich es auch noch nicht, ist aber wirksam.
      cin >> Kontrollvariable; // Wenn der User nun nicht 1 (bzw. 0 ) eingibt, ist die Bedingung unserer While-Schleife nicht mehr erfüllt. Sie wird nicht mehr ausgeführt, das Programm endet.
    }


}
Ginge bestimmt schöner und eleganter, aber was solls. ;)

Gruß
roobsi

PS: Bei Fragen: Los damit!
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Anti_Held
Das weiß es selbst nicht ;)
cout <<"\n\nMoechten Sie noch einmal?\n (Ja = 1) (Nein = 0)\n"; // Eleganter kann ich es auch noch nicht, ist aber wirksam.
cin >> Kontrollvariable; // Wenn der User nun nicht 1 (bzw. 0 ) eingibt, ist die Bedingung unserer While-Schleife nicht mehr erfüllt. Sie wird nicht mehr ausgeführt, das Programm endet.
Wir sagen dem User, dass 1 Ja bedeutet und Nein = 0.
Die Bedingung, dass die while-Schleife ausgeführt wird (siehe oben im Code) ist
while (Kontrollvariable == 1)
Standardmäßig wird die Kontrollvariable ganz oben als = 1 deklariert (Zeile 4).
Nun gibt der User, weil er nicht noch mal will, 0 ein.
Dann ist Kontrollvariable == 0 und da die Bedingung (Kontrollvariable == 1) nicht mehr erfüllt ist, überspringt das Programm den Schleifeninhalt und beendet die Main.
Wäre die Kontrollvariable weiterhin == 1, würde die while-schleife wieder wiederholt werden, eben bis die Bedingung nicht mehr zutrifft.
Ist es nun etwas verständlicher?

Gruß
roobsi
 
  • Like
Reaktionen: Anti_Held
HE Leute

Ich wollte mich mal an einem Rätsel probieren nach dem Motto

1+1 ist ?

Aber wie mache ich das.

Meine Idee wär das das Ergebnis

2 gleich a ist
3 gleich b ist

Aber wie mache ich das das b als falsch angeben wird.

ICh wollte das mit größer und kleiner machen
 
Hey,

nur mal ne Frage, ob ich dein Anliegen richtig verstehe.
Du willst, dass dem User eine Frage gestellt wird "Was ergibt 1+1" z.B.
Wenn ich jetzt 1 eingebe, kommt eine Message "Zu wenig" und wenn ich z.B. 3 eingebe "Zu viel"?

Gruß
roobsi
 
Ich versteh das Problem nicht.

Code:
int a = rand()*10;
int b = rand()*10;
int c = a+b;
int d;
while (c!=d)
{
cout<<a<<"+"<<b<<"=";
cin<<d;
if (d<c)
{
cout<<"Ergebnis zu klein."<<endl;
}
else if (d>c)
{
cout<<"Ergebnis zu groß"<<endl;
}
else
{
cout<<"Ergebnis korrekt"<<endl;
}
}
 
Ich weiß das das nicht die Lösung deines Problems ist, könnte dir aber wahrscheinlich weiterhelfen
Code:
    #include <iostream>
    using namespace std;

    int main()
    {
        cout<<"Bitte geben Sie eine Zahl ein\n";
        int a;
        cin>>a;
        cout<<"Bitte geben Sie noch eine Zahl ein\n";
        int b;
        cin>>b;

        if(a==b)
        {
            cout<<"Beide Zahlen sind gleich";
        }
        if(a<b)
        {
            cout<<a<<" ist kleiner als "<<b;
        }
        if(a>b)
        {
            cout<<a<<" ist größer als "<<b;
        }
        cout<<"\n";
    }
 
also mit dem Ansatz von Royal Flush bist du schon auf dem richtigen Weg, naja bis auf ein paar Kleinigkeiten:
- rand(), bringt ohne srand nix (es werden sonst immer die selben Zufallszahlen erzeugt)
- außerdem müsste es nicht *10 heißen sondern %10 (modulo 10 liefert dir dann Zahlen von 0-9, modulo 100 dann 0-99 usw.)
- dann noch "cin>>d" statt "cin<<d"
- eventuell am Ende noch ein cin.get(), damit du die Erfolgsmeldung noch lesen kannst, bevor sich die konsole schließt

um das zum laufen zu bekommen, musst du wie bei shadows734 noch ein Programm mit main-Funktion draus basteln:

hier mal die korrigierte Variante von Royal Flush

Code:
#include <iostream>
using namespace std;

int main() {
   srand (time(NULL));
   int a = rand()%10;
   int b = rand()%10;
   int c = a+b;
   int d;
   while (c!=d)
   {
      cout<<a<<"+"<<b<<"=";
      cin>>d;
      if (d<c)
      {
         cout<<"Ergebnis zu klein."<<endl;
      }
      else if (d>c)
      {
         cout<<"Ergebnis zu groß"<<endl;
      }
      else
      {
         cout<<"Ergebnis korrekt"<<endl;
      }
   }
   cin.get();
}

sowie mein Ansatz:

Code:
#include <iostream>
using namespace std;

int main() {
   srand (time(NULL));
   int a = rand()%10, b = rand()%10, c = a+b, d;
   while (c!=d) { 
      cout<<a<<"+"<<b<<"="; cin>>d;
      cout<<"Ergebnis "<<(d!=c ? (d<c ? "zu klein" : "zu groß") : "korrekt")<<endl;
   }
   cin.get();
}

der is mal ohne if, aber zum Verständnis is Royal Flushs Beispiel für Anfänger sicher einfacher nachvollziehbar
 
also mit dem Ansatz von Royal Flush bist du schon auf dem richtigen Weg, naja bis auf ein paar Kleinigkeiten:
- rand(), bringt ohne srand nix (es werden sonst immer die selben Zufallszahlen erzeugt)
- außerdem müsste es nicht *10 heißen sondern %10 (modulo 10 liefert dir dann Zahlen von 0-9, modulo 100 dann 0-99 usw.)
- dann noch "cin>>d" statt "cin<<d"
- eventuell am Ende noch ein cin.get(), damit du die Erfolgsmeldung noch lesen kannst, bevor sich die konsole schließt
He, ich hab das auf 2 Minuten hinimprovisiert. Es ist ja auch nur der relevante Codeabschnitte, die main (), includes und somit auch das cin.get() hab ich halt weggelassen. Und der Rest: Hat man davon, wenn man einfach so ein Stück Code hinrotzt :-D
 
#include<iostream>
using namespace std;

int main()
{
cout<<" Willkommen\n";
cin.get ();


cout<<" Erste Frage\n";
cout<<"Das Ergebnis von 1+1 ?\n";
int a;
cin>>a

if(a==2)
{
cout<<"Stimmt\n";
}
}



Wieso klappt der nicht ?
 
Es gibt da so nette Fehlermeldungen die man bekommt und ich finde es irgendwie komisch, dass du die uns vorenthältst... Und mal was ganz anderes: Viele haben auf deinem Niveau angefangen (wo auch sonst), aber mit ein bisschen rumprobieren und tüfteln erreicht man sicher mehr, als wenn man wegen jeder Kleinigkeit hier ins Forum brüllt: Buäh bwäh *flenn* funktioniert nicht, hilfe...

Schau dir vielleicht nochmal die Zeile an:
cin.get ();

Ich könnte mir gut vorstellen, dass da ein Leerzeichen zuviel ist, obwohl ich keinen Schimmer von C++ hab oO
 
Ach toll, schön dass du jetzt auch noch sagst, was denn dann der Fehler war, damit nicht nur du evtl. profitierst?

Vielleicht auch daran, dass du hinter cin>>a ein Semikolon vergessen hast?