Работа с массивами! - Pascal

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

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

Здравствуйте! Помогите найти ошибку в программе. Вот задача: Дана прямоугольная матрица А, состоящая из нулей и единиц. Посчитать в ней “веса” строк, т.е. отношение числа единиц в строке к общему числу элементов строки. Строки с “весом”, меньшим 0,5 , вычеркнуть, осуществив сжатие матрицы. Далее тоже проделать для столбцов уже сжатой матрицы. Написал код, но в некоторых случаях выводит результат неправильно. Код программы:

Решение задачи: «Работа с массивами!»

textual
Листинг программы
program qwerty;
uses crt;
const NN = 20;
type AA = array[1..NN,1..NN] of byte;
procedure delrow(K,M: byte; var Q: byte; var A: AA);
var i,j: byte;
begin
if k=q then q:=q-1
else
 begin
  for i:=K to Q-1 do
  for j:=1 to M do
  A[i,j]:=A[i+1,j];
  q:=q-1;
 end;
end;
procedure delcol(K,N: byte; var Q: byte; var A: AA);
var i,j: byte;
begin
if k=q then q:=q-1
else
 begin
  for j:=K to Q-1 do
  for i:=1 to N do
  A[i,j]:=A[i,j+1];
  q:=q-1;
 end;
end;
procedure readmatrix(N,M: integer; var A: AA);
var i,j: byte;
begin
for i:=1 to N do
for j:=1 to M do
A[i,j]:=random(2);
end;
procedure writematrix(N,M: integer; var A: AA);
var i,j: byte;
begin
for i:=1 to N do
 begin
  for j:=1 to M do
  write(A[i,j]:3);
  writeln;
 end;
writeln;
end;
var A: AA;
    N,M,K,c,i,j: byte;
    v:real;
begin
clrscr;
write('Vvedite kol-vo strok N=');
readln(N);
write('Vvedite kol-vo stolbcov M=');
readln(M);
readmatrix(N,M,A);
writeln('Matrix A:');
writematrix(N,M,A);
i:=1;
while i<=n do
 begin
  c:=0;
  for j:=1 to M do
  if A[i,j]=1 then c:=c+1;
  v:=c/m;
  writeln('Ves stroki ',i,'=',v:0:1);
  if v<0.5 then  delrow(i,M,N,A)
  else i:=i+1;
 end;
if n=0 then
 begin
  write('Vse stroki udaleny, programma zavershena.');
  readln;
  exit;
 end;
writeln;
writeln('Udalenie strok:');
writematrix(N,M,A);
write('Press Enter...');
readln;
j:=1;
while j<=m do
 begin
  c:=0;
  for i:=1 to N do
  if A[i,j]=1 then c:=c+1;
  v:=c/n;
  writeln('Ves stolbca ',j,'=',v:0:1);
  if v<0.5 then delcol(j,N,M,A)
  else j:=j+1;
 end;
if m=0 then
 begin
  write('Vse stolbcy udaleny, programma zavershena.');
  readln;
  exit;
 end;
writeln('Udalenie stolbcov:');
writematrix(N,M,A);
write('Press Enter...');
readln
end.

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


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

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

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