You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
2.6 KiB

11 months ago
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include "minirechner.h"
  4. int run_minirechner() {
  5. float zahl1, zahl2, erg;
  6. int r_op;
  7. printf("Rechenoperationen: \n");
  8. printf("<1> addieren\n<2> subtrahieren\n<3> multiplizieren\n<4> dividieren\n<5> rest\n<6> groesster gemeinsammer Teiler\n<7> kleinstes gemeinsammes Vielfaches\n");
  9. scanf("%d", &r_op);
  10. printf("Zahl 1: ");
  11. scanf("%f", &zahl1);
  12. printf("Zahl 2: ");
  13. scanf("%f", &zahl2);
  14. switch (r_op) {
  15. // Der Rechner gibt die gegebenen Zahlen (im Sinne der Optik) mit einer und das Ergebnis mit zwei Nachkommastellen aus.
  16. case 1:
  17. erg = addieren(zahl1, zahl2);
  18. printf("%.1f + %.1f = %.2f\n", zahl1, zahl2, erg);
  19. break;
  20. case 2:
  21. erg = subtrahieren(zahl1, zahl2);
  22. printf("%.1f - %.1f = %.2f\n", zahl1, zahl2, erg);
  23. break;
  24. case 3:
  25. erg = multiplizieren(zahl1, zahl2);
  26. printf("%.1f * %.1f = %.2f\n", zahl1, zahl2, erg);
  27. break;
  28. case 4:
  29. erg = dividieren(zahl1, zahl2);
  30. if (erg != 0) {
  31. printf("%.1f / %.1f = %.2f\n", zahl1, zahl2, erg);
  32. }
  33. break;
  34. case 5:
  35. erg = rest(zahl1, zahl2);
  36. printf("%.1f / %.1f rest= %.2f\n", zahl1, zahl2, erg);
  37. break;
  38. case 6:
  39. erg = groesster_gemeinsammer_teiler(zahl1, zahl2);
  40. printf("%.2f\n", erg);
  41. break;
  42. case 7:
  43. erg = kleinstes_gemeinsammes_vielfaches(zahl1, zahl2);
  44. printf("%.2f\n", erg);
  45. break;
  46. default:
  47. printf("Bitte verwenden sie eine der gegebenen Ziffern");
  48. }
  49. return 0;
  50. }
  51. //addieren
  52. float addieren(float a, float b) {
  53. return a + b;
  54. }
  55. //subtrahieren
  56. float subtrahieren(float a, float b) {
  57. return a - b;
  58. }
  59. //multiplizieren
  60. float multiplizieren(float a, float b) {
  61. return a * b;
  62. }
  63. //dividieren
  64. float dividieren(float a, float b) {
  65. if (b == 0) {
  66. printf("Bitte nicht durch 0 dividieren\n");
  67. return 0;
  68. }
  69. else {
  70. return a / b;
  71. }
  72. }
  73. //rest
  74. float rest(float a, float b) {
  75. return fmod(a, b);
  76. }
  77. // groesster gemeinsammer Teiler
  78. float groesster_gemeinsammer_teiler(float a, float b) {
  79. float gr, kl;
  80. float rest = 1;
  81. if (a > b) {
  82. gr = a;
  83. kl = b;
  84. }
  85. else {
  86. gr = b;
  87. kl = a;
  88. }
  89. while (rest != 0) {
  90. rest = fmod(gr, kl);
  91. gr = kl;
  92. kl = rest;
  93. }
  94. return gr;
  95. }
  96. // kleinstes gemeinsammes Vielfaches
  97. float kleinstes_gemeinsammes_vielfaches(float a, float b) {
  98. float erg = a * b / groesster_gemeinsammer_teiler(a, b);
  99. return erg;
  100. }