2017-01-31 5 views
-3

Ich schrieb diesen Code, der aus zwei Dateien besteht: main.cpp und matrice.cpp.Drucken von Werten einer Matrix C++

Mein Problem ist: Die Matrix schreibt nicht die Werte an Ort und Stelle, die ich angeben. Ich möchte, dass du auf die Hauptdiagonale schreibst 1: A [i] [i] = 1; aber das Ergebnis ist anders.

Was ist der Fehler? Warum, wenn ich den Wert der Matrix ausdrucke, erscheint 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; 
} 

Ergebnis:

Result

+1

Können wir genug Code haben, um das Problem zu reproduzieren? Der Ausgabecode fehlt. –

+0

@DavidSchwartz Es gibt einen Link zur Ausgabe (siehe "Ergebnis" am Ende der Frage), obwohl dies nicht die Möglichkeit ist, den Fehler/das Problem in StackOverflow zu posten. Bitte senden Sie die Fehlernachricht direkt an OP oder stellen Sie direkt auf dieser Website ein, ohne dass ein externer Link erforderlich ist. – vsoftco

Antwort

3

Sie missverstehen Ihre Ergebnisse. Alle Werte auf der Hauptdiagonalen sind 1, genau wie Sie sie einstellen. Schau genau.

Sie haben die Werte nicht von der Hauptdiagonalen auf einen bestimmten Wert festgelegt. Es gibt also keinen Grund, warum Sie bestimmte Werte erwarten sollten. Du wirst bekommen, was auch immer passiert.

+0

Nun, diese Ausgabe scheint ziemlich durcheinander zu sein (die einzige 1 in der richtigen Position ist die erste) ... Vielleicht ein Blick auf 'stampaMatrice()', um zu sehen, wie diese Zahlen gedruckt werden, könnte andere Fehler aufdecken. –

+0

@Bob__ Ja, das liegt daran, 'N = 12' und das Ganze wird verschoben, da OP wahrscheinlich kein' \ n' benutzt hat. – vsoftco

2

Sie haben die Elemente außerhalb der Diagonalen auf Null zu setzen. C++ nicht Null-Initialisierung durchführen, wenn Sie dies nicht explizit sagen.

BTW, float** A=0;setzt die Elemente der Matrix nicht auf Null. Sie erhalten viele Nullen, da dies wahrscheinlich an diesen Speicheradressen liegt.

0

"Fixing" Das ist einfach:

ändern
A[i]=new float[N]; 

zu

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

Jetzt haben Sie alle Macken von C++ in nur 20 Zeilen Code.

Verwandte Themen