Перевести цветной рисунок в чёрно-белый - Pascal

Узнай цену своей работы

Формулировка задачи:

Задача с informatics.mccme.ru Алгоритм решения я понимаю, но с написанием программ я не дружу Яркости пикселей рисунка закодированы числами от 0 до 255 в виде матрицы. Преобразовать рисунок в черно-белый по следующему алгоритму: 1. Вычислить среднюю яркость пикселей по всему рисунку 2. Все пиксели, яркость которых меньше средней, сделать черными (записать код 0), а остальные – белыми (код 255) Входные данные: В первой строке записаны через пробел размеры матрицы: количество строк N и количество столбцов M ( 1 ≤ N , M ≤ 100 ). В следующих N строках записаны строки матрицы, в каждой – по M натуральных чисел в диапазоне от 0 до 255, разделённых пробелами. Выходные данные: Программа должна вывести в первой строчке среднее значение яркости для заданного рисунка с точностью 4 знака в дробной части. В следующих N строчках выводится построенная матрица, соответствующая чёрно-белому изображению. Примеры: Входные данные: 4 4 12 14 67 45 32 87 45 63 69 45 14 11 40 12 35 15 Выходные данные: 37.8750 0 0 255 255 0 255 255 255 255 255 0 0 255 0 0 0 P.S. Подобного на форуме не нашёл, поэтому и создал, ибо не один я, наверное, такой)

Решение задачи: «Перевести цветной рисунок в чёрно-белый»

textual
Листинг программы
var i, j, n, m: byte;
    s: real;
    a: array [1..100, 1..100] of byte;
begin
  s := 0;
  readln(n, m);
  writeln(n, m);
  for i := 1 to n do
    begin
      for j := 1 to m do
        begin
          read(a[i, j]);
          s  := s + a[i, j]
        end;
      readln
    end;
  s := s / n / m;
  writeln(s:0:4);
  for i := 1 to n do
    begin
      for j := 1 to m do
        begin
          if a[i, j] < s then a[i, j] := 0 else a[i, j] := 255;
          write(a[i, j], ' ')
        end;
      writeln
    end;
  readln
end.

Объяснение кода листинга программы

  1. Объявлены переменные: i, j, n, m (номер строки: 3) - индексы для работы с массивом; s (номер строки: 4) - для хранения суммы цветов; a (номер строки: 5) - массив для хранения цвета пикселей;
  2. Задаются начальные значения переменных: s := 0; (номер строки: 6)
  3. Считываются размеры изображения: readln(n, m); (номер строки: 7)
  4. Выводится размер изображения: writeln(n, m); (номер строки: 8)
  5. Запускается двойной цикл for для считывания цвета каждого пикселя: for i := 1 to n do begin for j := 1 to m do begin (номер строки: 9)
  6. Считывается цвет пикселя: read(a[i, j]); (номер строка: 10)
  7. Цвет пикселя прибавляется к переменной s: s := s + a[i, j]; (номер строка: 11)
  8. Выводится цвет пикселя: write(a[i, j], ' '); (номер строка: 12)
  9. Двойной цикл for завершается: end; end; (номер строки: 13)
  10. Вычисляется средний цвет: s := s / n / m; (номер строки: 14)
  11. Выводится средний цвет: writeln(s:0:4); (номер строки: 15)
  12. Запускается двойной цикл for для перебора пикселей и изменения их цвета: for i := 1 to n do begin for j := 1 to m do begin (номер строки: 16)
  13. Проверяется, если цвет пикселя меньше среднего, то пиксель закрашивается черным, иначе - белым: if a[i, j] < s then a[i, j] := 0 else a[i, j] := 255; (номер строки: 17)
  14. Выводится цвет пикселя: write(a[i, j], ' '); (номер строка: 18)
  15. Двойной цикл for завершается: end; end; (номер строки: 19)
  16. Завершается работа программы: readln; (номер строки: 20)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы