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:

Tutorial Stringmanipulationen Seite 5

 
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
Sven49



Anmeldungsdatum: 23.04.2015
Beiträge: 8

BeitragVerfasst am: 23.04.2015, 20:59    Titel: Tutorial Stringmanipulationen Seite 5 Antworten mit Zitat

Hallo, lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 23.04.2015, 21:02    Titel: Antworten mit Zitat

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 happy - 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
Benutzer-Profile anzeigen Private Nachricht senden
Sven49



Anmeldungsdatum: 23.04.2015
Beiträge: 8

BeitragVerfasst am: 23.04.2015, 21:14    Titel: Antworten mit Zitat

Ja, jetzt funktioniert es. Vielen Dank! lächeln
Hmm, vielleicht sollte ich auch nicht so faul sein und selber energischer suchen... peinlich

Trotzdem, nochmal Danke! lächeln
Sven
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 23.04.2015, 22:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 23.04.2015, 23:42    Titel: Antworten mit Zitat

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 cool
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
Benutzer-Profile anzeigen Private Nachricht senden
Sven49



Anmeldungsdatum: 23.04.2015
Beiträge: 8

BeitragVerfasst am: 24.04.2015, 09:30    Titel: Antworten mit Zitat

Hallo, lächeln

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. lächeln 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. lächeln

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. lächeln


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. lächeln

Gruß!
Sven
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 24.04.2015, 12:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 24.04.2015, 14:34    Titel: Antworten mit Zitat

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. lächeln 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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1278
Wohnort: Ruhrpott

BeitragVerfasst am: 25.04.2015, 02:10    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 25.04.2015, 13:48    Titel: Antworten mit Zitat

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
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
Seite 1 von 1

 
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