Zahlenwerte in einen Vektor bzw Matrix schreiben
-
also ich habs tatsächlich geschafft schonmal ne matrix zu schreiben und diese auszugeben
#include <stdio.h> int main() #define zeile 5 #define spalte 5 { int i,k; int matrix[spalte][zeile]; for(i=0; i<spalte; i++) { for(k=0; k<spalte; k++) { if (i>k) { matrix[i][k] = ((i+1)*(k+1))/2; printf(" %d", matrix[i][k]); } if (i==k) { matrix[i][k] = 1; printf(" %d", matrix[i][k]); } if (i<k) { matrix[i][k] = 0; printf(" %d", matrix[i][k]); } } printf ("\n"); } }
wenn ich aber jetzt statt int zb double nehme funktioniert das ganze nicht mehr, wieso nicht?
-
Edit:
Hier rechnet der Compiler nur mit integer-Werten:
((i+1)*(k+1))/2;Schreib doch matrix[i][k] = ( double ) .. usw ..
0der benutze in der Formel wenigstens einmal einen double Wert.
Der Compiler rechnet dann intern mit double weiter:
((i+1)*(k+1))/ 2.0;
-
ok danke
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."
also wie man funktionen macht und werte übergibt weiss ich. wie das ganze für eine matrix gehen soll weiss ich aber nicht.
bisher kenne ich nur, dass eine funktion mit return den wert zurückgibt und diesen auf eine variable schreibt.wie schreibt man das ganze, wenn man jeden wert einzeln in eine matrix eingeben will?
Damn Informatik is ne komplizierte Sache...
-
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];