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