Помощь - Поиск - Пользователи - Календарь
Полная версия: Из трех массивов вывести матрицу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Shukhrat
Здравствуйте, помогите пожалуйста с задачкой!
Например данны три массива, которые ввели с клавиатуры.
В первом массиве содержатся ненулевые элементы, во втором номера столбцов этих ненулевых элементов, в 3 массиве указываются номера начала и конца строки, исходя из первых двух массивов. Например: Матрица (курсивом столбцы и ряды)
N1 2 3 4 5
1 3 0 0 1 0
2 0 0 2 0 5
3 0 0 0 7 0
в первый массив пойдут значения (3,1,2,5,7)
во второй массив пойдут значения(1,4,3,5,4)
в третий массив пойдут значения (1,3,5,6)
То есть третий массив указывает с какого элемента по счету из 1 и 2 массива начинается описание строки.
Так вот надо чтобы по вводу этих трех массивов он вывел эту матрицу. Если есть идеи хотя бы алгоритма вывода этой матрицы напишите пожалуйста.
Lapp
Цитата(Shukhrat @ 12.04.2011 22:45) *

Здравствуйте, помогите пожалуйста с задачкой!
Например данны три массива, которые ввели с клавиатуры.
В первом массиве содержатся ненулевые элементы, во втором номера столбцов этих ненулевых элементов, в 3 массиве указываются номера начала и конца строки, исходя из первых двух массивов. Например: Матрица (курсивом столбцы и ряды)
N1 2 3 4 5
1 3 0 0 1 0
2 0 0 2 0 5
3 0 0 0 7 0
в первый массив пойдут значения (3,1,2,5,7)
во второй массив пойдут значения(1,4,3,5,4)
в третий массив пойдут значения (1,3,5,6)
То есть третий массив указывает с какого элемента по счету из 1 и 2 массива начинается описание строки.
Так вот надо чтобы по вводу этих трех массивов он вывел эту матрицу. Если есть идеи хотя бы алгоритма вывода этой матрицы напишите пожалуйста.

Не совсем ясно, как задаются размеры массивов.. Если просто задавать с избытком, то можно как-то вот так:
const
n= 10;

type
tA= array[1..n] of integer;

const
a: tA= (3,1,2,5,7,0,0,0,0,0);
b: tA= (1,4,3,5,4,0,0,0,0,0);
c: tA= (1,3,5,6,0,0,0,0,0,0);

var
i,j: integer;
m: array [1..n,1..n] of integer;

begin
FillChar(m,SizeOf(m),0);
j:=1;
while c[j]<>0 do begin
i:= c[j];
Inc(j);
while (j<>0) and (i<c[j]) do begin
m[j-1,b[i]]:= a[i];
Inc(i)
end
end;
for i:=1 to n do begin
for j:=1 to n do write(m[i,j]:3);
writeln
end;
readln
end.
volvo
Цитата
Если просто задавать с избытком, то можно как-то вот так:
А по другому не очень-то и получится... При представлении разреженной матрицы в формате RR( C )O /а это именно то, что описано автором/ размер матрицы (точнее - количество столбцов) должен задаваться отдельно. Число строк можно определить исходя из размера третьего массива, а вот количество столбцов - загадка. Их будет не меньше, чем максимум, содержащийся во втором массиве, но ведь в сжимаемой матрице их может быть не 5, и даже не 10, а все 150 smile.gif
Lapp
Цитата(volvo @ 13.04.2011 1:06) *
а вот количество столбцов - загадка.
Да, верно.

Еще хочу заметить по ходу дела, что таким макаром совершенно невозможно задать пустую (с одними только нулями) строку. Что не есть хорошо, конечно. Но это уже имеет слабое отношение к собственно задаче )).

Добавлено через 4 мин.
Цитата(Lapp @ 13.04.2011 3:58) *
таким макаром совершенно невозможно задать пустую (с одними только нулями) строку.
Наврал )).
Если наплевать на словеса и все же вставлять нули в первый массив, то можно. По одному нулю на строку.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.