maddin Geschrieben 5. Juni 2001 Teilen Geschrieben 5. Juni 2001 dies ist eigenlicht nicht so richtig eine frage. mehr eine überprüfung wie gut ihr seit. gab ja abundzu ein paar streitigkeiten darüber. aufgabe: eine funktion soll geschrieben werden, die mir folgendes hauptprogramm ermöglicht. // prototyp int main () { summe (2, 4, 5 ); // gibt 9 zurück summe (3, 5, 6, 7); // gibt 18 zurück } na da bin ich mal auf eure lösungen gespannt. ps: ihr dürft sowohl c als auch c++ mittel verwenden. viel spass Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gugelhupf Geschrieben 5. Juni 2001 Teilen Geschrieben 5. Juni 2001 Weiss nich, ob ich Dich richtig verstanden habe... #include <stdio.h> int summe(int a,int b,int c,int d=0) { return b+c+d; } int main() { int wert1, wert2=0; wert1=summe (2, 4, 5 ); // gibt 9 zurück wert2=summe (3, 5, 6, 7); // gibt 18 zurück printf("\nWert1: %i, Wert2: %i\n",wert1,wert2); return 0; } Aber ich hoffe, daß Du mir keine 4- gibst, Herr Lehrer ! gruß gugel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ketzer Geschrieben 5. Juni 2001 Teilen Geschrieben 5. Juni 2001 Hm, irgendwie habe ich da das Problem, das die Anzahl der Parameter nicht konstant ist. Bei C++ wäre das kein Problem, aber die Klasse darf ja wohl auch nur eine Memberfunktion "Summe" besitzen. Aber da ich ja nun nicht wirklich gut bin, wie geht das denn? (variable Anzahl Parameter???) Gr33tz Ketzer Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 5. Juni 2001 Autor Teilen Geschrieben 5. Juni 2001 @gugelhupf ok nicht ganz das was ich wollte aber geht auch. erweiterung. summe ( 1 ); // liefert 0 summe ( 100, ... ) // liefert die summe von 100 bei ... eingegebenen zeichen. das zeichen "=" ist für den prototypen verboten. [ 05. Juni 2001: Beitrag editiert von: maddin ] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
toosten Geschrieben 5. Juni 2001 Teilen Geschrieben 5. Juni 2001 #include <iostream.h> class summe { int m_summe; public: summe(int, int, int); summe(int, int, int, int); ~summe(){}; print(); }; summe::summe(int a,int b,int c) { m_summe=b+c; } summe::summe(int a, int b, int c, int d) { m_summe=b+c+d; } summe: :print() { cout<<m_summe<<endl; } int main() { summe a(2, 4, 5 ); // gibt 9 zurück summe b(3, 5, 6, 7); // gibt 18 zurück a.print(); b.print(); return 0; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hasi Geschrieben 5. Juni 2001 Teilen Geschrieben 5. Juni 2001 @toosten: noe ich glaube das meint er nicht weil er hat geschrieben : eine funktion soll geschrieben werden, die mir folgendes hauptprogramm ermöglicht. und du hast zwei Methoden geschrieben, ja okay halt zwei Konstruktoren Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 5. Juni 2001 Autor Teilen Geschrieben 5. Juni 2001 jo hasi hat recht. es soll eine funktion geschrieben werden. und außerdem wären die anderen methoden viel zu umständlich. es soll dann nämlich auch mit 1001 parametern möglich sein. halb variable. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gugelhupf Geschrieben 5. Juni 2001 Teilen Geschrieben 5. Juni 2001 Ok,Ok, nachdem wir nun wissen, daß der Herr Lehrer keine Überladungen will und meine Wenigkeit es auch verstanden zu haben scheint, hier mein Vorschlag: #include <stdio.h> #include <stdarg.h> int summe(int Count_Params,...) { int Sum=0; va_list Param_Field; va_start(Param_Field,Count_Params); for(int loop=1;loop<=Count_Params;loop++) Sum+=va_arg(Param_Field,int); va_end(Param_Field); return Sum; } int main() { int Var1=summe (2, 4, 5 ); // gibt 9 zurück int Var2=summe (3, 5, 6, 7); // gibt 18 zurück printf("\nWert1: %i, Wert2: %i\n",Var1,Var2); return 0; } gruß gugel Jetzt aber mündlich ne 1 !!! *ggg* :cool: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 6. Juni 2001 Autor Teilen Geschrieben 6. Juni 2001 *jubeltobundfreuwieeinkleineskind* ihr wisst es. das ist auf jeden fall eine *mistverdammteraussetzerdertastatur*. da kannst du dich ja freuen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush1 Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Ihr Pfeifen, wer waren denn Eure Dozenten?!?! Man muß die Funktion überladen (2faches Definieren der Funktion zum Einen mit 2 und einmal mit 3 Parametern). Der 1. Parameter ist überflüssig, da er die Anzahl weiterer Parameter angeben soll - beim überladen ist die Anzahl der Parameter und der Typ eh klar. Eine Echte Lösung wäre es ein CArray anzulegen mit ints oder floats. Da kann man problemlos drüberiterieren und alles zusammenrechnen. .Insert & .RemoveAll sind auch schon vordefiniert. Aber bis zu den Templates sind wohl nur die Wenigsten gekommen. Erst mal der Inlcude: #include <afxtempl.h> das läuft dann so: CArray<int,int> x; Nun kann man alles über den Punkt-Operator benutzen. x.Add(5); x.Add(6); usw die Funktion heißt dann: int Summe(CArray x) { int summe=0; for (int i=0;i<x.GetSize();i++) { summe+=x.GetAt(i); } return summe; } Zum löschen des Arrays nur x.RemoveAll(); aufrufen! Ist doch einfacher und man braucht keine 1000 Funktionen definieren. Das nennt sich dann übrigens wirklich C++!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zwerg Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Tja und wenn das mit C geht höre ich für immer auf zu Programmieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 6. Juni 2001 Autor Teilen Geschrieben 6. Juni 2001 @Crush1 ok deine lösung läuft auch aber verate mir einmal wie man der funktion "int Summe (CArray x);" drei Integerwerte übergeben kann. Entweder ich habe da etwas verpasst oder es geht nicht. also liefert dann der ausdruck "Summe (2,3,6);" keine 9 wie er sollte sondern einen FEHLER. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gugelhupf Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 @Crush: Oje, da werfen Leute mit der ATL um sich, als ob der kostbare Speicherbedarf heutzutage nichts mehr wäre.... Abgesehen davon lässt sich feststellen, daß fast alles über die ATL ein längeres Laufzeitverhalten hat. So long, macht was ihr wollt, aber machts richtig ! :cool: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gugelhupf Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 @Crush: Oje, da werfen Leute mit der ATL um sich, als ob der kostbare Speicherbedarf heutzutage nichts mehr wäre.... Abgesehen davon lässt sich feststellen, daß fast alles über die ATL ein längeres Laufzeitverhalten hat. So long, macht was ihr wollt, aber machts richtig ! :cool: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cool-Matthias Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Wie kann man eine solch einfache Aufgabe nur dermassen verkomplizieren. Gugelhupfs Lösung war die optimale, seht das einfach ein. Und wer vorhat für einen Rechenfunktion ATL oder ne komplette Klasse zu verwenden, sollte vielleicht noch mal ein paar Stunden zum Thema "Optimierung des Programmcodes" verwenden . Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush1 Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Maddin: Die Zahlen sind im CArray!!! Die müssen da vorher schon drin sein!!! Ich weiß nicht, was ihr wollt. Gugglhupf: Speicher hammer alle genug und wenns nicht reicht ist die Platte dran. Ein Test der Laufzeit um die Zahlen abzufragen lag im nanosekundenbereich, also mir ist das schnell genug. Cool-Matthias: Lies nochmal den 1. Satz von meinem Briefschen! Da habe ich nur nochmal Gugglhupfs Lösung bestätigt. Außerdem ist Wert a überflüssig (wird ja auch gar nicht verwendet) wenn nicht sogar blödsinnig solang man nicht mit Arrays arbeitet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hasi Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Original erstellt von Crush1: <STRONG>Speicher hammer alle genug und wenns nicht reicht ist die Platte dran.</STRONG> Ansichtssache, ich finde SpeicherSparen auch wichtig, wenn man es nicht uebertreibt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cool-Matthias Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Hi, also Crush1, ich möchte dir ja nicht zu Nahe treten aber wenn ich meinem Chef für so ne Aufgabe ne Funktion schreiben würde bei der ich ein CArray oder überhaupt ein Array übergebe, brät der mich am Spiess! Das ist kein fortgeschrittenes C++, das ist unnützer Overhead. Hast du dir mal überlegt was intern für Operationen für ein CArray ausgeführt werden? Und das alles nur um ein paar Zahlen zu übergeben. Aber falls du immer genügend Speicher hast und dein Chef der gleichen Meinung ist, dann ist das natürlich richtig :cool: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush1 Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Jungs, wenn wir alle nur noch Speicher sparen und optimieren bis zum Abwinken, dann gibt´s doch von der Industrie keinen Grund mehr noch schnellere Kisten mit größerem Hirn auszuspucken!!! Ihr habt wohl vergessen, daß wir Programmierer mit den Hardwareentwicklern im Wettrennen sind. Oder wolltet ihr heute noch auf Eurem alten C64 rumhacken um die letzten Raster-Effects aus dem Brotkasten zu kitzeln (jaja, das war´n noch Zeiten ...) und mit Vizawrite Textchen tippen?!?! Vielleicht ist Euch allen nicht klar, daß C++ kein Schritt nach hinten sondern nach vorne ist um uns das Leben einfacher zu machen und SOFTWAREENTWICKLUNG ZU BESCHLEUNIGEN!!! Denn Eure Optimierungen wird kein Schwein extra zahlen wollen, sehr wohl aber Euer feriges Produkt! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gugelhupf Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 @Crush1: Ich gebe Dir insofern Recht wenn es um normale Apps geht! Aber stell Dir z.B. das Marshaling bei COM-Objekten vor. Hier gibst zig Abhandlungen wie man Apartments speicherschonend in Threads einbaut... Das hat einfach mit den vtbls und vptr zu tun, die effizient eingesetzt werden müssen, um verteilte Anwendunden über Netzwerk in einem akzeptablen Zeitfenster aufrufen zu können. Zu obiger Aufgabenstellung: Wenn jemand Dir diese Aufgabe gibt - nehmen wir an ein Anwendungsentwickler - dann geht der davon aus, daß er einen Methodenaufruf bekommt der variabel ist. Vielleicht implementiert er schon weiter während er annimmt, daß du ihm die Lösung von oben gibst. Nun lieferst du ihm eine Methode mit einem Array als Übergabewert...was der wohl denken, oder fluchen wird ???!!! Wenn wir davon ausgehen, daß obige Aufgabenstellung eine Komponente sein soll und ein Team an der Applikation arbeitet, darf man davon NICHT abweichen, auch wenn Deine Lösung aus Deiner Sicht effizienter ist. Wenn man als Einzelner alles implementieren muss, dann is Dein Vorschlag auch OK gruß gugel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 6. Juni 2001 Autor Teilen Geschrieben 6. Juni 2001 juhu kloppe. eigentlich ist die methode von gugelhupf die einzige, die das geforderte zu 100% erfüllt. es sollte nämlich eine funktion geben, die eine variable anzahl integerwerte übergeben wird. diese werte werden dann addiert und das ergebnis zurückgegeben. (ausgenommen der erste parameter, der die anzahl der übergebenen werte angibt) dazu brauche ich auf jeden fall den ersten parameter, den ich mit einem namen benennen muß. und zwar dazu das ich weiß, wo auf dem stack meine parameter anfangen. int summe (int [b]anzahl[/b], ... ) { va_list tmp; va_start(tmp,[b]anzahl[/b]); ... } der erste parameter "anzahl" wird bei "va_start" benötigt. sollte ich der funktion ein CArray übergeben kann ich nicht schreiben "summe (2,3,4)" da mir das einen fehler ausgeben würde. und dieser ausdruck sollte möglich sein. zum anderen thema: wozu sollte ich um so ein relativ einfaches problem zu lösen die stl oder atl verwenden. das wäre für mich zumindest viel zu viel code, der in meinem programm mit eingebacken wird. auch wenn die laufzeitnachteile nicht auffallen werden, die größe fällt auf. und außerdem wer nimmt eine motorsäge um seine rosen zu schneiden. keep it simple ... in diesem sinne STN (schönen tag noch) [ 06. Juni 2001: Beitrag editiert von: maddin ] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush1 Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Hast ja Recht Gugglhupf. Wobei die verteilten Anwendungen meist eh aus einer Hand kommen und da weiß man dann auch, daß man sich strikt an Vorgaben halten muß und nicht so eine unklare Beschreibung wie hier: int main () { summe (2, 4, 5 ); // gibt 9 zurück summe (3, 5, 6, 7); // gibt 18 zurück } na da bin ich mal auf eure lösungen gespannt. ps: ihr dürft sowohl c als auch c++ mittel verwenden. Die Parameter sind gar nicht ausdokumentiert, erst recht nicht deren Typen und die Art des Rückgabewertes (wobei ich immer davon ausgehe wie der Eingabewert). C++ war definitiv ERLAUBT weshalb ich ja gar nicht so falsch liegen kann. Ich habe Deine Lösung ja auch nicht angefochten sondern wollte noch einen anderen Weg aufzeigen. Ich denke das ist auch der Sinn eines solchen Forums, daß man mal aus der eigenen Schublade in die anderen Räume gucken darf. Von Optimierungen usw. war ja eh keine Rede, also waren das auch nicht Teil der Anforderungen. Ich stimme Dir zu, daß Deine Lösung prima ist. Aber was können wir von Grady Booch lernen? Das Design eines Programms entscheided über dessen Aufbau. Da hier Herkunft, Art und Verwendung der Daten unklar ist ist auch jede Lösung eigentlich unklar und somit jeder Schritt erlaubt. Der Rest ist ansichtssache. UML und andere Designmethoden wären ja auch gänzlich überflüssig, wenn wir nicht alle auf die C++ Paradigmas und deren Möglichkeiten setzen würden. Dann könnten wir ja gleich wieder zur prozeduralen Programmierung zurückgehen, Zeilennummern vergeben und mit Goto´s durch die Gegend hüpfen. Wenn Templates so unnötig und zeitraubend sind, warum widmet Soustroup ihm den größten Batzen an Zuwendung in seinen Büchern und hämmert uns allen das ganze Thema gewalttätig ins Hirn? Weil wir´s benutzen SOLLEN! Wer damit nicht lernt umzugehen wird bald wie die Pascal-Leute am Daumen nuckeln können. Die Industrie drängt nach Programmierung in OO und wer nicht mitmacht ist bald am AA! Denen ist es eh egal wie toll wir noch ein paar Taktzyklen aus der CPU rupfen oder ein paar Bytes einsparen könnten. (Alles klar? Einwände? Zusprüche? bin da und habe offene Ohren) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gugelhupf Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 @Crush1: Also gut FRIEDE *gggg* Wahrscheinlich schwappte die Diskussion über weil Du ein wenig persönlich geworden bist ("Wer waren denn Eure Dozenten?!"). Das gehört - wie ich finde - nicht hierher. Man darf provokativ wirken,aber man sollte nicht übertreiben In diesem Sinne: weiter so im Forum ! Alle Vorschläge und Lösungen her, damit jeder das davon rausziehen kann was er braucht ! gruß gugel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush1 Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Sorry das war nicht gegen die Leute gerichtet, sondern gegen die Dozenten die wohl nach dem was man so hört großtenteils bescheiden sind. Ich habe nicht vergessen, daß hier alle lernen (wollen). CU! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gajUli Geschrieben 6. Juni 2001 Teilen Geschrieben 6. Juni 2001 Original erstellt von Crush1: <STRONG>Sorry das war nicht gegen die Leute gerichtet, sondern gegen die Dozenten die wohl nach dem was man so hört großtenteils bescheiden sind. </STRONG> Nun, also Dozenten hin oder her. Was ist der Sinn von Templates? Der Sinn von Templates ist es, Funktionen oder Klassen mit Typen oder Klassen zu parameterisieren. D. h., ein und dieselbe Codestruktur muss nur einmal geschrieben werden, und der Compiler erzeugt den mit der Parameterisierung verlangten Code individuell fuer die verschiedenen Klassen (oder Typen) mehrfach oder dies passiert optional zur Laufzeit. Das fuehrt praktisch immer zu mehr Speicherbedarf, groesserer Compilierungszeit und zu keinem Perfomancevorteil. Der Vorteil liegt in der Verkuerzung des Quelltextes und seiner besseren Anpassungsfaehigkeit bei Aenderungen. In diesem Beispiel nimmst Du mit den Templates die Nachteile dieser Methode in Kauf, ohne einen Nutzen davon zu haben. Uli Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.