Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
kay2016
Anmeldungsdatum: 22.11.2014 Beiträge: 17
|
Verfasst am: 01.12.2014, 23:48 Titel: |
|
|
und wie kann ich das trennen ? |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 02.12.2014, 04:08 Titel: |
|
|
St_W hat Folgendes geschrieben: | Ja selbstverständlich - nachdem die Menge der Fälle für die verschiedenen Zweige nicht disjunkt ist ist die Reihenfolge relevant! | Und nicht nur das. Zum Einen ist das mit Umlauten so eine Sache bei Konsolenprogrammen, zum Anderen liefert die Instr - Funktion nicht TRUE oder FALSE zurück, sondern die Position des ersten Auftretens des Teilstrings. Und wenn du diese Werte mit AND verknüpfst, kann es passieren, daß dabei 0 (=FALSE) herauskommt, obwohl beide Werte <> 0 (=TRUE) sind.
Code: | #Include "windows.bi"
'### Deklaration der Wörter
Dim As String eingabe, ausgabe
'### INPUT Anfang
Input "Fragmich: ";eingabe
OemToChar(eingabe,eingabe)
? InStr(eingabe,"Mist")
? InStr(eingabe,"Müll")
?
? (InStr(eingabe,"Mist") <> 0)
? (InStr(eingabe,"Müll") <> 0)
?
? (InStr(eingabe,"Mist") <> 0) And (InStr(eingabe,"Müll") <> 0)
? InStr(eingabe,"Mist") And InStr(eingabe,"Müll")
?
'### Sortierung nach den Wörtern und deren Ausgabe
If InStr (eingabe, "hallo")Then
Print "Du hast also hallo geschrieben"
ElseIf (InStr(eingabe,"Mist") <> 0) And (InStr(eingabe,"Müll") <> 0) Then
Print "Das ist Mist und Müll"
ElseIf InStr (eingabe, "Mist") Then
Print "Wieso soll dein Passwort Mist sein?"
Else Print "test"
EndIf
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: 02.12.2014, 08:02 Titel: |
|
|
was bedeuten die ? (vor den If Instr) |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 02.12.2014, 08:37 Titel: |
|
|
Du könntest es einfach ausprobieren und dabei feststellen, dass ? dasselbe wie PRINT tut.
Um solche Fragen zu beantworten ist auch prima die Befehlsreferenz geeignet. _________________ » 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: 06.12.2014, 14:14 Titel: |
|
|
Soweit sogut, das programm prüft nun an welchen Stellen die beiden Wörter vorkommen und gibt aus an welchen stellen diese vorkamen.
Die zweite und dritte Prüfung habe ich nicht verstanden.
Was machen diese und wie bekomme ich nun die Zahlen da weg ?
Vielen Dank schonmal bis hierher. |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 06.12.2014, 14:47 Titel: |
|
|
Welche zweite und dritte Prüfung meinst du? Diese hier?
Code: | ElseIf (InStr(eingabe,"Mist") <> 0) And (InStr(eingabe,"Müll") <> 0) Then |
AND arbeitet wie gesagt mit Bitvergleich. INSTR(eingabe, "Mist")<>0 gibt entweder -1 (true) zurück, wenn der Begriff gefunden wurde (also Fundstelle nicht 0) oder 0 (false), wenn nichts gefunden wurde. Nur die Werte 0 und -1 können mit AND sinnvoll zum logischen Vergleich herangezogen werden, da AND eben kein logischer, sondern ein Bit-Operator ist. Am besten liest du dir mal die entsprechenden Referenzartikel genau durch und probierst die Beispiele dazu aus; ich empfehle auch http://www.freebasic-portal.de/befehlsreferenz/bedingungsstrukturen-385.html
Zitat: | wie bekomme ich nun die Zahlen da weg ? |
Ich habe eine Weile überlegt, was du wohl meinst - die Zeilen mit dem "?" am Anfang sind (PRINT-)Ausgabezeilen; wenn du diese Ausgabe nicht willst, musst du die Zeilen löschen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
kay2016
Anmeldungsdatum: 22.11.2014 Beiträge: 17
|
Verfasst am: 06.12.2014, 21:02 Titel: |
|
|
Danke für die Erklärung und den hilfreichen Link, das werde ich mir mal genauer durchlesen.
Das mit den Zahlen weglassen hat geklappt, danke auch dafür
Leider hab ich beim OemToChar M³ll statt Müll stehen.
War das mein Fehler ?
Wie kann ich es fixen ?
Und ab wieviel MB wird FreeBasic lahm ?? |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 06.12.2014, 21:25 Titel: |
|
|
kay2016 hat Folgendes geschrieben: | Und ab wieviel MB wird FreeBasic lahm ?? |
Das hängt von deiner Art der Verarbeitung ab
Wenn deine IDE verschiedene Zeichenkodierungen unterstützt, kannst du den Quellcode in der Codierung der Eingabeaufforderung speichern. Besser ist wahrscheinlich, den ANSI-Code des Zeichens nachzuschauen und mit Escape-Sequenzen zu arbeiten.
Code: | print !"Alles M\129ll"
sleep |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 07.12.2014, 09:41 Titel: |
|
|
kay2016 hat Folgendes geschrieben: | Leider hab ich beim OemToChar M³ll statt Müll stehen. | Das Problem ist, daß FB die ASCII - Codierung verwendet, während die Ein- und Ausgabe der Konsole im ANSI - Code erfolgt. Wenn du also Konsoleneingaben mit Sonderzeichen in FB verarbeiten willst, mußt du sie zuvor mit OemToChar vom ANSI- ins ASCII - Format konvertieren. Umgekehrt müssen Ausgabetexte mit CharToOem ins ANSI - Format zurückverwandelt werden. Praktischerweise solltest du die Konvertierungen mit je einer Function erledigen:
Code: | #Include "windows.bi"
Declare Function ansi(text As String) As String
Declare Function ascii(text As String) As String
'### Deklaration der Wörter
Dim As String eingabe, ausgabe
'### INPUT Anfang
Input "Fragmich: ";eingabe
eingabe = ascii(eingabe)
'### Sortierung nach den Wörtern und deren Ausgabe
If InStr (eingabe, "hallo")Then
ausgabe = "Du hast also hallo geschrieben"
ElseIf (InStr(eingabe,"Mist") <> 0) And (InStr(eingabe,"Müll") <> 0) Then
ausgabe = "Das ist Mist und Müll"
ElseIf InStr (eingabe, "Mist") Then
ausgabe = "Wieso soll dein Passwort Mist sein?"
Else
ausgabe = "test"
EndIf
Print ansi(ausgabe)
Sleep
Function ansi(text As String) As String 'wandelt sonderzeichen vom ascii- ins ansi-format
Dim As String t
t = text
CharToOem(t,t)
Return t
End Function
Function ascii(text As String) As String 'wandelt sonderzeichen vom ansi- ins ascii-format
Dim As String t
t = text
OemToChar(t,t)
Return t
End Function | Oder du benutzt die von nemored erwähnten Escape-Sequenzen, was aber nur bei feststehenden Texten praktikabel ist.
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: 07.12.2014, 11:39 Titel: |
|
|
Wahnsinn. Es funktioniert so sehr gut und nach meinen Vorstellungen.
Vielen Dank an Euch, habt mir damit geholfen in einer Sprache zu "programmieren" (ich bin ja noch ein Anfänger), die ich am C64 schon sehr gut gefunden habe.
Vielleicht nicht ganz zeitgemäß, die Sprache (stimmt das ?) aber ich finde Sie einfach ehrwürdig und so als Hobby eine tolle Sache.
Wünsche Euch einen schönen Sonntag !! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 07.12.2014, 14:41 Titel: |
|
|
Zitat: | Das Problem ist, daß FB die ASCII - Codierung verwendet |
Auch FB verwendet ANSI (sonst könnte es ja mit Werten > 127 nichts anfangen), aber eine andere Codepage als die Konsole.
Seit dem C64 hat sich bei der Sprachfamilie BASIC eine ganze Menge getan; in FreeBASIC werden die strukturellen, prozeduralen und modularen Programmparadigmen umgesetzt, und auch objektorientierte Programmierung wird zu einem großen Teil unterstützt. Zusammen mit der Tatsache, dass es den Compiler nicht nur für Windows gibt, würde ich die Sprache durchaus noch als zeitgemäß betrachten.
Ungeachtet dessen gibt es natürlich immer Problemstellungen, die sich mit ganz bestimmten Sprachen besonders gut lösen lassen bzw. mit anderen Sprachen nur recht umständlich; dieses "Problem" haben aber alle Programmiersprachen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 08.12.2014, 09:54 Titel: |
|
|
nemored hat Folgendes geschrieben: | Auch FB verwendet ANSI | Du hast mal wieder Senkrecht. Gibt es eigentlich eine Möglichkeit, die Codepage von FB zu ändern? Ich finde die Umwandelei nämlich ausgesprochen lästig.
kay2016 hat Folgendes geschrieben: | Vielleicht nicht ganz zeitgemäß, die Sprache (stimmt das ?) | Ich finde FB sogar sehr zeitgemäß, da es ständig weiterentwickelt und den neuen Erfordernissen und Möglichkeiten (z.B. 64 bit) angepasst wird. Und daß man (als Neueinsteiger) dabei auf altbekanntem aufbauen kann: um so besser!
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.12.2014, 10:30 Titel: |
|
|
grindstone hat Folgendes geschrieben: | nemored hat Folgendes geschrieben: | Auch FB verwendet ANSI | Du hast mal wieder Senkrecht. Gibt es eigentlich eine Möglichkeit, die Codepage von FB zu ändern? Ich finde die Umwandelei nämlich ausgesprochen lästig. |
Unter Windows z.B. so. FB selbst kennt zunächst mal keine ANSI-Codepages, das ist Sache des Empfängers. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
|