02 мая 2024, 01:31:16

Новости:

Узнай первым о новых темах и ответах в Telegram канале:  @gratis_forum


avatar_Aragorn

HELP!!!

Автор Aragorn, 08 мая 2005, 16:23:05

0 Пользователей и 1 гость просматривают эту тему.

Aragorn

Подскажите как сделать такую прогу, сколько бьюсь над ней ничего не получается! Нужно сделать на Паскале!
Задание:
Написать процедуру, которая в строке символов меняет буквы латинского алфавита на буквы русского алфавита, расположенные на тех же клавишах.
Пожалуйста помогите времени в обрез!!!!!!!!!!!!!!!! :blink:  :unsure:  
Три - эльфийским Владыкам в подзвездный предел;
Семь - для гномов, царящих в подгорном просторе;
Девять - смертным, чей выверен срок и удел;
И Одно - Властелину на черном пристоле.

Моя страница, здесь много фотографий, которые я сделал сам!

SPrograMMer

08 мая 2005, 19:38:30 #1 Последнее редактирование: 08 мая 2005, 19:47:56 от SPrograMMer
УУУ!
Цитироватьменяет буквы латинского алфавита на буквы русского алфавита, расположенные на тех же клавишах

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

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 и продолжает дальше..

Какой из алгоритмов эффективнее?  :( ненаю :P

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

Shinji

SPrograMMer
Проще по-другому.

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

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

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

От именно.

SPrograMMer

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

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

Shinji

09 мая 2005, 17:45:36 #4 Последнее редактирование: 09 мая 2005, 17:47:47 от Shinji
SPrograMMer
Цитироватьчето я логики не понял.... просили ведь с латинских на русские......

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

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

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>='a') and (s<='d') then
     Write(Table[s])
     else
     Write(s);
 end;
Writeln;
End.

Результат работы:
Enter string:abcdef
фисвef

SPrograMMer

Цитироватьможет сразу служить индексом для русской буквы.

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

понятно :)  

Aragorn

SPrograMMer и Shinji спасибо большое за помощь! Я ее не забуду!!! :)
Три - эльфийским Владыкам в подзвездный предел;
Семь - для гномов, царящих в подгорном просторе;
Девять - смертным, чей выверен срок и удел;
И Одно - Властелину на черном пристоле.

Моя страница, здесь много фотографий, которые я сделал сам!

Апофигей

ЦитироватьКакой из алгоритмов эффективнее?  ненаю

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



По всем вопросам пишите по адресу gratispp@mail.ru