Eine Zahl quadrieren ohne arithmetischen Operator
-
#include <stdio.h> int main (void) { int e1; int e2; scanf("%i", & e1); scanf("%i",& e2); printf("%i,%i", e1, e2); int calc( unsigned int e1, unsigned int e2, char op) { switch (op) { case '-': return (e1-e2); case '*': return (e1*e2); case '/': return (e1/e2); Default: case '+': return (e1+e2); } } return 0; }
so wenn ich das so habe, wüde ich sagen das er sofort auf default: case '+' geht. und e1+e2 rechnet. wie kann ich mir mein ergebnis also e1+e2 ausgeben lassen also printf(). ist das ergebnis calc? benutzt er die ganze funktion überhaupt weil kein op definiert ist, müßte ich ihm noch sagen
char op='+'? aber auch wenn ich das machen klappt es nicht.
-
grinhilde schrieb:
so wenn ich das so habe, wüde ich sagen das er sofort auf default: case '+' geht. und e1+e2 rechnet. wie kann ich mir mein ergebnis also e1+e2 ausgeben lassen also printf(). ist das ergebnis calc? benutzt er die ganze funktion überhaupt weil kein op definiert ist, müßte ich ihm noch sagen char op='+'? aber auch wenn ich das machen klappt es nicht.
Sei bitte so freundlich und benutz Groß- und Kleinschreibung. Auch musst Du nicht so schreiben, wie Du denkst, bzw. sprichst: Du kannst Dir ruhig ein wenig Mühe beim formulieren geben.
In Deinem Code geht es genauso wirr zu - da ist die
calc()
Funktion innerhalb dermain()
Funktion. Das geht so nicht in C.
Dein Problem ist gar nicht so sehr "Eine Zahl quadrieren ohne arithmetischen Operator", sondern eher, dass Du noch ganz am Anfang mit C stehst.
Ganz dringend nochmal in die Unterlagen schauen!Z.B.:
#include <stdio.h> /* Deklaration */ int calc( unsigned int e1, unsigned int e2, char op); /* Definition */ int main (void) { int e1; int e2; scanf("%i", & e1); scanf("%i",& e2); int sum = calc(e1, e2, '+'); printf("%i+%i=%i\n", e1, e2, sum); } /* Definition */ int calc(unsigned int e1, unsigned int e2, char op) { switch (op) { case '-': return e1-e2; case '*': return e1*e2; case '/': return e1/e2; default: /* fall through */ case '+': return e1+e2; } }
-
Beachte bei dem Program von Furble Wurble die Zeile 12. Da wird die Funktion calc aufgerufen. Alleine durch die Definition passiert das nicht.
Die einzige Funktion die automatisch aufgerufen wird, istmain
(ja, auch das ist eine Funktion)Und auch Zeile 24.
default
wird komplett klein geschrieben
-
danke für den tipp.
#include <stdio.h> #include <math.h> /* Deklaration */ int calc( unsigned int e1, unsigned int e2, char op); /* Definition */ int main (void) { int e1; int e2; scanf("%i", & e1); scanf("%i",& e2); int sum = calc(e1, e2, '+'); printf("%i+%i=%i\n", e1, e2, sum); int q; q=quad(sum); printf("%i",q); } /* Definition */ int calc(unsigned int e1, unsigned int e2, char op) { switch (op) { case '-': return e1-e2; case '*': return e1*e2; case '/': return e1/e2; default: case '+': return e1+e2; } return 0; }
Wenn ich jetzt die funktion quad() nutzen möchte klappt es nicht.
Warum?
Die fehlermeldung ist:
/tmp/ccQv1GTY.o: In functionmain': 1391029084.c:(.text+0x79): undefined reference to
quad'
collect2: ld returned 1 exit status
-
ha! es klappt!
#include <stdio.h> #include <math.h> /* Deklaration */ int calc( unsigned int e1, unsigned int e2, char op); /* Definition */ int main (void) { int e1; int e2; scanf("%i", & e1); scanf("%i",& e2); int sum = calc(e1, e2, '+'); printf("%i+%i=%i\n", e1, e2, sum); double q; q= pow (sum,2); printf("%g",q); } /* Definition */ int calc(unsigned int e1, unsigned int e2, char op) { switch (op) { case '-': return e1-e2; case '*': return e1*e2; case '/': return e1/e2; default: case '+': return e1+e2; } return 0; }
-
Ich glaube, du solltest die Funktion calc zum Quadrieren benutzen.
-
Bashar schrieb:
Ich glaube, du solltest die Funktion calc zum Quadrieren benutzen.
in der Aufgabenstellung war:
Programmes soll das Quadrat der Summe der Eingabezahlen sein. Diese Zahl soll das Programm berechnen, ohne dabei einen arithmetischen Operator zu benutzen!Drei fragen hätte ich wohl noch, die haben allerdings nicht mit der Aufgabe zu tuhen:
1.) Welchen Wert hat die Variable k(int) nach Durchlauf dieser switch-Anweißung?
switch(!5) {case 4: k=10; case5: k=11; break; k=12; default: k=0}?
Zur Auswahl war: 10, 11, 0,12
ICh würde sagen:10.2.) Für die Beschreibung des Prozess-Management-System eines Betriebssystems eignet sich ....
Zur Auswahl war: ein Zustandsdiagramm, ein Synatxdiagramm, ein Struktogramm, ein Programmablaufplan
ich würde sagen:Struktogramm3.) Wenn man die Aufgabe hätte:
Schreiben Sie eine C-Funktion, die die Summe zweier "float"-Werte (Parameter der Funktion) berechnet und als "double"-Wert zurückgibt.
Hinweis: Die Funktion darf keine Bildschirm-oder Datei- Ein-/Ausgaben enthalten!Wäre das dazu eine Lösung? Irgendwie ist mir das zu einfach, deshalb kann da was nicht richtig sein.
#include <stdio.h> int main (void) { float zahl1 = 1; float zahl2 = 2; double summe ; summe = zahl1 +zahl2; return 0; }
Liege ich damit richtig?
-
grinhilde schrieb:
Bashar schrieb:
Ich glaube, du solltest die Funktion calc zum Quadrieren benutzen.
in der Aufgabenstellung war:
Programmes soll das Quadrat der Summe der Eingabezahlen sein. Diese Zahl soll das Programm berechnen, ohne dabei einen arithmetischen Operator zu benutzen!Eben!
Drei fragen hätte ich wohl noch, die haben allerdings nicht mit der Aufgabe zu tuhen:
1. falsch. Wie viel ist !5? Weißt du, was '!' bedeutet?
2. kommt ganz drauf an, was dein Prof da für richtig hält. Daher kein Kommentar
3. falsch. Lies die Aufgabe nochmal genau.
-
1.) ! = nicht gleich
ich dachte er vergleicht 5 ist ungleich 10 also hört er hier auf.
möglich ist aber auch das er sofort auf k=0 springt, weil nichts gleich ist.3.) Dann verstehe ich die Aufgabe nicht.
-
grinhilde schrieb:
1.) ! = nicht gleich
ich dachte er vergleicht 5 ist ungleich 10 also hört er hier auf.Erklär doch mal, wie switch funktioniert. Das scheinst du nicht verstanden zu haben.
möglich ist aber auch das er sofort auf k=0 springt, weil nichts gleich ist.
Wissen, nicht raten! Was ist
!5
? Oder besser: Wie viel ist!5
? Das ist nämlich eine Zahl, die hat einen ganz bestimmten Wert.3.) Dann verstehe ich die Aufgabe nicht.
Schreiben Sie eine C-Funktion, die die Summe zweier "float"-Werte (Parameter der Funktion) berechnet und als "double"-Wert zurückgibt.
Nichts von dem hervor gehobenem hast du erfüllt. (Ja, technisch gesehen hast du eine Funktion geschrieben, aber dir ist tatsächlich entgangen, dass die Aufgabenstellung anders gemeint ist).
-
Langsam wird dieser Thread grotesk.
-
grinhilde schrieb:
ha! es klappt!
int sum = calc(e1, e2, '+'); printf("%i+%i=%i\n", e1, e2, sum); double q; q= pow (sum,2); printf("%g",q);
Nein das ist nicht das was Dein Lehrer erwartet. Du sollst das Quadrat ebenfalls mit
calc
berechnen, was Dir hier mehrfach gesagt wurde.int sum = calc(e1, e2, '+'); int q = calc(sum, sum, '*');
-
µ schrieb:
grinhilde schrieb:
ha! es klappt!
int sum = calc(e1, e2, '+'); printf("%i+%i=%i\n", e1, e2, sum); double q; q= pow (sum,2); printf("%g",q);
Nein das ist nicht das was Dein Lehrer erwartet. Du sollst das Quadrat ebenfalls mit
calc
berechnen, was Dir hier mehrfach gesagt wurde.int sum = calc(e1, e2, '+'); int q = calc(sum, sum, '*');
Hier bin ich anderer Meinung.
Aber ich denke das, dass auslegungssache ist.
-
SeppJ schrieb:
grinhilde schrieb:
1.) ! = nicht gleich
ich dachte er vergleicht 5 ist ungleich 10 also hört er hier auf.Erklär doch mal, wie switch funktioniert. Das scheinst du nicht verstanden zu haben.
möglich ist aber auch das er sofort auf k=0 springt, weil nichts gleich ist.
Wissen, nicht raten! Was ist
!5
? Oder besser: Wie viel ist!5
? Das ist nämlich eine Zahl, die hat einen ganz bestimmten Wert.3.) Dann verstehe ich die Aufgabe nicht.
Schreiben Sie eine C-Funktion, die die Summe zweier "float"-Werte (Parameter der Funktion) berechnet und als "double"-Wert zurückgibt.
Nichts von dem hervor gehobenem hast du erfüllt. (Ja, technisch gesehen hast du eine Funktion geschrieben, aber dir ist tatsächlich entgangen, dass die Aufgabenstellung anders gemeint ist).
ich glaube !5 hat den wert 0.
-
grinhilde schrieb:
Hier bin ich anderer Meinung.
Aber ich denke das, dass auslegungssache ist.Dein pow(x,2) erfüllt streng genommen die Aufgabenstellung, trotzdem ist es 100% nicht das was der Lehrer sehen will.
Du verwendest calc für die Addition, nicht aber für das Quadrieren. Diese Unterscheidung gibt die Aufgabenstellung einfach nicht her.
Letztendlich, tue was Du willst wenn Du es besser weißt als alle hier.
-
grinhilde schrieb:
ich glaube !5 hat den wert 0.
Warum glaubst du das?
Wissen, nicht glauben!
-
DirkB schrieb:
grinhilde schrieb:
ich glaube !5 hat den wert 0.
Warum glaubst du das?
Wissen, nicht glauben!
Himmel nochmal bestätige doch einfach, dass der Wert 0 stimmt.
-
µ schrieb:
DirkB schrieb:
grinhilde schrieb:
ich glaube !5 hat den wert 0.
Warum glaubst du das?
Wissen, nicht glauben!
Himmel nochmal bestätige doch einfach, dass der Wert 0 stimmt.
Naja: nur zu sagen "0 stimmt" finde ich etwas billig.
Die Frage ist ja eh schon grenzwertig.@grinhilde: Hast Du's denn mal ausprobiert? Ausserdem ein schönes Beispiel, wie wichtig richtige Formatierung ist.
#include <stdio.h> int main(void){ int k=-1; switch(!5) { case 4: k=10; case 5: k=11; break; k=12; default: k=0; } printf("%d\n", k); }
Fangfrage: wie ist denn der Wert von
k
, wenn ich in Zeile 5
a)switch(4)
und
b)switch(5)
schreibe?
Schau noch mal in Deine Unterlagen zur switch-Anweisung, wenn's nicht klar ist.
-
Furble Wurble schrieb:
µ schrieb:
DirkB schrieb:
grinhilde schrieb:
ich glaube !5 hat den wert 0.
Warum glaubst du das?
Wissen, nicht glauben!
Himmel nochmal bestätige doch einfach, dass der Wert 0 stimmt.
Naja: nur zu sagen "0 stimmt" finde ich etwas billig.
Die Frage ist ja eh schon grenzwertig.@grinhilde: Hast Du's denn mal ausprobiert? Ausserdem ein schönes Beispiel, wie wichtig richtige Formatierung ist.
#include <stdio.h> int main(void){ int k=-1; switch(!5) { case 4: k=10; case 5: k=11; break; k=12; default: k=0; } printf("%d\n", k); }
Fangfrage: wie ist denn der Wert von
k
, wenn ich in Zeile 5
a)switch(4)
und
b)switch(5)
schreibe?
Schau noch mal in Deine Unterlagen zur switch-Anweisung, wenn's nicht klar ist.Um zu wissen was !5 ist habe ich folgendes gemacht:
#include <stdio.h> int main (void) { int wert = !5; printf("%i", wert); return 0; }
ich bekam die ausgabe 0
auf deine frage:
Wenn switch(4) -> k=10
Wenn switch(5) -> k=11Zu einer anderen Frage:
bei der Aufgabe:
Schreiben Sie eine C-Funktion, die die Summe zweier "float"-Werte (Parameter der Funktion) berechnet und als "double"-Wert zurückgibt.
Habt ihr geschrieben das ich die Aufgabe falsch verstanden habe. Leider ist mir nicht klar wie ich sie sonst umsetzten soll.
Zu meinen Unterlagen:
Sie bestehen aus Praktikumsaufgaben, welche immer funktioniert haben. Hier waren auch die Aufgaben anderes, wie ich finde verständlicher gestellt. Und einer tollen power point Präsentation des Profs.
Ich suche schon seit längeren auch nach einer tollen Literatur dazu, vorallem weil es sich um eine Kofferklausur handelt.
-
grinhilde schrieb:
Um zu wissen was !5 ist habe ich folgendes gemacht:
#include <stdio.h> int main (void) { int wert = !5; printf("%i", wert); return 0; }
ich bekam die ausgabe 0
Gut! That's the spirit!
Klar probierst Du es aus, wenn Du nicht sofort die Antwort weisst.
Bleibt die Frage, warum das so ist. Evtl. steht was in Deinen Unterlagen zum "logical negation operator !".
Ansonsten:
Das Ergebnis des Operators ist 0, wenn der Operand nicht gleich 0 ist, bzw. 1 wenn der Operand gleich 0 ist. Das Ergebnis hat den Typ int.
Alles klar?grinhilde schrieb:
auf deine frage:
Wenn switch(4) -> k=10Mal ausprobiert?
SeppJ hat auch schon mal eine Hervorhebung gemacht:
grinhilde schrieb:
Schreiben Sie eine C-Funktion, die die Summe zweier "float"-Werte (Parameter der Funktion) berechnet und als "double"-Wert zurückgibt.
Die Deklaration Deiner Funktion müsste also so aussehen:
double summe(float a, float b);
Richtig?