|
veteran
|
veteran
Joined: Mar 2003
|
Bin in C zwar nicht mehr so fitt, stimme Xan aber 100% zu.
2.) ist zwar syntaktisch korrekt, aber vermutlich semantisch falsch, da das Ergebnis nicht in den beiden Variablen (produkt und summe) zu sehen ist. 4.) einzig mögliche Lösung die sowohl syntaktisch alsauch semantisch richtig ist.
Vorausgesetzt die Funktion soll überhaupt das machen was uns durch die benennung der Variablen vorgegaukelt wird. (Macht aber ansonsten keinen Sinn.)
Alle anderen varianten gehen einfach nicht. (Mal davon abgesehen das evtl. automatisch von float nach int konvertier wird. <schauder>)
Das mit Rückgabewert ignorieren wenn man ihn nicht braucht bin ich von Java auch gewohnt. Kann es mir gar nicht mehr anders vorstellen. bzw. weiss nicht mal mehr ob es bei anderen Programmiersprachen (Pascal?) erforderlich ist den Rückgabewert einer Variablen zuzuweisen.
Last edited by Tutamun; 12/02/06 02:02 AM.
|
|
|
|
old hand
|
old hand
Joined: Mar 2003
|
Hier mal der Quelltext meines Versuchs (Konsolenanwendung):
void prodsum (int k1, int k2, float x, float y)
//int prodsum (float k1, float k2, float x, float y)
//float prodsum (float &k1, float &k2, float x, float y)
//int prodsum (float k1, float k2, float &x, float &y)
//void prodsum (float k1, float k2, int x, int y)
{
// return 0;
}
int main(int argc, char* argv[])
{
float produkt, summe;
produkt=float(0.815); summe=float(47.11);
prodsum (float (1,45), float(5.97), produkt, summe);
// return 0;
}
Einfach nur jeweils auskommentieren.
Die ganzen float(s), weil die Konstanten automatisch als double angenommen werden und sonst immer eine Warnung
kommt, wenn es zu float verkürzt wird.
Die einzige Version, die wirklich nicht funktioniert, ist Nr. 3 (Hi Ragon, wie geht's?), der Rest würde laufen, aber z.T.
mit Warnungen wegen Datenverlust, eben dem Abschneiden der Nachkommastellen.
@Xan: Woher weißt du, dass produkt und summe nur Ausgabeparamter sind, durch diese Übergabe können sie beides sein? (der Compiler meckert z.b. an, wenn sie nicht initialisiert sind - bei Delphi so schön einfach mit var, out und const)
Ich würde vom Sinn her rangehen, beim Aufruf der Funktion interessiert der Rückgabewert also nicht, da nirgends zugewiesen. Von den beiden ohne Datenverlust möglichen Varianten macht nur Nr. 4 Sinn, dort werden Zeiger übergeben und ermöglichen damit die Änderung der Variablen.
Also zusammengefasst:
3.) völlig unmöglich
1.), 5.) möglich, aber sicher nicht erwünschter Datenverlust durch Abschneiden der Nachkommastellen und auch keinerlei Möglichkeit zur Datenrückgabe - Funktion ist void, Varible sind Konstanten
2.) möglich, aber keinerlei Ergebnisrückgabe: das Ergebnis der Funktion wird nicht ausgewertet und die Parameter werden als Konstanten übergeben
es bleibt also nur Nr. 4
Passt auch recht gut zu meinen Erfahrungen, ich verwende häufig Win API-Funktionen, deren Rüchgabewerte, die
meistens tatsächlich nur einen Fehlercode bedeuten, werte ich eher selten aus. Die Ergebnisse finden sich in den
Variablen, die ich beim Aufruf als Zeiger übergeben habe.
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Es handelt sich um reine ausgabeparameter, da sie nicht initialisiert wurden... was natürlich blöd ist wegen der compiler warnungen...
Last edited by Tutamun; 12/02/06 02:04 AM.
|
|
|
|
old hand
|
old hand
Joined: Mar 2003
|
Wegen der Warnungen hatte ich ja die Zeile mit der Initialisierung eingefügt, dürfte aber keine Rolle spielen - aber wie gesagt Delphi mit const, out und var ist da viel besser.
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Ich glaube, wir sind uns einig, dass Pascal die beste Programmiersprache ist <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />
Ich würde aber auch sagen, dass produkt und summe die Ausgabeparameter sind, weil es u.a. zum Funktionsnammen prod(ukt)sum(me) passen würde. Die Funktion macht halt nix anderes als die beiden Eingabeparameter (ersten beiden) zu summieren bzw. zu multiplizieren und dann jeweils das Ergebnis zurückzuliefen.
Was die Initialisierung betrifft: ich würde da wahrscheinlich die Werte 0 nehmen <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />
Const gibt es in C auch - nennt sich nur "static" <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />
Xanlosch's Home - Fortombla hortomosch !Kein Support via Foren-PM - postet mehr im Forum.
|
|
|
|
old hand
|
old hand
Joined: Mar 2003
|
Ich glaube, wir sind uns einig, dass Pascal die beste Programmiersprache ist <img src="/ubbthreads/images/graemlins/smile.gif" alt="" /> Na, das ist doch wenigsten etwas. Natürlich sind produkt und summe Ausgabeparameter (jedenfalls bei Nr. 4), ich meinte nur, dass sie auch Eingabeparameter sein können - da könnte halt noch etwas zwischen der Deklaration und dem Funktionsaufruf sein. Die Funktion macht halt nix anderes als die beiden Eingabeparameter (ersten beiden) zu summieren bzw. zu multiplizieren und dann jeweils das Ergebnis zurückzuliefen. Vom Namen würde ich nicht ausgehen. Die eigentliche Funktion ist nun einmal unbekannt. Machen kann sie letztlich alles, unabhängig vom Namen. Wenn es um eine solche Frage geht, würde ich als Steller auf jeden Fall versuchen durch den Namen zu verwirren. Also Funktion Otto würde als Ergebnis eben Gustav haben. Aber wir stimmen doch wenigstens so weit überein: Xanlosch, Tutamun und Steffen sagen Rei, die Antwort ist Nr. 4Weitere Zustimmungen oder Ablehnungen bitte in getrennten Posts.
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Natürlich sind produkt und summe Ausgabeparameter (jedenfalls bei Nr. 4), ich meinte nur, dass sie auch Eingabeparameter sein können - da könnte halt noch etwas zwischen der Deklaration und dem Funktionsaufruf sein. Was nicht da steht, existiert nicht - bin ich der Meinung. Vom Namen würde ich nicht ausgehen. Die eigentliche Funktion ist nun einmal unbekannt. Machen kann sie letztlich alles, unabhängig vom Namen. Wenn es um eine solche Frage geht, würde ich als Steller auf jeden Fall versuchen durch den Namen zu verwirren. Also Funktion Otto würde als Ergebnis eben Gustav haben. Da magst du recht haben. Nur gehe ich von mir aus und da hat der Funktionsname schon noch was mit der eigentlichen Funktionalität, die die Funktion ausführen soll, zu tun. Sonst könnte ich ja anfangen, die benutzten Funktionen einfach nur durchzunummerieren (funkt0001, funkt0002, ..., funkt9999) <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" /> Ich glaube nicht, dass dies hier der Sinn sein soll, jemanden zu verwirren, der sich gerade damit beschäftigt bzw. es erlernt <img src="/ubbthreads/images/graemlins/think.gif" alt="" />
Xanlosch's Home - Fortombla hortomosch !Kein Support via Foren-PM - postet mehr im Forum.
|
|
|
|
old hand
|
old hand
Joined: Mar 2003
|
Da magst du recht haben. Nur gehe ich von mir aus und da hat der Funktionsname schon noch was mit der eigentlichen Funktionalität, die die Funktion ausführen soll, zu tun. Klar, je mehr ich programmiert habe, umso länger (und damit deutlicher) sind meine Bezeichner geworden. Wenn jemand in einem einfachen Fall aber nur testen will (z. B als Dozent), wie zugehört und das ganze beachtet wurde, und dann mehr oder weniger leicht hinterhältige Fragen verwendet, empfinde ich das durchaus als legitim.
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Da ich die genaueren Umstände für die Aufgabe nicht kenne (Ersteller, Ort des Geschehens), kann ich nichts dazu sagen. Es kommt aber gut hin, wenn ein Vorlesender so die Aufmerksamkeit seiner Zuhörer testen will.
Xanlosch's Home - Fortombla hortomosch !Kein Support via Foren-PM - postet mehr im Forum.
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Ups sorry, mit den Variablen produkt und summe soll natürlich eine Summe bzw. ein Prdoult der beiden ersten Werte gebildet werden. Ob sie dabei zurückgegeben werden oder nicht, ist aus der Aufgabenstellung heraus nicht ersichtlich.
Auch kann es weiterhin nur eine void Funktion sein. Der Compiler würde zwar auch mit einem return Wert natürlich mitspielen, es geht hier aber nur um die grundsätzliche Theorie und da kommt eben nur eine void Funktion in Frage, egal wie großzügig der Compiler ist.
Das ist übrigens eine Frage aus einer früheren Informatikklausur. In dieser Klausur kommt es wirklich nur auf die Theorie an und hat mit Programmieren ehrlich gesagt absolut gar nichts zu tun.
Die Namen werden in der Klausur extra verwirrend gewählt (obwohl es unser Prof ab der ersten Stunde ausredet). Beispiel gefällig? Klasse nennt sich zickzack mit mehreren private und public Variablen in main: Variablen nennen sich zick und zack, die als Datentyp die Klasse zickzack haben zusätzlich gibt es einen Pointer in der Klasse, der sich next nennt und auf zuck (Datentyp zuck ist zickzack) zeigt. Und dann soll das Programm sogar noch was machen und man soll sagen, welche Zeile einen Fehler verursachen würde (das ist ein Spaß, sage ich euch)
|
|
|
|
old hand
|
old hand
Joined: Mar 2003
|
Das ist übrigens eine Frage aus einer früheren Informatikklausur. Ist ja nett, dass du uns dies auch schon sagst und Nein, die beiden Funktione ohne Rückgabe würden keinen Sinn machen, bei beiden käme es zu zu einer Verfälschung, da bei float->int automatisch Nachkommastellen abgeschnitten werden.
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Rei, wenn es wirklich eine theoretische Abhandlung ist, dann muss es Lösung Nr. 6 sein. Alle anderen passen einfach nicht - ausser man macht freiwillig und offensichtlich Fehler bei der Konvertierung der Datentypen.
Obwohl, so ohne weiteres Ginge dies auch nicht, da es in C - meines Wissens nach - keine automatische Datentypkonvertierung gibt. Da aber die Compiler alle an dieser Stelle großzügig sind, kann ich dies nicht mit Gewißheit sagen.
Xanlosch's Home - Fortombla hortomosch !Kein Support via Foren-PM - postet mehr im Forum.
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Rei, wenn es wirklich eine theoretische Abhandlung ist, dann muss es Lösung Nr. 6 sein. Hast du das jetzt ernst gemeint ?
When you find a big kettle of crazy, it's best not to stir it. --Dilbert cartoon
"Interplay.some zombiefied unlife thing going on there" - skavenhorde at RPGWatch
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
@Rei: Eine der Void Funktionen ist es nicht. Glaub mir oder schau in der Lösung nach. Und wenn die Lösung nicht die Nummer 4 ist, dann ist sie falsch. Punkt, aus, ende der Diskussion.
<kopf schüttel> <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />
ps. bei returntyp int den man nicht verwendet handelt es sich um keine großzügigkeit von einem Compiler sondern um eine Grundeigenschaft der Sprache.
Auf die großzügigkeit des Compilers muss man bei allen Möglichkeiten ausser 2 oder 4 vertrauen, und somit sind sie falsch.
Last edited by Tutamun; 12/02/06 10:26 PM.
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Und du kannst ja schreiben das Nummer 2 oder 4 möglich wären. Man aber nur bei 4 etwas mit dem Ergebnis der Berechnung anfangen kann. Und du dich deswegen für 4 entschieden hast.
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
... Auf die großzügigkeit des Compilers muss man bei allen Möglichkeiten ausser 2 oder 4 vertrauen, und somit sind sie falsch. Allermindestens aber schlechter Programmierstil! <img src="/ubbthreads/images/graemlins/suspicion.gif" alt="" /> <img src="/ubbthreads/images/graemlins/wave.gif" alt="" />
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Da es aber um Theorie geht sind sie falsch, nicht? <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Okay, zumindestens schön zu wissen, daß auch ihr an dieser Aufgabe zu knabbern habt. Die Infoklausur habe ich übrigens bestanden *juhu*
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
Trotz unserer `Lösungen´!? <img src="/ubbthreads/images/graemlins/confused.gif" alt="" />
Na dann - herzlichen Glückwunsch, Rei! <img src="/ubbthreads/images/graemlins/up.gif" alt="" /> <img src="/ubbthreads/images/graemlins/delight.gif" alt="" />
Ragon, der Magier
|
|
|
|
veteran
|
veteran
Joined: Mar 2003
|
@Alrik: Na klar ! Wenn alle gebotenen Lösungen nicht stimmen, wird ne neue hinzugefügt !
@Ragon: Schlechter Programmierstil fängt da an, wo man eindeutige Bezeichnungen für Variablen und Funktionen für Überflüssig hält und alle ähnlich benennt. <img src="/ubbthreads/images/graemlins/biggrin.gif" alt="" />
@Rei: Glückwunsch ! Du kannst uns ja mal die richtige Lösung verraten, sobald du diese weisst !
Xanlosch's Home - Fortombla hortomosch !Kein Support via Foren-PM - postet mehr im Forum.
|
|
|
|
|