Kleines Programm für mathematische Aufgaben schreiben
-
Hallo.
Ich muss ein kleines Programm für die Shell/Terminal schreiben, welches mir einfach erlaubt eine Zahl einzugeben und danach eine Rechenoperation (+, -, *, /,
auszuführen.Beispiel der auszuführenden Programmdatei (fettgedruckt = User-Eingabe):
Anfangszahl eingeben: 3
= 3.000000**+4**
= 7.000000**-15**
= -8.000000**/1.3**
= -6.153846**%4**
= -2.000000***-5**
= 10.000000**=**
= 10.000000Wie ihr seht, kann man direkt nach dem Ergebnis die nächste Operation eingeben, auf = soll das Programm mit dem Endergebnis beendet werden.
Die ausführbare Programmdatei habe ich, muss eben ein gleiches Programm schreiben.
Mein Problem ist jetzt dabei wie ich es hinbekomme, dass die Eingabe der Rechenoperation sich eben auf die vorhergehende Zahl bezieht. Eingaben soll ich nur über die Funktion gets() vornehmen.
Kann mir jemand dabei helfen?Gruß,
Patrick
-
PatrickHH schrieb:
gets()
Ist schon mal C, kein C++. Du schreibst dir 5 Funktionen add(), sub(), mul(), div() und mod(). Die Funktionen bekommen alle zwei Parameter und geben das Ergebnis der Operation zurück. Dann musst du nur noch die Befehle einlesen und entscheiden welche Funktion du aufrufen musst. Unter C würde sich eigentlich eher scanf() zum Einlesen anbieten..
-
Ich werde durch meine Fortbildung "Programmieren in C++" über C an C++ herangeführt, kann aber als Anfänger nicht wirklich beurteilen, wo der Übergang zwischen beiden ist.
Die Funktion gets() ist Teil der Übung.
-
PatrickHH schrieb:
Ich werde durch meine Fortbildung "Programmieren in C++" über C an C++ herangeführt, kann aber als Anfänger nicht wirklich beurteilen, wo der Übergang zwischen beiden ist.
Das geht ganz einfach. Alles, was total kryptisch aussieht, ist C++. Oder du guckst einfach hier nach, wo die Funktion gelistet wird.
gets() sollte eigentlich nicht verwendet werden, da es keine Bereichsprüfung besitzt. Das Äquivalent wäre dann fgets(). (Einfach in der oben genannten Referenz nachgucken, dort stehen zu vielen Funktionen auch gleich einfach Anwendungsbeispiele.)
Die Funktionen oben lesen nur Text ein. Mit Text kannst du aber nicht rechnen, das heißt du musst diesen erst noch in Zahlen umwandeln. Auch hier bietet die C Standardbibliothek etwas: http://www.cplusplus.com/reference/clibrary/cstdlib/atof/
Damit kannst du dann rechnen. Wie man Funktionen erstellt, Variablen erstellt und Schleifen benutzt weißt du aber schon?
-
Eigentlich schon. Habe die 5 Funktionen als float deklariert, aber der Compiler meldet mir zurück, dass das keine Funktionen sind. Habe in letzter Zeit so viel neues gelesen, dass ich wegen der Informationsmenge jetzt die ersten Sachen wieder aufarbeiten muss.
-
Poste am besten mal deinen Code-Ansatz und die genaue Meldung deines Compilers. Dann müssen wir nicht die Kristallkugel des Forums bemühen, die hat schon genug zu tun.

-
Habe eben nochmal neu angefangen, blicke heute wohl nicht mehr durch ...
#include <stdio.h> void main(void) { float zahl; int i; float add, sub, mul, div, mod; add (zahl+i); sub (zahl-i); mul (zahl*i); div (zahl/i); mod (zahl%i); printf("\n\t Anfangszahl eingeben: "); gets(zahl); printf("\n\t = %8.6f",zahl);Compiler:
e1_4.c: In function ‘main’:
e1_4.c:12:7: error: called object ‘add’ is not a function
e1_4.c:13:7: error: called object ‘sub’ is not a function
e1_4.c:14:7: error: called object ‘mul’ is not a function
e1_4.c:15:7: error: called object ‘div’ is not a function
e1_4.c:16:12: error: invalid operands to binary % (have ‘float’ and ‘int’)
e1_4.c:16:7: error: called object ‘mod’ is not a function
e1_4.c:21:2: error: incompatible type for argument 1 of ‘gets’
/usr/include/stdio.h:632:14: note: expected ‘char *’ but argument is of type ‘float’
-
Tja, dein Compiler hat völlig recht. (Welche Überraschung. :D)
Funktionen backt man so:#include <stdio.h> double add(double a, double b) { return a + b; } int main() // void main() ist ungültig. { printf("%f", add(5, 8)); // Ja, %f ist auch für double. %d steht für eine Dezimalzahl. return 0; }
-
Deine Methode kenne ich noch garnicht.
Kann man nicht auch alle Funktionen zusammenfassen?double add, sub, mul, div, modreturn kommt in meinen Lektionen erst später. Mir ist es nur nebenbei durch das lesen von Texten im Netz bekannt. In den Übungen sollen wir ja möglichst nur das verwenden, was in der bisherigen Fortbildung vorgekommen ist.
-
PatrickHH schrieb:
Kann man nicht auch alle Funktionen zusammenfassen?
Funktionen sind keine Variablen! Das sind eigentlich Grundlagen. Du kannst das alles aber auch einfach ohne Funktionen machen, wenn dir das lieber ist. Die Grundstruktur sieht dann so aus:
#include <stdlib.h> #include <stdio.h> #include <string.h> int main() { char buf[256]; double current; printf("Anfangszahl eingeben: "); fgets(buf, sizeof(buf), stdin); current = atof(buf); while (buf[0] != '=') { printf("= %f", current); fgets(buf, sizeof(buf), stdin); switch (buf[0]) { case '+': current += atof(buf + 1); // In buf steht jetzt z.B. "+5". Dann steht in buf + 1 nur noch "5". ... default: // Unbekanntes Zeichen, Fehlermeldung. } } }
-
Ja, das hast Du recht, eigentlich sind das Grundlagen. Höre jetzt auch auf für heute und mache morgen nach der Arbeit weiter.
Viel Dank erstmal für Deine Hilfe
