Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Boolsche Operatoren (and , or oder gibt es noch weitere?)
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 17.10.2023, 18:36    Titel: Boolsche Operatoren (and , or oder gibt es noch weitere?) Antworten mit Zitat

Hallo Leute,
mit diesem Thema tue ich mich unwahrscheinlich schwer.
Angenommen :
Ich habe ein 3x3 - Quadrat (3 Zeilen, 3 Spalten).
Ich habe ferner 2 Werte: w1=5 und w2=8, die beide in derselben Zelle
vorkommen können.

w1 und w2 kommen gemeinsam in zwei Zellen vor.
Z.B. in der Zelle (1,1) und in der Zelle (3,2)
Nur dort sind w1 und w2 noch möglich.

In allen anderen Zellen müssen w1 und w2 also ausgeschlossen werden,
aber eben nicht in den gegebenen Zellen (1,1) und (3,2).

In der Zelle (1,2) könnten w1=5 und w2=8 also ausgeschlossen werden,
weil es eben nicht Zelle(1,1) und/oder (and/or) nicht (Zelle (3,2) ist.

Aber dem steht entgegen, daß sich Zelle(1,2) und Zelle(3,2) dieselbe Spalte 2 teilen.

mit i als Zeilenzähler und j als Spaltenzähler kann ich über
for i=1 to 3
for j=1 to 3
.
.
next
next
zwar jede Zelle direkt ansprechen, aber wie muß der Syntax mit "and" bzw. "or" lauten, damit die Zelle(1,2) ausgeschlossen wird, die Zelle (3,2) aber nicht?

In der Zelle (3,1) wird die Beurteilung (ausschließbar oder nicht) sogar noch komplizierter.
Hier muß die Spalte 1 wegen Zelle(1,1) berücksichtigt werden, und gleichzeitig die Zeile 3 wegen Zelle(3,2).

Irgendwie steht das eine immer im Widerspruch zu etwas anderem.
Wenn ich für jeden speziellen Einzelfall ein extra Programm tippen muß,
wäre das doch echt mühselig und anstrengend.

Irgendwie geht das über die Boolschen Operatoren einfacher, sonst gäbe es sie ja nicht. Sie sind sicherlich ein nützliches "Werkzeug".
Aber ein Werkzeug macht nur Sinn, wenn man es auch zu gebrauchen versteht.

Könnt ihr mir da etwas weiterhelfen, nicht nur für diesen speziellen
Beispiel-Fall, sondern allgemein?

Mit netten Grüßen Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 17.10.2023, 22:44    Titel: Antworten mit Zitat

Hallo Revilo,

ehrlich gesagt, ich verstehe nicht, was genau du vorhast. Du möchtest eine Tabelle anlegen, deren Zellen je ein Wertepaar enthalten, soweit kann ich dir noch folgen. Und was weiter? Soweit ich dich verstanden habe, soll ausgeschlossen werden, daß dieses Wertepaar noch ein weiteres Mal auftaucht, aber wie genau? In derselben Spalte, deselben Zeile oder in der gesamten Tabelle?

Vielleicht hilft es dir ja, wenn du erst einmal eine einfache Möglichkeit bekommst, den Inhalt von zwei Zellen auf Gleichheit zu testen. Dazu packst du am besten die Wertepaare in ein TYPE, dann kannst du den Gleichheitsoperator entsprechend überladen:
Code:
Type tWert ' wertepaar als zelleninhalt
   w1 As Integer
   w2 As Integer
End Type

Operator = (wt1 As tWert, wt2 As tWert) As boolean ' "=" - Operator überladen
   If (wt1.w1 = wt2.w1) AndAlso (wt1.w2 = wt2.w2) Then
      Return TRUE
   Else
      Return FALSE
   EndIf
End Operator

Dim As tWert tabelle(1 To 3, 1 To 3) '2-dimensionales array von wertepaaren

tabelle(1,1).w1 = 5
tabelle(1,1).w2 = 8

If (tabelle(3,2) = tabelle(1,1)) Then
   Print "Jau"
Else
   Print "Nee"
EndIf

tabelle(3,2) = tabelle(1,1)

If (tabelle(3,2) = tabelle(1,1)) Then
   Print "Jau"
Else
   Print "Nee"
EndIf
Sleep

Ich hoffe, das hilft dir ein bisschen weiter. lächeln

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 18.10.2023, 17:56    Titel: Boolsche Operatoren (and , or oder gibt es noch weitere?) Antworten mit Zitat

Hallo grindstone,
vielen Dank für deine Antwort.
Sorry, aber ich habe dich offenbar auf ein falsches "Gleis" geführt.
Man möchte als Laie ein Problem möglichst anschaulich darstellen, stiftet damit aber oft nur Verwirrung.

Deshalb hier ein neuer Versuch:
Im Grunde geht es mir um einen 3x3-Block in einem Sudoku.

Im Lösungsverlauf hat sich herausgestellt, daß die Werte w1=5 und w2=8
einen sogenannten "Zwilling" bilden.
Dieser "Zwilling" tritt in 2 Zellen desselben Blocks auf.
Im Beispiel: in Zelle(1,1) und in Zelle(3,2), also im Block (1,1)-(3,3).

In allen anderen Zellen dieses Blocks sind beide Werte w1 und w2 daher nicht mehr möglich, müssen dort also als "bisher noch mögl. Einträge" ausgeschlossen werden.

Mit den Schleifen:
For i=1 to 3
For j=1 to 3
:
:
Next j
Next i
habe ich versucht, genau diese Zellen zu "erwischen", mich dabei aber mit "and" und "or" - Befehlen total verzettelt.

Zumal die Zellen (1,1) und (3,2) als Orte der Zwillinge unangetastet bleiben müssen, damit sie sich dort nicht gegenseitig ausschließen.

Wie müßte der Syntax innerhalb der Schleifen lauten, damit es klappt?
Vielleicht konnte ich mein Anliegen so etwas besser darstellen.

PS: Mit den Begriffen "True" und "False" kann ich leider nichts anfangen.

Mit netten Grüßen Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 18.10.2023, 18:40    Titel: Re: Boolsche Operatoren (and , or oder gibt es noch weite Antworten mit Zitat

Revilo hat Folgendes geschrieben:
Vielleicht konnte ich mein Anliegen so etwas besser darstellen.
Nicht wirklich. Vielleicht versuchst du es einmal mit einer einfachen grafischen Darstellung. Wo stehen die 5 und die 8 ?

|xxx|xxx|xxx|
|xxx|xxx|xxx|
|xxx|xxx|xxx|
|xxx|xxx|xxx|
|xxx|xxx|xxx|
|xxx|xxx|xxx|
|xxx|xxx|xxx|
|xxx|xxx|xxx|
|xxx|xxx|xxx|

Vielleicht wird dann etwas klarer, worauf du hinauswillst.

Zitat:
Mit den Begriffen "True" und "False" kann ich leider nichts anfangen.
Entschuldige, ich habe nicht darauf geachtet, du programmierst in QBasic, das kennt noch kein TRUE und FALSE. Und Operatoren überladen kann man meines Wissens auch nicht.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 19.10.2023, 13:59    Titel: Antworten mit Zitat

OPERATOR gibt es in FreeBASIC seit Version 0.17 und war der erste Referenzartikel, den ich selbständig neu verfasst habe. Bei der Umstellung des Portals wurde mir dann diese Urheberschaft "gestohlen", dafür wurden mir Dutzende andere Artikel unrechtmäßig als Erstverfasser zugeschrieben. grinsen

Aber zum Thema:
Unter einem Zwillingspaar verstehe ich im Sudoku so etwas:
Code:
|   *   *   *   |   x   x   x   |   x   x   x   |
|   *  5/8  *   |   x   x   x   |   x   x   x   |
|  5/8  *   *   |   x   x   x   |   x   x   x   |
-------------------------------------------------
|   x   x   x   |   x   x   x   |   x   x   x   |
|   x   x   x   |   x   x   x   |   x   x   x   |
|   x   x   x   |   x   x   x   |   x   x   x   |
-------------------------------------------------
|   x   x   x   |   x   x   x   |   x   x   x   |
|   x   x   x   |   x   x   x   |   x   x   x   |
|   x   x   x   |   x   x   x   |   x   x   x   |

also in diesem Beispiel: Ich weiß, dass in Zeile 2, Spalte 2 entweder eine 5 oder 8 steht, und dass auch Zeile 3, Spalte 1 ebenfalls entweder eine 5 oder 8 steht. Da im Block links oben nur einmal die 5 und die 8 vorkommen können, sind die mit einem * markierten Zellen im ersten 3x3-Block mit Sicherheit alle weder 5 noch 8.
Entspricht das der gesuchten Situation?

Wenn ich die Frage richtig verstehe, geht es darum, herauszufinden, ob die Zelle einen Zwilling enthält, der in einer anderen Zelle desselben 3x3-Blocks ebenfalls auftritt. Mir fällt da spontan als allgemeine Lösung schon etwas mit vielen ineinander geschachtelten Schleifen und massenhaft Rechenleistung ein (brute-force-mäßig alle Kombinationsmöglichkeiten durchprobieren - wahrscheinich zeichnet sich meine angedachte Lösung auch durch ausreichend große Undurchsichtigkeit aus); eine einfache und/oder elegante Lösung wüsste ich dazu aber nicht.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 19.10.2023, 15:22    Titel: Boolsche Operatoren (and , or oder gibt es noch weitere?) Antworten mit Zitat

Hallo grindstone,
wahrscheinlich hast du recht. Ein Bild sagt mehr als 1000 Worte.
Ich habe den Block oben links [Zelle(1,1)-Zelle(3,3)] mal als Beispiel aus dem ganzen Sudoku "ausgeschnitten".
In den Klammern stehen die noch mögl. Werte w1=5 und w2=8.


'Block oben links
| <5,8> X X | *
| X X X | *
| X <5,8> X | *

*****************
*
Wenn das Sudoku komplett gelöst sein wird, werden 5 und 8 entweder so
in dem Block stehen, oder so

| 5 X X | * | 8 X X | *
| X X X | * | X X X | *
| X 8 X | * | X 5 X | *

***************** ****************
* *
Welche Variante es bei kompletter Lösung sein wird, wissen wir jetzt noch nicht, aber eine von beiden muß es sein.
Die X-e können mit jedem anderen Wert 1,2,3,4,6,7,9 belegt sein,
aber eben nicht mehr mit 5 oder 8. Für sie sind die 5 und die 8 also auszuschließen.

Jede Zelle dieses Blocks ist als Feld mit den Koordinaten i und j
als Zelle (i, j) definiert.
Die "Zwillinge" <5,8> stehen also in den Zellen (1,1) bzw. (3,2).

Ich versuche, die X-e sauber anzusprechen , um 5 und 8 dort auszuschließen.

For i=1 to 3
For j=1 to 3
'Unter Ausschluß der Zellen, in denen die Zwillinge stehen
If i<>1 and j<>1 and i<>3 and j<>2 then
'müßte ich doch jedes X "erwischen", um dort 5 und 8 auszuschließen

'Aus dem Schema ergibt sich, daß Zelle(1,2) ein X ist, 5 und 8 also
'ausgeschlossen werden müssen.

'j=2 also j <>1 , erfüllt zwar obige IF - Anforderung
'Gleichzeitig ist i aber immer noch = 1 und eben nicht <>1 wie von
'der If -Anforderung verlangt.

Das heißt: Die If - Bedingung greift gar nicht, obwohl sie eigentlich
greifen müßte, weil Zelle (1,2) ja ein X ist.

Endif

Die einzige Zelle, die obige If-Abfrage sauber erfüllt, ist die Zelle (2,3).
für Zeilen i: f ür die Spalten j:
(i=2 <> 1 und i=2 <>3) (j=3 <> 1 und j=3 <>2 )

Damit können die Werte 5 und 8 aber nur für ein einziges X,
eben für Zelle(2,3) ausgeschlossen werden, aber nicht für alle, wie
gewünscht.

Erkennst du jetzt mein Problem? Ich hoffe es.

next j
next i

Mit nettem Gruß Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 19.10.2023, 16:45    Titel: Boolsche Operatoren (and , or oder gibt es noch weitere?) Antworten mit Zitat

Hallo nemored,
vielen Dank für deine Antwort.

Kompliment.
Trotz meiner vielleicht verquasten Ausdrucksweise hast du mein
Sudoku - Problem auf Anhieb sauber erkannt.
Ich danke dir für dein Einfühlungsvermögen, auch wenn du mir keine
Lösung anbieten kannst.

Persönlich:
Daß du offenbar Opfer geistigen Diebstahls wurdest, ist echt bedauerlich.
Aus meiner Sicht sollten darauf mindestens 10 Jahre Knast stehen.
Daß dir andererseits unberechtigterweise andere Urheberschaften zugeschrieben wurden, mag zwar schmeichelhaft sein, ist aus meiner laienhaften Sicht juristisch aber ein Damokles-Schwert, das dir zu jeder Zeit auf die Füße fallen könnte.

Ich würde an deiner Stelle sicherheitshalber zu jeder dieser unbe-
rechtigten Urheberschaften Widerspruch einlegen und von der jeweiligen Stelle verlangen, daß sie mir diesen schriftlich bestätigt.
Wenn du nicht Urheber einer Sache bist, bist du es eben auch nicht.
Egal, was irgend ein Allgorithmus dir bescheinigt.
Schließlich kann kein Allgorithmus besser wissen, was auf deinem "Mist" gewachsen ist, als du selbst.
Das könnte dir im Ernstfall finanziell mal das Überleben retten.

Zurück zur eigentlichen Sache:
Zwillinge zu finden, ist kein Problem. Das habe ich inzwischen gelöst.
Darüber mußt du dir also keine Gedanken mehr machen.

Mein Problem ist, die Sternchen sauber auszuschließen.

Aber egal, vielen Dank für deine Anteilnahme an meinem Problem und deinen Lösungsbemühungen.

Mit nettem Gruß Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 19.10.2023, 18:25    Titel: Antworten mit Zitat

Ich bin mir nicht sicher, ob das nicht wieder an deinem Problem vorbeigeht, aber generell würde ich (ich meine, wenn ich ein Sudoku-Lösungsprogramm schreiben wollte) es zunächst einmal mit folgendem Lösungsansatz versuchen: Zunächst würde ich ein 9 x 9 - Array von Strings erstellen. In jede Speicherzelle würde ich einen String mit dem Inhalt
Code:
"0123456789"
schreiben.

Anschließend in allen Zellen, wo eine Zahl vorgegeben ist, alle bis auf diese Zahl löschen. Wenn also für eine Zelle 5 vorgegeben ist, einen String mit dem Inhalt
Code:
"5"
hineinschreiben.

Dann alle Zellen durchgehen, spaltenweise und Zeile für Zeile. Ist die Stringlänge in der Zelle 1, dann ist die Zahl eideutig und es kann erst in der Zeile, dann in der Spalte und zum Schluß im aktuellen Teilquadrat aus allen Strings diese Zahl entfernt werden. Jede Zelle, in der die Stringlänge 1 ist, kann (bzw. muß) übersprungen werden.

Das wird so lange wiederholt, bis alle Zellen nur noch einen String der Länge 1 enthalten.

Ich habe allerdings keine Ahnung, ob das ausreicht, um ein Sudoku (bzw. jedes Sudoku) zu lösen.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 19.10.2023, 18:42    Titel: Antworten mit Zitat

Zitat:
Daß du offenbar Opfer geistigen Diebstahls wurdest, ist echt bedauerlich.
Aus meiner Sicht sollten darauf mindestens 10 Jahre Knast stehen.
Daß dir andererseits unberechtigterweise andere Urheberschaften zugeschrieben wurden, mag zwar schmeichelhaft sein, ist aus meiner laienhaften Sicht juristisch aber ein Damokles-Schwert, das dir zu jeder Zeit auf die Füße fallen könnte.

Mach dir da um mich mal keine Sorgen. Es geht um die Online-Referenz von FreeBASIC, die von den Redakteuren in Kooperation erstellt wurden und deren Texte unter einer freien Lizenz stehen - gewissermaßen ein Wiki mit eingeschränktem Autorenkreis. Alle diese Texte gehören dem FreeBASIC-Portal.

Die aktuelle Software hinter der Referenz loggt mit, wer wann welche Änderungen vorgenommen hat. Änderungen vor dem Aufspielen der aktuellen Software wurden allerdings noch nicht aufgezeichnet. Das hatte zur Folge, dass immer derjenige, der den Artikel vor dem Aufspielen zuletzt bearbeitet hatte, nun als "Erstverfasser" genannt wird ("Der Referenzeintrag wurde am ... von ... angelegt.")
Dass mich der Verlust des Erstverfasser-Status beim OPERATOR-Artikel "schmerzt", ist eine reine Sache der Eitelkeit.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 19.10.2023, 19:30    Titel: Antworten mit Zitat

Nimm doch einfach eine kleine Änderung vor, dann bist du wieder vorne. grinsen

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 19.10.2023, 20:00    Titel: Antworten mit Zitat

Der Letzt-Bearbeiter bin ich inzwischen sowieso fast überall. cool
Leider ist das Referenzteam inzwischen extrem geschrumpft. traurig
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 19.10.2023, 20:17    Titel: Antworten mit Zitat

Nebenbei: Unter

https://forum.qbasic.at/viewtopic.php?t=2141

hatte ich früher selber einmal so etwas geschrieben. Kannst Du evtl. als Anregung verwenden. Ist noch Original-QB.

Zauberwort damals lautete Rekursion, d.h. es wird im Prinzip alles durchprobiert, allerdings gut optimiert (Felder mit am wenigsten Kandidaten zuerst füllen versuchen), denn sonst würde die Rekursion extrem lange dauern.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 20.10.2023, 10:43    Titel: Antworten mit Zitat

@Revilo:
Ich glaube, ich habe jetzt verstanden, was dein Problem ist (hoffe ich jedenfalls). grinsen

Mit
Code:
If i<>1 and j<>1 and i<>3 and j<>2 then
bist du in eine boolesche Logikfalle getappt. Was du eigentlich suchst, ist
Code:
If Not((i=1 And j=1) Or (i=3 And j=2)) Then
Wenn du unbedingt auf "ungleich" testen willst, mußt du nach den booleschen Regeln alle "And" und "Or" vertauschen und das Ergebnis invertieren:
Code:
If (i<>1 Or j<>1) And (i<>3 Or j<>2) Then
Im Interesse der Lesbarkeit rate ich dir aber dringend, die obere Variante zu verwenden.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 20.10.2023, 16:59    Titel: Boolsche Operatoren (and , or oder gibt es noch weitere?) Antworten mit Zitat

Hallo nemored,
vielen Dank für deine Antwort.
Wenn du entspannt mit meinen Befürchtungen bezüglich deiner Urheberrechte umgehen kannst, kann ich es natürlich auch. Nichts für ungut.
Ich wollte nur helfen.
Gruß Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 20.10.2023, 17:34    Titel: Boolsche Operatoren (and , or oder gibt es noch weitere?) Antworten mit Zitat

Hallo dreael,
von der Rekursion habe ich hier schon mehrmals gelesen.
Begriffen habe ich nur, daß es praktisch darum geht, "das Pferd quasi von hinten aufzuzäumen". Das ist aber auch das einzige, was ich davon weiß und verstanden habe. Wie sie in der Praxis aussehen muß, angewendetet werden muß, wann sie überhaupt zweckmäßig ist usw. habe ich nie begriffen.

Offenbar widerspricht sie der gewohnten menschlichen, linearen Denkwiese. Zuerst Schritt 1, dann Schritt 2, dann Schritt 3 usw.

Hier beginnt man offenbar z.B. mit Schritt 97 und tastet sich dann bis zu Schritt 1 vor. Ist eine zuvor bestimmte Abbruchbedingung erfüllt, ist das Rätsel gelöst, sonst eben noch nicht.

Woher weiß ich aber, wieviele Schritte überhaupt nötig wären?
(Es könnten ja auch 2345 Schritte nötig sein)

Gruß Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 20.10.2023, 18:44    Titel: Boolsche Operatoren (and , or oder gibt es noch weitere?) Antworten mit Zitat

Hallo grindstone,
du bringst hier den Operator "not"- wahrscheinlich für "nicht" - in's Spiel.
Dieser war mir bisher völlig unbekannt.
Kein Wunder, daß ich mich bisher ergebnislos nur mit "and" und "or"
unhergequält habe.

Offenbar gibt es neben "and" und "or" also mindestens einen weiteren
Operator, nämlich "not".
Gibt es noch weitere, wie ich im Thema -Titel bereits anfragte?

Code:
If Not((i=1 And j=1) Or (i=3 And j=2)) Then

Ist sehr interessant. Ich werde ihn auf jeden Fall ausprobieren.
Selbst wäre ich auf ihn wohl nie gekommen.
Wenn sich das Testen auf "ungleich" so erübrigt, wovon ich mal ausgehe, sehe ich keinen Grund, es weiterhin zu tuen.
Das würde mir die Sache wesentlich erleichtern.

Gruß Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 21.10.2023, 11:01    Titel: Antworten mit Zitat

Zitat:
Offenbar gibt es neben "and" und "or" also mindestens einen weiteren
Operator, nämlich "not".
Gibt es noch weitere, wie ich im Thema -Titel bereits anfragte?

Es gibt noch EQV und IMP.
https://www.freebasic-portal.de/befehlsreferenz/bit-operatoren-manipulationen-570.html
(ANDALSO und ORELSE kannst du ignorieren, das gibt es in QBasic nicht.)
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 21.10.2023, 12:40    Titel: Antworten mit Zitat

Nicht zu vergessen XOR (exclusive or) zum Invertieren einzelner Bits.

Genauso wichtig ist die richtige Klammerung, sprich die richtige Reihenfolge der Verknüpfungen. Ohne Klammern würde die Befehlszeile schrittweise von links nach rechts abgearbeitet, was völlig andere (und in diesem Fall falsche) Ergebnisse liefert.

Außerdem stimmt die Bedeutung der Begriffe "und" und "oder" in der booleschen Algebra nicht immer mit dem überein (das meinte ich mit der "Logikfalle"), wie wir sie in der Alltagssprache gebrauchen.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 21.10.2023, 20:36    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Nicht zu vergessen XOR (exclusive or) zum Invertieren einzelner Bits.

Richtig - keine Ahnung, warum ich das übersprungen habe. verlegen XOR kann man häufig sinnvoll einsetzen, dagegen nutze ich EQV und IMP nahezu nie.
Umgangssprachlich bedeutet "A OR B": "A oder B tritt ein, oder beide" - dagegen meint "A XOR B": "Entweder A tritt ein (und nicht B), oder B tritt ein (und nicht A)".

Noch etwas: Ein Problem, das man bei vielen BASIC-Dialekten hat, ist der unscharfe Umgang mit Wahrheitswerten. In QBasic wird 0 als "falsch" (false) gewertet, jeder andere Zahlenwert als "wahr" (true). Die boolschen Operatoren verknüpfen aber bitweise.
Im Zweifelsfall würde ich dazu raten, immer erst einmal an ein paar konketen Beispielen auszuproblieren, ob die gewählte Verknüpfung die gewünschten Ergebnisse liefert. Mit etwas Übung ist der Umgang mit boolschen Operatoren nicht schwer, am Anfang kann es aber etwas überraschend wirken.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Revilo



Anmeldungsdatum: 26.12.2022
Beiträge: 69

BeitragVerfasst am: 22.11.2023, 00:19    Titel: Boolsche Operatoren Antworten mit Zitat

Hallo grindstone,
vielen Dank für deine Tipps.
Der Operator "not" war mir bisher nicht bekannt.
Ich habe deinen Rat ausprobiert, läuft aber trotzdem noch nicht wunschgemäß.

In deiner letzten Mail hattest du auf die Wichtigkeit einer korrekten Klammersetzung hingewiesen.
Wahrscheinlich mache ich dabei immer noch irgend etwas falsch.
Ich weiß nie, ob ich die Klammern wirklich richtig gesetzt habe oder nicht.
Es ist für mich immer ein "Raten" und "Probieren".
Kannst du mir die "Spielregeln" für die Klammersetzung bei boolschen Operatoren beibringen?

Idealerweise mit einigen Beispielen nach dem Motto:
So wäre es richtig. So wäre es falsch.

Nur wenn man zwischen richtig und falsch vergleichen/unterscheiden kann, kann man daraus auch lernen, andernfalls bleibt es immer ein Raten, ein Lotteriespiel. Ist doch wie in der Mathematik.
Wenn man nicht weiß, wie man richtig rechnen muß, rechnet man wahrscheinlich immer falsch und wundert sich dann, wenn das Ergebnis nicht stimmt.

Genau so ergeht es mir momentan mit den boolschen Operatoren und der korrekten Klammersetzung.

Gruß Revilo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz