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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2016, 13:49   #1
Viraele
 
Регистрация: 09.05.2016
Сообщений: 4
По умолчанию Шифрование

Здравствуйте. Хочу написать программу, которая каждую букву латинского алфавита заменяет на цифру. Цель: пользователь вводит слова, а программа их зашифровывает в цифры. Сложности: 1. Буквы и цифры можно создать массивами, но как одному массиву присвоить значение другого? 2. Программа должна шифровать в цифры независимо от порядка введенных символов и их длины.
Как можно решить данные проблемы?
Заранее спасибо за помощь
Viraele вне форума Ответить с цитированием
Старый 15.06.2016, 14:10   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
но как одному массиву присвоить значение другого?
по большому счету никак. массив либо есть, либо его нет.
А ВОТ элементЫ массива можно менять (брать значение/задавать новое значение)
Код:
A[i]:=B[j];
Код:
var A: array['A'..'Z'] of string;
var
  s: char;
  r: string;
  j: integer;

for j:=1 to length(txt) do begin
  s:=txt[j];
  r:=A[s];
  result:=result+r;
end;
Код:
var
  A: array[1..26] of record L: char; N: string; end;

for j:=1 to length(txt) do begin
  s:=txt[j];
  result:=result +LocateL(s);
end;

function LocateL(s: char);
begin
  result:='';
  for j:=low(A) to high(A) do begin
    if A[j].L =s then begin
      result:=A[j].N;
      break;
    end;
  end;
end;

finction LocateN(s: string): char;
begin
   result:='?';
  for j:=low(A) to high(A) do begin
    if A[j].N =s then begin
      result:=A[j].L;
      break;
    end;
  end;
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.06.2016, 15:41   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
по большому счету никак. массив либо есть, либо его нет.
Статический массив один другому можно присваивать и потом править их не зависимо друг от друга. Динамические тоже можно, но там ссылка присваивается и независимой правки не получится. Это если о делфи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.06.2016, 16:01   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну типичные таблицы перекодировки. Берете 2 массива, один про буквы, другой про цифры. Ищите букву в одном массиве (в цикле) - нашли, запомнили индекс. По этому индексу взяли цифру. Перекодировка аналогично.
Цитата:
но как одному массиву присвоить значение другого?
Зачем?
Цитата:
Программа должна шифровать в цифры независимо от порядка введенных символов и их длины.
Пофиг.
Вообще может просто недостаточная выразительная сила массивов Вас смущает? Ну создайте один массив своих структур:
Код:
type
    TTrans=record
         letter: Char;
         nummer: Integer;
end;
А потом
Код:
var
   Translate: Array of TTrans;
Ну как-то так.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 15.06.2016 в 16:08.
Utkin вне форума Ответить с цитированием
Старый 15.06.2016, 17:02   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ребята, но новичок, придумал массивы, но вы то куда?!

Цитата:
которая каждую букву латинского алфавита заменяет на цифру
ord(S[i]) вернёт код буквы.
формула
Код:
ord(S[i])-ord('A')+1
для прописных латинских букв A..Z вернёт порядковый номер буквы
A - 1
B - 2
C - 3
и т.д.

если же речь идёт про свой алфавит (свою кодировку, где A, например, 21, а B-17, Z - 26 и т.д.)
тогда проще воспользоваться строкой с нужными буквами в правильном порядке
и код символа получать через POS(S[i], СтрокаСБуквами)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.06.2016, 17:09   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Мой вариант универсальный - Integer это сколько букв ?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 15.06.2016, 17:26   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Utkin
Мой вариант универсальный - Integer это сколько букв ?
Не понял.
А чем вариант со строкой не универсальный? Pos() как раз Integer и возвращает!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.06.2016, 07:29   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Там многа буков разных сложно засовывать. А мне можно вместо Char тоже какой-нибудь integer поставить для кодировки всего Юникода
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 16.06.2016, 10:08   #9
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Не знаю, как в других языках, но по идее там тоже должен быть словарь. По-моему неплохой вариант. В качестве ключа используешь char, а в качестве значения int. Считываешь введенную стоку, посимвольно читаешь ее и лепишь из нее горбатого...
max_prorok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование Zaraaa Фриланс 2 03.05.2015 21:34
Шифрование Дмитрий163 Общие вопросы Delphi 4 09.11.2012 15:36
Шифрование strekoza Общие вопросы Delphi 6 12.09.2012 15:48
Шифрование buenosaire Помощь студентам 1 15.06.2010 21:54