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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2008, 11:43   #1
Сапфира
 
Регистрация: 10.04.2007
Сообщений: 9
Вопрос Матрицы

Задание:
0 5 2 0 0
0 0 7 0 0
А= 0 4 0 6 1
0 3 0 0 9
0 0 0 0 0
упаковать матрицу по столбцам,т.е. вывести надо AL = (5, 4, 3, 2, 7, 6, 1, 9)-все ненулевые элементы матрицы, Т = (1, 3, 4, 1, 2, 3, 3, 4) - список с соответствующие им индексы, ТC = (0, 0, 3, 5, 6, 8) - позиции списков AL и Т, на которых оканчиваются описание ненулевых элементов очередного списка. Вот ТС вывести не удается,подскажите как???
( матрица для примера показана, можно вводить любую)
Код:
Program lab1;
Uses crt;
type M=array[1..10,1..10] of integer;

var
i,j,n,k,z,c,d: integer;
matr: array[1..10,1..10] of integer;
AL, T, TC: array[1..20] of integer;
Begin
ClrScr;
Write('Введите размерность квадратной матрицы n=');
Readln(n);
Writeln('Введите матрицу:');
For i:=1 to n do
For j:=1 to n do

begin
Write('matr[',i,',',j,']=');
Read(matr[i,j]);
end;
writeln;
begin
For i:=1 to n do
begin
for j:=1 to n do
Write(matr[i,j],' ');
Writeln;
end;
end;
Writeln;
k:=1;
Write('T=');
Begin
for j:=1 to n do
for i:=1 to n do
begin
if matr[i,j]<>0 then
begin
AL[k]:=matr[i,j];
k:=k+1;
write(i,' ');
end;
end;
writeln;
Writeln;
begin
Write('AL=');
for i:=1 to k-1 do
begin
write(al[i],' ');
end;
end;
end;
Writeln;
end.
Сапфира вне форума Ответить с цитированием
Старый 21.09.2008, 14:13   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Поправил Ваш код, что-то он ничего не выдавал и много лишнего написано.
В задании сказано : позиции списков AL и Т, на которых оканчиваются описание ненулевых элементов очередного списка.
Поэтому считаю, что первые два ноля в ТС не нужны, они ничего не отражают. Если же нужно показать, что не оканчивают описание, тогда ТC = (0, 0, 3, 0, 5, 0, 6, 8)
Если нужно так и сами не сможете поправить код, то пишите.
Там надо вместо
Код:
if (matr[i-1,j]=0)or((i=1)and(matr[n,j-1]=0)and(j<>1)) then
      begin
        q:=q+1;
        TC[q]:=k;
      end;
что-то типа:
Код:
  if (matr[i-1,j]=0)or((i=1)and(matr[n,j-1]=0)and(j<>1)) 
    then TC[i]:=k
    else TC[i]:=0;
Программа:
Код:
Program lab1;
Uses crt; //убрал type M=array, если нет подпрограмм, то не нужно
var n,i,j,k,q: integer;//убрал лишние переменные
matr:array[1..10,1..10] of integer;
AL, T, TC: array[1..100] of integer;//нужно до 100 если все не нули
Begin
ClrScr;
Write('n=');
Readln(n);
For i:=1 to n do
For j:=1 to n do
   begin
     Write('matr[',i,',',j,']=');
     Readln(matr[i,j]);
   end;
clrscr;
Writeln('Matrica:');
For i:=1 to n do
   begin
     for j:=1 to n do
     Write(matr[i,j]:3);
     Writeln;
   end;
k:=0;q:=0;
for j:=1 to n do
for i:=1 to n do
if matr[i,j]<>0 then //если не ноль
   begin
    k:=k+1; //считаем
    AL[k]:=matr[i,j];//записываеи число
    T[k]:=i;  //записываем номер строки
    if (matr[i-1,j]=0)or((i=1)and(matr[n,j-1]=0)and(j<>1)) then
//если предыдущее в столбце ноль, или элемент в первой строке не первого 
//столбца и последний элемент в предыдущем столбце ноль, то
      begin
        q:=q+1;//считаем
        TC[q]:=k;//заносим в массив
      end;
  end;
Write('AL= ');
for i:=1 to k do
write(al[i],' ');
writeln;
Write('T= ');
for i:=1 to k do
write(T[i],' ');
writeln;
Write('TC= ');
for i:=1 to q do
write(TC[i],' ');
readln
end.

Последний раз редактировалось puporev; 21.09.2008 в 14:16.
puporev вне форума Ответить с цитированием
Старый 21.09.2008, 15:38   #3
Сапфира
 
Регистрация: 10.04.2007
Сообщений: 9
По умолчанию

Спасибо за код, но по нему ТС выдает неправильное, нужно чтоб выводило ТС=0 0 3 5 6 8
Как это исправить?
Сапфира вне форума Ответить с цитированием
Старый 21.09.2008, 15:44   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
ТС=0 0 3 5 6 8
Если Вы объясните, что значат первые два ноля, я исправлю.
Если AL = (5, 4, 3, 2, 7, 6, 1, 9), то позиции 3(3), 5(7), 6(6), 8(9) это числа, которые стоят после нолей в столбцах, а что такое ноли, я не знаю. Я написал Вам, что я об этом думаю, но получится ТС=(0, 0, 3, 0, 5, 0, 6, 8).
puporev вне форума Ответить с цитированием
Старый 21.09.2008, 16:10   #5
Сапфира
 
Регистрация: 10.04.2007
Сообщений: 9
По умолчанию

Если смотреть второй столбец матрицы,то там ненулевые элементы - это 5,4,3 (на этом в столбце оканчиваются ненулевые элементы,записывем позицию 3)
Следующий столбец смотрим,там ненулевые элементы - это 2,7 (т.к. в предыдущем было 3, то прибавляем 2 и получается,что 5 позиция,на ней оканчиваются ненулевые элементы)
аналогично следующие столбцы.
А первые два нуля считается что мы начинаем просматривать матрицу с левого верхнего угла, и в 1м столбце нули одни
Сапфира вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрицы FatalX Помощь студентам 21 17.04.2009 22:50
матрицы chelsi Паскаль, Turbo Pascal, PascalABC.NET 13 25.04.2008 10:07
матрицы tonic Microsoft Office Excel 2 10.01.2008 14:47
матрицы Ensoph Помощь студентам 1 24.10.2007 09:38