Zahlenwerte in einen Vektor bzw Matrix schreiben



  • 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 ab

    Wedit output window auto: Fri Jun 15 16:19:52 2007
    k = 3
    b[k] = 0.0000000000000000e+00
    x[k] = <bad address 0x00000018>
    spalte = 5

    kann 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.



  • jebus schrieb:

    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.

    👍 Machen Sie es so ! 👍



  • ja gut aber wenn ich das so mache, dann is mein problem doch noch immer nich gelöst ?



  • habs jetzt selber hinbekommen,

    x[0] = 1.0;
    		printf ("\n\n%lf", x[0]);
    		for (k=1;k<=4;k++)
    			{
    				for (m=1;m<=k;m++)
    					{
    						res = matrix[k][k-m]*x[k-m];
    						neures = res + neures;
    					}
    				x[k] = b[k] - neures;
    				neures = 0;
    				printf ("\n%lf %lf %lf", matrix[k][k-1], b[k], x[k]);
    			}
    

    vielen dank trotzdem an die leute die sich gedanken darum gemacht haben 🙂


Anmelden zum Antworten