IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Нужно написать прогу по сортировке элементов побочной диагонали матрицы А по убыванию абсолютных значений, помогите пожалуйста очень нужна прога по этим заданиям
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


разработка в среде 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

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


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(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

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

Привет. Ты решил свою задачу? Если решил покажи пожалуйста код решения, у меня похожая задачка только на С++, я не знаю с чего начать даже, глядя на твое решение мне было бы легче перевести алгоритм на С++.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Роман

Репутация: -  0  +


Если я всё правильно понял, то должно получиться что-то вроде этого:

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


Прикрепленные файлы
Прикрепленный файл  sort.pas ( 1.61 килобайт ) Кол-во скачиваний: 273
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Главное замечание - задача решена неправильно. Выведи матрицу до сортировки побочной диагонали и после нее, и сравни.

До:
 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, ни динамических массивов. А если уж берешься делать задачу там, где они есть - то доводи всё до конца: память надо освобождать, а не сваливать это на систему.

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Роман

Репутация: -  0  +


Спасибо за замечания!
В следующий раз учту ваши пожелания.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 17:57
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name