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 [ clanek/2007030604 ]
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í funkcereadkeyznak 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á podprogramnactenisifrovat– Zavolá podprogramsifrovatulozit– 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.
