 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Revilo
Anmeldungsdatum: 26.12.2022 Beiträge: 178
|
Verfasst am: 24.11.2024, 22:47 Titel: |
|
|
Hallo nemored,
dein Bild von der Chef-Hierarchie ist wirklich sehr anschaulich.
Der oberste Chef (ich) hat ein Problem, hier ein zu lösendes Sudoku.
Ich gebe neben den bereits existierenden einen weiteren Wert vor, und weise meine "Abteilungs-Leiter" an, mir mit diesem Wert ein Ergebnis zu liefern. Das können sie so aber nicht, also stellen sie eigene Betrachtungen an, legen einen aus ihrer Sicht (vermeintlich logischen) weiteren Wert fest und übergeben das Problem dann an die ihnen untergebenen "Teamleiter".
Diese machen sich wiederum einen "Kopf" und geben ihren "Senf" dazu.
Letztlich bleibt der ganze "Senf" beim kleinen Monteur hängen. Der sagt dann irgendwann zu seinem Teamleiter: Sorry, mit diesen Vorgaben kann ich kein funktionierendes Auto bauen (also keine Sudoku-Lösung finden).
Sein "Teamleiter" muss sich also einen anderen "Senf" einfallen lassen.
Wenn dessen "Senftopf" ausgeschöpft ist, muss er seinem "Abteilungsleiter" zwangsläufig "beichten", dass er mit dessen Vorgaben nichts erreicht hat.
Also muss sich jetzt der "Abteilungsleiter" einen neuen "Senf" überlegen.
"Teamleiter" und der kleine Monteur müssen also dasselbe Problem erneut beackern, nur diesmal mit dem neuem "Senf" des "Abteilungsleiters".
Wenn der "Senftopf" des "Abteilungsleiters" ergebnislos ausgeschöpft ist, muss er beim obersten Chef antreten und ihm beichten, dass ein Auto nach dessen ursprünglicher Vorgabe nicht gebaut werden kann.
Also muss der oberste Chef etwas anderes vorgeben.
(Beim Sudoku den nächst möglichen Wert in der doch freien Zelle.)
Wenn der "Senftopf" des obersten Chefs ausgeschöpft ist und das Auto trotzdem nicht gebaut werden kann, ist das Sudoku als ganzes nicht sauber lösbar.
Habe ich das soweit erst mal richtig verstanden?
In dem von dir beschriebenem Ablauf, also dem Backtracking, steht immer "gib False zurück", oder im Erfolgsfall "True".
Wie macht man das? Wie wäre dafür der korrekte QBASIC-Syntax?
Gruss Revilo |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 25.11.2024, 17:04 Titel: |
|
|
Zitat: | In dem von dir beschriebenem Ablauf, also dem Backtracking, steht immer "gib False zurück", oder im Erfolgsfall "True".
Wie macht man das? Wie wäre dafür der korrekte QBASIC-Syntax? |
Der Backtracking-Algorithmus steht in einer Funktion, und die hat einen Rückgabewert. Da es in QBasic kein True und False gibt, muss man halt selbst eine Vereinbarung finden.
Code: | CONST True = -1, False = 0
FUNCTION sinnfreieFunktion
IF alles_in_ordnung THEN
sinnfreieFunktion = True ' Rückgabewert setzen
ELSE
sinnfreieFunktion = False ' anderen Rückgabewert setzen
END IF
END FUNCTION |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Zuletzt bearbeitet von nemored am 26.11.2024, 15:41, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1278 Wohnort: Ruhrpott
|
Verfasst am: 25.11.2024, 18:17 Titel: |
|
|
Revilo hat Folgendes geschrieben: | ...und übergeben das Problem dann an die ihnen untergebenen "Teamleiter". |
Der Vergleich ist nicht ganz zutreffend. Da bei Rekursion ein Unterprogramm sich selbst aufruft (genauer gesagt: eine neue Instanz von sich selbst erzeugt) gibt -um bei deinem Bild zu bleiben- der Abteilungsleiter die Aufgabe nicht an einen Untergebenen weiter, sondern -mit Bitte um Rückmeldung- an den (gleichberechtigten) Abteilungsleiter einer anderen Abteilung, der dieselben Kompetenzen hat wie er selbst.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 26.11.2024, 08:54 Titel: |
|
|
Rückgabewerte in Qbasic werden über den Namen der Function gesetzt:
Hier ein Beispiel der Function Min%, die als Rückgabewert den kleineren von zwei übergebenen Werten zurückgibt:
Code: | FUNCTION Min% (a AS INTEGER, b AS INTEGER)
IF (a < b) THEN
Min% = a
ELSE
Min% = b
END IF
END FUNCTION
PRINT "Min of 5 and 3 is"; Min%(5, 3) |
Wie würde wohl eine entsprechende Max% Function aussehen?
https://qbasic.com/documentation/FUNCTION.html _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 26.11.2024, 15:40 Titel: |
|
|
[Doppelpost; bitte ignorieren] _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Zuletzt bearbeitet von nemored am 26.11.2024, 15:41, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 26.11.2024, 15:40 Titel: |
|
|
SpionAtom hat Folgendes geschrieben: | Rückgabewerte in Qbasic werden über den Namen der Function gesetzt: |
Mist, habe ich doch wieder falsch herum im Kopf gehabt. Das kommt davon, wenn man zu viele verschiedene BASIC-Dialekte kennengelernt hat ...
Ich habe mein Beispiel oben angepasst. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Revilo
Anmeldungsdatum: 26.12.2022 Beiträge: 178
|
Verfasst am: 26.11.2024, 16:22 Titel: |
|
|
Hallo nemored,
Zitat: | Mist, habe ich doch wieder falsch herum im Kopf gehabt. Das kommt davon, wenn man zu viele verschiedene BASIC-Dialekte kennengelernt hat ... |
Ich bin hier noch ziemlich "betriebsblind". Warum meinst du , dich über dich selbst ärgern zu müssen?
Was ist der Unterschied zischen deiner Antwort, die du mit "Mist" betitelt hast und der überarbeiteten? Kannst du mir diese beiden Antworten mal direkt gegenüberstellen, damit ich sehen kann, worauf ich in QBASIC achten muss?
Gruß Revilo |
|
Nach oben |
|
 |
Revilo
Anmeldungsdatum: 26.12.2022 Beiträge: 178
|
Verfasst am: 26.11.2024, 17:57 Titel: |
|
|
Hallo SpionAtom,
Code: | FUNCTION Min% (a AS INTEGER, b AS INTEGER)
IF (a < b) THEN
Min% = a
ELSE
Min% = b
END IF
END FUNCTION
PRINT "Min of 5 and 3 is"; Min%(5, 3)
|
Zitat: | Wie würde wohl eine entsprechende Max% Function aussehen? |
Dieser Herausforderung stelle ich mich hier in folgender Weise:
Code: | FUNCTION Max% (a AS INTEGER, b AS INTEGER)
IF (a > b) THEN
Max% = a
ELSE
Max% = b
END IF
END FUNCTION
PRINT "Max of 5 and 3 is"; Max%(5, 3)
|
Ich hoffe mal, das dies richtig ist. Wenn ja, war es keine "große Sache".
Anspruchsvoller wird es, wenn es z.B. um 5 Werte (a, b, c, d und e) ginge.
Ich würde "linear" also etwa so vorgehen:
1) Ich vergleiche erst mal a und b.
Max% ist dann entweder a oder b
2) in jedem Fall vergleiche ich dann Max% mit c
'Ist Max% > c, dann "behalte" ich Max% als mögl. Endergebnis
'andernfalls ersetze ich Max% durch c
code[ "if Max%>c then
Max% = Max%
else
Max% = c
endif" [/code]
Es wäre schön, wenn ich das wegen der Übersichtlichkeit auch in grün darstellen könnte, kann ich aber noch nicht. sorry.
Ist letztlich aber ja auch nur optische "Kosmetik".
3) Jetzt vergleiche ich Max% , nach demselben Schema, mit d
und schlussendlich mit e.
Danach gebe ich Max% als Endergebnis aus:
Print Max%.
In dieser "linearen" Programmierweise, ist das für 5 Werte vielleicht noch machbar, aber nicht mehr, wenn es um 20, 200 oder gar 2000 Werte
wie etwa in einer Tabellenkalkulation gehen würde.
Hier wird es ohne Rekursion sehr zeit- und arbeitsintensiv und praktisch nicht mehr in angemessener Zeit durchführbar.
Der Teufel steckt im Detail. Wie bringe ich der Funktion Max% bei, dass sie es nicht mit 2 Werten (a und b) zu tun hat, sondern mit evtl. 2000 Werten?
Allein ihre Definition mit .... (a as integer, b as integer, c as integer....)
würde mehrere DIN A4 -Seiten füllen.
Das kann ja wohl nicht praktikabel sein.
Gruß Revilo |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 26.11.2024, 18:05 Titel: |
|
|
Die Max% Funktion hast du richtig gelöst.
Dabei würde ich es auch belassen und nicht noch ein weiteres Seitenthema aufmachen.
Vielleicht kannst du dich jetzt selbst an dein Ursprungsproblem wagen, zumindest die Grundstruktur mit einem geeigneten If-Block und dass du entweder TRUE oder FALSE zurückgibst.
Revilo hat Folgendes geschrieben: |
In dem von dir beschriebenem Ablauf, also dem Backtracking, steht immer "gib False zurück", oder im Erfolgsfall "True".
Wie macht man das? Wie wäre dafür der korrekte QBASIC-Syntax?
Gruss Revilo |
_________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
Revilo
Anmeldungsdatum: 26.12.2022 Beiträge: 178
|
Verfasst am: 26.11.2024, 20:34 Titel: |
|
|
Hallo SpionAtom,
vielen Dank für deine positive Rückmeldung bezüglich der Max - Funktion.
Grundsätzlich kümmere ich mich nur um mein Ursprungsproblem (Sudoku).
Ich habe nicht vor, hier unnötig weitere Seitenthemen aufzumachen.
Das würde die Sache nur komplizieren, aber nicht zielführender werden.
Bitte versuche, mich zu verstehen.
Ich komme bei meinem Ursprungsproblem nicht wirklich weiter.
Deshalb sauge ich wie ein Schwamm jede Info auf, in der Hoffnung, dass sie mir irgendwie weiterhilft.
Wenn ich das Prinzip Rekursion und/oder Backtracking erst mal verstanden habe, werde ich selbst merken, dass viele Nachfragen unnötig waren, aber eben erst dann.
Ich gebe dir mal ein Beispiel:
Aufgabe ist es, die ersten 3 natürlichen Zahlen zu addieren und das Ergebnis anzugeben. Gesucht ist also ein S mit S = 1+2+3 = 6.
print S Ausgabe: 6
Das bekommt man locker durch Kopfrechnen hin.
Etwas anspruchsvoller wird es schon bei S = 1+2+3+...+10.
Geht aber auch im Kopf, zumindest noch im Kopf älterer Jahrgänge.
S = 55
Viele Jugendliche müssen da schon ihr Smart-Phone bemühen.
Aber was ist bei S = 1+2+3+.... + 100?
Das in ein Smart-Phone eintippen zu müssen ist schon eine ziemlich zeitraubende Sache, zumal man sich nicht einen einzigen Tipp-Fehler erlauben darf.
Wer aber die Gauß'sche Formel dafür kennt, tut sich wesentlich leichter.
n sei der größte Wert, bis wohin die Summe S gebildet werden soll.
Laut Gauß gilt allgemein: S = n/2*(n+1)
Bezogen auf dieses Beispiel (n = 100) gilt:
S = 100/2 * (100 +1) also S = 50*(101) = 5050.
Und schon ist die Sache - auch ohne Smart-Phone - "vom Tisch".
Ergebnis : S = 5050 Mit Gauß klappt selbst das sogar im Kopf.
Daher meine Frage an dich:
Was würde also nach Gauß für S rauskommen, wenn n = 64 gilt?
Um im bildlichen Vergleich zu bleiben.
Rekursion und Backtracking sind letztlich auch nur solche "Gauß-Formeln".
Sie erleichtern eine Problemlösung und sind wesentlich schneller und effektiver, als wenn man sich "zufuß" damit herumschlagen müsste.
Der Witz daran ist, dass man sie erst mal verstanden haben muss, um sie auch anwenden zu können. Aus allen aufgesogenen Informationen muss man letztlich die "herausfiltern", die wirklich zielführend sind.
Bis man das aber durch entsprechende Sachkenntnis kann, ist jede Info gleichermaßen wertvoll.
Gruß Revilo |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 26.11.2024, 21:04 Titel: |
|
|
Noch etwas aus meiner Artikelsammlung (inzwischen auch schon älter, dafür für QB passend, gilt aber für FreeBasic weitgehend auch immer noch):
https://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html
Am besten das ganz einfache Beispiel unter "Rekursion" als erstes ausprobieren. Als nächstes den Pseudocode des Puzzlelösers verstehen. Als praktische Übung geeignet: Ein -Kommando selber implementieren mit dem Ziel, alle Dateien auflisten. Anleitung: Schleife durch alle Einträge eines Verzeichnis. Wenn Eintrag ein Unterverzeichnis ist, dann sich selber aufrufen (der SUB muss also Pfad als Parameter mitgegeben werden). Sonstige Einträge mit PRINT ausgeben.
Bei QB muss mit SHELL "dir " + pfad$ + " >DATEI.TMP" gearbeitet werden, da FILES nur alles direkt auf den Bildschirm ausgibt. Bei FreeBasic kann von Dir Gebrauch gemacht werden.
Der von mir gezeigte Sudoku-Code verwendet sinnvollerweise auch Rekursion: Sub muss im Wesentlichen alle Lücken durchgehen und passende Zahlen einsetzen, dann ganz einfach sich selber aufrufen. Im dortigen Beispiel kommt noch etwas Optimierung ins Spiel: Anzahl mögliche Kandidaten werden ermittelt, leere Felder werden entsprechend sortiert. Auf diese Weise werden viele erfolglose Rekursionsläufe vermieden. Kleine Übung: Sortierung einmal umkehren. Sofort braucht das Ganze massiv länger. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Revilo
Anmeldungsdatum: 26.12.2022 Beiträge: 178
|
Verfasst am: 26.11.2024, 21:51 Titel: |
|
|
Hallo SpionAtom,
in Ergänzung meiner letzten Mail an dich:
Das Ergebnis ist: S = 1+2+3+...+64 = 2080.
Wenn du, ebenso wie ich, im Kopf - also ohne Smart-Phone - darauf gekommen bist, Glückwunsch.
Andernfalls gestatte mir bitte, dir einen gut gemeinten Rat zu geben:
Opfere deinen Verstand nicht auf dem Altar moderner Technologie.
Bei entsprechendem Training funktioniert der "Bio-Rechner" zwischen den Ohren genauso gut, wie ein Smart-Phone. Sogar noch besser. Er braucht keine extra Batterie, funktioniert selbst in einem Funkloch, nimmt keinen Schaden, wenn er mal in's Wasser fällt, kann nicht geklaut werden und ist gebührenfrei.
Gruß Revilo |
|
Nach oben |
|
 |
Revilo
Anmeldungsdatum: 26.12.2022 Beiträge: 178
|
Verfasst am: 26.11.2024, 22:22 Titel: |
|
|
Hallo dreael,
vielen Dank für deine Bemühungen, mir helfen zu wollen. Ich weiß, sie zu schätzen. Aber leider habe ich von deinem Beitrag nicht ein Wort verstanden.
Wahrscheinlich setzt du bei mir mehr Sachkenntnis voraus, als ich wirklich habe. Aber nichts für ungut. Nochmals danke.
Gruß Revilo |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 26.11.2024, 23:07 Titel: |
|
|
Zitat: | Was ist der Unterschied zischen deiner Antwort, die du mit "Mist" betitelt hast und der überarbeiteten? Kannst du mir diese beiden Antworten mal direkt gegenüberstellen, damit ich sehen kann, worauf ich in QBASIC achten muss? |
Ich habe eine Syntax verwendet, die ich aus einem anderen BASIC-Dialect kenne und die ich fälschlicherweise für QBasic-Syntax hielt. Geärgert habe ich mich insbesondere deshalb, weil mir dieser Denkfehler eigentlich schon vor ein paar Wochen aufgefallen ist und ich ihn jetzt wiederholt habe.
Die falsche Syntax hier jetzt noch einmal zu posten halte ich nicht für zielführend. Sie ist für QBasic einfach falsch, man kann nichts Gewinnbringendes daraus lernen (außer wie man nicht funktionierenden Code schreibt) und führt im Zweifelsfall dazu, dass man sich versehentlich etwas Falsches einprägt. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Revilo
Anmeldungsdatum: 26.12.2022 Beiträge: 178
|
Verfasst am: 27.11.2024, 00:21 Titel: |
|
|
Hallo nemored,
ich empfinde es als äußerst rücksichtsvoll mir gegenüber. Du möchtest nicht mehr Verwirrung bei mir stiften, als ohnehin schon besteht, sondern sie eher
einschränken/beseitigen. Genau das ist ein Markenzeichen eines guten Lehrers.
Natürlich möchte ich mir nichts falsches einprägen, weil es mir nicht weiterhelfen, sondern nur weitere Nachfragen provozieren würde.
Das möchte ich weder mir noch dir antun.
Ein direkter Vergleich richtig - falsch wäre meinem Verständnis sehr dienlich.
Deine Befürchtung, ich könnte mir etwas falsches einprägen, ist unbegründet. Schließlich würde ich durch diese direkte Gegenüberstellung
ja erfahren, was richtig und was falsch(des sich Merkens nicht würdig) ist.
Ohne diese Gegenüberstellung würde mein künftiger Lernfortschritt aber einem Münzwurf gleichen. Das wollen wir beide nicht.
Bitte zeige mir genau die Unterschiede zwischen dem richtigen und dem falschen "Gleis", damit ich nicht mal zufällig auf das falsche abbiege.
Gruß Revilo |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 27.11.2024, 00:36 Titel: |
|
|
Die Gaußsche Summenformel ist mir bekannt, und ein gutes Beispiel dafür, dass es für manche mathematische Reihen "geschlossene" Formeln gibt.
In der Informatik begegnen einem ständig Probleme, bei dem es solche Formeln nicht gibt. Wie auch bei dem Sudoku-Backtracking.
Ich persönlich habe sehr sehr lange nicht verstanden, was Rekursion ist, auch wenn es formal irgendwie einfach erschien. Darum werfe ich in der Hinsicht niemanden einen schlechten Verstand oder langsames Lernen vor. Manchmal braucht es eben, bis der Groschen fällt.
Ein bekanntes Rekursion-Beispiel, welches fern ab von Mathe ist, ist das Zeichenketten-Umdrehen. Also eine Methode, die einen String bekommt, und am Ende den String in Rückwärts zurückgibt. Klar kann man das auch ohne Rekursion lösen, aber du willst hier ja was lernen.
Das Grundgerüst dazu sieht so aus:
Code: |
FUNCTION umdrehen$(meintext$)
END FUNCTION
|
Und jetzt, für die Rekursion die beiden wichtigen Bestandteile:
1. Den Rekursionsbasisschritt, oder Rekursionsanfang
2. Den Rekursionsschritt
Für den Rekursionsanfang gilt:
Wenn meintext$ nur ein Zeichen lang ist, ist der umgedrehte Text eben nur das eine Zeichen und das wird dann einfach unverändert zurückgegeben (Wenn man "K" bekommt, und es umdrehen soll, gibt man eben nur "K" zurück.
Für alle anderen Rekursionsschritte muss etwas anderes zurückgegeben werden, und da kommt das Selbst-Aufrufen wieder ins Spiel.
Wenn meintext$ mehr als ein Zeichen lang ist, dann gib etwas anderes zurück (nennen wir es X).
Was genau, verrate ich an dieser Stelle noch nicht, es sollte dir aber möglich sein, das Grundgerüst so zu erweitern, dass im Basisfall (meintext$ hat nur ein Zeichen), genau meintext$ auch zurückgegeben wird,
und in allen anderen Fällen (meintext$ hat mehr als nur ein Zeichen) "X" zurückgegeben wird.
(Der findige Informatiker wird zurecht bemerken, dass es auch Zeichenketten mit 0 Zeichen gibt, also Leerstrings, und dass man den Basisfall auch damit aufziehen kann. Aus Verständnisgründen habe ich mich für die etwas anschaulichere Variante entschieden) _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Zuletzt bearbeitet von SpionAtom am 27.11.2024, 01:00, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 27.11.2024, 00:39 Titel: |
|
|
Zitat: | Bitte zeige mir genau die Unterschiede zwischen dem richtigen und dem falschen "Gleis", damit ich nicht mal zufällig auf das falsche abbiege. |
In diesem Fall ist ein zufällig falsches Abbiegen nicht möglich - zum einen, weil der Interpreter sowieso gleich wegen falscher Syntax meckert, zum anderen, weil man diese Schreibweise nicht rein zufällig verwendet, wenn man sie nicht irgendwo anders gesehen hat. Ich kann dir, ohne groß nachzudenken, ein halbes Dutzend Schreibweisen für die Funktionsrückgabe nennen, die allesamt in QBasic nicht funktionieren; mit etwas Nachdenken finde ich sicherlich noch einige mehr. Das bringt aber nicht weiter.
Zitat: | Für den Rekursionsanfang gilt:
Wenn meintext$ nur ein Zeichen lang ist, ist das umgedrehte Text eben nur das eine Zeichen und das ist dann zurückuzgeben (Wenn man "K" bekommt, und es umdrehen soll, gibt man eben nur "K" zurück.
Für alle anderen Rekursionsschritte muss etwas anderes zurückgegeben werden, und da kommt das Selbst-Aufrufen wieder ins Spiel. |
Warum nur schwirren meine Gedanken jetzt um funktionale Programmiersprachen, head und tail?  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Revilo
Anmeldungsdatum: 26.12.2022 Beiträge: 178
|
Verfasst am: 27.11.2024, 01:10 Titel: |
|
|
Hallo nemored,
Als Ergänzung zu meinem letzten Beitrag:
Der Unterschied zwischen wahr und falsch, also zu wissen, was was ist, ist essentiell für den weiteren Lernerfolg.
Beispiel:
Aufgabe: 1+2*3 = ?
Schüler A liefert als Ergebnis 7. RICHTIG
Schüler B liefert als Ergebnis 9. FALSCH
Wenn hier dem Schüler B nicht die "Punkt vor Strich-Regel" beigebracht wird, wird er immer wieder falsch rechnen, ohne jemals zu wissen, warum.
Im Endeffekt bleibt ihm nur eine für ihn logische Erklärung:
Der Lehrer hasst mich. Warum sollte er sonst ausgerechnet meine Ergebnisse immer wieder als falsch bewerten? Passt ihm meine Nase nicht oder meine Herkunft oder meine Religion oder, oder, oder....?
Dann ist es nur eine Frage der Zeit bis der frustrierte Schüler B den Lehrer nicht nur verbal sondern auch körperlich angreift.
Wer ist schuld, wenn so etwas passiert? Der vermeintlich aggressive Schüler, oder der Lehrer, der sich als pädagogischer "Tiefflieger" erwiesen hat?
Ich glaube, dass wir uns beide über die Antwort einig sind.
Gruß Revilo |
|
Nach oben |
|
 |
Revilo
Anmeldungsdatum: 26.12.2022 Beiträge: 178
|
Verfasst am: 27.11.2024, 02:47 Titel: |
|
|
Hallo nemored,
ich habe mir schon vor Jahren angewöhnt, einen Zusammenhang mit eigenen Worten zu formulieren, um mich zu vergewissern, dass ich ihn richtig verstanden habe. Bitte verzeihe mir, wenn ich es hier beim Backtracking für Sudokus auch so mache. Es hilft mir beim Verständnis der einzelnen Abläufe.
1) Das zu bearbeitende Sudoku ist geladen, die Ersteinträge sind erfolgt.
2) Je nach dem, wie viele freie Zellen es danach noch gibt, gibt es gleich viele Backtracking - Ebenen. richtig?
3) Jede Backtracking - Ebene "kümmert" sich grundsätzlich nur um eine
einzige Zelle, also quasi um ihre "eigene persönliche Privatzelle". richtig?
4) Wie nachfolgende Zellen behandelt werden, ist Sache der nachfolgenden Backtracking-Ebenen. richtig?
5) Beim Starten des Backtrackings sucht das Programm also nach der ersten Zelle, die noch nicht sicher festgelegt ist, wo also noch Einträge möglich sind. richtig?
6) Ist eine freie Zelle gefunden, klappert das Programm alle Werte von 1 - 9
ab, ob sie noch "erlaubt" sind. Ein Wert w ist nicht mehr erlaubt, wenn er bereits in derselben Zeile oder derselben Spalte oder im jeweiligen Block vorkommt. (Sudoku-Regel) richtig?
7) Ist ein Wert w noch erlaubt, wird er "probeweise" dort eingetragen.
Er ist zwar nur probeweise, wird den nachfolgenden "Instanzen" aber als bereits gesichert "verkauft". richtig?
diese suchen dann erneut nach einer (noch) freien Zelle, und rufen Backtracking erneut auf, aber unter der Annahme, dass w als bereits sicher gilt. richtig?
9) Das läuft solange durch, bis sich ein Fehler, eine Sackgasse ergibt.
Definition Sackgasse: Es gibt eine noch leere Zelle, in die aber kein Wert w mehr eingetragen werden kann. richtig?
Gibt es weitere Definitionen für eine Sackgasse?
10) Wie würde es ab hier weitergehen?
Spätestens hier kommen doch True und False in's Spiel.
Das ist in meinem Verständnis noch nicht angekommen.
Gruß Revilo |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 27.11.2024, 09:03 Titel: |
|
|
nemored hat Folgendes geschrieben: |
Warum nur schwirren meine Gedanken jetzt um funktionale Programmiersprachen, head und tail?  |
head und tail? Kenn ich nicht  _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|