Помощь - Поиск - Пользователи - Календарь
Полная версия: Преобразование прямоугольной матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Анна-
Надо написать программу. вот задание.
Цитата
Выполнить над прямоугольной матрицей В размером m*n последовательность действий:
а) В матрице В заменить заданным вектором строки, которые содержат хотя бы один нулевой элемент;
б) В полученной матрице найти сумму элементов столбцов с нечетными номерами.
leka
Код
Составить программу нахождение произведение элеменнтов массива
Leka
Код
Вставить число после каждого элемента массива, кратного 3.
volvo
Цитата
Выполнить над прямоугольной матрицей В размером m*n последовательность действий:

Что-то очень на приказ похоже <_< ...
Кстати, прежде чем запостить вопрос, неплохо было бы и вот это прочесть:
FAQ: Как описать матрицу, чтобы ....

С использованием такой структуры замена строки в матрице на вектор сводится к одному оператору...

Ну а как определить, есть ли нулевой элемент в строке, и как найти сумму столбца - это точно было в ФАКе...

Остальные задания решались на форуме неоднократно. (см. мою подпись)
-анна-
прочитала все что вы сказали, но так и не поняла как написать эту программу! Ничего у меня не получается! sad.gif
volvo
Что именно не получается? Слово всё не принимается. Матрица как описана? Как пытаешься искать, есть ли нулевые элементы в строке?
klem4
Цитата(-Анна- @ 20.04.05 11:38)
Надо написать программу. вот задание.


чувствуется тут надолго ;)

const n=3;
m=4;
y:array[1..m] of integer = (10,20,30,40);
var
x:array[1..n,1..m] of integer;
i,j,s:integer;
flag:boolean;


i:=1;
flag:=false;
while (i<=n) do
begin
j:=1;
while (j<=m)and(not(flag)) do
begin
if x[i,j]=0 then
flag:=true;
inc(j);
end;
if flag then
begin
for j:=1 to m do
x[i,j]:=y[j];
end;
inc(i);
flag:=false;
end;


j:=1;
while j<=m do
begin
for i:=1 to n do
s:=s+x[i,j];
inc(j,2);
end;


произв
извиняюсь, исправлено
p:=1;
for i:=1 to n do
p:=p*x[i];


а по поводу "вставить число" это тебе в динамические массивы наверно huh.gif
volvo
klem4, я уже в который раз (а для leka специально повторяю, эти задачи уже решались, пользуйтесь поиском) повторяю - массив и матрица - совершенно разные вещи, и ты опять наступаешь на те же грабли... Что автор просил?

Цитата(leka @ 20.04.05 11:46)
Составить программу нахождение произведение элеменнтов массива

А что ты сделал?

Цитата(klem4 @ 21.04.05 7:23)
произв

p:=1;
for i:=1 to n do
for j:=1 to m do
  p:=p*x[i,j];


И где тут массив?
-анна-
[QUOTE]я без понятия как описана эта матрица и как искать нулевые элементы! мы эту тему про массивы и матрици вообще не проходили, у нас перподаватель болеет! Говорят сами изучайте по книгам, тока вот времени совсем не осталось!! unsure.gif помогите, чем сможете!
Guest
[quote=klem4,21.04.05 7:23]
чувствуется тут надолго ;)

const n=3;
m=4;
y:array[1..m] of integer = (10,20,30,40);
var
x:array[1..n,1..m] of integer;
i,j,s:integer;
flag:boolean;


i:=1; [QUOTE]ТУТ ОШИБКА КАКАЯ ТО, не пойму как исправить! huh.gif 


flag:=false;
while (i<=n) do
begin
j:=1;
while (j<=m)and(not(flag)) do
begin
if x[i,j]=0 then
flag:=true;
inc(j);
end;
if flag then
begin
for j:=1 to m do
x[i,j]:=y[j];
end;
inc(i);
flag:=false;
end;


j:=1;
while j<=m do
begin
for i:=1 to n do
s:=s+x[i,j];
inc(j,2);
end;


произв
извиняюсь, исправлено
p:=1;
for i:=1 to n do
p:=p*x[i];


а по поводу "вставить число" это тебе в динамические массивы наверно huh.gif
[/quote]
volvo
Вот:
const
size_row = 10; { число строк }
size_col = 10; { число столбцов }

type
tvector = array[1 .. size_col] of integer;
tmatrix = array[1 .. size_row] of tvector;

{ напечатать вектор }
procedure print_v(var v: tvector);
var j: integer;
begin
for j := 1 to size_col do
write(v[j]:4);
writeln
end;

{ напечатать матрицу }
procedure print_m(var mx: tmatrix);
var i: integer;
begin
for i := 1 to size_row do
print_v(mx[i]);
writeln('"enter" to continue...');
readln
end;

var
b: tmatrix;
vec: tvector;
i, j, s: integer;
has_zero: boolean;

begin
{ Заполнение матрицы }
for i := 1 to size_row do
for j := 1 to size_col do
b[i][j] := random(20);

{ Заполнение вектора }
for i := 1 to size_col do
vec[i] := random(15) + 1;
writeln('vector:'); print_v(vec); { напечатать вектор }

writeln('before:'); print_m( B ); { напечатать матрицу ДО }

for i := 1 to size_row do begin
{ изначально предполагаем что нулевых элементов нет }
has_zero := false;
for j := 1 to size_col do
has_zero := has_zero or (b[i][j] = 0);
{ если есть хоть один нулевой элемент - заменить строку на вектор }
if has_zero then b[i] := vec
end;

writeln('after:'); print_m( B ); { напечатать матрицу ПОСЛЕ }

{ подсчет суммы элементов }
s := 0;
for j := 1 to size_col do
if odd(j) then { только в нечетных столбцах !!! }
for i := 1 to size_row do
inc(s, b[i][j]);
writeln('s = ', s);
end.

smile.gif
-анна-
ВСЕ РАБОТАЕТ!!!!! СПАСИБО ВАМ ОГРОМНОЕ ЗА ПОМОЩЬ!!!!!
ТЕПЕРЬ Я КАЖЕТСЯ САМЫЙ СЧАСТЛИВЫЙ ЧЕЛОВЕК НА СВЕТЕ!!!
Осталось тока блоксхему сделать, но это я уже сама знаю! Еще раз СПАСИБО!!!! :thanks:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.