PMG/Kurs 11/klassische Verfahren I
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Pascal</language>
Alle bis etwa 1950 entwickelten und benutzten Verfahren gehören zu den klassischen Verfahren. <br>
Dabei werden Substitutionsverfahren (jedes Zeichen des Klartextes wird durch ein anderes ersetzt) und Transpositionsverfahren (die Zeichen bleiben gleich, ändern aber durch Tauschen ihre Position) unterschieden.<br>
'''Aufgabe 1: '''Entscheide für jedes Beispiel, ob es sich um ein Substitutions- oder Transpositionsverfahren handelt.<br>
== Beispiel 1: Rückwärtsschrift ==
'''Aufgabe 2: '''Schreibe eine Funktion, die einen eingegebenen Text rückwärts ausgibt.
<code id="4f0f4b55f29fd">
function rueck(klar:string):string;
var wort:string;
i:integer;
begin
wort:='';
for i:=length(klar) downto 1 do
wort:=wort+klar[i];
result:=wort;
end
</code>
<br> Jetzt kannst du den Quelltext erst mal für ein paar Beispiele testen. <br>
<run id="4f0f4c30aaf4e">writeln(rueck('testen'));</run>
Zur Sicherheit drücke jetzt den check-Button. <br>
<check> result:=rueck_test('rückwärts testen') = rueck('rückwärts testen') </check>
== Beispiel 2: Vokale ersetzen ==
Ihr kennt sicher aus eurer Kinderzeit das Lied "Drei Chinesen mit dem Kontrabass". Entsprechend diesem musikalischen Spiel ersetzen wir im nächsten Beispiel die Vokale eines Textes durch den Buchstaben, der für v eingegeben wird. <br>
'''Aufgabe 3: '''Vervollständige für dieses Beispiel den Quelltext.
<code id="4f0f4b55f2a66">
function vokale(klar,v:string):string;
var wort:string;
i:integer;
begin
wort:='';
for i:=1 to length(klar) do
case klar[i] of
'a','A','e','E','i','I','o','O','u','U': wort:=wort+v;
else
wort:=wort+klar[i];
end;
result:=wort;
end;
</code>
<check> result:=vokale_test('drei chinesen','i') = vokale('drei chinesen','i') </check>
<br> Jetzt kannst du den Quelltext wieder an ein paar Beispielen testen. <br>
<run id="4f0f4c30aafd8">writeln(vokale('drei Chinesen','i'));</run>
== Beispiel 3: Zickzackschrift ==
Eine etwas kompliziertere Variante der Verschlüsselung ist die Zickzackschrift. <br>
Die Buchstaben werden nicht durch andere Zeichen oder Symbole ersetzt, sondern einfach neu gemischt. Dieses Prinzip nennt man auch "Anagramm".
Zerlege den Text in zwei gleich lange Zeilen und lies dann im Zickzack: <br>
''Beispiel:''<br>
n t e i t n i b i e w r e s c t a w r e u z t n e d e e m r ä m n i h b r e d n
wird zu <br>
n t e i t n i b i e w r e s c t a w r e
u z t n e d e e m r ä m n i h b r e d n
im Zickzack gelesen: nutzetintendiebeimerwärmensichtbarwerden <br>
'''Aufgabe 4: '''Vervollständige nun den Quelltext.
<code id="4f0f4c30aae2c"">
function zickzack_test(klar:string;):string;
var l,i,n:integer; wort:string;
begin
wort:='';
l:=length(klar);
if l mod 2 = 0 then n:=l div 2
else n:=l div 2 +1;
for i:=1 to n do wort:=wort+klar[i]+klar[n+i];
result:=wort;
end;
</code>
<check> result:=zickzack_test('neuer test') = zickzack('neuer test') </check>
<br> Und nun wieder ein Test. <br>
<run id="4f0f4c30ab04a">writeln(zickzack('Testergebnis'));</run>
== Der Cäsar-Algorithmus ==
# Teste das Programm mit verschiedenen Eingaben.
# Erkläre mit eigenen Worten, was das Programm macht.
<code id="4f0f4c30aaeaf">
var k:String; v:Integer;
function caesar_test(klar:string; v:integer):string;
var a,i,ascii:integer; wort:String;
begin
a:=length(klar);
wort:='';
for i:=1 to a do
begin
ascii:=(klar[i]); //ord noch nicht bekannt, einfach weglassen, dann wandelt er automatisch um
if (ascii<91) and (ascii>64)
then begin ascii:=ascii+v;
if ascii>90 then ascii:=ascii-26;
wort:=wort+chr(ascii);
end
else wort:=wort+' ';
end;
result:=wort;
end;
</code>
<run id="4f0f4c30ab0cb">
k:= inputDialog('Klartext');
v:= StrToInt(inputDialog('Verschiebezahl'));
writeln (caesar_test(k,v));
</run>
== Implementation ==
<check>result:= caesar('HALLO',2) = Caesar_test('HALLO',2);</check>
<run id="4f0f4c30ab15d">writeln(caesar('HALLO',2));</run>