разработка в среде 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
более подробно и более четко условия написаны в фотографии которая прикреплена в теме)
Гость
17.07.2012 12:18
Цитата(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
2.08.2012 1:59
Если я всё правильно понял, то должно получиться что-то вроде этого:
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.
С удовольствием выслушаю все ваши замечания, ибо мне тоже не очень хватает опыта
IUnknown
2.08.2012 14:55
Главное замечание - задача решена неправильно. Выведи матрицу до сортировки побочной диагонали и после нее, и сравни.
Почему изменились значения элементов, не лежащих не побочной диагонали? Упорядочивание их не должно было затронуть. Вот этого вполне достаточно:
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
2.08.2012 15:02
Спасибо за замечания! В следующий раз учту ваши пожелания.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.