2012-04-03 8 views
0

Ich versuche, eine Funktion zu schreiben, um eine obere Dreiecksmatrix zuzuordnen. Es sollte einen Zeiger auf das erste Element des zugewiesenen Arrays zurückgeben. Ich muss auch dynamische Zuordnung verwenden, um sicherzustellen, dass die genaue Menge an benötigtem Speicher zugewiesen wird, aber ich bin nicht ganz sicher, wie das zu tun ist ... Alle Tipps oder Ratschläge würden sehr geschätzt werden! Ich bin ein Anfänger zu C++. Wie auch immer, hier ist mein Code, wenn das hilft!Schreiben einer Funktion zum Zuordnen einer oberen Dreiecksmatrix

#include <iostream> 

using namespace std; 

int main() 
{ 
int a[3][3],i,j; //creating two dimensional array 
int d; 
int * p; 
cout<<"Please Enter the 9 elements of matrix (with spaces): "; 
for(i=0;i<3;i++) 
    for(j=0;j<3;j++) 
     cin>>d,&a[i][j]; 

cout<<"\nThe matrix is\n "; 
for(i=0;i<3;i++) 
{ 
    cout<<"\n"; 
    for(j=0;j<3;j++) 
     cout<<d,a[i][j]; 
} 

cout<<"\nSetting zero in upper triangular matrix\n"; 
for(i=0;i<3;i++){ 
    cout<<"\n"; 
    for(j=0;j<3;j++) 
     if(j>=i) 
      cout<<d,a[i][j]; 
     else 
      cout<<0; 
} 


    return 0; 
} 
+2

Ich bin mir nicht sicher, was Sie erwarten Dinge wie 'cin >> d, & a [i] [j]' zu tun ... –

+0

Das Programm kompiliert übrigens, aber es nur das letzte Element ausdrucken von dem Array eingegeben und die Nullen, die die obere Matrix hervorheben ... – CornucopiaBeebee

+0

Ich denke, dass Sie erklären müssen, was Sie denken 'cin >> d, & a [i] [j]' tut. Es tut sicherlich nicht, was Sie denken, dass es tut. –

Antwort

0

Normalerweise, wenn eine obere Dreiecksmatrix der Größe N Zuweisung Sie zuteilen N + N-1 ... + 1 (aufblicken Summe der ganzen Zahlen) Elemente, und dann müssen Sie entweder Zugriffsmechanismen erstellen (wahrscheinlich was ist hier gemeint), so dass, wenn Sie Element M (i, j) wollen, Sie das Element in Zeile i, Spalte j erhalten, trotz der Tatsache, dass (fast) die Hälfte der Elemente fehlt; oder tun Sie das manuell, wenn Sie die Matrix in welchem ​​Matrixmanipulationscode auch verwenden.

Sie behandeln das eindimensionale Array so, als wären die ersten N Elemente die erste Zeile, die nächsten N-1 Elemente sind die (rechten N-1 Elemente der) zweiten Zeile und so weiter.

Weil diese Frage wie Hausaufgaben aussieht und riecht, denke ich, das ist ungefähr so ​​viel Hinweis wie passend.

+0

Ich sollte nicht "normal" sagen. Die großen linearen Algebra-Pakete unterstützen dreieckige Matrizen sowohl in dieser gepackten Darstellung als auch in der verschwenderischen quadratischen Matrix, wobei nur die Hälfte der Einträge verwendet wird, was hinsichtlich der Leistungsfähigkeit oft genauso gut oder besser sein kann. – leftaroundabout

+0

Der einzige Grund, warum Sie die kompakte Darstellung möchten, ist, wenn die Matrix groß ist. Aber gleichzeitig stellte die Frage "die genaue Menge an benötigtem Speicher". Daraus folge ich, dass die Absicht darin besteht, das richtig zu vermitteln. – DRVic

1

Wie pro Kommentar des oli Ich glaube, Sie

cin >> d zu tun suchen; a [i] [j] = d;

vs

cin >> d, & a [i] [j];

ich lesen empfehlen, so etwas wie .... http://www.cplusplus.com/doc/tutorial/basic_io/

Theres Ihre erste Ausgabe

dynamische Zuweisung durch den Code versuchen getan wird wie neu und malloc lesen ...

http://www.cplusplus.com/doc/tutorial/dynamic/

für, wie man Ihre obere Matrix speichert ... Ich würde empfehlen, nur eine normale 2d-Matrix zu verwenden, es wird wahrscheinlich besser mit den meisten Matrix-Bibliotheken da draußen funktionieren.

Viel Glück bei Ihren Hausaufgaben.

Verwandte Themen