 |
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 |
Sven49
Anmeldungsdatum: 23.04.2015 Beiträge: 8
|
Verfasst am: 23.04.2015, 20:59 Titel: Tutorial Stringmanipulationen Seite 5 |
|
|
Hallo,
ich nochmal...
Auf der im Titel genannten Seite findet man ein kleines Verschlüssellungsprogramm:
Zitat: |
DIM i AS INTEGER
DIM AS STRING s1, s2
INPUT "Zu verschlüsselnder Text:", s1
IF LEN(s1)>0 THEN
FOR i=1 TO LEN(s1)
s2=s2+CHR(ASC(MID(s1, i, 1) XOR 23))
NEXT i
END IF
|
Kopiert und eingesetzt erhalte ich folgende Fehlermeldung:
C:\FreeBASIC\test1.bas(6) error 20: Type mismatch, found ')' in 's2=s2+CHR(ASC(MID(s1, i, 1) XOR 23))'
Weiß jemand was da falsch ist? Da steht ja etwas von type mismatch, found ')'... Aber die Klammern gehen auf, da scheint keine ')' zuviel.
Gruß!
Sven |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 23.04.2015, 21:02 Titel: |
|
|
MID gibt einen String zurück, XOR erwartet Zahlenwerte. Ich denke, es hätte heißen müssen
Code: | s2=s2+CHR(ASC(MID(s1, i, 1)) XOR 23) |
edit: Die Code-Beschreibung untermauert meine Vermutung - ich habe das auf der Seite mal ausgebessert; jetzt stimmt es. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Sven49
Anmeldungsdatum: 23.04.2015 Beiträge: 8
|
Verfasst am: 23.04.2015, 21:14 Titel: |
|
|
Ja, jetzt funktioniert es. Vielen Dank!
Hmm, vielleicht sollte ich auch nicht so faul sein und selber energischer suchen...
Trotzdem, nochmal Danke!
Sven |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 23.04.2015, 22:04 Titel: |
|
|
Sven49 hat Folgendes geschrieben: | vielleicht sollte ich auch nicht so faul sein und selber energischer suchen... |
Ich denke bei einem Tutorial sollte man sich schon drauf verlassen können, dass das erklärte auch so funktioniert, wie beschrieben. Denn wenn manches bereits beim Einführungs-Tutorial nicht so funktioniert wie beschrieben kommt möglicherweise schnell Frust auf und der erste Eindruck wird auch eher ein schlechter sein.
Es ist gut und wichtig dass das jemand meldet, wenn es eben nicht so ist wie es sein sollte. Auch wenn du selber auf die Lösung kommst (was natürlich umso besser ist) sind wir dankbar, wenn wir Feedback zu den Tutorials erhalten.
Ich denke gerade das Einsteiger-Tutorial bedürfe generell einmal einer Überarbeitung ...
Veraltete Sprachelemente, wie z.B. GOSUB würde ich z.B. erst gar nicht erwähnen und die Textstruktur könnte auch etwas übersichtlicher sein. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 23.04.2015, 23:42 Titel: |
|
|
Eigentlich müsste man sowieso mal das ganze Material, das sich da angesammelt hat, neu sortieren und aktualisieren - auch die Sektion der Code-Beispiele ist, zumindest für mein Gefühl, überarbeitungswürdig. Ich wollte mich vor längerer Zeit mal ransetzen und das neu strukturieren, habe dann recht schnell aufgegeben, als ich über den x-ten Windows-Only-Code gestolpert bin, den ich nicht testen konnte ...
@Sven49: ein bisschen Eigenwerbung am Rande
Verlinke ich hier eigentlich nur deshalb, weil ich "Testleser" brauchen kann, die mir sagen können, ob das ganze für Anfänger verständlich geschrieben ist und wo es Verbesserungsbedarf gibt. Ist allerdings noch nicht übermäßig weit und auch noch nicht gründlich korrekturgelesen. Ich empfehle eher die PDF als die HTML-Seiten, weil bei den HTML-Seiten vielleicht softwarebedingt einzelne Abschnitte fehlen könnten (auch wenn ich glaube, das weitgehend behoben zu haben). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Sven49
Anmeldungsdatum: 23.04.2015 Beiträge: 8
|
Verfasst am: 24.04.2015, 09:30 Titel: |
|
|
Hallo,
Nemored, ich habe mir die PDF heruntergeladen und schaue sie mir gerne an.
Ein Feedback gebe ich Dir dann die Tage, je nachdem wie gut ich durchkomme. Ich denke, am besten als PN?
St_W, Du hast natürlich auch recht. Ich ärgere mich halt nur etwas über mich selbst, das es nur um eine falsch gesetzte Klammer geht. Das hätte ich mir beim Nachschauen der einzelnen Befehle selbst erarbeiten können. Naja, Chance vertan.
Zum Tutorial könnte ich jetzt schon noch etwas Sagen zur Anfängerfreundlichkeit, aber ich habe es nicht getan, da ich es für respektlos halte, freiwillige Arbeit von anderen Menschen gleich am ersten Tag zu kritisieren, wenn man selbst noch keine Ahnung hat und es auch nicht besser machen könnte.
Ich war und bin heilfroh, dass es dieser Tutorial überhaupt gibt, auch wenn es für mich persönlich (das mag anderen anders ergehen) hier und da Schwächen hat.
Zuguterletzt, aber doch noch mal etwas zu diesem Verschlüsselungsprogramm:
Die Zeile:
Code: | s2=s2+CHR(ASC(MID(s1, i, 1)) XOR 23) |
sorgt für die Verschlüsselung.
MID liest die Zeichen Schritt für Schritt aus (mit Hilfe der Schleife), ASC macht aus dem Zeichen die zugehörige ASCII-Ziffer, CHR macht aus der ASCII-Ziffer und XOR ein neues Zeichen.
Soweit so gut, aber wie klappt das? XOR in der Referenz wird beschrieben als "exclusiv oder". Also, entweder ASC(MID(s1, i, 1)) ODER 23.
So funktioniert es aber wohl nicht, denn sonst könnte keine neue ASCII-Ziffer und somit ein anderes Zeichen entstehen?
Vielen Dank für eure Hilfe.
Gruß!
Sven |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 24.04.2015, 12:42 Titel: |
|
|
Sven49 hat Folgendes geschrieben: | Zuguterletzt, aber doch noch mal etwas zu diesem Verschlüsselungsprogramm:
Die Zeile:
Code: | s2=s2+CHR(ASC(MID(s1, i, 1)) XOR 23) |
sorgt für die Verschlüsselung.
MID liest die Zeichen Schritt für Schritt aus (mit Hilfe der Schleife), ASC macht aus dem Zeichen die zugehörige ASCII-Ziffer, CHR macht aus der ASCII-Ziffer und XOR ein neues Zeichen.
Soweit so gut, aber wie klappt das? XOR in der Referenz wird beschrieben als "exclusiv oder". Also, entweder ASC(MID(s1, i, 1)) ODER 23.
So funktioniert es aber wohl nicht, denn sonst könnte keine neue ASCII-Ziffer und somit ein anderes Zeichen entstehen? |
Deine Beschreibung ist im Grunde richtig. XOR stellt du du sagst ein exklusives oder dar, und zwar auf Bit-Ebene. Also wenn du zahl1 XOR zahl2 berechnest wird jedes Bit entsprechend der Tabelle "berechnet".
Im Verschlüsselungs-Beispiel hast du eben zwei Zahlen, einerseits den Buchstaben als ASCII-Wert (also als Zahl) und andererseits den Schlüssel, ebenfalls als 8-Bit Wert.
Nun musst du über XOR wissen, dass diese Operation reversibel ist, also wenn du die XOR Operation zwei mal durchfühst erhältst du wieder den Ausgangswert:
(x XOR y) XOR y = x
Bei der Verschlüsselung wird die Operation nur einmal angewandt:
c = x XOR y
Zum entschlüsseln muss man dann die Operation mit dem gleichen Schlüssel erneut anwenden:
x = c XOR y
Zurück zum Codebeispiel: das Ergebnis der XOR Operation ist also wieder eine Zahl (ebenso 8-Bit, wie die zwei Operanden) die mit ASC() wieder in ein Zeichen umgewandelt wird.
Und noch ein optimierungstipp:
Anstatt MID und ASC kann man auch den []-Operator verwenden:
Code: | s2=s2+CHR(s2[i-1] XOR 23) |
Der Ausdruck s[i] gibt den ASCII-Wert des i-ten Zeichens im String s zurück, wobei bei 0 zu zählen begonnen wird (darum das i-1 oben; noch einfacher wäre es die Schleife entsprechend anzupassen). _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 24.04.2015, 14:34 Titel: |
|
|
Der Umgang von XOR mit Zahlenwerten wird im Referenzeintrag im Beispiel 2 recht schön dargestellt: 6 XOR 10 ist 12.
Denn: 6 ist binär 110, 10 ist binär 1010. XOR-verknüpft ergibt sich
Code: |
110
XOR 1010
--------
= 1100 |
wobei 1100 die binäre Darstellung der Dezimalzahl 12 ist.
Zitat: | Ein Feedback gebe ich Dir dann die Tage, je nachdem wie gut ich durchkomme. Ich denke, am besten als PN? |
PN ist in Ordnung, oder im zugehörigen Thread. Beim Thread könnten sich dann andere Leute ebenfalls äußern. _________________ 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: 1278 Wohnort: Ruhrpott
|
Verfasst am: 25.04.2015, 02:10 Titel: |
|
|
@St_W: Zitat: | Und noch ein optimierungstipp:
Anstatt MID und ASC kann man auch den []-Operator verwenden:
Code:
s2=s2+CHR(s2[i-1] XOR 23) | Ich fürchte, da ist dir ein Flüchtigkeitsfehler unterlaufen. Es muß heißen: Code: | s2=s2+CHR(s1[i-1] XOR 23) |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 25.04.2015, 13:48 Titel: |
|
|
grindstone hat Folgendes geschrieben: | @St_W: Zitat: | Und noch ein optimierungstipp:
Anstatt MID und ASC kann man auch den []-Operator verwenden:
Code:
s2=s2+CHR(s2[i-1] XOR 23) | Ich fürchte, da ist dir ein Flüchtigkeitsfehler unterlaufen. Es muß heißen: Code: | s2=s2+CHR(s1[i-1] XOR 23) |
Gruß
grindstone |
Aja, natürlich. Danke für den Hinweis. _________________ 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.
|
|