HELP!!!

Регистрация на сайте
GRATIS форум > Архивы > ** Компьютер
Aragorn
Подскажите как сделать такую прогу, сколько бьюсь над ней ничего не получается! Нужно сделать на Паскале!
Задание:
Написать процедуру, которая в строке символов меняет буквы латинского алфавита на буквы русского алфавита, расположенные на тех же клавишах.
Пожалуйста помогите времени в обрез!!!!!!!!!!!!!!!! blink.gif unsure.gif
SPrograMMer
УУУ!
QUOTE
меняет буквы латинского алфавита на буквы русского алфавита, расположенные на тех же клавишах

надо соответствие произвести, ну что-то вроде массива константы:
CODE

Type
   TArr=Array[1..скоко_у_нас_букв] Of Record
           Lat:Char;
           Rus:Char
  End;
Const
  XE_XE:TArr=((Lat:'Q',Rus:'Й'),(Lat:'W',Rus:'Ц'),.............,(Lat:'M',Rus:'Ь'));// уфь

Ну а потом берем певую букву из букв, т е Q, просматриваем весь текст, где найдем, там меняем на... а на то что для Q есть Rus, т е на Й, затем переходи к слудейщей букве, т е к W
и т д.

Или можно наоборот: берем первую букву текста, просматриваем нашу константу на предмет поиска этой буквы в Lat, если находим, то заменяем эту букву на сооветствующую ей в Rus и продолжает дальше..

Какой из алгоритмов эффективнее? sad.gif ненаю tongue.gif

ЗЫ: кто только такие задания дает... blink.gif тут ведь логики с гулькин нос, зато набить константу скоко времени надо.... smile.gif
Shinji
SPrograMMer
Проще по-другому.

const
TableUp = array[65..90] of char = ('Ф','И','C','В'....);
TableLow = array[96..122] of char = ('ф','и','с','в'....);

Дальше берём по порядку буквы из текста, если её код попадает в интервал первого массива, заменяем на значение из массива по коду буквы. Если попадает во второй, заменяем из второго.

QUOTE
ЗЫ: кто только такие задания дает... blink.gif тут ведь логики с гулькин нос, зато набить константу скоко времени надо.... smile.gif

От именно.
SPrograMMer
QUOTE
const
TableUp = array[65..90] of char = ('Ф','И','C','В'....);
TableLow = array[96..122] of char = ('ф','и','с','в'....);

чето я логики не понял.... просили ведь с латинских на русские......
Shinji
SPrograMMer
QUOTE
чето я логики не понял.... просили ведь с латинских на русские......

В паскале каждый символ - суть беззнаковое однобайтовое целое. Так что английская буква может сразу служить индексом для русской буквы.

В общем, это выглядит так: (только мне лень было полный вариант писать)

Program LatRus;
Const Table : array['a'..'d'] of char=('ф,'и','с','в');

Var i: integer;
s: string[64];
Begin
Write('Enter string:');Readln(s);
for i:=1 to Ord(s[0]) do
begin
if (s[i]>='a') and (s[i]<='d') then
Write(Table[s[i]])
else
Write(s[i]);
end;
Writeln;
End.

Результат работы:
Enter string:abcdef
фисвef
SPrograMMer
QUOTE
может сразу служить индексом для русской буквы.

эт я знаю.... biggrin.gif
QUOTE
Результат работы:
Enter string:abcde
фисвe

понятно smile.gif
Aragorn
SPrograMMer и Shinji спасибо большое за помощь! Я ее не забуду!!! smile.gif
Апофигей
QUOTE
Какой из алгоритмов эффективнее?  ненаю

Насчет этого вставлю свои пять копеек tongue.gif
В первом случае у нас получится <Количество_латинских_букв> просмотров каждого символа и только в одном из них будет произведена замена символа. Если мне не изменяет память, то в латинском алфавите 26 букв, значит всего будет совершено 26*<Длина_текста> итераций, а вызовов процедуры замены символа будет только <Длина_текста>.
Во втором же случае, когда текст просматривается символ за символом будет пройдено <Длина_текста> итераций и сделано столько же вызовов процедуры замены. Нельзя, правда, сказать что второй алгоритм будет выполнятся в 26 раз быстрее, но все-таки он намного эффективнее первого.
Вот такие пироги cool.gif