Сформировать матрицу по правилу и транспонировать ее - C (СИ)
Формулировка задачи:
посмотрите пожалуйста правильно ли я выполнил задание или нет?
Само задание в вордовском документе
когда ввожу элементы B[i][j] меня выкидывает из программы и все , в чем проблема?
Само задание
#include <stdafx.h> #include <iostream> #include <conio.h> #include <stdio.h> int main() { int i, j, n, m; float **a, **b; printf("Введите количество строк матрицы B:\n "); scanf ("%d",&n); printf("Введите количество столбцов матрицы B:\n"); scanf ("%d",&m); a = new float*[n]; b = new float*[n]; for (i=0; i<n; ++i) { a[i] = new float[m]; b[i] = new float[m]; for (j=0; j<m; ++j) { printf ("Введите элемент B[i][j]"); scanf ("%d", b[i][j]); } } for (i=0; i<n; ++i) { for (j=0; j<i; ++j) { a[i][j] = b[i][j]*b[i][j]; } a[i][i] = b[i][i]; for (j=i+1; j<m; ++j) { a[i][j] = -b[i][j]; } printf("Полученная матрица A:\n"); for (i=0; i<n; ++i) { for (j=0; j<m; ++j) { printf("%f\t",b[i][j]);; } printf ("\n");; } getch (); return 0; }
Решение задачи: «Сформировать матрицу по правилу и транспонировать ее»
textual
Листинг программы
#include <iostream> #include <conio.h> #include <stdio.h> using namespace std; int main() { setlocale(0,""); int i, j, n, m; int **a, **b; printf("Введите количество строк матрицы B:\n "); scanf ("%d",&n); printf("Введите количество столбцов матрицы B:\n"); scanf ("%d",&m); a=new int*[n]; for(i=0; i<n; i++) a[i]=new int[m]; b = new int*[n]; for(i=0; i<n; i++) b[i]=new int[m]; for (i=0; i<n; i++) { for (j=0; j<m; ++j) { printf ("Введите элемент B[%d][%d]",i+1, j+1); scanf ("%d", &b[i][j]); } } for (i=0; i<n; ++i) { for (j=0; j<i; ++j) { a[i][j] = b[i][j]*b[i][j]; } a[i][i] = b[i][i]; for (j=i+1; j<m; ++j) { a[i][j] = -b[i][j]; } printf("Полученная матрица A:\n"); for (i=0; i<n; ++i) { for (j=0; j<m; ++j) { printf("%f\t",b[i][j]);; } printf ("\n");; } getch (); return 0; } }
Объяснение кода листинга программы
В этом коде:
- Включаются необходимые заголовочные файлы:
- для работы с потоками ввода-вывода; - для работы с клавиатурой и мышью; - для работы с файлами.
- Задаются начальные значения переменных:
- n и m - для хранения количества строк и столбцов матрицы B;
- a и b - для хранения адресов матриц.
- Осуществляется запрос на ввод количества строк и столбцов матрицы B.
- Выделяется память под матрицы a и b:
- *a=new int[n];** - выделение памяти под матрицу a;
- for(i=0; i<n; i++) a[i]=new int[m]; - выделение памяти под элементы матрицы a;
- *b = new int[n];** - выделение памяти под матрицу b;
- for(i=0; i<n; i++) b[i]=new int[m]; - выделение памяти под элементы матрицы b;
- Происходит ввод элементов матрицы B:
- for (i=0; i<n; i++) - внешний цикл, перебирающий строки;
- for (j=0; j<m; ++j) - внутренний цикл, перебирающий столбцы;
- printf (
Введите элемент B[%d][%d]
,i+1, j+1); - запрос на ввод элемента; - scanf (
%d
, &b[i][j]); - ввод элемента.
- Осуществляется транспонирование матрицы B:
- for (i=0; i<n; ++i) - внешний цикл, перебирающий строки;
- for (j=0; j<i; ++j) - внутренний цикл, перебирающий столбцы;
- *a[i][j] = b[i][j]b[i][j];** - расчет значения элемента матрицы a;
- a[i][i] = b[i][i]; - заполнение главной диагонали матрицы a;
- for (j=i+1; j<m; ++j) - внешний цикл, перебирающий столбцы;
- a[i][j] = -b[i][j]; - расчет значения элемента матрицы a;
- Выводится полученная матрица A:
- printf(
Полученная матрица A:\n
); - вывод заголовка; - for (i=0; i<n; ++i) - внешний цикл, перебирающий строки;
- for (j=0; j<m; ++j) - внутренний цикл, перебирающий столбцы;
- printf(
%f\t
,b[i][j]); - вывод значения элемента матрицы b; - printf (
\n
); - переход на новую строку.
- printf(
- Осуществляется выход из программы:
- getch (); - ожидание нажатия клавиши;
- return 0; - завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д