Szyfrowanie - Turbo Pascal

(system) #1

Mam taką prośbę: w komentarzach są pytania - czy ktoś mógłby mi wyjaśnić co zrobić i czy są jakieś inne błędy?

(Jest to program, który szyfruje znaki, przesuwając je o ileś (delta) znaków, np. w wzorcu ABCD delta 1 znak A to będzie B itp.)

program Konwerter;

uses Crt;

const ilosc_znakow = 26;

const wzorzec: STRING[ilosc_znakow]='jqzdeuhoysbvipflmrtwnxgack';

var delta:LongInt;

var znak:Char;

VAR pozycja:Integer;

VAR nowa_pozycja:Integer;


Function Koduj;

begin //blad: Assertion Error in the line #194 of module DATA

pozycja:=Pos(znak,wzorzec);

if pozycja<>0 then begin

nowa_pozycja:=pozycja+delta;

If nowa_pozycja<0 then Inc(nowa_pozycja,ilosc_znakow);

if nowa_pozycja>ilosc_znakow then Dec(nowa_pozycja,ilosc_znakow);

koduj:=wzorzec[nowa_pozycja];

end;

else

koduj:=znak

end;


procedure Delta;

begin

writeLn('Delta:');

readln(delta);

delta:=delta+3;

delta:=delta*2;

end;


begin

// Co tu wstawic?

end.

Jeśli to ułatwi sprawę mogę dać wzór algorytmu w języku umownym

(system) #2
Function Koduj:Char;

begin

  writeLn(Koduj);// Co tu wstawic?

end.

Tylko że ta funkcja Koduj na pewno nie robi tego co napisałeś w opisie.

(system) #3

To jest jeszcze jakiś błąd? ;]

(rozwalkompa) #4

Zobacz na mój program do kodowania.

(Szczepanskimarek) #5

Dla ułatwienia zadania możesz rzutować zmienną typu char na zmienna typu int aby dostać kod ascii litery. Mała litera “a” = 97 b= “98” … “z” = 122.

Wiec nowy znak to (w psełdokodzie):

int zmienna

char znak

zmienna = int(znak)+delta

if zmienna >122 then

zmienna = 97+zmienna -122

znak = char(zmienna)

Przy okazji jest to algorytm zwany szyfrem Cezara.