Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ подпрограммы

Автор: 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 работать (проверял на паре тестов, вроде smile.gif работает...). Не понял, при чем тут подпрограммы, поэтому оставил одну процедуру, на всякий случай smile.gif

Код

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

Цитата
Как в программе сделать одновременно ввод, вывод, операцию обмена двух матриц?

ОДНОВРЕМЕННО???
Для этого как минимумнеолбходим многопроцессорный компьютер smile.gif
Или псевдомультизадачность.
Что значит одновременно?
Уточните!

Автор: GoodWind 6.10.2004 22:29

Цитата
Что значит одновременно?

скорее всего просто в одной подпрограмме