Eine Zahl quadrieren ohne arithmetischen Operator
-
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?
-
ist das nicht das gleiche nur umständlicher geschrieben?
so richtig sehe ich da keinen Unterschied.#include <stdio.h> int main (void) { float zahl1; float zahl2; double summe ; summe = zahl1 +zahl2; return 0; }
double summe(float a, float b);
ja ich hab es vorhin mit verschiedenen k ausprobiert.
-
grinhilde schrieb:
ist das nicht das gleiche nur umständlicher geschrieben?
so richtig sehe ich da keinen Unterschied.#include <stdio.h> int main (void) { float zahl1; float zahl2; double summe ; summe = zahl1 +zahl2; return 0; }
Wo ist denn hier die Funktion, die zwei Parameter vom Typ float entgegennimmt und ein Ergebnis vom Typ double zurückgibt?
-
Belli schrieb:
grinhilde schrieb:
ist das nicht das gleiche nur umständlicher geschrieben?
so richtig sehe ich da keinen Unterschied.#include <stdio.h> int main (void) { float zahl1; float zahl2; double summe ; summe = zahl1 +zahl2; return 0; }
Wo ist denn hier die Funktion, die zwei Parameter vom Typ float entgegennimmt und ein Ergebnis vom Typ double zurückgibt?
Ich denke auch, dass deren Abwesenheit einen großen(!) Unterschied macht.
Abgesehen davon ist das Programm oben ein Beispiel für so ziemlich das schlimmste, was Dir als C Programmierer passieren kann: "undefined beavior" (der Inhalt von
zahl1
undzahl2
ist nicht definiert.)Gut, dass Du mitdenkst und als mündiger Jungprogrammierer auftrittst, aber: Schreib einfach die blöde Funktion und gut ist's!
Übrigens ist k!=10 in Aufgabe a) oben. Ich denke Du hast es ausprobiert?!