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 ]
000
12.11.2010, 21:05 Uhr
aii_thats_m3



Hallo, ich habe hier mein Programm was ich für die Prüfung benötige. Hier fehlt mir jetzt zunächst die berechnung der Fakultät. dazu benötige ich ja nur 1 operatur... wie mache ich das dann?? ... das ist ja der code für fakultät


C++:
int fact(int n)
{
   if(n==0)
      return 1;
   else
      return n*fact(n-1);
};



aber wo und wie baue ich das jetzt ein??


C++:
#include <iostream>
#include <math.h>
using namespace std;


int main()
{
int eingabe1;
int eingabe2;
int ergebnis;
char rechenzeichen;


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

long anz_Zahlen = 0;

cout<<"Geben Sie die 1.Zahl ein : ";
cin>>eingabe1;

do
{
cout<<"Geben Sie die gewuenschte Rechenoperation an (+ - * / ^): ";
cin>>rechenzeichen;
cout<<"Geben Sie eine zahl ein: ";
cin>>eingabe2;


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;

eingabe1=ergebnis;
      

}while (rechenzeichen !='e');



cin.get();
cin.get();

return (0);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.11.2010, 02:05 Uhr
Hans
Library Walker
(Operator)


Da stellt sich mir die Frage, ob die Programmstruktur mit der do-Schleife vorgegeben ist?
In dieser Logik passt die Fakultätsfunktion und auch die sinus-funktion nicht rein, eben weil sie nur einen Operand brauchen. Die Logik von Deinem jetzigen Programm geht aber immer von zwei Operanden aus. Wenn das so sein soll, (d.h. der Prof das so will), dann lautet die Antwort auf die Frage, wie man die Funktionen da einfügt: gar nicht.
Wenn die Programmstruktur so nicht vorgegeben ist, dann sind ein paar zusätzliche Abfragen nötig, z.B. ob Du Funktionen berechen willst, oder nicht. Das ganze wird dann aber irgendwann reichlich unübersichtlich.
(Und wie man Ausdrücke wie diese "1+sin(2*x+1) * 2+pow(2,x) / fact(y)" auswertet (und berechnet), lassen wir jetzt erst mal dahin gestellt. Das führt in die tieferen Weihen der Informatik.)

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

Dieser Post wurde am 13.11.2010 um 02:06 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.11.2010, 12:08 Uhr
aii_thats_m3



Nein, dass ist nicht mit der do schleife vorgegeben. Ich gehe dann also davon aus, dass ich das mit der du schleife in eine if-else schleife machen muss mit der abfrage ob die fakultät oder die anderern rechenarten verwendet werden sollen??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.11.2010, 12:37 Uhr
aii_thats_m3



hallo habe es jetzt mal irgendwie versucht umzusetellen:


C++:
/* Datei: rechner2.cpp

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


#include <iostream>
#include <cmath>  // C++ Header eingesetzt

using namespace std;

int fact(int n);



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

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

  long anz_Zahlen = 0;

  cout<<"Wollen Sie die Fakultät oder den Sinus berechnen? Für Ja schreiben sie bitte J und für Nein N?"<< endl;
  cin>>antwort;

  if (antwort==J)
    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);
          \\54
          break;
        }
      cout<<"Ergebnis: "<<ergebnis << endl;

    }
  while (eingabe1=ergebnis);
  while (rechenzeichen !='e');

  else \\62
    cout<<"Geben Sie Bitte eine Zahl ein!" << endl;
  cin>>n;

  return n*fact(n-1);

  cin.get();
  cin.get();

  return (0);
}




jetzt werden mir folgende fehler angezeigt... habe aber keine ahnung was damit gemeint ist
54 [Warning] converting to `int' from `double'
62 expected primary-expression before "else"
62 expected `;' before "else"

kann mir jmd helfen


Bearbeitung von Hans:
Neu formatierten Quelltext eingefügt. Kleine Korrektur beim Mathe-Header

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


Hi,

Zitat von aii_thats_m3:
Jetzt werden mir folgende fehler angezeigt... habe aber keine ahnung was damit gemeint ist
54 [ Warning ] converting to `int' from `double'
62 expected primary-expression before "else"
62 expected `;' before "else"

darüber sollte es eigentlich in der Hilfe irgendwo Informationen geben.
Aber trotzdem mal kurz:

Zitat:
54 [ Warning ] converting to `int' from `double'

Das ist 'ne Warnung, die besagt, das da eine Variable vom Typ int in den Typ double umgewandelt wird. Das ist kein Fehler, kann aber u.U. unerwünscht sein.

Zitat:
62 expected primary-expression before "else"

da erwartet er vorher ein "if" oder einen Ausdruck, den er auswerten kann. - Diese Meldung ist mir noch nicht begegnet. Da solltest Du die Hilfe von Deinem Compiler fragen.

Zitat:
expected `;' before "else"

Da hast Du vor dem "else" ein Semikolon vergessen.

Soweit erst mal für den Augenblick.
Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.11.2010, 17:21 Uhr
0xdeadbeef
Gott
(Operator)


Eigentlich ist die Warnung in Zeile 54, dass ein double-Wert in einen int-Wert umgewandelt wird. Ein int kann nicht alle Werte annehmen, die ein double annehmen kann, also gehen dabei mindestens die Nachkommastellen verloren.

Zweitens ist das Problem, dass um die Blöcke, die in die if-Abfrage sollen, die Klammern fehlen. Wenn mehr als eine Anweisung da rein soll, müssen diese zu einem Block zusammengefasst werden:

C++:
if(bedingung) {
  anweisung1();
  anweisung2();
  anweisung3();
} else {
  anweisung4();
  anweisung5();
}


Es ist allerdings generell eine gute Idee, hier Klammern zu setzen, auch wenn derzeit nur eine Anweisung im Block steht. Es ist übersichtlicher, und man merzt eine Möglichkeit aus, in der Zukunft Flüchtigkeitsfehler zu machen.

Eine weitere gute Angewohnheit ist übrigens, seinen Code sinnvoll einzurücken, so dass man solche Fehler gleich sieht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 14.11.2010 um 17:21 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.11.2010, 20:58 Uhr
Hans
Library Walker
(Operator)



Zitat von 0xdeadbeef:
Eigentlich ist die Warnung in Zeile 54, dass ein double-Wert in einen int-Wert umgewandelt wird.

Uupps!! - Stimmt.
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.11.2010, 12:22 Uhr
aii_thats_m3



Ja mein Problem ist ja, dass vor dem else ein semikolon ist. Und das mit den Klammern ändert auch nichts...ist halt wirklich bisschen übersichtlicher . Hätte ich eine {klammer vergessen dann hätte er es mir angezeigt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.11.2010, 13:39 Uhr
~f.-th.
Gast


Glaub uns, Klammern könnten den Compiler glücklich machen.

Aber das Programm würde anders funktionieren als du willst.
Das Klammern immer paarweise zum Einsatz kommen weisst du?

Warum steht denn da das else? Darüber solltest du mal nachdenken.

Und wie dir ja schon jemand geschrieben hat - formatiere den Quelltext übersichtlicher - du kannst den dann besser verstehen und wir auch.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
15.11.2010, 22:17 Uhr
aii_thats_m3



ja oki... dann mach ich den Compiler mal glücklich... zumindest versuch ich es. Ja, das weiß ich...nur mit den ganzen schleifen kommt man als anfänger glaub leicht durcheinander . Ja des else steht da, weil ich will dass das was beim if nicht zutrifft mit dem was bei else steht gemacht wird... habs jetzt anders versucht aber die fehler sind gleich. Saß jetzt fast den ganzen Tag dran und ich weiß einfach nicht weiter


C++:
#include <iostream>
#include <math.h>
using namespace std;


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

char rechenzeichen;


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

long anz_Zahlen = 0;

cout<<"Wollen Sie die Fakultät oder den Sinus berechnen? \n Für Ja schreiben sie bitte J und für Nein N?"<< endl;
cin>>antwort;
{
{if (antwort==N);
cout<<"Geben Sie Bitte eine Zahl ein!" << endl;
cin>>n;
return n*fact(n-1);}

{else
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);
}while (rechenzeichen !='e');
}



cin.get();
cin.get();

return (0);
}


 
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: