Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2008, 08:03   #1
Mr.GROZNY
Новичок
Джуниор
 
Регистрация: 14.12.2008
Сообщений: 2
По умолчанию Помогите написать коментарий к программам.

Здравствуйте! Помогите пожалуйста написать коментарий к программам, т.е. что в каждой строке исходного кода программы выполняется.
Вот две задачи и исходный код их.


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.



ПОМОГИТЕ ПОЖАЛУЙСТА!!!
Mr.GROZNY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Литература по офисным программам mihali4 Microsoft Office Excel 2 31.10.2008 16:19
ПОМОГИТЕ НАПИСАТЬ pilevas Помощь студентам 1 17.06.2008 14:22
задача под windows,помогите написать.Надо написать на Borland C++Builder 6. eddddii Помощь студентам 9 23.05.2008 17:04
Помогите написать БД stillret Фриланс 2 13.05.2008 23:58
Помогите написать прогу!Среди заданных целых чисел k, l, m найти пары кратных.Написать по проще чемЭесть vdv08 Паскаль, Turbo Pascal, PascalABC.NET 4 04.04.2008 16:56