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:

"nutzloser Schiffre"
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
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 08.08.2007, 22:16    Titel: "nutzloser Schiffre" Antworten mit Zitat

Leicht zu knacken und für mich nutzlos... aber ein kleiner programmier erfolg:
Code:
declare sub decoder
declare sub encoder
dim shared as integer a,laenge, laenge2, auswahl
dim shared as string unverschluesselt, unverschluesselt2, verschluesselt, verschluesselt2, z , y, unverschluesselt3,  unverschluesselt4
Input "Bitte einen Text eingeben:   ", unverschluesselt
Print "der 2te text muss genauso lang sein wie der erste!!"
Input "Bitte einen zweiten Text eingeben:   ", unverschluesselt2

decoder
encoder

sub decoder
    laenge2 = len (unverschluesselt) + 1
    laenge = len (unverschluesselt2) + 1
    do
        laenge2 -= 1
        z = mid (unverschluesselt, laenge2, 1)
        verschluesselt += z
       
        laenge -= 1
        y = mid (unverschluesselt2,  laenge, 1)
        verschluesselt += y
    loop until laenge2 = 0
    print verschluesselt
end sub

sub encoder
    laenge2 = len (verschluesselt) * 2
    do 
        laenge2 -= 2
        z = mid (verschluesselt, laenge2 + 1, 1)
        unverschluesselt3 += z
       
    loop until laenge2 = 0
    Print unverschluesselt3
end sub

sleep


prinzip:
bsp: Text1 = Mark
Text2 = 1234
ausgabe = k4r3a2m1
der Decoder filtert den text1 dann wieder heraus, ergebnis:
Mark

hoffe ihr könnt mir dazu feedback geben (vorallem vom Programmierstil her)
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 08.08.2007, 22:23    Titel: Antworten mit Zitat

Äh...kein DIM SHARED nehmen, sondern Parameter übergeben, und auch zurückgeben, das macht das ganze variabler und einsatzfähiger.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 08.08.2007, 22:27    Titel: Antworten mit Zitat

Das mit dem Übergeben von varis hab ich nich so ganz gerallt und mein Opa sagt immer: "man kann ruhig dumm sein, man muss sich nur zu helfen wissen"

genauso wie ich daran gescheitert bin in eine meiner anwendungen externe subs einzubauen...
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 08.08.2007, 22:38    Titel: Antworten mit Zitat

Code:
declare sub decoder(unverschluesselt1 as string, unverschluesselt2 as string)
[...]
'Funktionsaufruf
decoder(unverschluesselt, unverschluesselt2)
[...]
'Definition der Funktion
sub decoder(unverschluesselt1 as string, unverschluesselt2 as string)

Sollte eigentlich funktionieren. Für encoder dann genauso.

Du könntest auch statt Subs Funktionen definieren, die den verschlüsselten/entschlüsselten Text als Funktionswert zurückgeben (wäre auch die Voraussetzung dafür, dass du den verschlüsselten Text ohne DIM SHARED an encoder übergeben kannst.

Statt den DO...LOOP Schleifen würde ich eher FOR...NEXT (STEP -1 bzw. -2) nehmen, aber so geht es natürlich auch.
_________________
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
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 08.08.2007, 22:42    Titel: Antworten mit Zitat

was spricht denn gegen Do...Loop?
Ich mag For..next ehrlich gesagt nicht sehr
ich hab mir das arbeiten mit zählern (in diesem fall laenge und laenge2)
angewöhnt
werd mir morgen mal angucken was ich noch verbessern könnte... vorallem stört es mich das text1 und text2 gleichlang sein müssen, da sonst der rest von text2 nur hinten dran gehängt wird... naja
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

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

hehe... im info-unterricht haben wir (nat. mich ausgenommen happy) zuerst while-schleifen, dann for kennengelernt. gibt immer noch einige, die lieber while nehmen, warum versteh ich auch nicht. Bei while kannst du mal ganz schnell das inkrementieren der zählvariable (i+=1) vergessen, oder ungültige start- bzw. endwerte einsetzen. FOR ist dagegen nicht so "anfällig" gegenüber fehlern.
_________________
» 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
nemored



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

BeitragVerfasst am: 08.08.2007, 23:21    Titel: Antworten mit Zitat

Das mit den ungültigen Start- und Endwerten ist übrigens eine praktische Sache. Ein
Code:
FOR I=5 TO 4 [...] NEXT

wird problemlos abgefangen. Die Schleife wird nicht durchlaufen, und es ist keine Sicherheitsabfrage nötig.
DO [...] LOOP in Zusammenhang mit einer Zählvariable nutze ich eigentlich nur, wenn die Variable nicht gleichmäßig weiterzählt.
_________________
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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 09.08.2007, 03:09    Titel: Antworten mit Zitat

While/Wend bzw Do/Loop als zaehl/verarbeitungs schleife sind meistens nur dann sinnvoll wenn der Endwert Variabel und abhaengig von der verarbeitung ist...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 09.08.2007, 13:50    Titel: Antworten mit Zitat

Eternal Pain : ist er ja bei mir, schliesslich kommt je nach text was anderes bei raus, außerdem muss ich die eingabe zerhacken, etwas einfügen und umgedreht wieder zusammensetzen...
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 09.08.2007, 17:20    Titel: Antworten mit Zitat

Aber deine Zählvariable läuft schön gleichmäßig im Einer oder Zweierschritt runter bis 0. Innerhalb der Schleife ist da nichts variabel.
_________________
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
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 09.08.2007, 18:05    Titel: Antworten mit Zitat

Stimmt, aber ich bin den umgang mit do...loop gewöhnt und geübt.. mit for next komm ich irgentwie nicht zurecht happy
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 09.08.2007, 18:20    Titel: Antworten mit Zitat

Ist ja nicht Pflicht, trotzdem mal der Code zum Nachvollziehen:
Code:
sub decoder
    laenge2 = len (unverschluesselt) + 1
    laenge = len (unverschluesselt2) + 1
    for i=laenge2 to 0 step - 1
        z = mid (unverschluesselt, i, 1)
        verschluesselt += z
       
        laenge -= 1
        y = mid (unverschluesselt2,  laenge, 1)
        verschluesselt += y
    next
    print verschluesselt
end sub

Ist genau dasselbe wie bei dir, nur heißt die Zählvariable jetzt i (einfach nur, weil laenge2 schon vergeben ist), und in der vierten Zeile wird Startwert, Endwert und Schrittgröße gleichzeitig festgelegt.

Unter Umständen geht unterer Code auch, musst du testen:
Code:
sub decoder
    laenge = len (unverschluesselt2) + 1
    for laenge2 = len(unverschluesselt)+1 to 0 step - 1
        z = mid (unverschluesselt, laenge2, 1)
        verschluesselt += z
       
        laenge -= 1
        y = mid (unverschluesselt2,  laenge, 1)
        verschluesselt += y
    next
    print verschluesselt
end sub

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



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 09.08.2007, 18:35    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Code:
sub decoder
    laenge = len (unverschluesselt2) + 1
    for laenge2 = len(unverschluesselt)-1 to 0 step - 1
        verschluesselt += Chr (unverschluesselt[laenge2-1])
     
        laenge -= 1
        verschluesselt += Chr (unverschluesselt[laenge2-1])
    next
    print verschluesselt
end sub
..wenn du schon am Optimieren bist, dann solltest du auch auf den CPU-intensiven Mid()-Befehl verzichten, wenn es geht
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 09.08.2007, 19:36    Titel: Antworten mit Zitat

Ich kann es ja einfach nicht sein lassen zwinkern

Meine Variante:
Code:
Private Function Encoder(Text as String, Passwort as String) as String
    dim as string EncCode,TmpCode
    Dim as integer Position,Char,Char2
    For Position= Len(Text) to 1 step -1
        Char = ASC(Left(Passwort,  Position+Len(Text) mod Len(Passwort)+1))
        Char2 = ASC(MID(Text,Position,1))
        TmpCode += Chr(Char2-Char)
    next
    Encoder = TmpCode
End function



Private Function Decode(Text as String, Passwort as String) as String
    dim as string DecCode,TmpCode
    Dim as integer Position,Char,Char2
    For Position= Len(Text) to 1 step -1
        Char = ASC(Left(Passwort,  Position+Len(Text) mod Len(Passwort)+1))
        Char2 = ASC(MID(Text,Position,1))
        TmpCode += Chr(Char2+Char)
    next
    Decode = TmpCode
End function


dim as string Str1
Str1=Encoder ("Das ist der Text","passwort")
Print Decode (Str1,"passwort")
sleep


//Edit:
Der Code ist geupdated zwinkern
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 09.08.2007, 20:50    Titel: Antworten mit Zitat

..ich auch nicht lachen
Char2 = Text[Position-1]
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 09.08.2007, 21:27    Titel: Antworten mit Zitat

*dumm auf den Code guck*
Hä!?!
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 09.08.2007, 22:05    Titel: Antworten mit Zitat

Also, ich würd nicht lange auf den Code schauen, probiers aus, es kann nix kaputt gehen..
Du kannst auf jedes einzelne Zeichen im String zugreifen, wenn du die Schreibweise z.B. unverschlüsselt2[index] verwendest..
Wichtig ist dabei nur, daß der Ascii-Code zurückgegeben wird und nicht das Zeichen.
Außerdem beginnt der index bei 0 und geht bis Len(unverschlüsselt2)-1
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 09.08.2007, 23:57    Titel: Antworten mit Zitat

Hat sich da FreeBasic was von Perl abgeguckt?

ytwinky, du hast da mal so eine schöne schnelle Array-Zuweisung mit Hilfe einer Liste verwendet (die mich auch an Perl erinnert hat). Gibt es zu den ganzen Array-Möglichkeiten bzw. überhaupt zu den Datentypen eine gute deutschsprachige Übersicht? FreeBASIC gibt da offenbar mehr her, als ich von BASIC gewohnt bin.
_________________
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
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 10.08.2007, 00:26    Titel: Antworten mit Zitat

Du meinst die direkte Array-Initialisierung, die ich so gerne verwende, statt der doofen Data-Anweisungen oder mittels Einzelzuweisungen?
Das habe ich aus der Befehls-Referenz, woher auch sonst lachen
(Kann auch sein, daß ich mal ins englische Wiki oder in die englische Hilfe geschielt hab)happy
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 10.08.2007, 00:42    Titel: Antworten mit Zitat

In der (deutschsprachigen) Befehlsreferenz tue ich mir etwas schwer, weil ich da nur eine Referenz zu den Befehlen finde ... (vielleicht sollte ich erwähnen, dass ich externe Links in einer .chm nicht öffnen kann)
Das englischsprachige Manual liefert da sicher mehr Informationen, aber ich finde mich darin nicht wirklich zurecht, was nicht zuletzt an der Sprache liegen wird.
_________________
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
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