-
Gesamte Inhalte
9912 -
Benutzer seit
-
Letzter Besuch
-
Tagessiege
3
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von Klotzkopp
-
Du hast es doch erst zum Thema gemacht. Wenn du nicht möchtest, dass darüber diskutiert wird, dann lass einfach in Zukunft diese "blablabla"-Disclaimer. Du siehst ja, was es bringt.
-
Und was ist jetzt wovon abhängig? WeinName und Anbaugebiet von WeinNr? Oder Anbaugebiet von WeinNr und WeinName? Oder ganz anders? Deine Darstellung ist da nicht eindeutig. Woher hast du denn LieferNr? In den Daten nicht, aber du könntest ein paar Annahmen treffen.
-
Fang doch mal vorne an. Welche funktionalen Abhängigkeiten siehst du?
-
Mit Standard-C++ kannst du nicht zeichenweise einlesen. Wenn du also nicht jedes Zeichen mit Enter bestätigen willst, lies besser eine ganze Zeile auf einmal ein. std::string line; std::getline(line, cin);[/code] Danach kannst du den String line nach den Buchstaben durchsuchen.
-
Ja, das ist das tückische an solchen Fehlern: Sie müssen sich nicht auswirken, und wenn sie es doch tun, ist die Stelle, an der sich der Fehler bemerkbar macht, unter Umständen eine ganz andere als die, wo der Fehler verursacht wird. Dann bin ich mir zu 99% sicher, dass du dir irgendwo den Speicher zerschossen hast.
-
Ich vermute eher, dass du irgendwo über die Grenzen eines reservierten Speicherbereichs hinausschreibst, und dir damit den Stack oder Heap zerschießt.
-
Sinus funktion mit while loop! Brauche Denkanstoß!
Klotzkopp antwortete auf milchmann007's Thema in C++: Compiler, IDEs, APIs
Wenn du result nur einmal berechnest, hast du natürlich auch nur einen Wert. Es wäre sinnvoll, die Berechnung von result in die Schleife zu verlagern. -
Wie du vielleicht schon gemerkt hast, funktioniert das hier so nicht, wir möchten nämlich, dass du lernst, so etwas selbst zu tun. Dabei allerdings helfen wir gern. Hast du das Programm selbst geschrieben? Bekommst du irgendwelche Fehlermeldungen? Was sagen dir die Fehlermeldungen? Was hast du selbst schon versucht, um die Fehler zu beheben?
-
Bei printf muss das & weg.
-
Dann muss ich mich fragen, warum du es nicht genauso umsetzt, sondern so etwas kompliziertes zusammenbastelst. class Program { static void Main(string[] args) { hanoi(1, 2, 3, 12); } static void verschiebe(int von, int nach, int größe) { // Verschiebe-Logik, hier Ausgabe als Platzhalter Console.WriteLine("Verschiebe Scheibe " + größe + " von " + von + " nach " + nach); } static void hanoi(int von, int über, int nach, int höhe) { if (höhe > 0) { hanoi(von, nach, über, höhe - 1); verschiebe(von, nach, höhe); hanoi(über, von, nach, höhe - 1); } } } [/code]
-
Ich bitte dich die ganze Zeit um eine Erklärung, damit ich genau das nicht tun muss. Warum soll ich (und jeder andere, der hier helfen möchte) "reverse-engineeren", was du einfach (und nur einmal) erklären könntest? Mag sein, dass der Code für dich übersichtlich ist, ich finde das nicht. Vielleicht willst du deinen Algorithmus nicht erklären, vielleicht kannst du es nicht, egal. Das Problem lässt sich jedenfalls ziemlich elegant in drei Teilprobleme zerlegen: 1. Alle Scheiben bis auf die größte auf einen Zwischenturm 2. Die größte Scheibe auf den Zielturm 3. Alle Scheiben aus 1. auf den Zielturm Das ist eigentlich schon alles. Schritt 1 und 3 beinhalten eine Rekursion.
-
Du hast erklärt, welche Aufgaben die einzelnen Programmteile haben, aber wie genau dein Algorithmus aussieht, hast du nicht gesagt. Man kann das aus dem Code leider nicht erkennen. Mit Variablennamen wie a,b,c,d und Kommentaten wie "Befehl 5" ist das einfach nicht möglich. Wenn du also möchtest, dass wir dir helfen, Fehler in deinem Algorithmus zu finden, musst du ihn schon erklären. Leider gar nicht, wenn man nicht weiß, wofür c und d stehen.
-
Könntest du den Algorithmus erklären, der hinter dem Code steckt? Das sieht mir unnötig kompliziert aus.
-
Das Forum ist nicht dazu da, dass du hier deine Aufgaben von jemand anderem erledigen lassen kannst. Wir helfen dir gern bei konkreten Problemen, aber du musst schon Eigeninitiave zeigen. Zeig, was du dir überlegt hast, und wir sagen dir, was falsch ist.
-
Bücher enthalten Fehler. Und zu den Büchern von Jürgen Wolf habe ich schon viele negative Kommentare gelesen. Die Schleife läuft weiter, solange der Wert, auf den posl zeigt, kleiner als x ist. Das heißt, sie bleibt stehen, wenn posl auf einen Wert zeigt, der nicht kleiner als x ist. "Nicht kleiner" ist dasselbe wie "Größer oder gleich". Ich gehe davon aus, dass der Algorithmus im Openbook fehlerhaft umgesetzt ist. Das mit MAX ist ja auch falsch.
-
Nein, 6 und 7 werden nicht getauscht, die sind beide größer als 3. posl läuft von links nach rechts, bis zu einem Wert der >= 3 ist: [code]while(*posl < x) posl++; posl bleibt also auf der 7 stehen. posr läuft von rechts nach links, bis zu einem Wert, der <= 3 ist, bleibt also auf der 3 stehen: 7 1 3 5 6 l r [/code] posl und posr sind noch nicht aneinander vorbei, also wird die Schleife hier nicht verlassen, und 3 und 7 werden getauscht: [code]3 1 7 5 6 l r Jetzt wird die Bedingung der äußeren (do/while-)Schleife geprüft, dabei werden posl und posr noch einmal weitergesetzt, sie zeigen dann beide auf die 1. Hier ist dann wohl ein Fehler im Algorithmus: Bei der Rekursion wird einmal 3 1 und einmal 1 7 5 6 sortiert. Die 1 wird also zu beiden Teilen hinzugenommen.
-
Die Formatfelder sind bei printf und scanf nicht gleich. %f funktioniert bei printf für float und double. unbenannt hat dir den richtigen Hinweis schon gegeben: printf erwartet bei %f keinen Zeiger. Der Adressoperator muss also weg.
-
Quicksort beruht darauf, dass ein Feld in zwei Teile zerlegt wird, wobei in dem einen Teil die kleinen und in dem anderne Teil die großen Werte liegen. Dann werden die beiden Teile für sich sortiert. posl und posr laufen aufeinander zu. Wenn sie sich treffen, hast du die Stelle gefunden, wo das Feld für den nächsten Rekursionsschritt geteilt wird. Das ++ und -- bewirkt hier nur, dass die gerade vertauschten Werte nicht noch einmal verglichen werden.
-
Genau. Fassen wir also zusammen: Zum Zeitpunkt des "Gleich"-Klickens musst du die beiden Zahlen und den Operator kennen. Die zweite Zahl kannst du zu diesem Zeitpunkt aus dem Eingabefeld holen, das ist kein Problem. Was du nicht hast, ist die erste Zahl und der Operator. Das ist eine typische Problemstellung beim Programmieren: Informationen sind zu dem Zeitpunkt, an dem sie gebraucht werden, nicht verfügbar. Dafür gibt es Variablen. Die erste Zahl und den Operator musst du also in Variablen speichern, wenn die Information verfügbar ist, und später wieder abfragen, wenn du sie brauchst. Für den Operator könntest du eine char-Variable benutzen, der du '+' oder '-' oder so etwas zuweist. Beim Berechnen musst du dann eine Fallunterscheidung machen. Ein Aufzählungstyp wäre auch möglich, das ändert aber nichts am Prinzip. Du musst dir für jeden Operator einen Wert überlegen, den du dieser Variablen zuweist, und den du dann für die Berechnung abfragst. Die Vorgehensweise wäre also in etwa so: Eingabe 1 -> In Textfeld Eingabe 5 -> In Textfeld Eingabe - -> Textfeldinhalt in Zahl1-Variable speichern, Textfeld leeren, Operatorvariable auf '-' setzen Eingabe 2 -> In Textfeld Eingabe 3 -> In Textfeld Eingabe = -> Textfeldinhalt in Zahl2-Variable speichern. Operatorvariable abfragen und Zahl1 und Zahl2 passend verknüpfen, Ergebnis anzeigen Damit können wir noch keine Berechnungen mit mehreren Operatoren machen, wie 2+2+2, aber das können wir später machen. Das Entscheidende ist, wir haben eine klar beschriebene Vorgehensweise. Wir haben einen Algorithmus. Und erst jetzt solltest du anfangen, das in Code umzusetzen.
-
Fünfzehn und Dreiundzwanzig. Reicht das zum Ausrechnen?
-
Gtkmm mit CodeBlocks IDE zum laufen bringen
Klotzkopp antwortete auf lit-web's Thema in C++: Compiler, IDEs, APIs
Es fehlen noch folgende Compiler Search directories: C:\GTK\include\gdk-pixbuf-2.0 C:\GTK\lib\pangomm-1.4\include C:\GTK\include\freetype2 Keine Ahnung, warum das vorher bei mir funktioniert hat. -
Und damit hast du dir eine erste wichtige Erkenntnis erarbeitet: Du kannst erst rechnen, wenn der Benutzer "Gleich" drückt. Das heißt, dass es absolut nichts bringen kann, wenn du bei irgendeiner anderen Taste anfängst zu rechnen. Jetzt weiter im Text: Wenn der Benutzer "Gleich" gedrückt hat, welche Informationen brauchst du dann, um das Ergebnis zu berechnen?
-
Nein. Lös dich vom Code. Kein int, kein double, keine Variablen. Versuch nicht, im Kontext einer Programmiersprache zu denken, das kommt später. Wir haben Tasten an einem Taschenrechner. Sonst nichts. Und der Benutzer drückt die Tasten 1 5 - 2 3 = Wann kann der Taschenrechner das Ergebnis ausrechnen? Du sollst denken, nicht raten. Und du musst dir diese Denkweise selbst erarbeiten, Vorsagen bringt nichts, weil du es dann nicht lernst.
-
Bitte bleib beim konkreten Beispiel. Du meinst, nach Eingabe der 3 könntest du das Ergebnis ausrechnen? Was, wenn der Benutzer danach noch eine Ziffer eingeben würde? Das kann ich mir vorstellen. Aber das ist genau die Denkweise, die du brauchst. Der Computer ist in dieser Hinsicht wie ein kleines Kind. Er kann nicht selbst denken, du musst ihm alles bis ins Kleinste erklären, sonst tut er nicht das Richtige. Und darum musst du lernen, wie er zu denken, damit du Aufgaben so beschreiben kannst, dass er sie versteht.
-
Das war aber nicht die Frage. Nach welcher Eingabe kannst du das Ergebnis frühestens ausrechnen?