4. - Stunde Mathe, Schleifen und Funktionen

01/17/2008 15:43 MeepMoep#1
Guten Mittag,
kommen wir zu unserer 4.Stunde. Nur Addition ist langweilig? Ändern wir es doch einfach ;D und führen die „if-schleife“ ein.
Code:
if( var == 1)
{
	//Befehle etc;
}
Ich weiß, dass die if-methode nicht die beste ist, aber ich mag das case-break zeug nicht ;D

Erstmal brauchen wir eine „Abfrage“, eine variable, und natürlich schleifen ;D

Code:
cout << „Addition (1), Subtrahieren (2) etc.“ << endl;
int auswahl;
cin >> auswahl;
if ( auswahl == 1)
{
	//addition
}
else if(auswahl == 2)
{
	//subtraktion
}
//etc. ;D
Allerdings wird unsere Source jetzt sehr unübersichtlich und lang (wobei das hier noch geht, wenn ich an die Source denk mit der ich arbeite o_O )

Doch hier kommen die Funktionen ins Spiel!
Funktionen werden ähnlich wie Variablen erzeugt aber doch anders ;D
Code:
void Funktionsname()
{
	//Befehle etc.
}
Funktionen aufrufen ist auch sehr einfach.

Code:
Funktionsname();
Also müsst ihr für jede Rechenmethode eine Funktion schreiben und diese dann aufrufen.
Eure Aufgabe könnt ihr euch wohl schon denken ;D
Hausaufgabe: Schreibt einen vollständigen Rechner! =D

Und tut euch selber den Gefallen und rückt alles ein
also:
Code:
int main()
{
	//eingerückt ;D
}
01/17/2008 19:13 Burner999#2
Hab nen problem mit dem erstellen von Funktionen die funktion kann nicht kompiliert werden, weil anscheinend noch nen befehl davor stehen muss oder nen semikolon. zumindest meint der compieler das kanns sein das ich noch nen bibliothek einbinden muss?
01/17/2008 19:25 MeepMoep#3
Bei sowas bitte die source Posten
01/17/2008 22:33 Burner999#4
Ok hier is die source ich weiß der rechner selbst funzt so noch net aber es geht mir erstma darum das void net funzt^^

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

using namespace std;

int main()
{
string zeichen;
int zahl;
int ergebnis;



void Plus()
{
ergebnis=ergebnis+zahl;     
}
void Minus()
{
ergebnis=ergebnis-zahl;    
}
void Mal()
{
ergebnis=ergebnis*zahl;     
}
void Geteilt()
{
ergebnis=ergebnis/zahl;     
}
while (0<1)
{
cout << "Willkommen im Burningrechner v2" << endl
<< "Bitte erst die Zahl und nach der zahl das rechenzeichen eingeben" << endl;
cin >> ergebnis;
cin >> zeichen;
cin >> zahl;
if (zeichen=="+") Plus();
if (zeichen=="-") Minus();
if (zeichen=="*") Mal();
if (zeichen=="/") Geteilt();
cin.get();
}

}
01/17/2008 23:08 ZeroTen#5
Hab mir mal die Mühe gemacht und dein Source gefixxt:
(Das Forum änderst immer automatisch überall wo "n" oder "nn" steht, kommt noch ein "\" vor, also bei "n" kommt "\n" und bei "nn" kommt "\n\n" hin, aber das Forum lässt die "\" weg. Falls du nicht weißt was ich meine dann geb ich dir den Source nochmal ohne die Umbrüche.

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

using namespace std;

string zeichen;
int zahl1;
int zahl2;
int ergebnis;

void Plus()
{
ergebnis=zahl1+zahl2;
cout << "nErgebnis : " << ergebnis <<  "nn" << endl;     
}
void Minus()
{
ergebnis=zahl1-zahl2
cout << "nErgebnis : " << ergebnis << "nn" <<  endl;     
}
void Mal()
{
ergebnis=zahl1*zahl2
cout << "nErgebnis : " << ergebnis <<  "nn" << endl;      
}
void Geteilt()
{
ergebnis=zahl1/zahl2;  
cout << "nErgebnis : " << ergebnis << "nn" << endl;     
}


int main()
{

while (
0<1)
{
cout << "Willkommen im Burningrechner v2" << endl
<< "Bitte erst die Zahl dann das Rechenzeichen und dann die zweite Zahl eingeben:n" << endl;
cin >> zahl1;
cin >> zeichen;
cin >> zahl2;
if (
zeichen=="+"Plus();
if (
zeichen=="-"Minus();
if (
zeichen=="*"Mal();
if (
zeichen=="/"Geteilt();
cin.get();
}


Damit du auch aus deinen Fehlern lernst erklär ich dir mal was du falsch gemacht hast.

Also wegen den 'Void', mit void erstellst du eine eigene Funktion, und du kannst keine Funktion in einer anderen Funktion erstellen, dein Source sah so aus:

Code:
int main()
{
    void()
}
Richtig wäre gewesen:
Code:
 int main()
{
   //source
}

void()
{
   //source
}
Unter anderem hast du 3 Sachen eingelesen, Ergebnis, Zahl und Rechenzeichnung, was wenn man sich das genauer ansieht Schwachsinn ist. Auch deine Funktion "ergebnis=ergebnis-zahl" das wäre ein bisschen merkwürdig oder? Hab das jetzt so verbessert das 3 Sachen eingelesen werden, Zahl1, Rechenzeichen, Zahl2, dürfte jetzt einwandfrei funktionieren.

(Beispiel: 12 + 32 ; 123123 - 12393128998123 ; falsch wäre 12+ 123, weil die drei Variablen durch ein Leerzeichen voneinander getrennt werden).


Ach ja, "\n" steht übrigens für einen Zeilenumbruch, damit springt er lediglich eine Zeile weiter bevor er den nächsten String ausgibt damit es übersichtlicher wird.

Beispiel: "Hallo, ich bin ZeroTen"
Code:
Hallo ich bin ZeroTen
"Hallo\nIch bin ZeroTen"
Code:
Hallo,
Ich bin ZeroTen

Falls du noch Fragen hast, oder ich Müll rede dann sagt mir bescheid ;)
01/18/2008 11:27 MeepMoep#6
Quote:
Code:
int main()
{
   //source
}

void()
{
   //source
}
Ist auch falsch Zero ;D

Erst void, dann int main ;D
Grund: Der Compiler läuft von oben nach unten durch, wenn man versucht eine Funktion aufzurufen bevor diese Deklariert wurde gibts nen Error ;D
01/18/2008 14:13 ZeroTen#7
Es gibt überhaupt keinen Erorr, es läuft alles bestens -_- vorallem weil das Programm sowieso mit int Main startet also STFU! ^^
01/18/2008 14:24 MeepMoep#8
Quote:
#include <iostream>

using namespace std;

int main()
{
funktion();
}

void funktion()
{
cout << "bla" << endl;
cin.get();
}


Dann Compile das mal ;D
01/18/2008 15:28 ZeroTen#9
Lol, schon klar das das nicht funktioniert, du hast mich falsch verstanden <.< , in meinem Source steht nirgends das ich eine Funktion aufrufe die nicht deklariert ist
Code:
 int main()
{
   //source
}

void blabla()
{
   //source
}
oder siehst du irgendwo das bei int main blabla() drin steht o0 ich denke nicht, wie ich meinem Post erklärt habe soll das nur ein Beispiel dafür sein, das man keine Keine Funktion in einer anderen Funktion deklarieren kann, und das geht aus meinem Beispiel klar hervor <.<
01/18/2008 15:37 MeepMoep#10
Aso, naja ne funktion deklarieren und nicht aufrufen macht keinen sinn ;D
01/18/2008 15:42 ZeroTen#11
Hast du dir nichtmals den Thread durchgelesen? Er hatte 2 Funktionen deklariert, und zwar Eine in der Anderen, und das ist falsch, die müssen auseinander deklariert, werden, was soll dann an meinem Beispiel bitte keinen Sinn machen? Wenn ich
Code:
int main()
{
}
schreiben würde dann würste er doch gar nicht was mit der 2. Funktion ist, und jetzt Back 2 Topic -_-
01/18/2008 16:03 Burner999#12
Ok danke dir erstma hat mir geholfen^^

bzw das ich nur ergebnis und zahl brauche hatte schon seinen sinn nur war das aus dem quell code nicht ganz ersichtlich ich wollte es so haben das man unendlich viele rechenschritte machen kann und mit dem vorher gehenden ergebnis weiter rechnen.

und damit du weil das oben vielleicht komisch ausgedrückt ist hier mal die fertige source die kann man vieleicht besser verstehen^^

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

using namespace std;

string zeichen;
int zahl;
int ergebnis;

void Plus()
{
ergebnis=ergebnis+zahl;     
}
void Minus()
{
ergebnis=ergebnis-zahl;    
}
void Mal()
{
ergebnis=ergebnis*zahl;     
}
void Geteilt()
{
ergebnis=ergebnis/zahl;     
}

int main()
{


cout << "Willkommen im Burningrechner v2" << endl
<< "Bitte erst die Zahl und nach der zahl das rechenzeichen eingeben" << endl;

cin >> ergebnis;
while (0<1)
{


cin >> zeichen;
cin >> zahl;
if (zeichen=="+") Plus();
if (zeichen=="-") Minus();
if (zeichen=="*") Mal();
if (zeichen=="/") Geteilt();
cout << "=" << endl << ergebnis << endl;
cin.get();
}

}
01/18/2008 16:11 ZeroTen#13
Naja ich verstehe trotzdem nicht wie dein Source funktionieren soll.
Code:
<< "Bitte erst die Zahl und nach der zahl das rechenzeichen eingeben" << endl;
Das wäre dann ja z.B. "123 +" oder "312 -" , da fehlt doch die zweite Zahl oder nicht o0. Du könntest höchstens in den voids, z.B. void Plus () am Ende eine weitere Abfrage machen ob du mit dem Ergebnis weiter rechnen möchtest oder nicht, das würde dann gehen ;)
01/18/2008 16:42 Burner999#14
öhm ja ich merk grad der satz is blöd xD
aber das ganze funktioniert so ich gebe einmalig ergebnis ein das ist meine erste zahl dann kommt das rechen zeichen und dann kommt zahl die subtrahiere/addiere etc. ich dann mit ergebnis nur so kann ich das ergebnis der vorigen rechnung behalten (außer über nen dummy aber das wäre noch mehr unötige arbeit^^)

Das mit der Abfrage ob ich weiter rechenen will kann ich noch machen muss halt grad noch ma überlegen wie
01/18/2008 16:44 666me#15
Also ich habs so gemacht:

Code:
#include <iostream>
using namespace std;


void Plus() 
{
     
             double var1;
	 double var2;
	 double Ergebnis;
	 cout << endl <<"x1=";
	 cin >> var1;
	 cout <<"x2=";
	 cin >> var2;
	 Ergebnis = var1 + var2;
	 cout << endl << var1 << "+" << var2 << "=" << Ergebnis << endl;
	 cin.get();

}
void Minus() 
{
	 
     
             double var1;
	 double var2;
	 double Ergebnis;
	 cout << endl <<"x1=";
	 cin >> var1;
	 cout <<"x2=";
	 cin >> var2;
	 Ergebnis = var1 - var2;
	 cout << endl  << var1 << "-" << var2 << "=" << Ergebnis << endl;
	 cin.get();

}
void Geteilt() 
{
	 
    
             double var1;
	 double var2;
	 double Ergebnis;
	 cout << endl <<"x1=";
	 cin >> var1;
	 cout <<"x2=";
	 cin >> var2;
	 Ergebnis = var1 / var2;
	 cout << endl  << var1 << "/" << var2 << "=" << Ergebnis << endl;
	 cin.get();

}
void Mal() 
{
     
             double var1;
	 double var2;
	 double Ergebnis;
              cout << endl <<"x1=";
	 cin >> var1;
	 cout <<"x2=";
	 cin >> var2;
	 Ergebnis = var1 * var2;
	 cout << endl  << var1 << "*" << var2 << "=" << Ergebnis << endl;
	 cin.get();

}



int main()
{     
     cout << "Robins ultimativer c++ Rechner :)" << endl;
     while (0<1)
    {   
      int auswahl;
      cout << endl << "Addition (1), Subtrahieren (2) ,  
      Division (3) ,Multiplikation (4)"<< endl << endl;
      cin >> auswahl;
      cin.get();

      if ( auswahl == 1)
   { 
	 Plus();
	   
   }
      else if(auswahl == 2)
   {
   	 Minus();
   }
      else if(auswahl == 3)
   {
	 Geteilt();
   }
     else if(auswahl == 4)
   {
	 Mal();
   }
  }  cin.get();
}