Сформировать матрицу по правилу и транспонировать ее - 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;
}
}

Объяснение кода листинга программы

В этом коде:

  1. Включаются необходимые заголовочные файлы:
    • - для работы с потоками ввода-вывода;
    • - для работы с клавиатурой и мышью;
    • - для работы с файлами.
  2. Задаются начальные значения переменных:
    • n и m - для хранения количества строк и столбцов матрицы B;
    • a и b - для хранения адресов матриц.
  3. Осуществляется запрос на ввод количества строк и столбцов матрицы B.
  4. Выделяется память под матрицы 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;
  5. Происходит ввод элементов матрицы 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]); - ввод элемента.
  6. Осуществляется транспонирование матрицы 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;
  7. Выводится полученная матрица 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); - переход на новую строку.
  8. Осуществляется выход из программы:
    • getch (); - ожидание нажатия клавиши;
    • return 0; - завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5