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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2008, 12:51   #1
Absent
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 67
Стрелка Работа с матрицей

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

ПРограмму написал, на мой взгляд все правильно, но ничего не считает. Ошибок никаких не выдает. Где я не прав? Помогите пожалуйста.

Код:
program BAH9i;
{$APPTYPE CONSOLE}
uses
  SysUtils;
const
n=3;
m=4;
type
matr=array[1..n,1..m] of integer;
mass=array[1..m] of integer;
Var
d,i,j,k:integer;
A,matrST:matr;
Summi,MAS:mass;


Procedure STOLB( Var k:integer);
Var
i,j:integer;
sum,max:integer;
  begin
  sum:=0;
  for j:=1 to m do
  for i:=1 to n do
    begin
    if i=1 then sum:=0;
    sum:=sum+A[i,j];
    if i=n then
    Summi[j]:=sum;
    end;

  max:=Summi[1];
  for j:=1 to m do

    begin
    if max<Summi[j] then
    k:=j;
    end;
  END;


Procedure MartiCA(Var matrST:matr );
VAr
i,j:integer;
begin
i:=1;
J:=1 ;
while J=k do
  begin
  MatrST[i,j]:=A[i,j];
  if i=n then I:=1
         else
         I:=i+1;
  j:=j+1;

  end;
END;


Procedure MASSIV(Var mas:mass);
VAr
i:integer;
begin
for i:=1 to n do
Mas[i]:=A[i,k];
END;



BEGIN
Write ('HOMEP sToLBCA =');
read(d);
for i:=1 to n do
For j:=1 to m do
  begin
  writeln('A[',i,',',j,']=');
  read(A[i,j]);
  end;

STOLB(k);
if d>k then
  begin
  MartiCA(matrST);


  for i:=1 to n do
  for j:=1 to k do
    begin
    write(matrST[i,j]);
    end;
  end;
if  d<=k then
  begin
  MASSIV(mas);
  for i:=1 to n do
  write('Mas[',i,']=',mas[i]);
  end;
readln;
END.
Absent вне форума Ответить с цитированием
Старый 17.05.2008, 14:07   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Что-то у тебя много напутано со столбцами и строками.
Вот попробуй так
Код:
program BAH9i;   
{$APPTYPE CONSOLE}   
uses   
  SysUtils;   
const   
n=3;   
m=4;   
type   
matr=array[1..n,1..m] of integer;   
mass=array[1..n] of integer;   
Var   
d,i,j,k:integer;   
A,matrST:matr;   
Summi,MAS:mass;   
  
  
Procedure STOLB( Var k:integer);   
Var   
i,j:integer;   
sum,max:integer;   
  begin   
  sum:=0;   
  for j:=1 to m do   
  for i:=1 to n do   
    begin
    if i=1 then sum:=0;   
    sum:=sum+A[i,j];   
    if i=n then   
    Summi[j]:=sum;   
    end;   

  k:=1;
  max:=Summi[1];
  for j:=1 to m do

    begin   
    if max<Summi[j] then   
    k:=j;   
    end;   
  END;   
  
  
Procedure MartiCA(Var matrST:matr );   
VAr   
i,j:integer;   
begin   
i:=1;   
J:=1 ;   
while J<k do
  begin   
  MatrST[i,j]:=A[i,j];   
  if i=n then begin I:=1; j:=j+1; end
         else   
         I:=i+1;
  end;   
END;
  
Procedure MASSIV(Var mas:mass);   
VAr   
i:integer;   
begin   
for i:=1 to n do
Mas[i]:=A[i,k];
END;
  
BEGIN   
Write ('HOMEP sToLBCA =');   
read(d);   
for i:=1 to n do
For j:=1 to m do
  begin
  //writeln('A[',i,',',j,']=');
  {read(}A[i,j]:=random(10);//);
  end;

for i:=1 to n do begin
For j:=1 to m do
  write(A[i,j]);
  writeln;
  end;
STOLB(k);

if d<k then
  begin   
  MartiCA(matrST);
  for i:=1 to n do  begin
  for j:=1 to k-1 do
    //begin
    write(matrST[i,j]);
    writeln 
    end;   
  end;
if  d>=k then
  begin
  MASSIV(mas);
  for i:=1 to n do
  write('Mas[',i,']=',mas[i]);   
  end;
  readln(d) //??? что-то просто readln непашет
END.
eoln вне форума Ответить с цитированием
Старый 17.05.2008, 14:44   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Программа не то что неправильно написана, она напмсана сумбурно, не поймешь, что из чего следует, где заданный столбец, где максимальный, в параметрах процедур путаница. Кстати, может без процедур сделать, понятнее будет. Они здесь совсем никчему, или это требование задания? Короче пытался сначала поправлять программу, потом плюнул и переписал, стараясь сохранить ваш стиль. Вот что получилось:
Код:
program BAH9i;
{$APPTYPE CONSOLE}
uses
  SysUtils;
const
n=5; //3х4 очень уж мало
m=6;
type  
matr=array[1..n,1..m] of integer;   
mass=array[1..m] of integer;   
Var
d,i,j,k:integer;   //d-максимальный столбец; k-заданный столбец
A,matrST:matr;   
MAS:mass;

Procedure STOLB(A:matr; Var d:integer);//находим макс столбец
Var   
i,j:integer;   
sum,max:integer;
begin
    max:=-maxint;d:=1;//за макс принимаем самое маленькое Integer
    for j:=1 to m do
       begin
         sum:=0;
         for i:=1 to n do
            begin
              sum:=sum+A[i,j];
            end;
         if sum>max then
             begin
                max:=sum;
                d:=j;  //нашли номер максимального столбца
             end;
        end;
end;

Procedure MartiCA(A:matr;d:integer;Var matrST:matr );
var
i,j:integer;
begin
for i:=1 to n do
for j:=1 to d do
MatrST[i,j]:=A[i,j];
writeln('New Matrix');//объединил создание матрицы и вывод в одну процедуру
for i:=1 to n do
    begin
       for j:=1 to d do
       write(MatrST[i,j]:3);
       writeln;
    end;   
END;
Procedure MASSIV(k:integer;A:matr;Var mas:mass);
var
i:integer;
begin
writeln('Massiv stolbca K:');//также объединил
for i:=1 to n do
   begin
      Mas[i]:=A[i,k];
      write(Mas[i]:3);
   end;
END;   
  
BEGIN   
Write ('HOMEP sToLBCA =');   
readln(k);
for i:=1 to n do
   begin
      For j:=1 to m do
        begin
          a[i,j]:=random(10);//заменил ручной ввод на рандомный, а то      
          write(a[i,j]:3);   пальцы устают, можешь вернуть
        end;
      writeln;
  {writeln('A[',i,',',j,']=');
  read(A[i,j]); }
  end;   
  
STOLB(A,d);
if d>k then
MartiCA(A,d,matrST)
else if  d<=k then
MASSIV(k,A,mas);
readln;
END.
puporev вне форума Ответить с цитированием
Старый 17.05.2008, 22:20   #4
Absent
Пользователь
 
Регистрация: 18.11.2007
Сообщений: 67
По умолчанию

Большое спасибо, очень помогли
Absent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с матрицей Panda Помощь студентам 1 06.07.2008 16:42
помогите с матрицей Panda Помощь студентам 1 01.07.2008 11:31
Работа с матрицей Absent Помощь студентам 1 24.05.2008 13:33
Помогите с матрицей Zolotce Помощь студентам 4 21.04.2008 14:15
проблема с матрицей kommunist Помощь студентам 8 14.10.2007 19:29