Задача: и 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-й массив и черно-белое изображение - Turbo Pascal»

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.

11   голосов, оценка 3.909 из 5


СОХРАНИТЬ ССЫЛКУ