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:

Wörter Erkennung
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 22.11.2014, 11:39    Titel: Wörter Erkennung Antworten mit Zitat

Hallo liebe Forennutzer,

ich möchte ein Spiel auf Textebene programmieren.
Dazu muss das Spiel bei der Eingabe eine Reihenfolge bestimmter Wörter erkennen können.
Beispielfrage des Spieler wäre: "Was hörst du für Musik?"
Erkennen soll das Programm nur "hörst" und "Musik"
Wie lässte sich sowas in Freebasic programmieren ?

Eine weitere Frage ist, ob es möglich ist eine Fehlertoleranz zu programmieren, so das auch "örst" und "usik" erkannt werden ?
Wie weit lässt sich dies, wenn möglich einstellen ?

Vielen Dank im vorraus.

mfg, Kay.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 22.11.2014, 11:52    Titel: Antworten mit Zitat

Es wäre erst mal sinnvoll, wenn du beschreibst, was du schon hast und wo deine Probleme sind. Wenn dein Problem die Erkennung des geschriebenen Textes ist, ist das ja kein FreeBASIC-spezifisches Problem, und das ist im Allgemeinen ein sehr komplexes Problem der künstlichen Intelligenz. Je nachdem wie komplex du das haben willst kannst du einfach prüfen, ob bestimmte Worte im eingegebenen String vorhanden sind (per INSTR) oder du baust eine selbstlernende Maschine, die tatsächlich Sätze verstehen kann.... Nichts ist unmöglich! durchgeknallt
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 22.11.2014, 12:00    Titel: Antworten mit Zitat

Ich habe noch nichts programmiert sondern wollte mich, bevor ich anfange, erstmal erkundigen, welche Möglichkeiten sich ergeben.
Ist ja auch abzuwägen wie komplex das ganze werden soll.
Darüber mache ich mir grad so Gedanken.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 22.11.2014, 15:52    Titel: Antworten mit Zitat

kay2016 hat Folgendes geschrieben:
Ich habe noch nichts programmiert [...]
... heißt dass du hast nur für dieses Projekt noch nichts programmiert oder überhaupt noch nichts?

Ich glaube nämlich du unterschätzt die Komplexität für sowas ganz gewaltig. Es klingt ja so als wolltest du ein Programm erstellen, dass quasi "versteht" was der Nutzer fragt. Mit Einschränkungen ist das sicher möglich und je größer diese Einschränkungen sind desto einfacher wird es, aber deine Fragestellung klingt nicht gerade danach als ob für so etwas bereit wärst.

Wenn du z.B. eine definierte Liste an Wörtern hast nach denen du suchst wäre die Implementierung recht einfach. Mit sehr einfachen Metriken wie dem Hamming-Abstand oder Levenshtein-Distanz könntest du dann bestimmen, ob ein Wort mit einem aus deiner Liste in etwa übereinstimmt.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 22.11.2014, 16:43    Titel: Worterkennung, Gleichheit und Ähnlichkeit Antworten mit Zitat

Hallo und willkommen im Forum!

Als Grundlage brauchst du wahrscheinlich eine Auflistung der relevanten Wörter (in Form eines Arrays von Strings), die du in den Freitext-Eingaben erkennen möchtest.
Code:
Dim BekannteWoerter(1 To 100) As String


Wenn der Benutzer dann etwas eingibt, musst du die Freitext-Eingabe in ein verarbeitbares Format bringen. Eine lange Zeichenkette nutzt dir da erst einmal nicht so viel. Du müsstest nach der Eingabe im ersten Schritt daraus die einzelnen Wörter herausziehen, indem du den Gesamt-String an den Satzzeichen, Leerzeichen und anderen Whitespaces splitten lässt. Außerdem sollten Groß- und Kleinschreibung dabei ausgebügelt werden (mit LCASE oder UCASE). Das Ergebnis davon wäre wieder ein Array.

Aus der Freitexteingabe
Code:
Das also war des Pudels Kern! Ein fahrender Scolast? Der Casus macht mich lachen.

müsstest du das Array
Code:
das
also
war
des
pudels
kern
ein
fahrender
scolast
der
casus
macht
mich
lachen

herausbekommen.

Wenn du soweit bist, ist es zur Suche nach exakten Übereinstimmungen nicht mehr weit. Kennst du aus dem Mathe-Bereich die Summenzeichen, bei denen ein Index wie i von 0 bis x oder so läuft? Sowas bräuchtest du auch im Programm, allerdings 2 Stück ineinander verschachtelt. Man spricht da von Zählschleifen. Zählschleifen werden benutzt, um Programmteile für eine bestimmte Anzahl Durchgänge wiederholt zu durchlaufen.

Der Pseudocode dazu wäre:
Code:
MachFolgendesFürAlleBekanntenWörter (aktueller Index sei i)
   MachFolgedesFürAlleTeilwörterAusDerEingabe (aktueller Index sei j)
      If (BekanntesWort(i) = EingabeTeilwort(j)) Then
         Print "Treffer! " & EingabeTeilwort(j) & " erkannt!"
      End If
   EndeDerInnerenSchleife
EndeDerAuesserenSchleife

Für jedes einzelne der bekannten Wörter würden alle Wörter der Eingabe überprüft, ob sie damit übereinstimmen. Wenn du 10 bekannte Wörter hast und die Benutzereingabe aus 6 Wörtern bestünde, gäbe es insgesamt also 60 IF-Abfragen. ("Jedes mit jedem vergleichen.")

Die erkannten Treffer könnte man natürlich nicht nur auf dem Bildschirm ausgeben, sondern diese wiederum in ein Array packen, damit man sie später auswerten kann. Zum Beispiel (in der allereinfachsten Variante) so:

Code:
If ((AnzahlTreffer >= 2) AND (Treffer(1) = "pizza") AND (Treffer(2) = "salami")) Then
   Print "Gute Wahl! In unsere Salami kommt nur feinstes Bisamfleisch rein!"
End If


Je nach Anforderungen müsste man das vielleicht etwas komplizierter machen, wenn z. B. zwischen "pizza" und "salami" noch ein weiterer, hier unwichtiger, Treffer erzielt werden könnte. Dann müsste man eher Richtung "Befindet sich dieses Wort irgendwo im Treffer-Array?" arbeiten, statt feste Indizes zu benutzen.

Wenn man das ganze jetzt noch um eine unscharfe Suche erweitern möchte, bietet sich die Levenshtein-Distanz an, die St_W schon erwähnt hat. Mit diesem Algorithmus erhält man ein mathematisch nutzbares Maß für die Unterschiedlichkeit zweiter Wörter ("Wie viel muss ich am ersten Wort ändern, um daraus das zweite Wort zu machen?"). Statt in der Vergleichsschleife ("Jedes mit jedem") nur mit = auf Gleichheit zu prüfen, könnte man zusätzlich prüfen, ob die Levenshtein-Distanz der beiden Wörter eine bestimmte Schwelle unterschreitet. Zwischen "pizza" und "pizzo" wäre die Distanz z. B. nur 1.

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 22.11.2014, 23:01    Titel: Antworten mit Zitat

Hallo!

Das hört sich nach Eliza an.

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
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 23.11.2014, 10:39    Titel: Antworten mit Zitat

Vielleicht sollte ich zu Erklärung hinzufügen, dass ich 37 bin und BASIC nur aus früherer Programmierversuchen zu meinem damaligen C64 kenne.

Das Programm soll nicht "verstehen" was man fragen möchte.
Es soll schlichtweg, wenn z.B. zwei Wörter in einem INPUT vorkommen die resultieren Antwort "posten" und für die Wörter, für welche es keinen programmierte Antwort gibt - einfach ignorieren (durch IGNORE ?happy)

Ich danke Euch schonmal für die echt wahnsinnig ausgiebigen Antworten, welche wesentlich länger und informativer sind, als ich es mir erhofft hatte.
Die Levenshtein-Distanz werde ich mir anschauen, war mir bisher nicht bekannt.
Als Programmieranfänger werde ich mir die erwähnten Dinge zu Gemüte führen und bei weiteren Fragen einfach anknüpfen bzw. wenn spezifischer einen neuen Thread eröffnen.

VIELEN DANK !!

EDIT: wie mache ich sowas in freebasic ?
http://youtu.be/ac17YnQRJ7E?t=4m46s
Das wäre zumindest etwas, womit ich anfangen könnte.[/url]

EDIT2: Lösung hier gefunden: http://de.wikibooks.org/wiki/FreeBasic:_If_Abfragen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 23.11.2014, 14:43    Titel: Antworten mit Zitat

Grundsätzlich kannst du in FreeBASIC recht ähnlich arbeiten wie im Programm gezeigt, mit ein paar zusätzlichen Anmerkungen:

Variablen, die du verwendest (wie A im Video), müssen in FreeBASIC deklariert werden. Suffixe sind dabei nicht mehr zulässig. Du brauchst also zu Beginn ein
Code:
DIM A AS STRING

siehe http://www.freebasic-portal.de/befehlsreferenz/dim-175.html
(ich würde allerdings einen besseren Variablennamen verwenden zwinkern )

GOTO lässt sich in diesem Beispiel gut über ein Schleife vermeiden (FreeBASIC arbeitet sowieso ohne Zeilennummern); siehe. z. B. http://www.freebasic-portal.de/befehlsreferenz/do-loop-198.html

INPUT und IF arbeiten in allen mir bekannten BASIC-Dialekten nahezu identisch. Zum Nachlesen:
http://www.freebasic-portal.de/befehlsreferenz/input-anweisung-315.html
http://www.freebasic-portal.de/befehlsreferenz/if-then-302.html

(Und natürlich gibt es im Portal eine Unmenge an Tutorials und Codebeispielen. happy)

Zitat:
Es soll schlichtweg, wenn z.B. zwei Wörter in einem INPUT vorkommen die resultieren Antwort "posten" und für die Wörter, für welche es keinen programmierte Antwort gibt - einfach ignorieren (durch IGNORE happy)

Das würde z. B. über eine mehrfache IF-Abfrage laufen (IF ... ELSEIF ... ELSEIF ... ... ELSE ... END IF). Es gäbe da noch SELECT CASE, das wird sich in deinem Szenario aber wohl nicht einsetzen lassen.

Mein Vorschlag wäre, es zunächst einmal über das (an sich recht ineffektive) INSTR zu probieren (das verschafft relativ schnelle Programmier-Erfolge) und langfristig die von Sebastian erwähnte Zerlegung über Arrays anstrebst.
_________________
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
Domso



Anmeldungsdatum: 02.02.2011
Beiträge: 109

BeitragVerfasst am: 23.11.2014, 16:39    Titel: Antworten mit Zitat

so ein programm besteht prinzipiell aus 2 teilen.
zuerst musst du die eingabe zerlegen(parsen) und dannach auswerten

parsen:
der eigentliche parser an sich ist keine größere angelegenheit
(theorie: s. http://de.wikipedia.org/wiki/Kellerautomat)
das eigentliche hauptproblem liegt hier an der aufbau der dt. sprache
also musst du wahrscheinlich die komplexität der eingaben einschränken, zb keine nebensätze, etc.

nehmen wir mal an, jede eingabe hätte folgenden aufbau:
<Subjekt><Prädikat>(<Objekt>)(<Prädikat>)
(leider ist deutsch hier sehr unschön, da die position der satzglieder nicht fest ist, zb: Ich habe keine Musik gehört)

dann würde ich gesamt irgendwie so vorgehen:
Code:

Dim As String eingabe 'jeweils nur ein satz, bei eingaben mit mehreren sätzen ->aufspalten


Dim As String stack = "SPO"

Do   
   Select Case stack[0]
      
      Case Asc(S)
         suche in der eingabe nach Subjekt
         wenn gefunden dann:
            lösche Subjekt aus Eingabe und speichere es ab
            lösche erstes zeichen von stack (S)
         sonst:
            Syntax Error
      Case Asc(P)
         suche nach hilfsverb
         wenn gefunden dann:
            lösche hilfsverb aus Eingabe und speichere es ab
            verschiebe erstes zeichen von stack nach hinten
            Exit Select
         sonst:
         suche nach prädikat
         wenn gefunden dann:
            lösche prädikat aus der eingabe und speichere es ab
            lösche erstes zeichen von stack
            Exit Select
         sonst:
         Syntax Error   
      Case Asc(O)
         Suche nach Objekt
         lösche erstes zeichen von stack 'optional
         wenn gefunden dann:
            lösche objekt aus eingabe und speichere es ab
      Case Else
         Syntax Error
   End Select

Loop Until stack = "" Or SyntaxError
If eingabe <> "" Then SyntaxError

BSP:
eingabe: ich höre musik
stack: SPO
->S
Subjekt: ich
eingabe: höre musik
stack: PO
->P
Subjekt: ich
Prädikat: höre
eingabe: musik
stack: O
->O
Subjekt: ich
Prädikat: höre
Objekt: musik
eingabe: ""
stack: ""
-> finish

BSP:
eingabe: ich habe musik gehört
stack: SPO
->S
Subjekt: ich
eingabe: habe musik gehört
stack: PO
->P
Subjekt: ich
Prädikat: habe
eingabe: musik gehört
stack: OP
->O
Subjekt: ich
Prädikat: habe
Objekt: musik
eingabe: gehört
stack: P
->P
Subjekt: ich
Prädikat: habe gehört
Objekt: musik
eingabe: ""
stack: ""
->finish



anschließend kannst du dir dann einen einfachen sprachinterpreter schreiben, der die daten auslesen kann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 23.11.2014, 18:57    Titel: Vorgaben machen Antworten mit Zitat

Du könntest mögliche Worte/Sätze vorgeben, z.B. wie bei The Secret of Monkey Island. Das kann wenn du in jeder Situation genug Auswahl hast evt. auch gut sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 23.11.2014, 20:21    Titel: Antworten mit Zitat

Ich glaube, dir schwebt etwas sehr viel einfacheres vor, etwa in dieser Art:
Code:
#Include "windows.bi"
Dim As String eingabe, ausgabe

Input "Satz ";eingabe

eingabe = LCase(eingabe) 'umwandeln in kleinbuchstaben
OemToChar(eingabe,eingabe) 'vom ANSI- ins ASCII-Format wandeln (wg. umlauten)

If InStr(eingabe,"ast") And _ 'eingabe auf vorkommende wörter prüfen
    InStr(eingabe,"zersägt") And _
    InStr(eingabe,"gast") And _
    InStr(eingabe,"erlegt") Then
   ausgabe = "Dann wird das mit Knast belegt"
Else
   ausgabe = "Hä?"
EndIf

CharToOem(ausgabe,ausgabe) 'vom ASCII- ins ANSI-Format wandeln
Print ausgabe
Sleep



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
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 23.11.2014, 21:31    Titel: Antworten mit Zitat

grindstone, Du hast es erfasst.

genau, ich möchte keinen hochkomplexen Nachbau eines Sprachroboter schrauben, sondern das das Programm auf vorgegebene Textbausteine eine entsprechend dazugehörigen Antwort ausgibt.

Ich möchte gern mehr tippern, es geht mir nicht so sehr darum das ganz möglichst komplex zu machen, sondern mit möglichst einfach gestrickten Mitteln das gewünschte Ergebniss "rauszudrücken"
(Sorry für die harte Wortwahl^^)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 25.11.2014, 20:58    Titel: Antworten mit Zitat

Code:
#Include "windows.bi"

'### Umlauteänderungscode
Function uANSI2ASCII (BYVAL ConvertString AS STRING) AS STRING
  DIM AS STRING OutString=ConvertString
  Static As UByte AscAnsDat(128)={ _
           63,  63,  39, 159,  34,  46, 197, 206,  94,  37,  83,  60,  79, 63, 63, 63, _
           90,  39,  39,  34,  34,   7,  45,  45, 126,  84, 115,  62, 111, 63, 122, 89, _
          255, 173, 189, 156, 207, 190, 221, 145, 149, 184, 166, 174, 170, 240, 169, 238, _
          248, 241, 253, 252, 239, 230, 244, 250, 247, 251, 167, 175, 172, 171, 243, 168, _
          183, 181, 182, 199, 142, 143, 146, 128, 212, 144, 210, 211, 222, 214, 215, 216, _
          209, 165, 227, 224, 226, 229, 153, 158, 157, 235, 233, 234, 154, 237, 232, 225, _
          225, 133, 131, 198, 132, 134, 145, 135, 138, 130, 136, 137, 141, 161, 140, 139, _
          208, 164, 149, 162, 147, 228, 148, 246, 155, 151, 163, 150, 129, 236, 231, 152}
    FOR i AS INTEGER=0 TO LEN(OutString)-1
      If OutString[i]>127 Then OutString[i]=AscAnsDat(OutString[i]-128)
    NEXT i
  RETURN OutString
END Function

'### Deklaration der Wörter
Dim Antworten as String

'### Definition der einzelnen Wörter
Antworten = "hallo"

'### SchleifenAnfang
Do

'### INPUT Anfang
input "Fragmich: ", Antworten


'### Sortierung nach den Wörtern und deren Ausgabe
select case Antworten
   
   
case "hallo"
   print "Du hast also hallo geschrieben"
case "Mist"
   print uANSI2ASCII("Wieso soll dein Passwort Mist sein?")
   
case "Mist, Müll"
   Print uANSI2ASCII("Das ist Mist und Müll")
   
      
   
   '### Aufruf uzm Programende
   Case "Ende", "ende"
      Print "Programm wird in wenigen Sekunden geschlossen..."
      Sleep 2000
      End

end Select


'### Schleifenstart
Loop


Wie Ihr bestimmt erkennen werdet, ist die dritte case Abfrage (ich nenne es einfach mal so, weil ich nicht wirklich weiß, wie es heißt) Schrott und für zu keiner Antwort.

Wie kann ich es machen, dass die Eingabe von z.B. "Masern Mist Müll" zu der Antwort zu Mist AND Müll ausgegeben wird ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 27.11.2014, 12:17    Titel: Antworten mit Zitat

Code:
Case "mist", "müll"


Meinst du das?

EDIT: aso .. ne .. du meinst:
Code:

'...
Case else
    if (Antworten  = "mist") AND (Antworten  = "müll") Then
        '...
    End If


aber, dazu sei gesagt, das des so nicht geht ...

EDIT-2: .. oder?!? .. hmmm ... also .. iwi kapier ich nicht, was du machen willst.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 27.11.2014, 16:50    Titel: Antworten mit Zitat

Also, wenn du sowohl bei der Antwort "Mist" als auch bei der Antwort "Müll" den entsprechenden Text ausgeben willst, klappt das mit
Code:
CASE "Mist", Müll"

Allerdings wird dann "Mist" schon einen Schritt früher abgefangen und kommt gar nicht mehr bis zu dieser Zeile.
Willst du dagegen eine Meldung, wenn in der Antwort sowohl "Mist" als auch Müll vorkommt, dann bräuchtest du etwas in die Richtung von TPMs zweiten Vorschlag - allerdings mit INSTR, weil du ja nur einen Teilstring suchst.
Code:
 if instr(Antworten, "Mist") > 0 AND instr(Antworten, "Müll") > 0 Then

_________________
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
RWK



Anmeldungsdatum: 04.07.2011
Beiträge: 44

BeitragVerfasst am: 27.11.2014, 16:58    Titel: Antworten mit Zitat

Ich denke er meint sowas

Code:
if instr(Antworten,"Mist") andalso instr(Antworten,"Müll") then
      Print "Das ist Mist und Müll"



Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 01.12.2014, 07:06    Titel: Antworten mit Zitat

@RWK: genau das suche ich !

danke für eure hilfe !

hab das jetzt wie folgt hier stehen, erhalte aber eine Fehlermeldung:
Code:
#Include "windows.bi"


'### Deklaration der Wörter
Dim Antworten as String


'### Definition der einzelnen Wörter
Antworten = "hallo"


'### SchleifenAnfang
Do

'### INPUT Anfang
input "Fragmich: ", Antworten



'### Sortierung nach den Wörtern und deren Ausgabe
   
   
If InStr (Antworten, "hallo")
   print "Du hast also hallo geschrieben"
If InStr (Antworten, "Mist")
   Print "Wieso soll dein Passwort Mist sein?"
   
If InStr (Antworten,"Mist") andalso instr(Antworten,"Müll")Then
      Print "Das ist Mist und Müll" 


'### Schleifenstart
Loop


Fehlermeldung:
Code:
test1.bas(25) error 31: Expected 'THEN' in 'If InStr (Antworten, "Mist")'
test1.bas(33) error 32: Expected 'END IF', found 'Loop' in 'Loop'
test1.bas(33) error 32: Expected 'END IF' in 'Loop'

Build error(s)


Hat das vielleicht etwas damit zu tin, das ich das in FreeBasic und nicht mit QuickBasic schreibe ? Wo liegt der Unterschied ?
Wär es in QuickBasic einfacher ?

Villeicht so ?
Code:
'### Deklaration der Wörter
Dim as String eingabe, ausgabe

'### INPUT Anfang
input "Fragmich: ";eingabe


'### Sortierung nach den Wörtern und deren Ausgabe
If InStr (eingabe, "hallo")Then
   ausgabe = "Du hast also hallo geschrieben"
If InStr (eingabe, "Mist") then
   ausgabe = "Wieso soll dein Passwort Mist sein?"   
If InStr (eingabe,"Mist") andalso instr(eingabe,"Müll")Then
   ausgabe = "Das ist Mist und Müll" 
Else
   ausgabe = "Keine Antwort vorhanden !"
EndIf

Print ausgabe
Sleep


Dann kommt aber:

Code:
Build error(s)
C:\Users\3rdm\Desktop\FreeBASIC\FbEdit\..\fbc -s console "test1.bas"
test1.bas(22) error 32: Expected 'END IF' in 'Sleep'

Build error(s)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 01.12.2014, 19:24    Titel: Antworten mit Zitat

Ganz einfach: deine Syntax ist falsch. Es gibt entweder

Code:
IF .. THEN ..
(in einer Zeile)
oder
Code:
IF .. THEN
 ...
(ELSEIF .. THEN
...)
(ELSE
...)
END IF
(mehrere Zeilen, die geklammterten Blöcke sind optional)
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kay2016



Anmeldungsdatum: 22.11.2014
Beiträge: 17

BeitragVerfasst am: 01.12.2014, 19:41    Titel: Antworten mit Zitat

Okay, das scheint soweit zu klappen
Code:
'### Deklaration der Wörter
Dim as String eingabe, ausgabe

'### INPUT Anfang
Input "Fragmich: ";eingabe


'### Sortierung nach den Wörtern und deren Ausgabe
If InStr (eingabe, "hallo")Then
   Print "Du hast also hallo geschrieben"
ElseIf InStr (eingabe, "Mist") then
   Print "Wieso soll dein Passwort Mist sein?"   
ElseIf InStr (eingabe,"Mist") Andalso instr(eingabe,"Müll") Then
   Print "Das ist Mist und Müll"
Else Print "test"

Endif
Sleep


Aber die Abfrage zu Mist und Müll klappt noch nicht.
habs zusammengeschrieben MistMüll - auseinander Mist Müll aber nix.
es kommt die Ausgabe zu "Mist".
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 01.12.2014, 21:55    Titel: Antworten mit Zitat

kay2016 hat Folgendes geschrieben:
Aber die Abfrage zu Mist und Müll klappt noch nicht. [..] es kommt die Ausgabe zu "Mist".
Ja selbstverständlich - nachdem die Menge der Fälle für die verschiedenen Zweige nicht disjunkt ist ist die Reihenfolge relevant!
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
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 FreeBASIC. 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