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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2011, 03:29   #1
Jincer
Новичок
Джуниор
 
Регистрация: 24.10.2010
Сообщений: 2
По умолчанию Сжатая матрица

Здраствуйте уважаемые.
Делаю лабу, задание не очень сложное: в разреженной матрице убрать непарные строки, сума элементов которой меньше от заданого числа. Возникла проблема с алгоритмом, помогите пожайлуста. Свой код прикладываю, нерабочий алгоритм находится в процедуре body.
Возможные вопросы :
1) Что такое разреженная матрица - это матрица с преимущественно нулевыми элементами
2)Что такое сжатая матрица - в данном случае сжатая матрица это матрица в которой первая строка - все ненулевые элементы, 2 строка - номер строки, и 3 строка - номер столбца.
Код:
program laba14;
uses crt;
const n=100;
type mas=array[1..n*n] of integer;
var   u,y,k,s,w:integer;           
      z,x,c:mas;
      p:string;
Procedure Input(var z,x,c:mas; var k,s,u:integer);
var i,j,v:integer;
begin
  u:=1;
  writeln('Vvedit kilkist ryadkiv');
  readln(k);
  writeln('Vvedit kilkist stovpciv');
  readln(s);
  writeln('Vy hochete vvessty elementy matryci chy zadaty yih vypdkovo?');
  writeln('r - vypadkovo w - Vvesty');
  readln(p);
  if p='w' then
  begin
  writeln('Vvedit matricy');
   for i:=1 to k do
    for j:=1 to s do
    begin
     read(v);
     if (v<>0) then
      begin
       z[u]:=v;
       x[u]:=i;
       c[u]:=j;
       u:=u+1;
      end;
    end;
  end;
  if p='r' then
  begin
   Randomize;
   for i:=1 to k do
   begin
    for j:=1 to s do
   begin
     v:=random(5);
      if v<>0 then
       begin
        z[u]:=v;
        x[u]:=i;
        c[u]:=j;
        u:=u+1;
       end;
     write(v,' ');
   end;
    writeln(' ');
  end;
 end;
end;
Procedure Output(k,s:integer; z,x,c:mas);
var i,j,o:integer;
begin
o:=1;
for i:=1 to k do
 begin
 for j:=1 to s do
  begin
   if (x[o]=i) and (c[o]=j) then
   begin
    write(z[o]:3);
    o:=o+1;
   end
   else
   write ('0':3);
  end;
  writeln(' ');
 end;
end;



Procedure body(var z,x,c:mas; var k,u:integer; s,w:integer);
var i,j,q,g,v:integer;
begin
q:=0;
j:=1;
while (j<k)
 for i:=j to k do
 if x[i+1]>x[i] then
  begin
   for g:=j to i do
    q:=q+z[g];
  if q>w then
   for v:=j to i do
    begin
     z[v]:=z[k-i+v];
     x[v]:=x[k-i+v];
     c[v]:=c[k-i+v];
    end;
 end;
end;


begin
  clrscr;
  writeln('Vvedit zadane chyslo');
  readln(w);
  Input(z,x,c,k,s,u);
  body(z,x,c,k,s,u,w);
  Output(k,s,z,x,c);
  readkey;
end.
Jincer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
матрица Yalovick Паскаль, Turbo Pascal, PascalABC.NET 6 29.12.2010 14:48
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
Матрица frem-dag Общие вопросы C/C++ 4 05.12.2009 21:27
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11