Dnes napíšeme funkci, která nám načte text, jenž uživatel zadal, a ten pak zašifruje. Následně jej uloží do souboru.
Dneska se tedy konečně dostáváme k jádru věci. Napíšeme si podprogram, který nám zašifruje text zadaný uživatelem a uloží ho do souboru text.txt.
Nadeklarujeme si proměnné, které budeme používat.
var vstupden:array [1..6000] of char;
vystupden:array [1..6000] of integer;
jmeno:text;
A,B,K:integer;
- vstupden – pole použité pro text, který uživatel zadá
- vystupden – pole, do nějž se ukládají ordinální hodnoty znaků z pole vstupden
- jmeno – ukazatel na soubor, do kterého se ukládá zašifrovaný text
- A,B – do těchto proměnných se ukládá kód A, resp. kód B
- K – tato proměnná slouží k volbě v menu z minulého dílu seriálu
Zde je kód:
procedure sifra;
procedure soubor;
begin
assign(jmeno,"text.txt");
append(jmeno);
end;
procedure kod;
begin
writeln("Zadejte sifrovaci kod A:");
readln(A);
writeln("Zadejte sifrovaci kod B:");
readln(B);
end;
procedure nacteni;
begin
clrscr;
I:=1;
vstupden[1]:=readkey;
write(vstupden[1]);
while ord(vstupden[I])<>13 do
begin
I:=I+1;
vstupden[I]:=readkey;
if ord(vstupden[I])<>13 then
write(vstupden[I]);
end;
writeln;
writeln;
end;
procedure sifrovat;
begin
for J:=1 to I-1 do
if J mod 2=0 then
vystupden[J]:=ord(vstupden[J])+A
else vystupden[J]:=ord(vstupden[J])+B;
end;
procedure ulozit;
begin;
soubor;
for J:=1 to I-1 do
write(jmeno,chr( vystupden[J]));
writeln;
close(jmeno);
end;
begin
clrscr;
kod;
nacteni;
sifrovat;
ulozit;
end;
Teď si výše vypsaný kód trochu vysvětlíme.
assign(jmeno,"text.txt")
– Přiřadí proměnné jmeno soubor s názvem text.txt.append(jmeno)
– Otevře soubor ukrytý v proměnné jmeno tak, že na jeho konec bude možno připisovat text.writeln("Zadejte sifrovaci kod A:")
– Vypíše výzvu pro zadání kódu A.readln(A)
– Do proměnné A načte uživatelský vstup.I:=1
– Do proměnné I uloží hodnotu 1.vstupden[1]:=readkey
– Tady je vidět další využití funkcereadkey
. Díky ní se na první pozici pole vstupden uloží znak, který čeká na vstupu.write(vstupden[1])
– Ale protože se po načtení za použití funkcereadkey
znak nevypíše na obrazovku, musíme to udělat ručně pomocí tohoto příkazu.while ord(vstupden[I])<>13 do
– Toto je cyklus, který se ukončí po stisku klávesy Enter, a to proto, že ordinální hodnota Enteru je 13.I:=I+1
– inkrementuje hodnotu proměnné I.if ord(vstupden[I])<>13 then
– Opět testuje, jestli nebyl stisknut Enter.write(vstupden[I])
– Pokud nebyl stisknut Enter, vypíše znak na obrazovku.for J:=1 to I-1 do
– V proměnné I je uložen počet znaků v poli vstupden, ale i včetně znaku Enter, proto je tento cyklus jen do I-1.if J mod 2=0 then
– Pomocí příkazumod
, který vrací zbytek po celočíselném dělení, se určí, jestli jde o sudé nebo liché číslo.vystupden[J]:=ord(vstupden[J])+ord(A)
– Pokud je J sudé, tak se k ordinální hodnotě znaku uloženého v poli vstupden přičte hodnota kódu A a následně se uloží na příslušné místo v poli vystupden.else vystupden[J]:=ord(vstupden[J])+B;
– Pokud je J liché, tak se přičte kód B a zase uloží do pole vystupden.write(jmeno,chr(vystupden[J]))
– Každou ordinální hodnotu v poli vystupden převede zpět na znak (chr(vystupden[J])
) a poté uloží do souboru text.txt.close(jmeno)
– Zavře soubor text.txt.clrscr
– Vymaže vše na obrazovce.kod
– Zavolá podprogramkod
.nacteni
– Zavolá podprogramnacteni
sifrovat
– Zavolá podprogramsifrovat
ulozit
– Zavolá podprogramulozit
Nyní ještě podprogram premazani
, který nám smaže obsah souboru text.txt.
procedure premazani;
begin
assign(jmeno,"text.txt");
rewrite(jmeno);
close(jmeno);
end;
rewrite
– Tato funkce smaže obsah souboru, respektive se jej pokusí vytvořit a pokud již existoval, smaže jeho obsah.
V příštím díle si napíšeme poslední podprogram – dešifrování textu. A v 5. článku složíme všechny podprogramy do jednoho celku a povím vám něco o našem příštím projektu.