2017-01-31 3 views
-3

Я написал этот код, который состоит из двух файлов: main.cpp и matrice.cpp.Печать значений матрицы C++

Моя проблема: матрица не записывает значения, которые я указываю. Я хочу, чтобы вы записали по главной диагонали все 1: A [i] [i] = 1; но результат другой.

Какая ошибка? Почему, когда я распечатываю значение матрицы, появляется 6.86636e-44?

main.cpp:

#include <iostream> 
#include <stdio.h> 
#include "matrice.h" 
#include "stampaMatrice.h" 


using namespace std; 
#define N 10 
#define Inizio 0.00 
#define Fine 1.00 

float dy=(Fine-Inizio)/N; 

int main() 
{ 
    float ** A = matrice(dy, N); 
    stampaMatrice(&A[0][0],N,N); 

    //Clean up array 
    for (int i = 0; i < N; i++) 
      { delete [] A[i]; } 
    delete [] A; 
    A = 0; 

    return 0; 
} 

matrice.cpp:

#include <stdlib.h> 
#include <stdio.h> 
#include <iostream> 
using namespace std; 

float** matrice(float dy, int N){ 

float** A=0; 
A= new float*[N]; 
for(int i=0; i<N; i++){ 
A[i]=new float[N]; 
} 

//Assegnazione valori 
for(int i=0; i<N; i++){ 
//A[i][i+1]=1; 
//A[i][i-1]=1/dy; 
A[i][i]=1; 

} 


return A; 
} 

Результат:

Result

+1

У нас есть достаточно кода для воспроизведения проблемы? Выходной код отсутствует. –

+0

@DavidSchwartz Существует ссылка на вывод (см. «Результат» в нижней части вопроса), хотя это не способ опубликовать сообщение об ошибке/проблеме в StackOverflow. В OP, пожалуйста, отправьте сообщение об ошибке напрямую или сообщите, что у вас есть прямо на этом сайте, без необходимости внешней ссылки. – vsoftco

ответ

3

Вы неправильно читаете ваши результаты. Все значения на главной диагонали равны 1, как вы их установили. Посмотрите внимательно.

Вы не установили значения с главной диагонали на какое-либо конкретное значение. Поэтому нет причин ожидать каких-либо конкретных значений. Вы получите какой-то мусор, который будет там.

+0

Ну, этот вывод кажется довольно запутанным для меня (только 1 в правой позиции является первым) ... Возможно, посмотрите на 'stampaMatrice()', чтобы увидеть, как печатаются эти числа, могут выявить другие ошибки. –

+0

@Bob__ Да, это потому, что 'N = 12', и все это смещено и т. Д., Поскольку, вероятно, OP не использовал никаких' \ n'. – vsoftco

2

Вы должны установить недиагональные элементы к нулю. C++ не выполняет нулевую инициализацию, если вы этого явно не говорите.

BTW, float** A=0;не устанавливает элементы матрицы в ноль. Вы получаете много нулей, поскольку это то, что, вероятно, было связано с этими адресами памяти.

0

"Крепление" это легко: просто изменить

A[i]=new float[N]; 

в

A[i]=new float[N](); 

Теперь у вас есть все причуды C++ всего за 20 строк кода.

Смежные вопросы