бағалау баллы - 3
тапсыру уақыты 11 - апта
Символдарды ауыстыру арқылы шифрлеу (skytale шифрі)
(тапсырма атауы)
:
Төмендегі келтірілген программаға келесілерді орындаңыз:
1. алгоритмның блок – схемасын келтіріңіз;
2. осы программаны Делфи тіліне аударыңыз;
3. программаның нәтижесінде экранда құпиясөзді енгізу терезесі мен құпияланған сөздің терезесі болу қажет.
Орындау әдісі
ПРОГРАММА ЛИСТИНГІ:
Program skytale; Type str100 = string[100]; str80 = string[80]; Var inf, outf: str80; sky: str100; t: integer; ch: char; Procedure code(inf, outf: str80); Var infile, outfile: file Of char; t, t2: integer;Begin assign(infile, inf); reset(infile); assign(outfile, outf); rewrite(outfile); t:= 1;{ считывание текстового файла, как одномерной матрицы } while (Not eof(infile)) and (t<=100) Do Begin Read(infile, sky[t]); t:= t+1; End;{запись в матрицу размера 5х20} For t:= 1 To 5 Do For t2:= 0 To 19 Do Write(outfile, sky[t+(t2*5)]); WriteLn('файл закодирован'); close(infile); close(outfile);End; Procedure decode(inf, outf: str80); Var infile, outfile: file Of char; t, t2: integer;Begin assign(infile, inf); reset(infile); assign(outfile, outf); rewrite(outfile);{ считывание матрицы размером 5х20 } For t:= 1 To 5 Do For t2:= 0 To 19 Do Read(infile, sky[t+(t2*5)]);{ вывод в качестве строки } For t:= 1 To 100 Do Write(outfile, sky[t]); WriteLn('файл декодирован'); close(infile); close(outfile);End; Begin{ заполнение символов "#" } For t:= 1 To 100 Do sky[t]:= '#'; Write('введите имя входного файла: '); ReadLn(inf); Write('введите имя выходного файла: '); ReadLn(outf); Write('кодировать или декодировать (C or D): '); ReadLn(ch); If upcase(ch)='C' Then code(inf, outf) Else If upcase(ch)='D' Then decode(inf, outf);End.Зерханалық жұмыс
бағалау баллы - 3
тапсыру уақыты 12 - апта
Символдарды ауыстыру арқылы шифрлеу
(тапсырма атауы)
Төмендегі келтірілген программаға келесілерді орындаңыз:
1. алгоритмның блок – схемасын келтіріңіз;
2. осы программаны Делфи тіліне аударыңыз;
3. программаның нәтижесінде экранда құпиясөзді енгізу терезесі мен құпияланған сөздің терезесі болу қажет.
Орындау әдісі
1 – вариант (қарапайым ауыстыру)
ПРОГРАММА ЛИСТИНГІ:
Program subst; Type str80 = string[80]; Var inf, outf: str80; start: integer; ch: char; Procedure code (inf, outf: str80; start: integer);Var infile, outfile: file Of char; ch: char; t: integer;Begin assign(infile, inf); reset(infile); assign(outfile, outf); rewrite(outfile); while not eof(infile) Do Begin Read(infile, ch); ch:= upcase(ch); If (ch>='A') And (ch<='Z') Then Begin t:= ord(ch)+start; If t>ord('Z') Then t:= t-26; ch:= chr(t); End; Write(outfile, ch); End; WriteLn('файл закодирован'); close(infile); close(outfile);End; Procedure decode(inf, outf: str80; start: integer); Var infile, outfile: file Of char; ch: char; t: integer;Begin assign(infile, inf); reset(infile); assign(outfile, outf); rewrite(outfile); while not eof(infile) Do Begin read(infile, ch); ch:= upcase(ch); If (ch>='A') And (ch<='Z') Then Begin t:= ord(ch)-start; If t<ord('A') Then t:= t+26; ch:= chr(t); End; Write(outfile, ch); End; WriteLn('файл декодирован'); close(infile); close(outfile);End;Begin Write('введите имя входного файла: '); ReadLn(inf); Write('введите имя выходного файла: '); ReadLn(outf); Write('начальная позиция (1-26): '); ReadLn(start); Write('кодировать или декодировать (C or D): '); ReadLn(ch); If upcase(ch)='C' Then code(inf, outf, start) Else If upcase(ch)='D' Then decode(inf,outf,start);End.2 – вариант (кұрделі ауыстыру)
ПРОГРАММА ЛИСТИНГІ:
Program subs1; Type str80 = string[80]; Var inf, outf: str80; alphabet,sub: str80; ch: char; {данная функция возвращает индекс в алфавите замены } Function find(alphabet: str80; ch: char): integer; Var t: integer;Begin find:= -1; { код ошибки } For t:= 1 To 27 Do If ch=alphabet[t] Then find:= t;End; {данная функция возвращает TRUE истина, если с - это буква алфавита } Function isalpha(ch: char): boolean;Begin isalpha:= (upcase(ch)>='A') And (upcase(ch)<='Z');End; Procedure code(inf, outf: str80); Var infile, outfile: file Of char; ch: char;Begin assign(infile, inf); reset(infile); assign(outfile, outf); rewrite(outfile); while not eof(infile) Do Begin Read(infile, ch); ch:= upcase(ch); If isalpha(ch) Or (ch=' ') Then Begin ch:= sub[find(alphabet, ch)]; { найти замену } End; Write(outfile, ch); End; WriteLn('файл закодирован'); close(infile); close(outfile);End; Procedure decode(inf, outf: str80); Var infile, outfile: file Of char; ch: char;Begin assign(infile, inf); reset(infile); assign(outfile, outf); rewrite(outfile); while not eof(infile) Do Begin Read(infile, ch); ch:= upcase(ch); If isalpha(ch) Or (ch=' ') Then ch:= alphabet[find(sub,ch)]; {замена снова на реальный алфавит } Write(outfile, ch); End; WriteLn('файл декодирован'); close(infile); close(outfile);End; Begin alphabet:= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ '; sub:= 'CAZWSXEDCRFVTGBYHNUJM IKOLP'; Write('введите имя входного файла: '); ReadLn(inf); Write('введите имя выходного файла: '); ReadLn(outf); Write('кодировать или декодировать (C or D): '); ReadLn(ch); If upcase(ch)='C' Then code(inf, outf) Else If upcase(ch)='D' Then decode(inf, outf);End.