Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Pascal Задача: Составьте программу на языке Pascal для представления введенного отличного от нуля действительного ч https://www.cyberforum.ru/ pascal/ thread2769176.html
здравствуйте, помогите , пожалуйста, с решением задачи : Составьте программу на языке Pascal для представления введенного отличного от нуля действительного числа в нормализованной форме....
Стрелка вверх в записях операторов Паскаля Pascal
Привет, братва! Подскажите, что это за "стрелочка вверх" в следующем выражении?? Описать имена X и Y так, чтобы в стандарте Паскаля был правильным оператор присваивания X(2 < 3) "стрелка...
Pascal Работа с файлами
Дан файл f, содержащий сведения о багаже пассажиров: ФИО, общий вес багажа. Вывести в файл f1 и на экран сведения о пассажирах, вес багажа которых превышает среднее значение веса багажа по всем...
Pascal Вывести на экран календарь за 2000 год Помогите, пожалуйста, написать программу с выводом календаря за 2000 год. Обязательно используя циклы с заданным числом повторений https://www.cyberforum.ru/ pascal/ thread2768472.html
Pascal Произведение https://www.cyberforum.ru/ pascal/ thread2768109.html
Описать процедуру (функцию), которая по функции f и вектору W=(w1,w2,...wn) дает произведение: \prod_{i=1}^{n}f(w_i)
Pascal Длина слов
Словом назовем всякую последовательность букв латинского алфавита длины не более 20, а предложением – всякую последовательность не более чем 30 слов, отделенных друг от друга сериями пробелов....
Вывести на экран числа от 1 до N "обратной елочкой" Pascal
Выведите на экран числа от 1 до N «обратной елочкой», т.е. в последней строке одно число, в предпоследней – два, и т.д К примеру вводится число N=12 вывод должен выглядеть так: 11 12 7 8 9 10...
Pascal Неправильно написал функцию Я не знаю как правильно оформлять функцию, может кто подсказать?) var y,a : Integer; function MyFactorial(x: Integer) : Integer ; var i,s : Integer; begin for i:=1 to x do s:=s*i; ... https://www.cyberforum.ru/ pascal/ thread2768013.html
Pascal Вычислить значение выражения https://www.cyberforum.ru/ pascal/ thread2767971.html
в общем я запуталась.. помогите исправить const xn=-6; xk=1; h=1; y=2; var x, xn,xk,h,f,y:real; begin
Pascal Поменять местами строки массива Дан двумерный массив из четного числа строк. Поменять местами его строки следующим образом: первую строку поменять со второй, третью с четвертой и так далее. https://www.cyberforum.ru/ pascal/ thread2767854.html
Pascal Определить номера точек, которые могут являться вершинами равнобедренного треугольника https://www.cyberforum.ru/ pascal/ thread2767838.html
В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1, y1, x2, y2, x3, y3 и т.д. Определить номера точек, которые...
Pascal Найти все натуральные четырехзначные числа, цифры в которых образуют строго возрастающую последовательность Найти все натуральные четырехзначные числа, цифры в которых образуют строго возрастающую последовательность (1234), (2345),(3456) и тп использую подпрограмму https://www.cyberforum.ru/ pascal/ thread2767799.html
Модератор
8397 / 4151 / 2871
Регистрация: 17.08.2012
Сообщений: 13,231
15.01.2021, 23:54 0

Превратить сообщение азбуки Морза 64 символа в графическое изображение размером 8*8

15.01.2021, 23:54. Просмотров 1484. Ответов 11
Метки (Все метки)

Ответ


Под символами имеются ввиду точки, тире, паузы между буквами и паузы между словами этой самой азбуки Морзе. Почему не сами буквы? А потому, что тогда и будет сохранён текст, а не сообщение на азбуке Морзе.

Что вообще есть в сообщении на азбуке Морзе, и как это обозначается на бумаге?

НазваниеОбозначениеДлительность
в единицах времени
(для справки)
Точка"∙"1
Тире"-"3
Пауза внутри символаНет1
Пауза между символами" "3
Пауза между словами"  "7

Паузу внутри символа кодировать не нужно (по сути, тире или точка состоят из тире или точки и паузы в 1 единицу). Паузу между словами можно заменить двумя паузами между символами. Это логично, если печатать сообщение в виде строки, тогда между буквами будет по одному символу пробела, а между словами - по два символа пробела.

Тогда азбуку Морзе можно закодировать, например, так:

ЭлементОбозначение
Номер
цвета
Точка"∙"1
Тире"-"2
Пауза между символами" "3
Пустой символНет0

Пустой символ нужен для заполнения свободного места в изображении, когда размер изображения больше размера сообщения.

Удобнее всего, по моему мнению, в качестве носителя использовать файл 8 бит на точку с палитрой 256 цветов, без сжатия, естественно. Структура такого файла неизменна.

Максимально простая программа, подойдёт для любого диалекта паскаля, и не требует никаких библиотек для работы с изображениями:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
const
  nbmp = '8x8.bmp';
  sym = '.- ';
  test = '- . -.- ... -  -. .-  .. --.. --- -... .-. .- ...- . -. .. ..';
         {т_е_к  _с  _т__н _а __и _з   _о  _б   _р  _а _ж   _е_н _и _и}
var
  bmp: file of byte;
  t: text;
  s, ch: string;
  i: integer;
  x: byte;
begin
  repeat
    write('1 - записать в BMP, 2 - прочитать из BMP, 3 - выход: ');
    readln(ch);
    if ch[1] in ['1'..'2'] then
      begin
        assign(bmp, nbmp);
        reset(bmp);
        seek(bmp, 1078)
      end;
    case ch[1] of
    '1':
      begin
        s := test;
        writeln('Строка для запси:');
        writeln(s);
        i := 1;
        while (i <= length(s)) and (i <= 64) do
          begin
            write(bmp, pos(s[i], sym));
            inc(i)
          end;
        for i := i + 1 to 64 do write(bmp, 0)
      end;
    '2':
      begin
        s := '';
        i := 1;
        while i <= 64 do
          begin
            read(bmp, x);
            if x > 0 then s := s + sym[x]
            else break;
            inc(i)
          end;
        writeln('Прочитанная строка:');
        writeln(s)
      end;
    end;
    if ch[1] in ['1'..'2'] then close(bmp)
  until ch[1] = '3'
end.
Архив файла для теста, чёрный квадрат 8x8: 8x8.zip

Содержимое этого файла
Код
//     #### Заголовок файла BitMapFileHeader
{   0} $42,$4D,         //bfType = 'BM', сигнатура
{   2} $76,$04,$00,$00, //bfSize = 1142, размер файла 
{   6} $00,$00,$00,$00, //bfReserved1 = 0, bfReserved2 = 0, зарезервировано, всегда 0
{  10} $36,$04,$00,$00, //bfOffsetBits = 1078, смещение изображения от начала файла
//     #### Информационный заголовок BitMapInfoHeader
{  14} $28,$00,$00,$00, //biSize = 54-14 = 40, длина заголовка BitMapInfoHeader
{  18} $08,$00,$00,$00, //biWidth = 8, ширина изображения, точки
{  22} $08,$00,$00,$00, //biHeight = 8, высота изображения, точки
{  26} $01,$00,         //biPlanes = 1, число плоскостей изображения
{  28} $08,$00,         //biBitCount = 8, глубина цвета, бит на точку
{  30} $00,$00,$00,$00, //biCompression = 0, тип компрессии (0 - несжатое изображение)
{  34} $40,$00,$00,$00, //biSizeImage = 8*8 = 64 размер изображения, байт
{  38} $00,$00,$00,$00, //biXPelsPerMeter = 0 горизонтальное разрешение, точки на метр (0 - стандартное)
{  42} $00,$00,$00,$00, //biYPelsPerMeter = 0 вертикальное разрешение, точки на метр (0 - стандартное)
{  46} $00,$00,$00,$00, //biColorsUsed = 0 число цветов (0 - максимально возможное для данной глубины цвета)
{  50} $00,$00,$00,$00, //biColorsImportant = 0 число основных цветов
//     #### Палитра ColorTable, длина 256*4=1024
{  54}
//             +0               +1               +2               +3
{*  0+} $00,$00,$00,$00, $00,$00,$80,$00, $00,$80,$00,$00, $00,$80,$80,$00,
{*  4+} $80,$00,$00,$00, $80,$00,$80,$00, $80,$80,$00,$00, $C0,$C0,$C0,$00,
{*  8+} $C0,$DC,$C0,$00, $F0,$CA,$A6,$00, $00,$20,$40,$00, $00,$20,$60,$00,
{* 12+} $00,$20,$80,$00, $00,$20,$A0,$00, $00,$20,$C0,$00, $00,$20,$E0,$00,
{* 16+} $00,$40,$00,$00, $00,$40,$20,$00, $00,$40,$40,$00, $00,$40,$60,$00,
{* 20+} $00,$40,$80,$00, $00,$40,$A0,$00, $00,$40,$C0,$00, $00,$40,$E0,$00,
{* 24+} $00,$60,$00,$00, $00,$60,$20,$00, $00,$60,$40,$00, $00,$60,$60,$00,
{* 28+} $00,$60,$80,$00, $00,$60,$A0,$00, $00,$60,$C0,$00, $00,$60,$E0,$00,
{* 32+} $00,$80,$00,$00, $00,$80,$20,$00, $00,$80,$40,$00, $00,$80,$60,$00,
{* 36+} $00,$80,$80,$00, $00,$80,$A0,$00, $00,$80,$C0,$00, $00,$80,$E0,$00,
{* 40+} $00,$A0,$00,$00, $00,$A0,$20,$00, $00,$A0,$40,$00, $00,$A0,$60,$00,
{* 44+} $00,$A0,$80,$00, $00,$A0,$A0,$00, $00,$A0,$C0,$00, $00,$A0,$E0,$00,
{* 48+} $00,$C0,$00,$00, $00,$C0,$20,$00, $00,$C0,$40,$00, $00,$C0,$60,$00,
{* 52+} $00,$C0,$80,$00, $00,$C0,$A0,$00, $00,$C0,$C0,$00, $00,$C0,$E0,$00,
{* 56+} $00,$E0,$00,$00, $00,$E0,$20,$00, $00,$E0,$40,$00, $00,$E0,$60,$00,
{* 60+} $00,$E0,$80,$00, $00,$E0,$A0,$00, $00,$E0,$C0,$00, $00,$E0,$E0,$00,
{* 64+} $40,$00,$00,$00, $40,$00,$20,$00, $40,$00,$40,$00, $40,$00,$60,$00,
{* 68+} $40,$00,$80,$00, $40,$00,$A0,$00, $40,$00,$C0,$00, $40,$00,$E0,$00,
{* 72+} $40,$20,$00,$00, $40,$20,$20,$00, $40,$20,$40,$00, $40,$20,$60,$00,
{* 76+} $40,$20,$80,$00, $40,$20,$A0,$00, $40,$20,$C0,$00, $40,$20,$E0,$00,
{* 80+} $40,$40,$00,$00, $40,$40,$20,$00, $40,$40,$40,$00, $40,$40,$60,$00,
{* 84+} $40,$40,$80,$00, $40,$40,$A0,$00, $40,$40,$C0,$00, $40,$40,$E0,$00,
{* 88+} $40,$60,$00,$00, $40,$60,$20,$00, $40,$60,$40,$00, $40,$60,$60,$00,
{* 92+} $40,$60,$80,$00, $40,$60,$A0,$00, $40,$60,$C0,$00, $40,$60,$E0,$00,
{* 96+} $40,$80,$00,$00, $40,$80,$20,$00, $40,$80,$40,$00, $40,$80,$60,$00,
{*100+} $40,$80,$80,$00, $40,$80,$A0,$00, $40,$80,$C0,$00, $40,$80,$E0,$00,
{*104+} $40,$A0,$00,$00, $40,$A0,$20,$00, $40,$A0,$40,$00, $40,$A0,$60,$00,
{*108+} $40,$A0,$80,$00, $40,$A0,$A0,$00, $40,$A0,$C0,$00, $40,$A0,$E0,$00,
{*112+} $40,$C0,$00,$00, $40,$C0,$20,$00, $40,$C0,$40,$00, $40,$C0,$60,$00,
{*116+} $40,$C0,$80,$00, $40,$C0,$A0,$00, $40,$C0,$C0,$00, $40,$C0,$E0,$00,
{*120+} $40,$E0,$00,$00, $40,$E0,$20,$00, $40,$E0,$40,$00, $40,$E0,$60,$00,
{*124+} $40,$E0,$80,$00, $40,$E0,$A0,$00, $40,$E0,$C0,$00, $40,$E0,$E0,$00,
{*128+} $80,$00,$00,$00, $80,$00,$20,$00, $80,$00,$40,$00, $80,$00,$60,$00,
{*132+} $80,$00,$80,$00, $80,$00,$A0,$00, $80,$00,$C0,$00, $80,$00,$E0,$00,
{*136+} $80,$20,$00,$00, $80,$20,$20,$00, $80,$20,$40,$00, $80,$20,$60,$00,
{*140+} $80,$20,$80,$00, $80,$20,$A0,$00, $80,$20,$C0,$00, $80,$20,$E0,$00,
{*144+} $80,$40,$00,$00, $80,$40,$20,$00, $80,$40,$40,$00, $80,$40,$60,$00,
{*148+} $80,$40,$80,$00, $80,$40,$A0,$00, $80,$40,$C0,$00, $80,$40,$E0,$00,
{*152+} $80,$60,$00,$00, $80,$60,$20,$00, $80,$60,$40,$00, $80,$60,$60,$00,
{*156+} $80,$60,$80,$00, $80,$60,$A0,$00, $80,$60,$C0,$00, $80,$60,$E0,$00,
{*160+} $80,$80,$00,$00, $80,$80,$20,$00, $80,$80,$40,$00, $80,$80,$60,$00,
{*164+} $80,$80,$80,$00, $80,$80,$A0,$00, $80,$80,$C0,$00, $80,$80,$E0,$00,
{*168+} $80,$A0,$00,$00, $80,$A0,$20,$00, $80,$A0,$40,$00, $80,$A0,$60,$00,
{*172+} $80,$A0,$80,$00, $80,$A0,$A0,$00, $80,$A0,$C0,$00, $80,$A0,$E0,$00,
{*176+} $80,$C0,$00,$00, $80,$C0,$20,$00, $80,$C0,$40,$00, $80,$C0,$60,$00,
{*180+} $80,$C0,$80,$00, $80,$C0,$A0,$00, $80,$C0,$C0,$00, $80,$C0,$E0,$00,
{*184+} $80,$E0,$00,$00, $80,$E0,$20,$00, $80,$E0,$40,$00, $80,$E0,$60,$00,
{*188+} $80,$E0,$80,$00, $80,$E0,$A0,$00, $80,$E0,$C0,$00, $80,$E0,$E0,$00,
{*192+} $C0,$00,$00,$00, $C0,$00,$20,$00, $C0,$00,$40,$00, $C0,$00,$60,$00,
{*196+} $C0,$00,$80,$00, $C0,$00,$A0,$00, $C0,$00,$C0,$00, $C0,$00,$E0,$00,
{*200+} $C0,$20,$00,$00, $C0,$20,$20,$00, $C0,$20,$40,$00, $C0,$20,$60,$00,
{*204+} $C0,$20,$80,$00, $C0,$20,$A0,$00, $C0,$20,$C0,$00, $C0,$20,$E0,$00,
{*208+} $C0,$40,$00,$00, $C0,$40,$20,$00, $C0,$40,$40,$00, $C0,$40,$60,$00,
{*212+} $C0,$40,$80,$00, $C0,$40,$A0,$00, $C0,$40,$C0,$00, $C0,$40,$E0,$00,
{*216+} $C0,$60,$00,$00, $C0,$60,$20,$00, $C0,$60,$40,$00, $C0,$60,$60,$00,
{*220+} $C0,$60,$80,$00, $C0,$60,$A0,$00, $C0,$60,$C0,$00, $C0,$60,$E0,$00,
{*224+} $C0,$80,$00,$00, $C0,$80,$20,$00, $C0,$80,$40,$00, $C0,$80,$60,$00,
{*228+} $C0,$80,$80,$00, $C0,$80,$A0,$00, $C0,$80,$C0,$00, $C0,$80,$E0,$00,
{*232+} $C0,$A0,$00,$00, $C0,$A0,$20,$00, $C0,$A0,$40,$00, $C0,$A0,$60,$00,
{*236+} $C0,$A0,$80,$00, $C0,$A0,$A0,$00, $C0,$A0,$C0,$00, $C0,$A0,$E0,$00,
{*240+} $C0,$C0,$00,$00, $C0,$C0,$20,$00, $C0,$C0,$40,$00, $C0,$C0,$60,$00,
{*244+} $C0,$C0,$80,$00, $C0,$C0,$A0,$00, $F0,$FB,$FF,$00, $A4,$A0,$A0,$00,
{*248+} $80,$80,$80,$00, $00,$00,$FF,$00, $00,$FF,$00,$00, $00,$FF,$FF,$00,
{*252+} $FF,$00,$00,$00, $FF,$00,$FF,$00, $FF,$FF,$00,$00, $FF,$FF,$FF,$00,
//      #### Изображение Image, по строкам слева направо и СНИЗУ ВВЕРХ, длина = 8*8 = 64
{1078}
$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,


То, что под спойлером, можно использовать как шаблон для создания .BMP файлов.

Вернуться к обсуждению:
Превратить сообщение азбуки Морза 64 символа в графическое изображение размером 8*8
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2021, 23:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Графическое изображение
Написать программу, которая выводит на экран любое графическое изображение (по усмотрению...

Графическое изображение
На форме должен лежать компонент TImage

Графическое изображение делимости
помогите пожалуйста через два дня надо показать решения задание№1 написать программу для...

Графическое изображение множеств
Я новичок в программирование и мне нужна помощь в одной задаче. Суть вот в чём: Есть программка...

Построить графическое изображение
С использованием модуля работы с графикой составить программу для рисования на экране трех...

Графическое изображение в движении
изображение кота двигающего усами, глазами и хвостом.

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.