wirre Zahlen bei C++ Taschenrechner

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • wirre Zahlen bei C++ Taschenrechner

    Da hier ja nur Taschenrechner sind hab ich gedacht poste ich meinen auch mal rein(Sorry fürs Ausgraben des Threads ^^)

    Habe noch einige Probleme drinne die nicht funktionieren, z.B. kommt bei jeder Rechenoperation nun 0 oder eine wirre Zahl raus =/.

    Für Hilfe bin ich immer dankbar.

    Hier der Code:

    Quellcode

    1. #include <iostream>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4. #include <cmath>
    5. #include <iomanip>
    6. using namespace std;
    7. long double calculate(int ausw, long double x, long double y); //deklaration der funktion 'calculate'
    8. long double prozent(int ausw, long double x, long double y); //deklaration der funktion 'prozent'
    9. float winkel(int ausw, float x); //deklaration der funktion 'winkel'
    10. int main()
    11. {
    12. int auswahl; //deklaration der Variablen für die Funktion 'main'
    13. long double a = 0.0;
    14. long double b = 0.0;
    15. long double ergebnis = 0.0;
    16. char antwort;
    17. do //Schleife fürs Auswahl-Menü die nur solange gilt
    18. { //wie die Antwort gleich 'j' ist
    19. cout << "Calculator v0.9_RC_1\n" << endl;
    20. cout << "|==============|\n\n";
    21. cout << "[1]Addition\n"<<
    22. "[2]Subtraktion\n"<< //Auswahl-Menü
    23. "[3]Multiplikation\n"<<
    24. "[4]Division\n"<<
    25. "[5]Quadrieren\n"<<
    26. "[6]Wurzel ziehen\n"<<
    27. "[7]Prozentrechnung\n"<<
    28. "[8]Sinus\n"<<
    29. "[9]Cosinus\n"<<
    30. "[10]Tangens\n"<<
    31. "[0]Beenden\n\n";
    32. cout << "Waehlen sie eine Option aus: ";
    33. cin >> auswahl; //Einlesen der Menü-Auswahl
    34. if( auswahl == 0 ) //Programm beenden wenn 0 gewählt wird
    35. return 0;
    36. while (!(cin >> auswahl))
    37. {
    38. cout << "Falsche Eingabe du Heinz!";
    39. cin.clear();
    40. cin.ignore(10000, '\n');
    41. cout << "\n\nNeuer Versuch: ";
    42. cin >> auswahl;
    43. }
    44. system("cls"); //Bildschirminhalt löschen
    45. cout << "Kommazahlen muessen mit einem Punkt statt eines Kommas eingegeben werden!\n\n";
    46. if ( auswahl >= 1 && auswahl <= 4 )
    47. {
    48. cout << "\n1.Zahl: "; //Erste Zahl einlesen
    49. cin >> a;
    50. cout << "\n2.Zahl: ";
    51. cin >> b; //Zweite Zahl einlesen
    52. }
    53. else if( auswahl >= 5 && auswahl <= 6 )
    54. {
    55. cout << "\nBasis: "; //Basis einlesen
    56. cin >> a;
    57. cout << "\nExponent: "; //Exponent einlesen
    58. cin >> b;
    59. }
    60. else if( auswahl == 7 ) //Werte für Prozentrechnung einlesen
    61. {
    62. cout << "Geben sie den Grundwert G an: ";
    63. cin >> a;
    64. cout << "\n\nGeben sie den Prozentsatz an: ";
    65. cin >> b;
    66. }
    67. else if ( auswahl >=8 && auswahl <=10 )
    68. {
    69. cout << "Geben sie den Winkel ohne Grad an: ";
    70. cin >> a;
    71. }
    72. ergebnis = calculate(auswahl, a, b);
    73. ergebnis = prozent(auswahl, a, b);
    74. ergebnis = winkel(auswahl, a);
    75. cout << "\nDas Ergebnis lautet: " << setprecision(3) << fixed << ergebnis;
    76. cout << "\n\nWollen sie eine weitere Berechnung durchfuehren?\n";
    77. cout << "<J/N>"; //Abfrage ob weitergerechnet werden soll oder nicht
    78. cin >> antwort;
    79. while( antwort != 'j' && antwort != 'n' )
    80. {
    81. cout << "Falsche Eingabe, wiederholen: "; //Fehlerabfang falls Zahl anstatt Buchstabe eingegeben wird
    82. cin >> antwort;
    83. }
    84. system("cls"); //Bildschirminhalt löschen
    85. }while (antwort == 'j' ); //Bedingung der Do-While-Schleife
    86. return 0;
    87. }
    88. long double calculate (int ausw,long double x,long double y) //Funktion zum berechnen der einzelnen Werte
    89. {
    90. long double res = 0.0; //Definition des Ergebnis-Wertes
    91. switch(ausw) //Switch-Anweisung für Menü-Auswahl
    92. {
    93. case 1 : //Berechnung zur Addition
    94. {
    95. res = x + y;
    96. break;
    97. }
    98. case 2 : //Berechnung zur Subatraktion
    99. {
    100. res = x - y;
    101. break;
    102. }
    103. case 3 : //Berechnung zur Multiplikation
    104. {
    105. res = x * y;
    106. break;
    107. }
    108. case 4 : //Berechnung zur Division
    109. {
    110. res = x / y;
    111. if (y == 0) //Fehlerabfang falls durch 0 dividiert wird
    112. {
    113. cout << "\nDivision durch 0 nicht moeglich!";
    114. }
    115. break;
    116. }
    117. case 5 :
    118. {
    119. res = pow (x, y); //Berechnung zu Potenzierung
    120. break;
    121. }
    122. case 6 :
    123. {
    124. res = pow(x, 1.0 / y); //Berechnung zur Wurzelziehung
    125. break;
    126. }
    127. }
    128. return res;
    129. }
    130. long double prozent(int ausw, long double x, long double y) //Funktion zur Prozentrechnung
    131. {
    132. long double res = 0.0;
    133. switch(ausw)
    134. {
    135. case 7 :
    136. {
    137. res = x * y / 100;
    138. break;
    139. }
    140. }
    141. return res;
    142. }
    143. float winkel(int ausw, float x)
    144. {
    145. float res = 0.0;
    146. switch(ausw)
    147. {
    148. case 8 :
    149. {
    150. res = sin(x * M_PI / 180);
    151. cout << "Der Sinus von " << x << " lautet: " << setprecision(3) << fixed << res;
    152. break;
    153. }
    154. case 9 :
    155. {
    156. res = cos(x * M_PI / 180);
    157. cout << "Der Cosinus von " << x << " lautet: " << setprecision(3) << fixed << res;
    158. break;
    159. }
    160. case 10 :
    161. {
    162. res = tan(x * M_PI / 180);
    163. cout << "Der Tangens von " << x << " lautet: " << setprecision(3) << fixed << res;
    164. break;
    165. }
    166. }
    167. }
    Alles anzeigen
  • 1) Entweder du schreibst C++, dann heißt das <cstdlib> und nicht <stdlib.h> oder du schreibst C, dann solltest du aber auf C++Streams verzichten ;)
    2) <conio.h> wird nicht benötigt
    3)

    Quellcode

    1. ergebnis = calculate(auswahl, a, b);
    2. ergebnis = prozent(auswahl, a, b);
    3. ergebnis = winkel(auswahl, a);
    Danach ist das Ergebniss immer winkel(auswahl, a) und da du ohne ein return aus der Funktion zurückkehrst wird das immer /undefiniert/ sein

    EDIT://
    Deine Eingabeschleife ist auch noch nicht perfekt und bei deiner J/N Frage muss man j eingeben um weiter zu kommen ... ich hab' das mal soweit verbessert (vorher AStyle 'drüber laufen lassen)

    Quellcode

    1. #include <iostream>
    2. #include <cstdlib>
    3. #include <cmath>
    4. #include <iomanip>
    5. using namespace std;
    6. long double calculate(int ausw, long double x, long double y); //deklaration der funktion 'calculate'
    7. long double prozent(int ausw, long double x, long double y); //deklaration der funktion 'prozent'
    8. float winkel(int ausw, float x); //deklaration der funktion 'winkel'
    9. int main()
    10. {
    11. int auswahl; //deklaration der Variablen für die Funktion 'main'
    12. long double a = 0.0;
    13. long double b = 0.0;
    14. long double ergebnis = 0.0;
    15. char antwort;
    16. do //Schleife fürs Auswahl-Menü die nur solange gilt
    17. { //wie die Antwort gleich 'j' ist
    18. cout << "Calculator v0.9_RC_1\n" << endl;
    19. cout << "|==============|\n\n";
    20. cout << "[1]Addition\n"<<
    21. "[2]Subtraktion\n"<< //Auswahl-Menü
    22. "[3]Multiplikation\n"<<
    23. "[4]Division\n"<<
    24. "[5]Quadrieren\n"<<
    25. "[6]Wurzel ziehen\n"<<
    26. "[7]Prozentrechnung\n"<<
    27. "[8]Sinus\n"<<
    28. "[9]Cosinus\n"<<
    29. "[10]Tangens\n"<<
    30. "[0]Beenden\n\n";
    31. cout << "Waehlen sie eine Option aus: ";
    32. while (!(cin >> auswahl))
    33. {
    34. cout << "Falsche Eingabe du Heinz!";
    35. cin.clear();
    36. cin.ignore(10000, '\n');
    37. cout << "\n\nNeuer Versuch: ";
    38. cin >> auswahl;
    39. }
    40. if ( auswahl == 0 ) //Programm beenden wenn 0 gewählt wird
    41. return 0;
    42. cout << "Kommazahlen muessen mit einem Punkt statt eines Kommas eingegeben werden!\n\n";
    43. if ( auswahl >= 1 && auswahl <= 4 )
    44. {
    45. cout << "\n1.Zahl: "; //Erste Zahl einlesen
    46. cin >> a;
    47. cout << "\n2.Zahl: ";
    48. cin >> b; //Zweite Zahl einlesen
    49. ergebnis = calculate(auswahl, a, b);
    50. }
    51. else if ( auswahl >= 5 && auswahl <= 6 )
    52. {
    53. cout << "\nBasis: "; //Basis einlesen
    54. cin >> a;
    55. cout << "\nExponent: "; //Exponent einlesen
    56. cin >> b;
    57. ergebnis = calculate(auswahl, a, b);
    58. }
    59. else if ( auswahl == 7 ) //Werte für Prozentrechnung einlesen
    60. {
    61. cout << "Geben sie den Grundwert G an: ";
    62. cin >> a;
    63. cout << "\n\nGeben sie den Prozentsatz an: ";
    64. cin >> b;
    65. ergebnis = prozent(auswahl, a, b);
    66. }
    67. else if ( auswahl >=8 && auswahl <=10 )
    68. {
    69. cout << "Geben sie den Winkel ohne Grad an: ";
    70. cin >> a;
    71. ergebnis = winkel(auswahl, a);
    72. }
    73. cout << "\nDas Ergebnis lautet: " << setprecision(3) << fixed << ergebnis;
    74. cout << "\n\nWollen sie eine weitere Berechnung durchfuehren?\n";
    75. cout << "<J/N>"; //Abfrage ob weitergerechnet werden soll oder nicht
    76. cin >> antwort;
    77. while ( std::tolower(antwort) != 'j' && std::tolower(antwort) != 'n' )
    78. {
    79. cout << "Falsche Eingabe, wiederholen: "; //Fehlerabfang falls Zahl anstatt Buchstabe eingegeben wird
    80. cin >> antwort;
    81. }
    82. }while (std::tolower(antwort) == 'j' ); //Bedingung der Do-While-Schleife
    83. return 0;
    84. }
    85. long double calculate (int ausw,long double x,long double y) //Funktion zum berechnen der einzelnen Werte
    86. {
    87. long double res = 0.0; //Definition des Ergebnis-Wertes
    88. switch (ausw) //Switch-Anweisung für Menü-Auswahl
    89. {
    90. case 1 : //Berechnung zur Addition
    91. {
    92. res = x + y;
    93. break;
    94. }
    95. case 2 : //Berechnung zur Subatraktion
    96. {
    97. res = x - y;
    98. break;
    99. }
    100. case 3 : //Berechnung zur Multiplikation
    101. {
    102. res = x * y;
    103. break;
    104. }
    105. case 4 : //Berechnung zur Division
    106. {
    107. res = x / y;
    108. if (y == 0) //Fehlerabfang falls durch 0 dividiert wird
    109. {
    110. cout << "\nDivision durch 0 nicht moeglich!";
    111. }
    112. break;
    113. }
    114. case 5 :
    115. {
    116. res = pow (x, y); //Berechnung zu Potenzierung
    117. break;
    118. }
    119. case 6 :
    120. {
    121. res = pow(x, 1.0 / y); //Berechnung zur Wurzelziehung
    122. break;
    123. }
    124. }
    125. return res;
    126. }
    127. long double prozent(int ausw, long double x, long double y) //Funktion zur Prozentrechnung
    128. {
    129. long double res = 0.0;
    130. switch (ausw)
    131. {
    132. case 7 :
    133. {
    134. res = x * y / 100;
    135. break;
    136. }
    137. }
    138. return res;
    139. }
    140. float winkel(int ausw, float x)
    141. {
    142. float res = 0.0;
    143. switch (ausw)
    144. {
    145. case 8 :
    146. {
    147. res = sin(x * M_PI / 180);
    148. cout << "Der Sinus von " << x << " lautet: " << setprecision(3) << fixed << res;
    149. break;
    150. }
    151. case 9 :
    152. {
    153. res = cos(x * M_PI / 180);
    154. cout << "Der Cosinus von " << x << " lautet: " << setprecision(3) << fixed << res;
    155. break;
    156. }
    157. case 10 :
    158. {
    159. res = tan(x * M_PI / 180);
    160. cout << "Der Tangens von " << x << " lautet: " << setprecision(3) << fixed << res;
    161. break;
    162. }
    163. }
    164. return res;
    165. }
    Alles anzeigen
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von darthdespotism ()

  • @bcc-fan: eigentlich sollte das eingerückt sein, weiß auch nicht wieso das nun alles an Kante liegt. 82 - 84 soll dem main-programm nur gesagt werden, aus welcher funktion das ergebnis geholt werden soll.Ich glaube da lag am ende auch der Fehler das kein richtiges Ergebnis mehr zustande kam ^^.Soweit schonmal danke.



    @dartgdespotism: Ich guck mir die verbesserte Version die du gepostet hast direkt mal an, danke nochmals.
  • So habe ein paar Sachen hinzugefügt (Arcus-Sinus etc) aber was mir aufgefallen ist das die Rechnung bei Sinus Cosinus und Tangens teilweise nicht richtig sind.An sicht stimmt alles ich finde keine Fehler darin.Es ist alles so wie es "sollte".



    Hier nocheinmal der Code:



    Quellcode

    1. #include <iostream>
    2. #include <cstdlib>
    3. #include <cmath>
    4. #include <iomanip>
    5. using namespace std;
    6. long double calculate(int ausw, long double x, long double y);//deklaration der funktion 'calculate'
    7. long double prozent(int ausw, long double x, long double y);//deklaration der funktion 'prozent'
    8. float winkel(int ausw, float x);//deklaration der funktion 'winkel'
    9. float arcus (int ausw, float x);
    10. int main()
    11. {
    12. int auswahl; //deklaration der Variablen für die Funktion 'main'
    13. long double a = 0.0;
    14. long double b = 0.0;
    15. long double ergebnis = 0.0;
    16. char antwort;
    17. do //Schleife fürs Auswahl-Menü die nur solange gilt
    18. { //wie die Antwort gleich 'j' ist
    19. cout << "Calculator v0.9_RC_1\n" << endl;
    20. cout << "|==============|\n\n";
    21. cout << "[-]Grundrechenarten\n"<<
    22. "[1]Addition\n"<< //Auswahl-Menü
    23. "[2]Subtraktion\n"<<
    24. "[3]Multiplikation\n"<<
    25. "[4]Division\n"<<
    26. "[5]Quadrieren\n"<<
    27. "[6]Wurzel ziehen\n"<<
    28. "[-]Prozentrechnung\n"<<
    29. "[7]Grundwert berechnen\n"<<
    30. "[8]Prozentwert berechnen\n"<<
    31. "[9]Prozentsatz berechnen\n"<<
    32. "[-]Winkelfunktionen\n"<<
    33. "[10]Sinus\n"<<
    34. "[11]Cosinus\n"<<
    35. "[12]Tangens\n"<<
    36. "[13]Arcus-Sinus\n"<<
    37. "[14]Arcus-Cosinus\n"<<
    38. "[15]Arcus-Tangens\n"<<
    39. "[0]Beenden\n\n"<<
    40. cout << "Waehlen sie eine Option aus: ";
    41. while (!(cin >> auswahl))
    42. {
    43. cout << "Falsche Eingabe du Heinz!";
    44. cin.clear();
    45. cin.ignore(10000, '\n');
    46. cout << "\n\nNeuer Versuch: ";
    47. cin >> auswahl;
    48. }
    49. if ( auswahl == 0 ) //Programm beenden wenn 0 gewählt wird
    50. return 0;
    51. system ("cls");
    52. cout << "Kommazahlen muessen mit einem Punkt statt eines Kommas eingegeben werden!\n\n";
    53. if ( auswahl >= 1 && auswahl <= 4 )
    54. {
    55. cout << "\n1.Zahl: "; //Erste Zahl einlesen
    56. cin >> a;
    57. cout << "\n2.Zahl: ";
    58. cin >> b; //Zweite Zahl einlesen
    59. ergebnis = calculate(auswahl, a, b);
    60. }
    61. else if ( auswahl >= 5 && auswahl <= 6 )
    62. {
    63. cout << "\nBasis: "; //Basis einlesen
    64. cin >> a;
    65. cout << "\nExponent: "; //Exponent einlesen
    66. cin >> b;
    67. ergebnis = calculate(auswahl, a, b);
    68. }
    69. /*else if ( auswahl == 7 ) //Werte für Prozentrechnung einlesen
    70. {
    71. cout << "Geben sie den Grundwert G an: ";
    72. cin >> a;
    73. cout << "\n\nGeben sie den Prozentsatz an: ";
    74. cin >> b;
    75. ergebnis = prozent(auswahl, a, b);
    76. }*/
    77. else if ( auswahl >=10 && auswahl <=12 )
    78. {
    79. float c = 0.0;
    80. cout << "Geben sie den Winkel ohne Grad an: ";
    81. cin >> c;
    82. ergebnis = winkel(auswahl, c);
    83. }
    84. else if ( auswahl >= 13 && auswahl <=15 )
    85. {
    86. if ( auswahl == 13 )
    87. {
    88. cout << "Geben sie Ihren Sinus an: ";
    89. cin >> a;
    90. ergebnis = arcus(auswahl, a);
    91. }
    92. else if ( auswahl == 14 )
    93. {
    94. cout << "Geben sie Ihren Cosinus an: ";
    95. cin >> a;
    96. ergebnis = arcus(auswahl, a);
    97. }
    98. else if ( auswahl == 15 )
    99. {
    100. cout << "Geben sie Ihren Tangens an: ";
    101. cin >> a;
    102. ergebnis = arcus(auswahl, a);
    103. }
    104. }
    105. cout << "\nDas Ergebnis lautet: " << setprecision(3) << fixed << ergebnis;
    106. cout << "\n\nWollen sie eine weitere Berechnung durchfuehren?\n";
    107. cout << "<J/N>"; //Abfrage ob weitergerechnet werden soll oder nicht
    108. cin >> antwort;
    109. system ("cls");
    110. while ( std::tolower(antwort) != 'j' && std::tolower(antwort) != 'n' )
    111. {
    112. cout << "Falsche Eingabe, wiederholen: "; //Fehlerabfang falls Zahl anstatt Buchstabe eingegeben wird
    113. cin >> antwort;
    114. }
    115. }while (std::tolower(antwort) == 'j' ); //Bedingung der Do-While-Schleife
    116. return 0;
    117. }
    118. long double calculate (int ausw,long double x,long double y) //Funktion zum berechnen der einzelnen Werte
    119. {
    120. long double res = 0.0; //Definition des Ergebnis-Wertes
    121. switch (ausw) //Switch-Anweisung für Menü-Auswahl
    122. {
    123. case 1 : //Berechnung zur Addition
    124. {
    125. res = x + y;
    126. break;
    127. }
    128. case 2 : //Berechnung zur Subatraktion
    129. {
    130. res = x - y;
    131. break;
    132. }
    133. case 3 : //Berechnung zur Multiplikation
    134. {
    135. res = x * y;
    136. break;
    137. }
    138. case 4 : //Berechnung zur Division
    139. {
    140. res = x / y;
    141. if (y == 0) //Fehlerabfang falls durch 0 dividiert wird
    142. {
    143. cout << "\nDivision durch 0 nicht moeglich!";
    144. }
    145. break;
    146. }
    147. case 5 :
    148. {
    149. res = pow (x, y); //Berechnung zu Potenzierung
    150. break;
    151. }
    152. case 6 :
    153. {
    154. res = pow(x, 1.0 / y); //Berechnung zur Wurzelziehung
    155. break;
    156. }
    157. }
    158. return res;
    159. }
    160. long double prozent(int ausw, long double x, long double y) //Funktion zur Prozentrechnung
    161. {
    162. long double res = 0.0;
    163. switch (ausw)
    164. {
    165. case 7 :
    166. {
    167. res = x * y / 100;
    168. break;
    169. }
    170. }
    171. return res;
    172. }
    173. float winkel(int ausw, float x)
    174. {
    175. float res = 0.0;
    176. switch (ausw)
    177. {
    178. case 8 :
    179. {
    180. res = sin(x * M_PI / 180);
    181. break;
    182. }
    183. case 9 :
    184. {
    185. res = cos(x * M_PI / 180);
    186. break;
    187. }
    188. case 10 :
    189. {
    190. res = tan(x * M_PI / 180);
    191. break;
    192. }
    193. }
    194. return res;
    195. }
    196. float arcus (int ausw, float x)
    197. {
    198. float res = 0.0;
    199. switch(ausw)
    200. {
    201. case 13 :
    202. {
    203. res = asin(x) * 180 / M_PI;
    204. break;
    205. }
    206. case 14 :
    207. {
    208. res = acos(x) * 180 / M_PI;
    209. break;
    210. }
    211. case 15 :
    212. {
    213. res = atan(x) * 180 / M_PI;
    214. break;
    215. }
    216. }
    217. return res;
    218. }
    Alles anzeigen