Помощь - Поиск - Пользователи - Календарь
Полная версия: неубывание и убывание строк матриц
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
klim
Вот условие:
Даны 2 матрицы действительной размерности. Упорядочить элементы строк матрицы по невозрастанию, если модуль среднего арифметического отрицательных элементов меньше предпоследнего элемента строки, а иначе упорядочить по неубыванию.
Вот я пробовал решать:
Код
Program kur;
type vect=array[1..7,1..7] of integer;  
var b,c:vect;  
rv1,rv2,rh1,rh2,i,j,m,s,k,p:integer;  
s1:real;  
procedure vvod(var a:vect;n,m:integer);  
begin  for i:=1 to n do  
for j:=1 to m do  
read(a[i,j]);  
end;  
procedure proc(var a:vect;n,m:integer);  
label 50;
begin  
  for i:=1 to n do
begin  
for j:=1 to m do  
if a[i,j]<0 then  
begin
s1:=s1+a[i,j];
k:=k+1;  
end;
if k<>0 then
begin  
if abs(s1/k)<a[i,m-1] then  
begin  for j:=1 to m-1 do
begin  
s:=k;
for k:=j to m do  
if a[i,j]<a[i,s] then  
s:=k;p:=a[i,j];
a[i,j]:=a[i,s];
a[i,s]:=p;
end;  
end;  
end;
goto 50;  
for j:=1 to m-1  do
begin
s:=k;
for k:=j to m do
if a[i,j]>a[i,s] then
s:=k;  
p:=a[i,j];
a[i,j]:= a[i,s];
a[i,s]:=p;  
end;  
50 :;i:=i;
end;  
end;  
procedure vyvod(var a:vect;n,m:integer);  
begin  
for i:=1 to n do
for j:=1 to m do
write(a[i,j],' ');
writeln;  
end;  
begin
read(rv1,rh1);
  read(rv2,rh2);
vvod(b,rv1,rh1);
  vvod(c,rv2,rh2);
proc(b,rv1,rh1);
proc(c,rv2,rh2);  
vyvod(b,rv1,rh1);  
vyvod(c,rv2,rh2);  
end.  


А вот мне помогали:
Код

program kursovaya;  
type vect=array[1..7,1..7] of integer;
var bm,cm:vect;
rv1,rh1,rv2,rh2,i,i1,j,k,p,s,aq,bq,q,x:integer;
procedure proc(var a:vect;var h,v:integer);  
var b :array [1..7] of real;
begin  
for j:=1 to v do
begin  
q:=0;
for i:=1 to h do  
if a[i,j]<0 then
begin
q:=q+a[i,j];
x:=x+1;
end;  
if q<>0 then
b[j]:=abs(q/x);  
end;  
for i1:=1 to v do
begin  
if a[h-1,i1]<b[i1] then    
for i:=1 to h-1 do  
begin  
k:=i;  
for j:=i to h do  
if a[k,i1]>a[j,i1] then
k:=j;  
p:=a[k,i1];  
a[k,i1]:=a[i,i1];  
a[i,i1]:=p;  
end  
else  
for i:=1 to h-1 do  
begin  
k:=i;  
for j:=i to h do
if a[k,i1]<a[j,i1] then
k:=j;  
p:=a[k,i1];  
a[k,i1]:=a[i,i1];  
a[i,i1]:=p;  
end;    
end;  
end;  
procedure vvod(var f:vect;var h,v:integer);
begin
for i:=1 to v do
for j:=1 to h do
read(f[j,i]);  
end;  
procedure vyvod(var f:vect;var  h,v:integer);  
begin  
for i:=1 to v do  
begin
for j:=1 to h do  
write(f[j,i]);  
writeln;  
end;  
end;
begin  
read(rv1,rh1);  
read(rv2,rh2);  
vvod(bm,rv1,rh1);  
vvod(cm,rv2,rh2);  
proc(bm,rv1,rh1);  
proc(cm,rv2,rh2);  
vyvod(bm,rv1,rh1);  
vyvod(cm,rv2,rh2);    
end.    

но не одна из них правильно не работае. Прошу помогите кто чем может, или скажите что не так в них. Буду очень благодарен.
volvo
Ты опять за свое? Опять непонятно, что есть что... Где СТРОКИ матрицы? Что за обозначение такое, v? Зачем же ты просишь помощи, если то, что тебе показыают ТУТ ЖЕ благополучно отметается, и в следующей же программе ты опять ходишь по тем же граблям?

Зайди туда где я тебе исправил первую программу, и приведи ЭТО к подобному виду. А когда приведешь - возвращайся, поможем...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.