ganz einfache frage
-
FreakY<3Cpp schrieb:
Is mir klar das es die Std gibt, aber er hat geschrieben das er eine Funktion schreiben soll und nicht eine vorhandene, bzw. er soll was lernen oder ?

Ich sehe das so, dass wenn man eine Aufgabe gibt eine möglichst elegante Lösung des Problemes zu finden und nicht lange drum herum zu programmieren. Ansonsten hätte er eine andere Aufgabe geben müssen, oder in der Aufgabe schreiben müssen, dass keine Standardfunktionen benutzt werden dürfen..
-
drakon schrieb:
Ich sehe das so, dass wenn man eine Aufgabe gibt eine möglichst elegante Lösung des Problemes zu finden und nicht lange drum herum zu programmieren. Ansonsten hätte er eine andere Aufgabe geben müssen, oder in der Aufgabe schreiben müssen, dass keine Standardfunktionen benutzt werden dürfen..
Würde ich auch sagen. Sofern keine Einschränkung in der Aufgabenstellung vorhanden ist, sollte die Standardbibliothek legitim sein. Kursiv, weil das nicht 1:1 in die Realität übertragbar ist.
Und Mango!!, es wäre wirklich sehr nett, wenn du nächstes Mal einen aussagekräftigen Threadtitel wählen könntest.
-
drakon schrieb:
Ich sehe das so, dass wenn man eine Aufgabe gibt eine möglichst elegante Lösung des Problemes zu finden und nicht lange drum herum zu programmieren. Ansonsten hätte er eine andere Aufgabe geben müssen, oder in der Aufgabe schreiben müssen, dass keine Standardfunktionen benutzt werden dürfen..
Da hast du definitiv Recht, aber wir haben die tatsächliche Aufgabenstellung ja nicht gesehen, sondern nur eine vage Umschreibung. Insofernm wissen wir's einfach nicht... :p
-
Aeh...
Ihr wisst schon wie man etwas lernt, oder?
Indem man es anwendet.Ein Funktionsaufruf lehrt garnix. Ausser wie man eine Funktion aufruft.
Oder sagt ihr auch wenn jemand ein Dictionary schreiben will "nimm std::map" oder wenn jemand wissen will wie eine verkettete Liste funktioniert "nimm std::list"? Oder wie schreibe ich einen Webserver? Nimm apache...
Ne ne ne ne ne...
-
Shade Of Mine schrieb:
Aeh...
Ihr wisst schon wie man etwas lernt, oder?
Indem man es anwendet.Ein Funktionsaufruf lehrt garnix. Ausser wie man eine Funktion aufruft.
Oder sagt ihr auch wenn jemand ein Dictionary schreiben will "nimm std::map" oder wenn jemand wissen will wie eine verkettete Liste funktioniert "nimm std::list"? Oder wie schreibe ich einen Webserver? Nimm apache...
Ne ne ne ne ne...

-
@ Shade Of Mine
Wir versuchen nur, dem Fragesteller so präzise Antworten wie möglich zu geben. Die "Frage" war: "ich brauche eine Funktion, die das und das macht". Da die händischen Möglichkeiten bereits genannt wurden, sollte es doch legitim sein, eine elegante Methode auch noch zu erwähnen? Gerade weil die Aufgabenstellung keine Bedingungen diesbezüglich stellte...
-
Wenn er sich die Funktion ansieht, kann er daraus lernen

-
Nexus schrieb:
@ Shade Of Mine
Wir versuchen nur, dem Fragesteller so präzise Antworten wie möglich zu geben. Die "Frage" war: "ich brauche eine Funktion, die das und das macht". Da die händischen Möglichkeiten bereits genannt wurden, sollte es doch legitim sein, eine elegante Methode auch noch zu erwähnen? Gerade weil die Aufgabenstellung keine Bedingungen diesbezüglich stellte...Es spricht nichts dagegen auch die richtige Variante zu nennen - aber drakon hat zB den Sinn einer Aufgabe nicht verstanden.
Und das schockiert mich.
-
Shade Of Mine schrieb:
Aeh...
Ihr wisst schon wie man etwas lernt, oder?
Indem man es anwendet.Ein Funktionsaufruf lehrt garnix. Ausser wie man eine Funktion aufruft....
Eben.
Wer sagt denn, dass das Lernen von std::count() (und insgesamt vom lösungsgerechten Umgang mit dem vollständigen Umfang der Sprachmittel) soviel weniger wert ist als das Lernen vom "Raderfinden" ?
und wo ist die Grenze? Darf man noch std::cout verwenden? Besteht C++ "eigentlich" nur noch aus primitiven Typen und den Operatoren darauf - und der Rest ist "Schummeln" ?Gruß,
Simon2.
-
Simon2 schrieb:
Wer sagt denn, dass das Lernen von std::count() (und insgesamt vom lösungsgerechten Umgang mit dem vollständigen Umfang der Sprachmittel) soviel weniger wert ist als das Lernen vom "Raderfinden" ?
ich.
und wo ist die Grenze? Darf man noch std::cout verwenden? Besteht C++ "eigentlich" nur noch aus primitiven Typen und den Operatoren darauf - und der Rest ist "Schummeln" ?
solange man lernen alles will, darf man nur das anwenden, was man auch selber gebaut hat oder sicher bauen könnte.
schau dir das lernen in der mathematik an. gib dem drittklässler einen taschenrechner und sag ihm, daß er das kleine einmaleins nicht lernen soll, und es wird ein stümper werden, der den realschulabschluß nicht packt.
-
Klar, wer "...alles.." lernen will, darf das gerne tun.
Der sollte aber erstmal wieder anfangen, Feuer nur mit Naturprodukten herzustellen.
Als nächstes mit selbstgebauten Holzwerkzeugen nach Erz graben (möglichst erstmal Eisen & Kupfer). Lustig wird's dann, seinen ersten Strom herzustellen - da kann er gleich mit Wind-/Wasserkraft anfangen. Mit Windkraft und Strom gräbt sich's dann viel leichter nach Öl (=> Kunststoffe für Isolatoren und irgendwann mal Platinen) und Halbleitermaterialien. ...
Ich klinke mich dann aber erst in 200 Jahren wieder ein, wenn er seinen ersten Transistor gelötet hat.Mal im Ernst: Hier geht es um die Aneignung von Wissen, das einem berufliche Möglichkeiten eröffnet. Und zumindest in unserer Firma brauchen wir deutlich mehr Leute, die die vorgegebenen Strukturen effizient zu einer Lösung der aktuellen Probleme einsetzen können, als solche, die alles aus dem Nichts erschaffen können - aber erst in 3 Jahren fertig sind.
Natürlich gehören "Schleifen" zum grundlegenden Verständnis und sollten auch meiner Meinung nach gelernt werden. Aber warum müssen die Lehrer immer wieder dieselben Aufgaben stellen, für die es bereits Standardlösungen gibt? Als Schüler kommt man sich da veralbert vor. Sollen sich halt mal was Neues einfallen lassen....
Gruß,
Simon2.
-
Simon2 schrieb:
brauchen wir deutlich mehr Leute, die die vorgegebenen Strukturen effizient zu einer Lösung der aktuellen Probleme einsetzen können,
warum muss ich jetzt an prof84 denken?
Natürlich gehören "Schleifen" zum grundlegenden Verständnis und sollten auch meiner Meinung nach gelernt werden. Aber warum müssen die Lehrer immer wieder dieselben Aufgaben stellen,
weils auch sinnbringende lösungen sein sollen, wo man das gefphl hat, das auch mal später brauchen zu können.
für die es bereits Standardlösungen gibt?
weils auch sinnbringende lösungen sein sollen, wo man das gefphl hat, das auch mal später brauchen zu können.
Als Schüler kommt man sich da veralbert vor. Sollen sich halt mal was Neues einfallen lassen....
aber bei aufgaben, die völlig praxisfremd sind, wärs schlimmer.
da soll man dann eine klasse Algorithmus bauen und davon erben oder noch dümmeren schwachsinn.
-
volkard schrieb:
Simon2 schrieb:
brauchen wir deutlich mehr Leute, die die vorgegebenen Strukturen effizient zu einer Lösung der aktuellen Probleme einsetzen können,
warum muss ich jetzt an prof84 denken?...
Keine Ahnung, kenne ich nicht.
volkard schrieb:
...weils auch sinnbringende lösungen sein sollen, wo man das gefphl hat, das auch mal später brauchen zu können. ...
aber bei aufgaben, die völlig praxisfremd sind, wärs schlimmer.
...Was kann es Sinnloseres und Praxisferneres geben, als das Rad neu zu erfinden?
Gruß,
Simon2.
-
Simon2 schrieb:
Was kann es Sinnloseres und Praxisferneres geben, als das Rad neu zu erfinden?
Bei der Übung hier geht es wahrscheinlich weniger darum, dass man die benötigte Funktionalität hat, als dass man bei der Implementierung etwas lernt. Wieso sollte man sich eine verkettete Liste bauen, wenn es
std::listgibt? Entweder man braucht irgendetwas, dasstd::listnicht bietet, oder aber - was wahrscheinlicher ist - man will sich im Bereich Zeiger, Klassen und Templates fortbilden.Nichtsdestotrotz finde ich es angebracht, hier
std::count()zu erwähnen. Allerdings sollte dies nicht über die selbstgeschriebene Version gestellt werden, wenn man die Aufgabenstellung nicht genau kennt.
-
Simon2 schrieb:
Natürlich gehören "Schleifen" zum grundlegenden Verständnis und sollten auch meiner Meinung nach gelernt werden. Aber warum müssen die Lehrer immer wieder dieselben Aufgaben stellen, für die es bereits Standardlösungen gibt? Als Schüler kommt man sich da veralbert vor. Sollen sich halt mal was Neues einfallen lassen....
Nein. So einfache Sachen sind wichtig - denn du musst es ja selber nachvollziehen können ob dein Ergebnis korrekt ist.
Super ist zB multiplikation/division über addition/subtraktion zu implementieren, in einem array etwas suchen oder zählen, einfaches sortieren, schauen ob etwas sortiert ist, etc.
all das wofür es standard lösungen gibt - denn idR gibt es genau deshalb eine standard lösung dafür weil man es immer wieder braucht...
du fängst beim lernen immer klein an. das macht ja auch sinn. du musst count() implementieren können bevor du es verwenden darfst. denn wenn nicht, dann führt das zu furchtbarem.
würdest du mathematik lehren indem du eine formel sammlung hergibst und einen taschenrechner. und dann eben die fläche eine quadrats als a^2 ausrechnen lässt? Oder würdest du erklären was ^ macht und was die fläche bedeutet, etc.
diese grundlagen sind essentiell! count() anwenden ist trivial, das kann ein schimpanse. count() implementieren nicht. da es aber nicht für alles vorgefertigte lösungen gibt muss man lernen probleme selber lösen zu können - am besten fängt man mit problemen an die man im kopf überprüfen kann - das man also weiß ob die lösung korrekt ist oder nicht.
zB pi auf 200mio stellen berechnen wäre doof, weil das nicht sinnvoll überprüfbar ist. zählen wieviele a in "hallo welt" vorkommen, ist dagegen schon deutlich einfacher überprüfbar.
Praxis ist dabei erstmal irrelevant. aber stell dir mal einen auto designer vor der keine ahnung hat was die idee und das konzept eines Rads ist. er baut immer die gleichen 4 räder in ein auto ein, weil er das halt so gelernt hat. sehr super. wenn er aber gelernt hat wie ein rad aufgebaut ist und welche probleme es löst, welche es nicht löst, wo es probleme hat, etc. dann wird er in einem gelädewagen größere räder einbauen.
und deshalb muss man die grundlagen lernen - oder wie es so schön heisst: gehen lernen bevor man läuft.
-
Shade Of Mine schrieb:
...
/sign

Das ist was ich meinte. Außerdem nochmal zum Threadersteller, eig. steht in seinem Comment das er eine Funktion schreiben soll und nicht nur eine Funktion benutzen soll. Ihr seid doch alle eig. nur besser in C++ geworden, weil ihr Sachen nach programmiert habt, erweitert habt, selbst geschrieben habt. Ich musste letztens eine Verketteteliste schreiben, die grad mal ein paar Sachen konnte wie der Vector-Container. Gedacht hab ich zwar "wofür das Rad nochmal erfinden", im nach hinein dachte ich aber, "wow ich hab was dazu gelernt", hab verstanden wie es funktioniert und was man brauch etc. Wie soll der Threadersteller nun wissen wie std::count() Funktioniert? Er weiß das die Funktion existiert, doch warum und wie sie funktioniert, weiß er nicht.
-
Hi,
also ich glaube, Ihr schreibt das eher aus einem "musste ich früher auch machen"-Impuls. Dazu sind mir die Grenzen viel zu willkürlich:
Aha, eine Liste sollte man mal programmiert haben, bevor man std::list anwendet, aber ein Speichermanagementsystem, bevor mannewmacht nicht?
Eine Zählschleife MUSS vor dem ersten Gebrauch von std::count() sein, aber die Implementation von Ausgabe auf die Konsole macht man nicht selbst?
Wer hat denn schonmal arithmetische Operationen oder Zuweisungen "direkt" programmiert, evor er "*" und "=" verwendet hat?Ich will nichtmal behaupten, dass man nicht auch mal "Basics" nachprogrammieren dürfte oder dabei gar niemals etwas lernen könnte ... aber es als Voraussetzung für die Verwendung bereits implementierter "Räder" zu nehmen, halte ich für zu selbstbezogen argumentiert.
Gruß,
Simon2.
P.S.: Ich habe wohl noch nie eine verkettete Liste selbst programmiert; habe nur mal implementationen gesehen und gedacht: "Was für ein nerviges Gefrickel! Gut, dass ich das nicht selbst machen/debuggen muss."

-
Simon2 schrieb:
also ich glaube, Ihr schreibt das eher aus einem "musste ich früher auch machen"-Impuls.
Nein. Ich mache es heute immer noch so.
Dazu sind mir die Grenzen viel zu willkürlich:
Aha, eine Liste sollte man mal programmiert haben, bevor man std::list anwendet, aber ein Speichermanagementsystem, bevor mannewmacht nicht?Nein, diese Grenze hast du erfunden, nicht ich.
Es ist durchaus OK new, std::list und auch count() zu verwenden ohne die implementierung zu kennen. Es geht nicht um die Tools sondern die Aufgabe.
Wenn die Aufgabe ist: schreibe eine verkettete liste, dann schreibt man eine liste und tut nicht von std::list erben. weil da sonst der lernfaktor 0 ist.
wenn ich matrix multiplation in der schule lerne, dann lerne ich ja auch matrix multiplaktion und nicht "wie bediene ich einen taschenrechner".
die idee dahinter ist lernen. siehst du echt nicht ein dass man bei der verwendung von count() nichts lernt? bedenke bitte: der OP ist in einem stadium wo er nicht sicher im umgang mit schleifen ist. count() hat hier den effekt dass er eine lektion einfach ueberspringt. das ist natuerlich bequem, aber schleifen muss er anwenden lernen, er muss schleifen einfach verstehen und beherrschen. und wenn er jetzt count() verwendet waehrend seine kollegen sich mit eine zaehlschleife rumschlagen, dann hat er am ende einen nachteil ihnen gegenueber.
Ich will nichtmal behaupten, dass man nicht auch mal "Basics" nachprogrammieren dürfte oder dabei gar niemals etwas lernen könnte ... aber es als Voraussetzung für die Verwendung bereits implementierter "Räder" zu nehmen, halte ich für zu selbstbezogen argumentiert.
Kleine Frage:
als du Autofahren gelernt hast, war das in einem auto mit automatikschaltung, tempomat und automatischem einparker? oder war es in einem auto mit handschaltung und ohne schnick schnack?wenn du die grundlagen nicht beherrschst (es geht hier nicht darum die ganze STL nachzuprogrammierern sondern einfach schleifen anwenden zu koennen (und der OP kann eben schleifen _nicht_ korrekt anwenden) wie willst du dann komplexe probleme loesen?
P.S.: Ich habe wohl noch nie eine verkettete Liste selbst programmiert; habe nur mal implementationen gesehen und gedacht: "Was für ein nerviges Gefrickel! Gut, dass ich das nicht selbst machen/debuggen muss."

das verstehe ich nicht.
du hast echt nie eine liste implementiert? eine einfach verkettete liste ist in 0 komma nix fertig und als ring ist eine doppelt verkettete auch trivial. da muss man nix debuggen oder frickeln...wie dem auch sei: eine einfache Frage:
sagen wir einmal die naechste aufgabe die der OP bekommt lautet: zaehle alle buchstaben die in der zeichenkette. natuerlich kannst du jetzt ganz lustig sum() empfehlen, aber dann kommt die aufgabe die 3 am haeufigst vorkommenden buchstaben auszugeben. was jetzt?
alle anderen mitschueler koennen diese aufgabe problemlos loesen, denn sie haben die beiden vorhergehenden verstanden. sie koennen solche probleme loesen und die loesungen auf andere probleme umlegen. waehrend unser armer OP wieder zu dir rennen muss und fragen welche fertige funktion es hierfuer gibt.man koennte natuerlich verlangen dass alle aufgaben die gestellt werden nicht mit fertigen funktionen der STL implementierbar sein duerfen - aber das waere doch wahnsinns aufwand. deshalb nimmt man triviale beispiele die jeder versteht.
wenn man keine trivialen probleme loesen kann, wie will man dann komplexe loesen?
-
Simon2 schrieb:
P.S.: Ich habe wohl noch nie eine verkettete Liste selbst programmiert
Das ist wohl dein Problem, hättest du es gemacht, dann würdest du jetzt wissen, dass es nicht um "Rad neuerfinden" geht, sondern darum die Grundlagen von Pointern, Resourcenverwaltung usw zu lernen. Außerdem, wer eine Liste selber programmiert, kann damit auch schon fast automatisch eine fertige verwenden, andersrum geht das nciht.
-
Simon2 schrieb:
P.S.: Ich habe wohl noch nie eine verkettete Liste selbst programmiert; habe nur mal implementationen gesehen und gedacht: "Was für ein nerviges Gefrickel! Gut, dass ich das nicht selbst machen/debuggen muss."

Die einfachste aller Datenstrukturen ist für dich schon gefrickel

Was machst du eigentlich wenn du mal vor einem Problem stehst das sich nicht mit einer Funktion aus der Standardbibliothek lösen lässt?
Z.B. verlangt dein Chef von dir einen Oktalen Baum zu schreiben. Sagst du ihm dann das ginge nicht, weil du nie gelernt hast wie man eine Baumstruktur schreibt. Die STL hatte dir bisher die Möglichkeit gegeben mit binären Bäumen zu arbeiten, deswegen hast du dich nie mit ihnen beschäftigt...