IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Шифр "Тарабарщина" - замена одних букв другими, помогите составить программу
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Итак, начну с определения Тарабарщины

Тарабарская грамота, простая литорея — шифр, широко использовавшийся в древнерусских рукописях.

Представляет собой простейший шифр замены без ключа. Согласные в алфавите делят на две равные части, и первую пишут строкой в алфавитном порядке, а вторую под буквами первой в обратном порядке. Таким образом получают таблицу:

б в г д ж з к л м н
щ ш ч ц х ф т с р п


Употребляют в письме верхние буквы вместо нижних и наоборот, а гласные остаются без изменения. Так, например, словарь на тарабарской грамоте будет лсошамь, великий государь — шеситий чолуцамь и т. п. Для расшифровки используют тот же способ, что и для шифрования (шифр симметричный).


Мне нужно написать программу, которая переводит шифрованный текст в обычный.

Например, "Шещ-нмочмарримошапие" будет звучать как "Веб-программирование"

Как реализовать данную задачу в Pascal ABC?

Спасибо! yes2.gif


--------------------
DesignFootball.Ru - Первый русскоязычный сайт о футбольной форме.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 9)
сообщение
Сообщение #2


Гость






Ну, например так: (Показать/Скрыть)


Странно, но работает:


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 17.02.2011 22:00) *

Ну, например так: (Показать/Скрыть)


Странно, но работает:


А почему странно? cool.gif
Большое спасибо за решение этой задачи. Но оказывается, есть и более простое решение.
В любом случае, большое спасибо вам! Очень помогли! good.gif


--------------------
DesignFootball.Ru - Первый русскоязычный сайт о футбольной форме.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Drughi @ 17.02.2011 21:32) *
А почему странно? cool.gif
Думаю, потому что ABC не очень склонен к этому занятию - работать.. ))

Цитата
Но оказывается, есть и более простое решение.
Поделишься?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Конечно!

var
s: string;
i,k: integer;
begin
WriteLn('Введите строку:');
ReadLn(s);
k:=length(s);
for i:=1 to k do
case s[i] of
'б': s[i]:='щ';
'в': s[i]:='ш';
'г': s[i]:='ч';
'д': s[i]:='ц';
'ж': s[i]:='х';
'з': s[i]:='ф';
'к': s[i]:='т';
'л': s[i]:='с';
'м': s[i]:='р';
'н': s[i]:='п';

'щ': s[i]:='б';
'ш': s[i]:='в';
'ч': s[i]:='г';
'ц': s[i]:='д';
'х': s[i]:='ж';
'ф': s[i]:='з';
'т': s[i]:='к';
'с': s[i]:='л';
'р': s[i]:='м';
'п': s[i]:='н';
{Если необходимо то сделайте и для строчных букф так же}
end;
Write(s);
end.



--------------------
DesignFootball.Ru - Первый русскоязычный сайт о футбольной форме.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


И чем оно проще? Длинный выбор.
Типичный ГК.

Вариант Вольво лучше наличием 2х массивов, но для каждой буквы перебором искать, входит ли она в массив - это тоже не лучший вариант.
+ наращивание по 1 там, где можно обойтись + проверка на регистр - всё это можно убрать


var NewChar: array [char] of char; // сразу составляем массив замены
const alpha: array [boolean] of string = ('бвгджзклмн', 'щшчцхфтсрп'); // ну эти нам тоже пригодятся

procedure InitTarabar;
begin
for c: char := #0 to #255 do NewChar[c] := c; // сначала массив замены заполняем так, будто ничего заменять не надо
for b: boolean := false to true do begin
for i: integer := 1 to Length(alpha[b]) do begin
NewChar[alpha[b,i]] := alpha[not b,i]; // проходим по строке и делаем замены в массиве
NewChar[UpCase(alpha[b,i])] := UpCase(alpha[not b,i]);
end;
end;
end;

function Tarabar(s: string): string;
begin
SetLength(result, Length(s));
for i: integer := 1 to Length(s) do Result[i] := NewChar[s[i]];
end;

var s: string;

begin
InitTarabar;
repeat
Write('Введите строку (или "exit" для выхода): ');
ReadLn(s);
WriteLn(Tarabar(s));
until s = 'exit';
end.


В начале программы пишем InitTarabar (для каждой строки это делать не надо), а потом уже используем, вызывая функцию Tarabar(s).

Сообщение отредактировано: TarasBer -


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
+ наращивание по 1 там, где можно обойтись + проверка на регистр - всё это можно убрать
Может и можно, но программа писалась для реалий Pascal ABC. Твой код он не компилирует. Тот, который я набросал изначально - тоже. Пришлось делать так, "чтоб заработало".
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Твой код он не компилирует. Тот, который я набросал изначально - тоже. Пришлось делать так, "чтоб заработало".

Там что, нету SetLength?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Есть. Проблема была в другом. Поправил. Но не работает (я ж говорю - это ABC, тут если заработало - то "внезапно", и "странно") :


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Я не знаю, почему так.
УМВР в Д7 (только переменные циклов пришлось наружу объявить).


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 6.11.2025 17:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name