Помощь - Поиск - Пользователи - Календарь
Полная версия: подпрограммы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
viv
Помогите пожалуйста разобраться с задачей. Условие такое: в обеих матрицах а(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
Код
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
Можно еще это попробовать. Должно для любого 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
Так по условию задачи даны две матрицы а(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
Цитата
Как в программе сделать одновременно ввод, вывод, операцию обмена двух матриц?

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

скорее всего просто в одной подпрограмме
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.