| 
				
					|  | 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 |  
		| kay2016 
 
 
 Anmeldungsdatum: 22.11.2014
 Beiträge: 17
 
 
 | 
			
				|  Verfasst am: 22.11.2014, 11:39    Titel: Wörter Erkennung |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| Jojo alter Rang
 
  
 Anmeldungsdatum: 12.02.2005
 Beiträge: 9736
 Wohnort: Neben der Festplatte
 
 | 
			
				|  Verfasst am: 22.11.2014, 11:52    Titel: |   |  
				| 
 |  
				| 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!  _________________
 » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 
  |  |  
		| Nach oben |  |  
		|  |  
		| kay2016 
 
 
 Anmeldungsdatum: 22.11.2014
 Beiträge: 17
 
 
 | 
			
				|  Verfasst am: 22.11.2014, 12:00    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| St_W 
 
  
 Anmeldungsdatum: 22.07.2007
 Beiträge: 958
 Wohnort: Austria
 
 | 
			
				|  Verfasst am: 22.11.2014, 15:52    Titel: |   |  
				| 
 |  
				| ... heißt dass du hast nur für dieses Projekt noch nichts programmiert oder überhaupt noch nichts? 	  | kay2016 hat Folgendes geschrieben: |  	  | Ich habe noch nichts programmiert [...] | 
 
 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 |  |  
		|  |  
		| Sebastian Administrator
 
  
 Anmeldungsdatum: 10.09.2004
 Beiträge: 5969
 Wohnort: Deutschland
 
 | 
			
				|  Verfasst am: 22.11.2014, 16:43    Titel: Worterkennung, Gleichheit und Ähnlichkeit |   |  
				| 
 |  
				| 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
 _________________
 
   Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
 |  |  
		| Nach oben |  |  
		|  |  
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 22.11.2014, 23:01    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| kay2016 
 
 
 Anmeldungsdatum: 22.11.2014
 Beiträge: 17
 
 
 | 
			
				|  Verfasst am: 23.11.2014, 10:39    Titel: |   |  
				| 
 |  
				| 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 ?
  ) 
 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 |  |  
		|  |  
		| nemored 
 
  
 Anmeldungsdatum: 22.02.2007
 Beiträge: 4710
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 23.11.2014, 14:43    Titel: |   |  
				| 
 |  
				| 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
 
 siehe http://www.freebasic-portal.de/befehlsreferenz/dim-175.html
 (ich würde allerdings einen besseren Variablennamen verwenden
  ) 
 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.
  ) 
 
  	  | 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  ) | 
 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 |  |  
		|  |  
		| Domso 
 
 
 Anmeldungsdatum: 02.02.2011
 Beiträge: 109
 
 
 | 
			
				|  Verfasst am: 23.11.2014, 16:39    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| RockTheSchock 
 
 
 Anmeldungsdatum: 04.04.2007
 Beiträge: 138
 
 
 | 
			
				|  Verfasst am: 23.11.2014, 18:57    Titel: Vorgaben machen |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 23.11.2014, 20:21    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| kay2016 
 
 
 Anmeldungsdatum: 22.11.2014
 Beiträge: 17
 
 
 | 
			
				|  Verfasst am: 23.11.2014, 21:31    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| kay2016 
 
 
 Anmeldungsdatum: 22.11.2014
 Beiträge: 17
 
 
 | 
			
				|  Verfasst am: 25.11.2014, 20:58    Titel: |   |  
				| 
 |  
				|  	  | 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 |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 27.11.2014, 12:17    Titel: |   |  
				| 
 |  
				|  	  | 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 |  |  
		|  |  
		| nemored 
 
  
 Anmeldungsdatum: 22.02.2007
 Beiträge: 4710
 Wohnort: ~/
 
 | 
			
				|  Verfasst am: 27.11.2014, 16:50    Titel: |   |  
				| 
 |  
				| Also, wenn du sowohl bei der Antwort "Mist" als auch bei der Antwort "Müll" den entsprechenden Text ausgeben willst, klappt das mit 
 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 |  |  
		|  |  
		| RWK 
 
 
 Anmeldungsdatum: 04.07.2011
 Beiträge: 44
 
 
 | 
			
				|  Verfasst am: 27.11.2014, 16:58    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| kay2016 
 
 
 Anmeldungsdatum: 22.11.2014
 Beiträge: 17
 
 
 | 
			
				|  Verfasst am: 01.12.2014, 07:06    Titel: |   |  
				| 
 |  
				| @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 |  |  
		|  |  
		| St_W 
 
  
 Anmeldungsdatum: 22.07.2007
 Beiträge: 958
 Wohnort: Austria
 
 | 
			
				|  Verfasst am: 01.12.2014, 19:24    Titel: |   |  
				| 
 |  
				| Ganz einfach: deine Syntax ist falsch. Es gibt entweder 
 (in einer Zeile)
 oder
 
 (mehrere Zeilen, die geklammterten Blöcke sind optional) 	  | Code: |  	  | IF .. THEN ...
 (ELSEIF .. THEN
 ...)
 (ELSE
 ...)
 END IF
 | 
 _________________
 Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
 http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
 |  |  
		| Nach oben |  |  
		|  |  
		| kay2016 
 
 
 Anmeldungsdatum: 22.11.2014
 Beiträge: 17
 
 
 | 
			
				|  Verfasst am: 01.12.2014, 19:41    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| St_W 
 
  
 Anmeldungsdatum: 22.07.2007
 Beiträge: 958
 Wohnort: Austria
 
 | 
			
				|  Verfasst am: 01.12.2014, 21:55    Titel: |   |  
				| 
 |  
				| Ja selbstverständlich - nachdem die Menge der Fälle für die verschiedenen Zweige nicht disjunkt ist ist die Reihenfolge relevant! 	  | kay2016 hat Folgendes geschrieben: |  	  | Aber die Abfrage zu Mist und Müll klappt noch nicht. [..] es kommt die Ausgabe zu "Mist". | 
 _________________
 Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
 http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
 |  |  
		| 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.
 
 |  |