Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2011, 17:10   #1
Alexey355
 
Регистрация: 12.03.2011
Сообщений: 5
Восклицание что неверно в составленной программе?

она выводит только последнее в коде сообщение.

условие такое:
если столбцы прямоугольной целочисленной матрицы расположены в порядке возрастания числа нулевых элементов в них то подсчитать число нулевых элементов во всей матрице, иначе определить столбец с максимальным количеством нулей

Код:
program ADR_433_11;
type matr=array [1..7,1..10] of integer;

procedure input(var X:matr; var m,n:integer);
var i,j:integer;
begin
writeln('введите кол-во строк m');
read(m);
writeln('введите кол-во столбцов n');
read(n);
writeln('введите матрицу X(mхn)');
for i:=1 to m do
for j:=1 to n do
read(X[i,j]);
end;

function f1(var X:matr; var s1,m,n:integer; var flag:boolean):integer;
var k,i,j:integer;
begin
 for j:=1 to n do
         begin
              s1:= 0;
              for i:=1 to m do
              if (X[i,j]=0) then s1:=s1+1;
         end;
flag:=true;
j:=2;
while(j<=n)and flag do
begin
  k:=0;
  for i:=1 to m do
  if X[i,j]=0 then k:=k+1;
  if k<=s1 then flag:=false else
     begin
     s1:=k;
     j:=j+1;
     end;
end;
end;
 
function f2(var X:matr; var max0,m,n:integer; var stmax0:integer):integer;
var i,j:integer;
    kol0:integer;
begin
  max0:=0;
     for j:=1 to n do
         begin
              kol0:=0;

              for i:=1 to m do
              if (X[i,j]=0) then kol0 := kol0 + 1;
              if (kol0 > max0) then
                 begin
                      max0 := kol0;
                      stmax0 := j;
                 end;
         end;
end;

var A:matr;
    i,j,m,n,max0,stmax0,s1,k:integer;
    flag:boolean;
    
begin
input(A,m,n);
f1(A,s1,m,n,flag);
if flag=true then
writeln('нулевых элементов в матрице',s1) else
begin
f2(A,max0,m,n,stmax0);
writeln('Столбец с наибольшим кол-вом нулей имеет номер ', stmax0, ', нулей в нём ', max0);
end;
end.

Последний раз редактировалось AlDelta; 12.03.2011 в 17:30.
Alexey355 вне форума Ответить с цитированием
Старый 12.03.2011, 17:38   #2
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

в функции f1, эту строчку "s1:= 0"; вынесите за цикл, а то у вас, при при переходе на следующий столбец, s1 всё время обнуляется и программа выполняет вот это действие "if k<=s1 then flag:=falsе".

Последний раз редактировалось Антон Лысенко; 12.03.2011 в 17:56.
Антон Лысенко вне форума Ответить с цитированием
Старый 12.03.2011, 17:57   #3
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

А не, извините не так. но смотрите у вас что-то с флагом.
Антон Лысенко вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль CRT. Программа по составленной программе. Zastiesto Паскаль, Turbo Pascal, PascalABC.NET 1 06.03.2011 15:04
что такое k в программе. sanya94 Помощь студентам 2 03.02.2011 20:20
Что-то не так в программе...не пойму что Karina_Vamp Помощь студентам 5 24.12.2010 21:06
Подскажите, что неверно написано?.. katris Помощь студентам 0 25.10.2009 16:11
Что неверно в макросе? Иванов_ДМ Microsoft Office Excel 11 22.05.2009 21:57