Сформировать матрицу по правилу и транспонировать ее - 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; - завершение работы программы.