Здравствуйте! Помогите пожалуйста написать коментарий к программам, т.е. что в каждой строке исходного кода программы выполняется.
Вот две задачи и исходный код их. 1) Абаракадабра:
Последовательность из латинских букв строится следующим образом. На первом шаге она пуста. На каждом последующем шаге последовательность удваивается, после чего к ней слева дописывается очередная буква латинского алфавита (а, b, с, ...). Ниже приведены первые шаги построения последовательности:
Шаг 1. пустая последовательность
Шаг 2. а
Шаг 3. baa
Шаг 4. cbaabaa
Шаг 5. dcbaabaacbaabaa
Задача состоит в том, чтобы по заданному числу N определить символ, который стоит на N-ом месте в последовательности, получившейся после 26-го шага.
Технические требования:
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Ограничение времени: 20 секунд
Формат входных данных: Во входном файле записано одно натуральное число N (1 <= N <= 2в26степени).
Формат выходных данных: Запишите в выходной файл символ, стоящий в позиции N получившейся последовательности.
Пример файлов входных и выходных данных:
INPUT.TXT OUTPUT.TXT
4 w
ИСХОДНЫЙ КОД:
const
maxn=26;
var
a:array[1..maxn]of longint;
k,n:longint;
i:integer;
begin
readln(n);
a[1]:=1;
for i:=1 to maxn-1 do
a[i+1]:=1+2*a[i];
for k:=26 downto 1 do
begin
if n=1
then
begin
write(chr(ord('a') + k - 1));
break
end
else
if n>a[k-1]+1
then
n:=n-1-a[k-1]
else n:=n-1;
end;
end.
------------------------------------------------------
2) Криптограмма
Текст закодирован с помощью таблицы, в которой цифрой 0 обозначено отверстие. Для того, чтобы раскодировать сообщение, нужно наложить сетку на текст так, чтобы в отверстия были видны символы закодированного текста. Сначала на таблицу букв накладывается исходная сетка и читается набор символов, затем сетка поворачивается по часовой стрелке на 90 градусов и читается следующий набор символов и так далее до полного оборота сетки на 360 градусов. Напишите программу SHIFR, которая с помощью сетки расшифровывает закодированный текст.
Входные данные:
Текст и решетка задаются в виде квадратных таблиц в текстовых файлах SHIFR1.DAT и SHIFR2.DAT соответственно, каждая строка таблицы размещается в отдельной строке файла, элементы вводятся через пробел.
Выходных данные:
Файл SHIFR.SOL содержит строку расшифрованного текста.
Пример входных данных:
SHIFR1.DAT
ж б в у н р
и ы н е я е
к х м б р р
о г у р л к
т и р я о о
с е н ю е т
SHIFR2.DAT
1 0 1 0 1 0
1 1 1 1 0 1
1 1 0 1 1 1
1 0 1 1 0 1
1 1 1 1 1 0
1 1 1 0 1 1
Пример выходных данных:
SHIFR1.SOL
бурямглоюнебокроетвихриснежныекрутя
ИСХОДНЫЙ КОД:
program kodik;
uses crt;
const
n = 8;
type
sType = string[n];
matrix = array[1 .. n] of sType;
const
mask: matrix = (
'x...x...',
'.x...x..',
'..x...x.',
'...x...x',
'..x...x.',
'...x....',
'x...x..x',
'..x..x..'
);
st: string =
'сколькоцелыхчетырёхзначныхчиселможнополучитьизцифрнольодиндватри';
var
encoded: matrix;
masked: matrix;
{ Процедура поворота матрицы }
procedure T(var res: matrix);
var
i, j: integer;
mx: matrix;
begin
mx := res;
for i := 1 to n do
for j := 1 to n do
res[j, n - i + 1] := mx[i, j];
end;
{ Зашифровка текста }
procedure EncodeText(const s: string;
const mask: matrix; var mx: matrix);
var
i, j, count: integer;
masked: matrix;
begin
{ Заполнение матрицы mx строками по N пробелов }
for i := 1 to n do
for j := 1 to n do mx[i] := mx[i] + #32;
masked := mask;
count := 1;
while count <= length(s) do begin
for i := 1 to n do
for j := 1 to n do
if masked[i, j] = 'x' then begin
mx[i][j] := s[count];
inc(count)
end;
T(masked);
end;
end;
{ Расшифровка текста }
function DecodeText(const mask, encoded: matrix): string;
var
s: string;
i, j, count: integer;
masked: matrix;
begin
masked := mask;
count := 0; s := '';
while length(s) < n*n do begin
for i := 1 to n do
for j := 1 to n do
if masked[i, j] = 'x' then s := s + encoded[i, j];
T(masked);
end;
DecodeText := s;
end;
var
i: integer;
begin
EncodeText(st, mask, encoded);
writeln('encoded text: ');
for i := 1 to n do begin
writeln(encoded[i]);
end;
writeln(DecodeText(mask, encoded));
end.
ПОМОГИТЕ ПОЖАЛУЙСТА!!!