Задача. В матрице [latex] z(n,n)[/latex] каждый элемент разделить на диагональный, стоящий в том же столбце.
Тест
при [latex] n=3[/latex] (элементы главной диагонали выделены )
5 | 4 | 9 |
3 | 1 | 7 |
8 | 6 | 2 |
↓
1 | 4 | 4.5 |
0.6 | 1 | 3.5 |
1.6 | 6 | 1 |
Проверим совсем простой вариант, для наглядности:
при [latex] n=2[/latex]
4 | 5 |
2 | 10 |
↓
1 | 0.5 |
0.5 | 1 |
Код на языке С++ :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <iostream> # include <math.h> using namespace std; int main() { int n; cin >> n; double z[n][n], c; // Ввод матрицы z for( int i = 0; i < n; i++) { for( int j = 0; j < n; j++) { cin >> z[i][j]; } } // Вывод матрицы z for (int j = 0; j < n; j++) { c = z[j][j]; for (int i = 0; i < n; i++) { z[i][j] = z [i][j] / c; cout << z[i][j] << " "; } cout << endl; } return 0; } |
Ссылка на программу: http://ideone.com/ecqIxL
Решение:
Вводим квадратную матрицу [latex] z(n,n)[/latex].Потом описываем элемент, который будет делиться диагональным:
12 13 14 15 16 17 18 |
for( int i = 0; i < n; i++) { for( int j = 0; j < n; j++) { cin >> z[i][j]; } } |
Следующим шагом будет описание диагонального элемента во вложенном цикле, который определяет элемент в столбце и непосредственно деление диагонального элемента на элемента, стоящий в том же столбце.
22 23 24 25 26 27 28 29 30 31 |
for (int j = 0; j < n; j++) { c = z[j][j]; for (int i = 0; i < n; i++) { z[i][j] = z [i][j] / c; cout << z[i][j] << " "; } cout << endl; } |
Выводим значение полученной матрицы.
Код на языке Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { int n; double c; Scanner sc = new Scanner (System.in); n = sc.nextInt(); double[][] z = new double [n][n]; for( int i = 0; i < n; i++) { for( int j = 0; j < n; j++) { z[i][j] = sc.nextInt(); } } for (int j = 0; j < n; j++) { System.out.println(); c = z[j][j]; for (int i = 0; i < n; i++) { z[i][j] = z [i][j] / c; System.out.print(z[i][j]+" "); } } } } |
Ссылка на программу: http://ideone.com/dT5GVl
Для теста
4 5
2 10
Правильный ответ
1 0.5
0.5 1
Надо поделить на тот элемент, который был в начале, а не на тот, который стал.
Да и первый тест неправильный. На 5 разделить не получилось.
Катя, мы на практике решили Вашу задачу. Рассмотрели и объяснили, что диагональный элемент нужно запоминать и делить на это запомненное значение. Рассмотрели, что так нужно делать поскольку диагональный элемент будет изменен при вычислениях. Мы, кстати, обходились без всякого дополнительного k. А потом 3 часа решали подобные задачи.
Может Вам стоит посмотреть на код из классной работы?
Зачтено, но нужно:
— правильно сделать отступы
— желательно разделить цикл изменения элементов и их печати.
Учтите предыдущее замечание, пожалуйста. Ему уже больше года, а оно актуально и для нового кода.
Спасибо, исправила.
— По решению на С++. На ideone Вы разместили правильное решение, а здесь на странице привели ошибочное. Нужно перенести код с ideone сюда. Только расставьте правильные отступы — у Вас циклы обработки зачем-то сдвинуты дальше циклов ввода и печати.
— По решению на Java. Код, который приведен на этой странице ошибочный. Код по ссылке ideone вообще от другой задачи.