Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/40: Рейтинг темы: голосов - 40, средняя оценка - 4.60
6 / 6 / 0
Регистрация: 03.11.2010
Сообщений: 12
1

Как задать в Дельфи алфавит?

03.11.2010, 10:04. Показов 7968. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, задача у меня такова:

Условие
Дана строка, состоящая из маленьких букв латинского алфавита. Требуется закодировать строку при помощи шифра Юлия Цезаря. Суть этого шифра такова: каждая буква сдвигается на три позиции по алфавиту, т.е. a заменяется на d, b — на e, p — на s, w — на z, x — на a, y — на b, z — на c.

Формат входного файла
Входной файл содержит строку, которую требуется закодировать.

Формат выходного файла
Выходной файл должен содержать закодированную строку. Закодированная строка должна быть такой же длины, как строка во входном файле.

Ограничения
Длина строки от 1 до 200 символов.

В общем, программу-то я написал... Но из 26 тестов она у меня не проходит 5, а мне нужен полностью верный результат.
Уже пробовал написать несколько алгоритмов, но ошибка все та же.

Теперь у меня вот такой вопрос по этой задаче: как проверять символы?
По идее, мы должны вручную создавать массив символов, в котором будет храниться алфавит, а затем так же вручную забивать сам алфавит???
Затем сравнивать каждый символ строки с нашим алфавитом, и если символ найдет, то заменять его на нужный (по условию) также используя наш алфавит?

Или есть более оптимальный вариант..? Подскажите!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2010, 10:04
Ответы с готовыми решениями:

Задать русский алфавит в Delphi 2009
Здравствуйте. Нужно сделать программу, которая смотрит, есть ли введённом тексте (в memo1.text)...

Задать алфавит автоматически, не прописывая каждую букву в коде
Что нужно сделать, что бы алфавит в задаче задавался автоматически? #include<math.h>...

Выведите в первой строке весь алфавит до заданной буквы, а во второй строке весь алфавит после неё
На вход подаётся одна латинская прописная буква. Гарантируется, что это не 'A' и не 'Z'. Выведите в...

Импорт кода из Дельфи-файла без установленного Дельфи
Есть файлы проекта делфи, как без установленного делфи просмотреть код программы? Или может кто то...

9
15 / 15 / 3
Регистрация: 19.10.2010
Сообщений: 82
03.11.2010, 15:55 2
Или есть более оптимальный вариант..? Подскажите!
Конечно есть:
Delphi
1
2
3
4
5
6
7
8
9
10
11
var 
  S: string;
  i : integer;
begin
  for I := 1 to Length(S) do
  begin
    if S[i] in ['a'..'w', 'A'..'W' ] then // если от A до W - прибавляем 3 
    S[i] := chr(ord(S[i]) + 3) else
    if S[i] in ['x'..'z', 'X'..'Z'] then // если от X до Z - отнимаем 23 (26 - 3)
    S[i] := chr(ord(S[i]) - 23);
  end;
По условию ничего про массив не сказано.
1
6 / 6 / 0
Регистрация: 03.11.2010
Сообщений: 12
03.11.2010, 16:07  [ТС] 3
Верно! Но я просто не знаю другого способа задания алфавита... Теперь вроде знаю, опробую.
Самое ведь обидное-то, что у меня научная работа была по криптографическим методам защиты информации... И ведь я Цезаря реализовывал, и проблем не было, а тут - ошибки...
Ладно, опробую, напишу!

Добавлено через 6 минут
Прошел! Все 26 тестов! Огромное вам спасибо )
0
15 / 15 / 3
Регистрация: 19.10.2010
Сообщений: 82
03.11.2010, 16:08 4
Отчего бы не пройти? )) Примитив же...
0
6 / 6 / 0
Регистрация: 03.11.2010
Сообщений: 12
03.11.2010, 16:09  [ТС] 5
Цитата Сообщение от Darthman Посмотреть сообщение
['a'..'w', 'A'..'W' ]
Не примитив (для меня). Теперь буду знать, как задавать алфавит...
0
15 / 15 / 3
Регистрация: 19.10.2010
Сообщений: 82
03.11.2010, 16:16 6
[1.100] задает диапазон.

Delphi
1
if i in [0..100, 200..300]
проверит находится ли i в диапазоне 0..100 и 200..300. Работает и для символов.
Алфавит это не задает. Просто трюк с особенностью хранения букв в памяти. Они идут по порядку все. В Английском их 26

Вот с русским так бы не вышло. Там, скажем Ё придется обрабатывать отдельно, она особняком стоит.. А с английским трюк работает )
1
6 / 6 / 0
Регистрация: 03.11.2010
Сообщений: 12
03.11.2010, 16:18  [ТС] 7
А что с русским? Не считая буквы "ё". Или русский алфавит просто не поддерживается?
0
15 / 15 / 3
Регистрация: 19.10.2010
Сообщений: 82
03.11.2010, 16:33 8
В этом случае придется делать через массив. ё - только пример. Там буквы по кодировке раскиданы.

В принципе можно сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
const
  alptable =  'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // какую менять
  repltable = 'defghijklmnopqrstuvwxyzabcDEFGHIJKLMNOPQRSTUVWXYZABC'; // на какую менять
var
  S: string;
  i : integer;
begin
  for I := 1 to Length(S) do
  begin
    S[i] := repltable[pos(S[i], alptable)];
  end;
end;
В таком случае если надо и русский учесть, то таблицы модифицировать, добавив в них буквы.
0
6 / 6 / 0
Регистрация: 03.11.2010
Сообщений: 12
03.11.2010, 16:35  [ТС] 9
да уж, сложно....
но спасибо)
0
15 / 15 / 3
Регистрация: 19.10.2010
Сообщений: 82
03.11.2010, 16:39 10
А так будет работать и с русскими буквами и с цифрами..
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
const
  alptable =  'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZабвгдеёжзиклмнопрстуфхцчшщъьыэюяАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЮЪЬЫЭЮЯ1234567890'; // какую менять
  repltable = 'defghijklmnopqrstuvwxyzabcDEFGHIJKLMNOPQRSTUVWXYZABCгдеёжзиклмнопрстуфхцчшщъьыэюяабвГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЮЪЬЫЭЮЯАБВ4567890123'; // на какую менять
var
  S: string;
  i : integer;
begin
  for I := 1 to Length(S) do
  begin
    S[i] := repltable[pos(S[i], alptable)];
  end;
end;
0
03.11.2010, 16:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2010, 16:39
Помогаю со студенческими работами здесь

Не знаю как зациклить алфавит в строке
Программу я написал, но в условии сказано, что алфавит зациклен, а у меня нет, и вот я сижу и не...

Как сделать алфавит циклическим? С4 по информатике
Здравствуйте. Нужна помощь с задачей c4 по информатике. Условия задачи с моей попыткой решения...

Как узнать какой алфавит используется?
Здравствуйте, такой вопрос. Как узнать какой алфавит используется для шифрования в Виженере?...

Как преобразовать русский алфавит в матрицу 8*4
const M = 4; //Вертикальный период - т. е. по 4 элементов в столбце. N = M - 1; //Верхняя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru