Задача: и 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 0

output.txt

2 3

input.txt

12 0 0 1 0 0 0 1 0 0 0 1 0

output.txt

3 4

input.txt

12 0 0 1 0 0 0 1 0 0 0 0 0

output.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.

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

  1. В начале кода объявляются переменные: InFIle, OutFile, f, n, m, p, c, b, otstup, first, error.
  2. Константы InFIle и OutFile указывают на имена файлов для чтения и записи соответственно.
  3. Переменная f типа text используется для чтения из файла.
  4. Переменные n и m типа word используются для хранения числовых значений.
  5. Переменные b и otstup типа byte используются для хранения байтовых значений.
  6. Переменная first типа boolean используется для отслеживания первого прочитываемого байта.
  7. Переменная error типа boolean используется для отслеживания ошибок при чтении файла.
  8. В цикле while происходит чтение байтов из файла до тех пор, пока не достигнут конец файла или не произошла ошибка при чтении.
  9. Внутри цикла происходит проверка на последний байт, который должен быть равен 1. Если это так, то переменная first устанавливается в true, что означает, что первый байт был прочитан успешно.
  10. Если это не последний байт, то переменная error устанавливается в true, если текущий байт не равен предыдущему. Это может означать, что данные в файле не соответствуют ожидаемому формату.
  11. После завершения цикла while происходит закрытие файла.
  12. Затем переменная n устанавливается равной сумме переменных c и otstup. Это позволяет вычислить общее количество байтов, которые были прочитаны из файла.
  13. Затем переменная error устанавливается равной ошибке, которая может возникнуть при делении переменной n на переменную p.
  14. Если операция деления вызывает ошибку, то выводится сообщение об ошибке.
  15. Если нет ошибки, то выводятся значения переменных n и m в файл output.txt.
  16. В конце кода выводится сообщение Result in file output.txt.
  17. Конец программы.

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


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

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

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