Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fakultät (!) und sinus (s) bei einem geschriebenem prog einfügen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
16.11.2010, 05:47 Uhr
Hans
Library Walker
(Operator)


Hi,

hier noch mal ein formatierter Quelltext von Deinem Programm. Das formatieren hab ich dem Programm AStyle überlassen, also nicht von Hand gemacht. Weiteres siehe die Kommentare im Quelltext.


C++:
//////////////////////////////////////////////////////////////////////////////////////////////
/* Datei: rechner3.cpp

   von aii_thats_m3 aus dem C/C++ Forum
   Quelltext mit AStyle neu formatiert.
*/


#include <iostream>
#include <cmath> // siehe Erklärung von 0xdeadbeef in deinem anderen Thread


int fact(int n); /* Der Prototyp gehört hier hin, also ausserhalb von main();
                  und es fehlt der Code der Funktion. Das ist jener Code, den du
                 in Deinem ersten Beitrag in diesem Thread geposted hast. Diesen
                Code schreibt man hinter der main() - Funktion */


using namespace std;

int main()
{
  int eingabe1;
  int eingabe2;
  int n;
  int ergebnis;
  int antwort;
  int J;
  int N;
  
  char rechenzeichen;

  cout<<"Willkommen zum Taschenrechner" << endl;

  long anz_Zahlen = 0;  // Die ist auch noch immer ungenutzt...

  cout << "Wollen Sie die Fakultät oder den Sinus berechnen? \n"
          "Für Ja schreiben sie bitte J und für Nein N?"<< endl;
  // Wenn man den String von cout so auseinander pflückt, gilt das trotzdem als ein einziger
  // String, hat aber den Vorteil, das man es besser lesen kann.  

  cin>>antwort;
  {
    {
      if (antwort==N);   // Das hier ist übrigens auch falsch, weil N ein nicht definierter
                         // Wert vom Typ int ist.
                         // Die Ja/Nein Abfrage funktioniert so ähnlich wie bei den
                         // case-Blöcken
      cout<<"Geben Sie Bitte eine Zahl ein!" << endl;
      cin>>n;
      return n*fact(n-1); // Was soll das denn sein? Der Code zur Berechnung der Fakultät?
                   // das geht so nicht.  Zum einen klappt die Berechnung nicht, weil die
                   // Funktion fact nirgendwo definiert ist, zum anderen würde dieses return
                   // das Programm beenden und zum Betriebssystem zurück kehren. Das
                   // Ergebnis würde also dem Betriebssystem mitgeteilt, das damit aber
                   // nichts anfangen kann.
    }

    {
      else  // Vor diesem else fehlt ein if; else alleine geht nicht.
         cout<<"Geben Sie die 1.Zahl ein : ";
      cin>>eingabe1;
      cout<<"Geben Sie die gewuenschte Rechenoperation an (+ - * / ^): ";
      cin>>rechenzeichen;
      cout<<"Geben Sie eine zahl ein: ";
      cin>>eingabe2;
      do
        {
          switch(rechenzeichen)
            {
            case '+':
              ergebnis=eingabe1+eingabe2;
              break;

            case '-':
              ergebnis=eingabe1-eingabe2;
              break;

            case '*':
              ergebnis=eingabe1*eingabe2;
              break;

            case '/':
              ergebnis=eingabe1/eingabe2;
              break;

            case '^':
              ergebnis = pow((double)ergebnis, (double)eingabe2);
              break;
            }
          cout<<"Ergebnis: "<<ergebnis << endl;
        }

      while (eingabe1=ergebnis);
    }  // hier fehlt ein do, wenn das auch 'ne Schleife sein soll.
    while (rechenzeichen !='e');
  }

  // einmal cin.get() genügt
  cin.get();

  return (0);
}



Jetzt noch mal zu if:
Was geht, ist:

C++:

if (bedingung)
  Anweisung;


oder:

C++:

if (bedingung)
  { Anweisung1;
    Anweisung2;
    ...
    Anweisung n;
  } // Ende des Anweisungsblocks, der aufgrund der bedingung ausgeführt wird.


oder:

C++:

if (bedingung)
  Anweisung_A;
else
  Anweisung_B;


oder:

C++:

if (bedingung)  // wenn bedingung zutriff
  { Anweisung1;
    Anweisung2;
    ...
    Anweisung n;
  } // Ende des Anweisungsblocks, der aufgrund der bedingung ausgeführt wird.
else // wenn bedingung nicht zutrifft
  { Anweisung1;
    Anweisung2;
    ...
    Anweisung n;
  } // Ende des Anweisungsblocks, der ausgeführt wird, wenn die bedingung nicht zutrifft.


Was aber nicht geht, ist das hier:

C++:
else
  { Anweisung1;
    Anweisung2;
    ...
    Anweisung n;
  } // Ende des Anweisungsblocks von else


Da fehlt ein if davor. D.h. eine if-Anweisung kann alleine stehen, oder von einem else gefolgt werden. Aber nicht anders herum. Vor einem else muss immer ein if stehen.

Soweit erst mal. Zum Thema Schleifen wäre auch noch was zu sagen, aber das heb ich mir für heut Nachmittag auf. Nur soviel: If-Anweisungen sind bedingte Verzweigungen, aber keine Schleifen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 16.11.2010 um 20:16 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
16.11.2010, 20:58 Uhr
Hans
Library Walker
(Operator)


So, jetzt noch mal zum Thema Schleifen:
Das es sich dabei um wiederholt auszuführende Anweisungen, bzw. Anweisungsblöcke handelt, dürfte klar sein. In C und C++ gibt es davon 3 Arten, wobei ich hier hauptsächlich auf die eingehe, die Du benutzt hast, also die do-Schleife. Die funktioniert grundsätzlich nach dem Muster:

C++:
do
   Anweisung;
while (Bedingung == true);


oder, wenn mehrere Anweisungen ausgeführt werden sollen:

C++:
do
  { Anweisung 1;
    Anweisung 2;
    ...
    Anweisung n;
  }
while (Bedingung == true);



Man kann Schleifen auch verschachteln, d.h. eine Schleife im Anweisungsblock einer weiteren Schleife unterbringen. Das sieht so aus:

C++:
do   // äussere Schleife
  { Anweisung 1;  // äussere Schleife
    Anweisung 2;  // äussere Schleife

    do                  // innere Schleife
      { Anweisung 1;    // innere Schleife
        Anweisung 2;    // innere Schleife
        ...             // innere Schleife
        Anweisung n;    // innere Schleife
      }
    while (Bedingung == true);    // Abbruchbedingung der inneren Schleife

    ...           // äussere Schleife
    Anweisung n;  // äussere Schleife
  }
while (Bedingung == true);  // Abbruchbedingung der äusseren Schleife



Was aber wiederum nicht sinnvoll funktioniert, ist diese Konstruktion:

C++:
{
  Anweisung(en);
} while (Bedingung);


Da fehlt das do am Anfang, wenn es 'ne Schleife sein soll.

Es gibt aber auch noch die while-Schleife, aber deren Syntax sieht anders aus. Da steht das while mit seiner Abbruchbedingung allein, danach erfolgt ein Anweisungsblock. Also so:

C++:
while (Bedingung)
   Anweisung;


bzw.

C++:
while (Bedingung)
   { Anweisung 1;
     Anweisung 2;
     ...
     Anweisung n;
   }



Mit diesem Wissen stellt man dann fest, dass das hier
C++:
{ } while (Bedingung);


eine while Schleife mit einem leeren Anweisungsblock ist. - Ja, das geht auch, es stellt sich aber die Frage, wozu das gut sein soll?

Soweit mal dieses Grundlagenkapitel. Obwohl das, was ich hier geschrieben habe, in jedem vernünftigen Lehrbuch drin steht. Und es ist in C und C++ identisch und völlig unabhängig vom verwendeten Compiler oder Betriebssystem. D.h. diesen Stoff über Schleifen kannst Du in jedem Buch nachlesen, das C oder C++ behandelt.

Noch ein Wort zur Formatierung: Wie Du bei den verschachtelten Schleifen sehen kannst, hab ich die Einrückungen so gewählt, das die zusammengehörigen Klammern {} immer untereinander stehen. Das ist die Methode, die ich vorziehe, weil ich sie am verständlichsten finde.
Andere machen es beispielsweise so:

C++:
while (Bedingung) {
     Anweisung 1;
     Anweisung 2;
     ...
     Anweisung n;
   }


Da stehen die Klammern zwar nicht untereinander, aber der Text des Schleifenrumpfes ist immer noch eingerückt. Man kann also trotzdem schnell erkennen, welche Anweisungen zur Schleife dazu gehören, und welche nicht.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 16.11.2010 um 21:15 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
17.11.2010, 00:17 Uhr
~toxic
Gast


hi, zu den do-while bzw while schleifen noch eine anmerkung wann man sie einsetzt.
die do-while wird mindestens ein mal durchlaufen und dann auf die "schleifen-bedingung" geprüft, die while wird unter umständen gar nicht erst ausgeführt.
zb

C++:
int i = 100;

do { // diese schleife wird einmal durchlaufen
    ++i;
    Funktion(); // Funktion wird also einmal ausgeführt
} while ( i < 100 );

while ( i < 100 )
{
    ++i;
    Funktion(); // da i nicht kleiner 100 ist, wird Funktion nicht ausgeführt
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: