Есть ответ 👍

Есть готовая программа телеграф в паскале abc, которая переводит из букв в код морзе. сделать так,чтобы она переводила из введенного кода в буквы program telegraf2014; uses crt; label m; var a: array['а'..'я'] of string; i,j: integer; t: string; begina['а']: ='.-'; a['б']: =''; a['в']: =''; a['г']: =''; a['д']: =''; a['е']: ='.'; a['ж']: =''; a['з']: =''; a['и']: ='..'; a['й']: =''; a['к']: =''; a['л']: =''; a['м']: ='--'; a['н']: ='-.'; a['о']: =''; a['п']: =''; a['р']: =''; a['с']: =''; a['т']: ='-'; a['у']: =''; a['ф']: =''; a['х']: =''; a['ц']: =''; a['ч']: =''; a['ш']: =''; a['щ']: =''; a['ъ']: =''; a['ы']: =''; a['ь']: =''; a['э']: =''; a['ю']: =''; a['я']: =''; m: clrscr; gotoxy(30,1); writeln('это программа телеграф'); gotoxy (18,2); writeln('введите слово строчными буквами на языке! '); readln(t); beginfor i: =1 to length(t) dobeginif t[i]< > ' 'thenbeginwrite (a[t[i]],' '); end; end; readln; end; goto m; end.

157
397
Посмотреть ответы 3

Ответы на вопрос:


{если мы попробуем кодировать точку нулем, тире - единицей, то получаем число в двоичной системе с максимальным числом разрядов, равным 4. к сожалению, в такой кодировке комбинации, начинающиеся с точки, будут неоднозначными, потому что будут начинаться с незначащих нулей. для устранения неоднозначности можно добавить еще три бита слева, которые будут указывать количество точек в коде до первого тире (0-4), но лучше добавить 4 бита и использовать для кодирования полный байт. тогда его первая шестнадцатиричная цифра даст число незначащих нулей (точек), а вторая - сам код. исключение - символ 'э', который кодируется 5 символами. для разделения слов введем еще символ пробела а .-        0001 0001 & 11 = 17 б     0000 1000 & 08 =  8 в       0001 0011 & 13 = 19 г       0000 0110 & 06 =  6 д       0000 0100 & 04 =  4 е .          0001 0000 & 10 = 16 ж     0011 0001 & 31 = 49 з     0000 1100 & 0c = 12 и ..        0010 0000 & 20 = 32 й     0001 0111 & 17 = 23 к       0000 0101 & 05 =  5 л     0001 0100 & 14 = 20 м --        0000 0011 & 03 =  3 н -.        0000 0010 & 02 =  2 о       0000 0111 & 07 =  7 п     0001 0110 & 16 = 22 р       0001 0010 & 12 = 18 с       0011 0000 & 30 = 48 т -          0000 0001 & 01 =  1 у       0010 0001 & 21 = 33 ф     0010 0010 & 22 = 34 х     0100 0000 & 40 = 64 ц     0000 1010 & 0a = 10 ч     0000 1110 & 0e = 14 ш     0000 1111 & 0f = 15 щ     0000 1101 & 0d = 13 ъ     0000 1001 & 09 =  9 ы     0000 1011 & 0b = 11 ь     0000 1001 & 09 =  9 э   0011 0100 & 34 = 52 ю     0010 0011 & 23 = 35 я     0001 0101 & 15 = 21 конечно, можно было бы просто поместить коды в элементы массива и поиск нужного производить поэлементым сравнением, но принятая нами кодировка позволит получать номер элемента массива сразу. иными словами, мы построили так называемую хэш-функцию для доступа к таблице перекодировки. это популярное решение, которое применяется достаточно часто в различных алгоритмах кодировки и поиска. максимальный номер среди полученных нами = 64, минимальный - 1. следовательно, нужно создать массив t[1..64] и поместить буквы в элементы с соответствующими индексами (а - в 17-й элемент, б - в 8-й и т.д.) получив очередное слово - "символ" азбуки морзе, например, '', выполняем следующие шаги: 1) если пять правых символов слова равны '', искомый символ t[52]; 2) если пять правых символов слова равны '', искомый символ t[63]; 3) подсчитываем k - количество точек в четырех правых символах слова a5a6a7a8, пока не встретим тире. вычисляем значение k: =16*k; 4) начиная с первого слева тире заменяем в символах слова точки нулями, тире - единицами; 5) вычисляем сумму n=a5*8+a6*4+a7*2+a8 и увеличиваем на нее значение k. k: =k+n 6) искомый символ равен t[k] алгоритм кажется сложным, но его реализация в функции hash проста. } var   ptr: integer; function hash(s: string): integer; {возвращает номер элемента в таблице т по коду морзе из строки s} var   i, k, n, m: integer; begin   if s = '' then result : = 0   else if s = '' then result : = 52   else if s = '' then result : = 63   else begin       i : = 1;       k : = 0;       while i < = length(s) do           if s[i] = '.' then           begin               i : = i + 1;               k : = k + 1           end           else i : = 5;       n : = 0;       m : = 1;       for i : = length(s) downto max(k, 1) do       begin           if s[i] = '-' then n : = n + m;           m : = m * 2       end;       result : = 16 * k + n   end end; function getword(s: string): string; {возвращает очередное слово строки s, начиная поиск с позиции ptr по окончании поиска ptr устанавливается на следующий за пробелом символ или выходит за конец строки} var   i: integer;   c: string; begin   c : = '';   i : = posex(' ', s, ptr);   if i > 0 then   begin       result : = copy(s, ptr, i - ptr);       ptr : = i + 1   end   else   begin       result : = copy(s, ptr, length(s) - ptr + 1);       ptr : = length(s) + 1   end; end; var   s: string;   n: integer;   t: array[1..64] of char; begin   t[17] : = 'а'; t[8] : = 'б'; t[19] : = 'в'; t[6] : = 'г'; t[4] : = 'д';   t[16] : = 'е'; t[49] : = 'ж'; t[12] : = 'з'; t[32] : = 'и'; t[23] : = 'й';   t[5] : = 'к'; t[20] : = 'л'; t[3] : = 'м'; t[2] : = 'н'; t[7] : = 'о';   t[22] : = 'п'; t[18] : = 'р'; t[48] : = 'с'; t[1] : = 'т'; t[33] : = 'у';   t[34] : = 'ф'; t[64] : = 'х'; t[10] : = 'ц'; t[14] : = 'ч'; t[15] : = 'ш';   t[13] : = 'щ'; t[11] : = 'ы'; t[9] : = 'ь'; t[52] : = 'э'; t[35] : = 'ю';   t[21] : = 'я'; t[63] : = ' ';   { для отладки   s : = ' .- - -- .. '; }   writeln('введите строку в коде морзе, пробел кодируется ');   readln(s);   ptr : = 1;   n : = 100;   write('раскодировка: ');   while n > 0 do   begin       n : = hash(getword(s));       if n > 0 then write(t[n]);   end; тестовое решение: введите строку в коде морзе, пробел кодируется .- - -- .. раскодировка: мир   writeln end.

Program telegraf2014; uses crt; label m; var   a: array[1..32] of string;   i, j: integer;   t,s: string; begin    a[1] : = '.-'; a[2] : = ''; a[3] : = ''; a[4] : = ''; a[5] : = ''; a[6] : = '.'; a[7] : = ''; a[8] : = ''; a[9] : = '..'; a[10] : = ''; a[11] : = ''; a[12] : = ''; a[13] : = '--'; a[14] : = '-.'; a[15] : = ''; a[16] : = ''; a[17] : = ''; a[18] : = ''; a[19] : = '-'; a[20] : = ''; a[21] : = ''; a[22] : = ''; a[23] : = ''; a[24] : = ''; a[25] : = ''; a[26] : = ''; a[27] : = ''; a[28] : = ''; a[29] : = ''; a[30] : = ''; a[31] : = ''; a[32] : = '';     m: clrscr;       gotoxy(30, 1);       writeln('это программа телеграф');       gotoxy(18, 2);       writeln('введите телеграфный код');       readln(t);       repeat         j: =pos(' ',t);         if j> 0 then s: =copy(t,1,j-1)             else               begin               s: =t;               t: ='';               end;         delete(t,1,j);         for i: =1 to 32 do           if a[i]=s then write(chr(i+223));         until t='';       readln;         goto m; end.
asura3
4,6(73 оценок)

3файла- family.jpg , car.bmp и  dog.gif

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

    otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.

Подпишись на наш телеграмм канал

GTP TOP NEWS