Вывести количество этажей в здании и количество зданий такой этажности - 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Решение задачи: «Вывести количество этажей в здании и количество зданий такой этажности»
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.
Объяснение кода листинга программы
- Создается переменная
a
, которая представляет собой массив целых чисел размером 100x100. - Создается переменная
b
, которая представляет собой массив целых чисел размером 21x1. - Создается переменная
f
, которая представляет собой файл для чтения и записи. - Задается имя файла для чтения и записи в переменную
f
. - С помощью функции
reset(f)
сбрасывается состояние файла. - С помощью функции
readln(f,n,m)
считывается количество строк и столбцов из файла. - Для каждой строки и столбца считывается значение в переменную
a
с помощью функцииread(f,a[i,j])
. - После окончания чтения файла вызывается функция
close(f)
. - Для каждой строки
a
устанавливается значение первого столбца равным 0 с помощью командыa[i,0]:=0
. - Для каждого столбца
a
устанавливается значение первого ряда равным 0 с помощью командыa[0,i]:=0
. - Запускается цикл
for
, который проверяет каждый элемент массиваa
на равенство нулю. Если элемент равен нулю, то увеличивается счетчикkol
, значение элементаa[i,j]
сохраняется в переменнойc
, и увеличивается значение в соответствующем элементе массиваb
. - После завершения цикла
for
выводится значение счетчикаkol
. - Запускается цикл
for
, который проверяет каждый элемент массиваb
на равенство нулю. Если элемент не равен нулю, то выводится его значение, разделенное тире и пробелом. - После завершения цикла
for
выводится сообщение о том, что в массивеb
остались неотобранные элементы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д