Помощь - Поиск - Пользователи - Календарь
Полная версия: Нужно написать прогу по сортировке элементов побочной диагонали матрицы А по убыванию абсолютных значений
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
qiwi23
разработка в среде turbo pascal программы сортировки элементов побочной диагонали матрицы А по убыванию абсолютных значений.
1) расчет элементов квадратной матрицы А(n,n):
a(i,j)=(j^(1/i))+(i^(1/j))/((i*j)^(1/2));
2)вычисление элементов вектора Х(n):
х(i) - среднее арифметическое значение положительных элементов i-ой строки;
3)упорядочить элементы побочной диагонали матрицы А по убыванию абсолютных значений;
4)вычисление значения Y по заданной формуле:

у = max (x(i)/a(ii))
i=1,n

более подробно и более четко условия написаны в фотографии которая прикреплена в теме)
Гость
Цитата(qiwi23 @ 16.05.2012 16:37) *

разработка в среде turbo pascal программы сортировки элементов побочной диагонали матрицы А по убыванию абсолютных значений.
1) расчет элементов квадратной матрицы А(n,n):
a(i,j)=(j^(1/i))+(i^(1/j))/((i*j)^(1/2));
2)вычисление элементов вектора Х(n):
х(i) - среднее арифметическое значение положительных элементов i-ой строки;
3)упорядочить элементы побочной диагонали матрицы А по убыванию абсолютных значений;
4)вычисление значения Y по заданной формуле:

у = max (x(i)/a(ii))
i=1,n

более подробно и более четко условия написаны в фотографии которая прикреплена в теме)

Привет. Ты решил свою задачу? Если решил покажи пожалуйста код решения, у меня похожая задачка только на С++, я не знаю с чего начать даже, глядя на твое решение мне было бы легче перевести алгоритм на С++.
romku
Если я всё правильно понял, то должно получиться что-то вроде этого:

uses math;
var
i,j,n: integer;
matrix: array of array of real;
tmp,y,max: real;
sorted: boolean = false;

function x(i: integer): real; //x(i);
var
j: integer;
c: integer = 0;
begin
x:=0;
for j:=1 to n do
if matrix[j,i] > 0 then
begin
c:=c+1;
x:=x+matrix[j,i];
end;
x:=x/c;
end;

begin
readln(n);
// 1) расчет элементов квадратной матрицы А(n,n):
setlength(matrix,n+1,n+1); //Устанавливаем размер матрицы
for i:=1 to n do
for j:=1 to n do
begin
matrix[i,j]:=power(j,1/i)+power(i,1/j)/power(i*j,1/2); //Задаём значение ячейки i,j
end;
//
// 3)упорядочить элементы побочной диагонали матрицы А по убыванию абсолютных значений:
while sorted = false do //Пока матрица неотсортирована
begin
sorted:=true; //Будем считать, что матрица отсортирована
for i:=n-1 downto 1 do
for j:=2 to n do
if abs(matrix[i+1,j-1]) < abs(matrix[i,j]) then //Если значения ячеек не соответствуют требуемому порядку, то
begin
sorted:=false; //... матрица не отсортирована
//Обмениваем значения ячеек
tmp:=matrix[i,j];
matrix[i,j]:=matrix[i+1,j-1];
matrix[i+1,j-1]:=tmp;
//
end;
end;
//
// 4)вычисление значения Y:
max:=x(1)/matrix[1,1];
for i:=2 to n do
begin
y:=x(i)/matrix[i,i];
if y>max then max:=y;
end;
//
end.


С удовольствием выслушаю все ваши замечания, ибо мне тоже не очень хватает опыта smile.gif
IUnknown
Главное замечание - задача решена неправильно. Выведи матрицу до сортировки побочной диагонали и после нее, и сравни.

До:
 2.00 2.71 3.58 4.50 5.45
2.41 2.12 2.25 2.42 2.60
2.73 1.97 1.92 1.97 2.03
3.00 1.90 1.77 1.77 1.79
3.24 1.86 1.69 1.65 1.66


После:
 2.00 2.41 2.12 1.97 1.90
2.71 2.73 2.25 1.92 1.77
3.58 3.00 2.42 1.86 1.69
4.50 3.24 1.97 1.77 1.65
5.45 2.60 2.03 1.79 1.66


Почему изменились значения элементов, не лежащих не побочной диагонали? Упорядочивание их не должно было затронуть. Вот этого вполне достаточно:


for i:=n-1 downto 1 do // Оно и так обойдет все элементы, не надо оборачивать еще одним циклом
for j:=2 to n do
if abs(matrix[n-j+1,j]) < abs(matrix[n-j+2,j-1]) then
begin
tmp:=matrix[n-j+1,j];
matrix[n-j+1,j]:=matrix[n-j+2,j-1];
matrix[n-j+2,j-1]:=tmp;
end;



Второе замечание - нет в Турбо-Паскале (а задача была именно для него) ни модуля Math, ни динамических массивов. А если уж берешься делать задачу там, где они есть - то доводи всё до конца: память надо освобождать, а не сваливать это на систему.
romku
Спасибо за замечания!
В следующий раз учту ваши пожелания.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.