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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2011, 22:37   #1
HuBuDuMkA
Новичок
Джуниор
 
Регистрация: 21.12.2011
Сообщений: 2
Восклицание заданной прямоугольной матрице поставить на первое место столбец с наименьшим количеством нулевых элементов (Паскаль, Фортран)

закончить решение
нужно проверить и добавить перестановку нулей в конец столбца
решение сначала на паскале потом на фортране
ответ можно написать либо в том либо в том,переведу сам

1) В заданной прямоугольной матрице поставить на первое место столбец с наименьшим количеством нулевых элементов, переставив все нули в конец этого столбца. (Изменённая матрица должна содержать все элементы исходной матрицы).


Код:
unit modul1;

 interface

 const M = 5; N = 4;

 type matr = array[1..N, 1..M] of real;

 procedure vvod(var a: matr);
 procedure vivod(a: matr);
 function kolnul(a: matr; col: integer):integer;
 procedure minnul(var a: matr);

 implementation

 procedure vvod(var a: matr);
 var i,j:integer;
 begin
 writeln('Input matr: ');
 for i:=1 to N do
 for j:=1 to M do
 read(a[i,j]);
 end;

 procedure vivod(a:matr);
 var i,j:integer;
 begin
 for i:=1 to n do
 begin
 for j:=1 to m do
 write(a[i,j]:5:2);
 writeln;
 end;
 end;

 function kolnul(a:matr; col: integer): integer;
 var
 i:integer;
 k: integer;
 begin
 k := 0;
 for i:=1 to m do
 if a[i, col]=0 then
 k := k + 1;
 kolnul := k;
 end;

 procedure minnul(var a:matr);
 var i,j,minN,kolN:integer;
 buf:real;
 begin
 minN:=1;
 kolN:=kolnul(a,minN);
 for i:=2 to m do
 if kolnul(a,i)<kolN then
 begin
 kolN:=kolnul(a,i);
 minN:=i;
 end;
 for i:=1 to n do
 begin
 buf:=a[i,minN];
 a[i,minN]:=a[i,1];
 a[i,1]:=buf;
 end;

 for i:=1 to N do
 begin
 writeln(i);
 if a[i, 1] = 0 then 
 begin 
 j := i;
 while (a[j,1] <> 0) or (j = n) do begin
 writeln(j);
 inc(j); 
 end;
 a[i, 1] := a[j, 1]
 end;
 for i:=n downto n - kolN + 1 do
 a[i, n] := 0;
 end;
 end;


 end.



Код:
program p2

dimension a(5,7)
real A
integer i,j,n,m
write(*,*)'BBedute N'
read(*,*)n
write(*,*)'BBedute M'
read(*,*)m
write(*,*)'BBedute A'
read(*,*)((A(i,j),j=1,5),i=1,5)

call kolnul(a,m,col)

write(*,*)'izm matrica'
write(*,36)((A(i,j),j=1,5),i=1,5)
36 Format((1x,5(F5,1,1x)))


 integer function kolnul(a,m,col)
 k=0
 do i=1,m
 if (a(i,col)==0) then
 k=k+1
 kolnul=k
 end do
 end

subroutine minnul(a,minN,kolN);
 integer i,j,minN,kolN
 real buf
 minN=1
 kolN=kolnul(a,minN)
 for i:=2 to m do
 if (kolnul(a,i)<kolN) then
 kolN=kolnul(a,i)
 minN=i
 do i=1,n
 buf=a(i,minN)
 a(i,minN)=a(i,1)
 a(i,1)=buf
 end do
end if
end

Последний раз редактировалось HuBuDuMkA; 21.12.2011 в 22:45.
HuBuDuMkA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчитать в матрице количество элементов в строке, больше заданной величины (Турбо Паскаль) Дмитрий1992 Паскаль, Turbo Pascal, PascalABC.NET 4 21.12.2010 15:37
Найти строку и столбец матрицы, которые содержат наибольшее число нулевых элементов sashechyshka Помощь студентам 2 09.11.2010 20:06
Задача на СИ в заданной матрице поменять местами первую строку и первый столбец %( defol-777 Помощь студентам 2 14.01.2009 09:59
В прямоугольной матрице переставить столбцы так, чтобы сумма элементов столбца росла от первого столбца Aleo13 Помощь студентам 5 15.10.2008 18:34