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

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

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

 
 Ответить  Открыть новую тему 
> Нужно написать прогу по сортировке элементов побочной диагонали матрицы А по убыванию абсолютных значений, помогите пожалуйста очень нужна прога по этим заданиям
qiwi23
сообщение 16.05.2012 16:37
Сообщение #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 
 К началу страницы 
+ Ответить 
Гость
сообщение 17.07.2012 8:18
Сообщение #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

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

Привет. Ты решил свою задачу? Если решил покажи пожалуйста код решения, у меня похожая задачка только на С++, я не знаю с чего начать даже, глядя на твое решение мне было бы легче перевести алгоритм на С++.
 К началу страницы 
+ Ответить 
romku
сообщение 1.08.2012 21:59
Сообщение #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 килобайт ) Кол-во скачиваний: 227
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 2.08.2012 10:55
Сообщение #4


a.k.a. volvo877
*****

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

Репутация: -  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 - 2.08.2012 10:56
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
romku
сообщение 2.08.2012 11:02
Сообщение #5





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

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


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

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

 



- Текстовая версия 12.08.2025 6:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"