Zahlenwerte in einen Vektor bzw Matrix schreiben
-
Du hast nun schon ne Funktion geschrieben, die main() heisst, die brauchst du nur umzubenennen und in einem neuen main() aufzurufen.
Najanun und wo muss man dann wohl mat hinpacken, damit mat global wird ?
-
sorry, versteh nich was du meinst.
also damit mat global wird, muss es in main.
ich krieg aber das übergeben der werte aus der matrix-funktion in die main-funktion nich hin.
-
jebus schrieb:
...
hier steht "Das Programm soll die Matrix mat mittels einer Funktion fill_matrix mit den obigen Werten belegen, wobei die Matrix mat als globale Variable definiert wird.
...Ich lese da nichts von einer Übergabe.
Die Matrix soll doch nur global definiert werden weiter nüschts.
Kannst also deine Variable über deine Funktion drüber schreiben und fertig.
-
sorry verstehs noch immer nich, könntest mir das bitte genauer erklären?
-
Ja, kann ich.
Das Gerüst sieht so aus, wenn ich die Aufgabe richtig interpretiere:
// Matrix global definieren. double mat[5][5]; void fill_matrix() { // Matrix füllen. } int main() { fill_matrix(); // Funktion aufrufen. return 0; } // Feddisch.
Tschtümmts ?
-
ja stimmt
also hab hier mal das jetzt geschrieben mittlerweile
#include <stdio.h> #define zeile 5 #define spalte 5 int i,j,k; double matrix[spalte][zeile]; int main(void) { double b[k]; double x[k]; fill_matrix (); for(i=0; i<spalte; i++) { for(j=0; j<spalte; j++) { printf(" %lf", matrix[i][j]); } printf ("\n"); } for (k=0;k<=4;k++) { printf ("\n"); b[k] = ((k+1)*(k+2))/2; printf(" %lf", b[k]); } for (k=0;k<=4;k++) { x[k] = matrix[k][k-1] * x[k-1]; printf ("%lf %lf %lf", matrix[i][j], b[k], x[k]); } } void fill_matrix (void) { for(i=0.0; i<spalte; i++) { for(j=0.0; j<spalte; j++) { if (i>j) { matrix[i][j] = ((i+1)*(j+1))/10.0; } if (i==j) { matrix[i][j] = 1; } if (i<j) { matrix[i][j] = 0; } } } }
also aufgabe is jetzt:
1.3 im Hauptprogramm alle x[k] für k = 0 ... 4 nach Gl. (2) berechnen
Gl. 2:
x[k] = b[k] – mat[k][0] * x[0] – . . . – mat[k][k-1] * x[k-1])Hab das versucht oben umzusetzen aber es klappt nich.
In der Schleife in der ich die Formel anwende bekomme ich eine "abnormal program termination"... ??
-
Muttu den Fehler suchen. Lass dir die Werte der Variablen als Zwischenergebnisse anzeigen, mach dich mit einem Debugger vertraut, usw.
-
hallo,
also ich hab jetzt mal n total einfaches programm geschrieben
#include <stdio.h> #define zeile 5 #define spalte 5 int k=0; double b[zeile]; double x[zeile]; int main() { double b[k]; double x[k]; for(k=0.0; k<spalte; k++) { b[k] = 0; x[k] = 0; printf("\n %lf %lf\n",b[k],x[k]); } }
das ganze soll 0'en in die felder schreiben.
wenn ich das ganze im debugger laufen lasse, dann funktioniert das für die ersten 3 k's aber dann kommt bei dem x[4] diese fehler meldung?
bis dahin steht für x[k] noch kein bad adress drinnen, ab k =4 dan schon und das programm stürzt abWedit output window auto: Fri Jun 15 16:19:52 2007
k = 3
b[k] = 0.0000000000000000e+00
x[k] = <bad address 0x00000018>
spalte = 5kann mir das jemand erklären bitte?
-
Nebenbei:
Globale Variablen sind schlechter Programmierstil und weiterhin solltest du deine Variablen gleich initialisieren
-
Wieso hast du die Arrays doppelt im Programm ?
-
ja ok stimmt, muss ich verändern.
was sagt ihr zu meinem eigentlichen problem?
-
Wenn du das richtige Paar entfernst, gibts kein eigentliches mehr
Was sagst du denn hierzu:
int k = 0; double b[k]; double x[k];
Wie groß sind die Arrays und wie viele Zahlen passen rein ?
-
hab das ganze mal so geschrieben, is das so richtig?
#include <stdio.h> int main() { int k=0; double b[k]; double x[k]; for(k=0; k<5; k++) { b[k] = 0; x[k] = 0; printf("\n %lf %lf\n",b[k],x[k]); } }
bekomme immernoch die gleiche fehlermeldung.
die arrays sollen 5 zahlen fassen.
-
#include <stdio.h> #define IDX 5 int main() { int k; double b[IDX]; double x[IDX]; for(k=0; k<5; k++) { b[k] = 0; x[k] = 0; printf("\n %lf %lf\n",b[k],x[k]); } }
-
so läuft das also ....
vielen dank
-
Hallo nochmal von mir,
also ich versuch jetzt schon geraume Zeit, diese Gleichung hier zu Programmieren
x[k] = b[k] – mat[k][0] * x[0] – . . . – mat[k][k-1] * x[k-1])
mein Problem ist, dass ich nicht weiss wie ich die ganzen Eregbnisse aus den vorherigen k's ins aktuelle bekomme.
wär super wenn ihr mir helfen könntet, is das letzte Problem, dass mich noch davon trennt, meine Prüfungszulassung zu bekommen.
Danke
-
Was du brauchst, nennt sich Schleife:
double res=b[k]; for(int i=0;i<k;++i) res-=mat[k][i]*x[i];
-
sorry, versteh nich wie du das meinst
also was ich habe sieht so aus
int main(void) { int k; double b[IDX]; double x[IDX]; double x2[IDX]; double test=0; fill_matrix (); for(k=0; k<5; k++) { b[k] = 0; x[k] = 0; printf("\n %lf %lf\n",b[k],x[k]); } for(i=0; i<spalte; i++) { for(j=0; j<spalte; j++) { printf(" %lf", matrix[i][j]); } printf ("\n"); } for (k=0;k<=4;k++) { printf ("\n"); b[k] = ((k+1)*(k+2))/2; printf(" %lf", b[k]); } for (k=0;k<=4;k++) { x[k] = b[k] - matrix[k][k-1]*x[k-1]; printf ("\n%lf %lf %lf", matrix[k][k-1], b[k], x[k]); } }
bei der letzten schleife, werden die ersten 2 werte noch richtig ausgegeben, ab dem 3. aber nicht mehr weil die ergebnisse der vorherigen matrix[k][k-1]'s nicht zusätzlich subtrahiert werden.
so hab ichs zumindest verstanden
-
< Error Detected >
x[k] = b[k] - matrix[k]**[k-1]***x[k-1];// !!! k-1 < 0 !!!
< Detection Completed at 19:18:37 21.06.2007 >
-
ja dachte mir auch, dass das nicht geht. aber scheinbar ist bei mir k-1 für k=0 null, ebenso bei der matrix.
das könnte man ja lösen indem man, vorher den wert für x[0] ausechnet, dieser ist nämlich 1 bei meiner aufgabe.