Задача: и 2-й массив и черно-белое изображение - Turbo Pascal
Формулировка задачи:
Самый простой способ представления изображений в памяти компьютера заключается в том, что для каждого пикселя в файл записывается его цвет. То, как этот цвет представляется в памяти компьютера, зависит от выбора цветовой модели изображения. Так, если изображение черно-белое, цвет каждого пикселя может быть представлен всего одним числом, равным нулю, если пиксель белый, и единице, если пиксель черный. Кроме информации о цветах пикселей, в файле с изображением хранятся его размеры (высота и ширина).
Известно, что данный вам файл с черно-белым изображением содержал полностью белый прямоугольник из n строчек и m столбцов, в котором ровно один столбец состоял из пикселей черного цвета. К сожалению, информация о исходных размерах изображения утеряна, и вам необходимо ее восстановить, или же выяснить, что вам дан некорректный набор цветов пикселей и восстановить эту информацию невозможно.
Формат входного файла
В первой строке входного файла input.txt находится одно натуральное число p (2 ≤ p ≤ 1000), равное произведению размеров исходного изображения. В следующей строке перечислены p цветов пикселей самого изображения. Сначала перечислены цвета пикселей первой строки слева направо, затем — второй, и так далее. Цвета пикселей разделены пробелами, каждый цвет является числом, равным 0, если пиксель белый, или 1, если пиксель черный.Формат выходного файла
В первой строке выходного файла output.txt требуется вывести два числа n и m таких, что их произведение равно числу p. Кроме этого, после записи данных во входном файле пикселей в таблицу из n строчек и m столбцов, должна получаться таблица, в которой ровно один столбец полностью состоит из единиц, а вся остальная таблица заполнена нулями. В случае, если ответов, отвечающих описанным выше условиям, несколько, выведите любой. В случае, если ни одного ответа не существует, выведите в выходной файл слово Impossible. Пример входных и выходных данныхinput.txt
6 0 1 0 0 1 0output.txt
2 3input.txt
12 0 0 1 0 0 0 1 0 0 0 1 0output.txt
3 4input.txt
12 0 0 1 0 0 0 1 0 0 0 0 0output.txt
ImpossibleРешение задачи: «Задача: и 2-й массив и черно-белое изображение»
textual
Листинг программы
const InFIle='Input.txt'; OutFile='output.txt'; var f : text; n,m,p,c : word; b,otstup : byte; first,error : boolean; Begin assign(f,InFile); reset(f); readln(f,p); n:=0; c:=0; first:=true; otstup:=0; error:=false; while (not eof(f)) and (not error) do begin read(f,b); inc(c); inc(n); if b=1 then begin if first then begin first:=otstup=0; otstup:=c; m:=n; end else begin error:=n<>m; end; n:=0; end; end; close(f); n:=n+otstup-m; error:=error or (p mod n <> 0) or (p<>c) or (m<>n); n:=p div m; assign(f,OutFile); rewrite(f); if error then writeln(f,'Impossible') else writeln(f,n,' ',m); close(f); writeln('Result in file ',OutFile); readln; End.
Объяснение кода листинга программы
- В начале кода объявляются переменные: InFIle, OutFile, f, n, m, p, c, b, otstup, first, error.
- Константы InFIle и OutFile указывают на имена файлов для чтения и записи соответственно.
- Переменная f типа text используется для чтения из файла.
- Переменные n и m типа word используются для хранения числовых значений.
- Переменные b и otstup типа byte используются для хранения байтовых значений.
- Переменная first типа boolean используется для отслеживания первого прочитываемого байта.
- Переменная error типа boolean используется для отслеживания ошибок при чтении файла.
- В цикле while происходит чтение байтов из файла до тех пор, пока не достигнут конец файла или не произошла ошибка при чтении.
- Внутри цикла происходит проверка на последний байт, который должен быть равен 1. Если это так, то переменная first устанавливается в true, что означает, что первый байт был прочитан успешно.
- Если это не последний байт, то переменная error устанавливается в true, если текущий байт не равен предыдущему. Это может означать, что данные в файле не соответствуют ожидаемому формату.
- После завершения цикла while происходит закрытие файла.
- Затем переменная n устанавливается равной сумме переменных c и otstup. Это позволяет вычислить общее количество байтов, которые были прочитаны из файла.
- Затем переменная error устанавливается равной ошибке, которая может возникнуть при делении переменной n на переменную p.
- Если операция деления вызывает ошибку, то выводится сообщение об ошибке.
- Если нет ошибки, то выводятся значения переменных n и m в файл output.txt.
- В конце кода выводится сообщение
Result in file output.txt
. - Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д