Автор: viv 5.10.2004 16:33
Помогите пожалуйста разобраться с задачей. Условие такое: в обеих матрицах а(3х3) и b(5х5) порядок следования элементов главной диагонали поменять на обратный. У меня получилось примерно так:
Код
conts n=5
a:array[1..n,1..n] of integer;
t:integer;
....
for i:=1 to (n div 2) do
begin
t:=a[i,i];
a[i,i]:=a[n-i+1,n-i+1];
a[n-i+1,n-i+1]:=t;
end;
Автор: Altair 5.10.2004 16:42
Код
const
n=5;
var
a:array[1..n,1..n] of integer;
b:array[1..n] of integer;
begin
for i:=1 to n do b[i]:=a[i,i]; {сохраняем диагональ}
for i:=1 to n do a[i,i]:=b[6-n]; {пишем сохраненную диагональ в обратном порядке}
end.
Код не проверял!Я предлагаю следующий метод:
сохраняем главную диагональ (а эл-ты гл. диаг. имеют одинаковый индекс i и j)
потом записываем в обратном порядке.
Не слишком хорошо в плане использования памяти, но зато просто.
Автор: trminator 5.10.2004 19:24
Можно еще это попробовать. Должно для любого n работать (проверял на паре тестов, вроде работает...). Не понял, при чем тут подпрограммы, поэтому оставил одну процедуру, на всякий случай
Код
const n = 5;
var a : array[1..n, 1..n] of byte;
i, j : byte;
{ Процедура меняет местами два элемента }
procedure exch(var l, m : byte);
var t : byte;
begin
t := l; l := m; m := t
end;
begin
{ Ввод }
for i := 1 to n do
for j := 1 to n do
read(a[i,j]);
{ Обработка }
for i := 1 to n div 2 do
exch(a[i,i], a[n-i+1, n-i+1]);
{ Вывод }
for i := 1 to n do
begin
for j := 1 to n do
write(a[i,j]:4);
writeLn;
end;
end.
Цитата
Не понял, при чем тут подпрограммы
Я тоже!
Автор: viv 6.10.2004 9:29
Так по условию задачи даны две матрицы а(3х3) и b(5x5). Нужно проделать операции обмена с этими двумя матрицами. Я понимаю так, что пользователю предлагатеся ввести снача матрицу а, потом - b. В результате должно быть тоже две матрицы а и b. Вот например код для матрицы а.
Код
Program matrica;
const n=3;
var a:array[1..n,1..n] of integer;
b:array[1..n] of integer;
i,j,t:integer;
begin
Writeln('Vvedite matr a:');
for i:=1 to n do
begin
for j:=1 to n do
Readln(a[i,j]);
end;
WriteLn('Isxod massiv');
for i:=1 to n do
begin for j:=1 to n do Write(a[i,j]:3);
WriteLn;
end;
begin
for i:=1 to (n div 2) do begin
t:=a[i,i];
a[i,i]:=a[n-i+1,n-i+1];
a[n-i+1,n-i+1]:=t;
end;
WriteLn('Poluch massiv');
For i:=1 to n do
begin
for j:=1 to n do
Write(a[i,j]:3);
WriteLn;
end;
end;
end.
Как в программе сделать одновременно ввод, вывод, операцию обмена двух матриц? Я думаю, что нужно использовать процедуры и функции. Пожалуйста подскажите.
Автор: Altair 6.10.2004 22:26
Цитата
Как в программе сделать одновременно ввод, вывод, операцию обмена двух матриц?
ОДНОВРЕМЕННО???
Для этого как минимумнеолбходим многопроцессорный компьютер
Или псевдомультизадачность.
Что значит одновременно?
Уточните!
Автор: GoodWind 6.10.2004 22:29
Цитата
Что значит одновременно?
скорее всего просто в одной подпрограмме