Вывести количество этажей в здании и количество зданий такой этажности - Turbo Pascal

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

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

Цифровая модель плана местности, полученный со спутника, представляет собой прямоугольную таблицу, в клетки которой записаны целые числа. Если значение в клетки равно нулю, то эта клетка не принадлежит ни одному зданию, если не равно нулю - то принадлежит зданию, при этом значение отражает количество этажей в здании. Вам необходимо написать программу, которая подсчитывает общее количество зданий, изображенных на плане, а также отдельно количество зданий различной этажности. Все здания на плане представляют собой прямоугольники, которые нигде не накладываются и не касаются друг друга. Этажность зданий не превышает 20.

Входные данные:

В первой строке входных данных содержится два целых числа разделенные пробелом N, M - размеры таблицы (0<N, M <= 100). Далее в N строках содержится по М чисел, разделенных пробелом - значения элементов таблицы.

Исходные данные:

В первой строке исходных данных необходимо вывести одно целое число - количество зданий на плане. В следующих строках выводится по два числа через символ "-" (минус): количество этажей в здании и количество зданий такой этажности в порядке возрастания количества этажей. Пример входных и выходных данных:

Входные данные:

8 8 1 0 0 0 0 0 0 0 0 0 0 5 5 5 0 0 9 0 0 5 5 5 0 0 9 0 0 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0

Исходные данные:

4 1-2 5-1 9-1

Решение задачи: «Вывести количество этажей в здании и количество зданий такой этажности»

textual
Листинг программы
var
a:array[0..100,0..100]of integer;
b:array[1..20]of integer;
f:text;
n,m,i,j,kol,c:integer;
begin
assign(f,'in.txt');
reset(f);
readln(f,n,m);
for i:=1 to n do
for j:=1 to m do
read(f,a[i,j]);
close(f);
for i:=1 to n do
a[i,0]:=0;
for i:=1 to m do
a[0,i]:=0;
for i:=1 to n do
for j:=1 to m do
if (a[i,j-1]=0)and(a[i-1,j]=0)and(a[i,j]<>0) then
begin
inc(kol);
c:=a[i,j];
inc(b[c]);
end;
writeln(kol);
for i:=1 to 20 do
if b[i]<>0 then writeln(i,'-',b[i]);
end.

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

  1. Создается переменная a, которая представляет собой массив целых чисел размером 100x100.
  2. Создается переменная b, которая представляет собой массив целых чисел размером 21x1.
  3. Создается переменная f, которая представляет собой файл для чтения и записи.
  4. Задается имя файла для чтения и записи в переменную f.
  5. С помощью функции reset(f) сбрасывается состояние файла.
  6. С помощью функции readln(f,n,m) считывается количество строк и столбцов из файла.
  7. Для каждой строки и столбца считывается значение в переменную a с помощью функции read(f,a[i,j]).
  8. После окончания чтения файла вызывается функция close(f).
  9. Для каждой строки a устанавливается значение первого столбца равным 0 с помощью команды a[i,0]:=0.
  10. Для каждого столбца a устанавливается значение первого ряда равным 0 с помощью команды a[0,i]:=0.
  11. Запускается цикл for, который проверяет каждый элемент массива a на равенство нулю. Если элемент равен нулю, то увеличивается счетчик kol, значение элемента a[i,j] сохраняется в переменной c, и увеличивается значение в соответствующем элементе массива b.
  12. После завершения цикла for выводится значение счетчика kol.
  13. Запускается цикл for, который проверяет каждый элемент массива b на равенство нулю. Если элемент не равен нулю, то выводится его значение, разделенное тире и пробелом.
  14. После завершения цикла for выводится сообщение о том, что в массиве b остались неотобранные элементы.

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


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

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

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