Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Übertragung von C++source in C-source

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] > 7 < [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ]
060
05.01.2004, 12:29 Uhr
Pablo
Supertux
(Operator)


hmmm (deinen letzten Post habe ich noch nicht gelesen)
Ich hab die Det Funktion per Copy&Paste kopiert und für eine obere Dreiecksmatrix mit a_ij = 0, falls i!=j und i sonst (Rang 5) bekomme ich 120 als Determinante

Code:
./mat
Wir betrachten nur Quadartische Matrizen.
Geben Sie die Anzahl der Zeilen an: 5
1. Zeile, 1. Spalte: 1
1. Zeile, 2. Spalte: 0
1. Zeile, 3. Spalte: 1
1. Zeile, 4. Spalte: 0
1. Zeile, 5. Spalte: 1
2. Zeile, 1. Spalte: 0
2. Zeile, 2. Spalte: 2
2. Zeile, 3. Spalte: 0
2. Zeile, 4. Spalte: 1
2. Zeile, 5. Spalte: 0
3. Zeile, 1. Spalte: 0
3. Zeile, 2. Spalte: 0
3. Zeile, 3. Spalte: 3
3. Zeile, 4. Spalte: 0
3. Zeile, 5. Spalte: 1
4. Zeile, 1. Spalte: 0
4. Zeile, 2. Spalte: 0
4. Zeile, 3. Spalte: 0
4. Zeile, 4. Spalte: 4
4. Zeile, 5. Spalte: 0
5. Zeile, 1. Spalte: 0
5. Zeile, 2. Spalte: 0
5. Zeile, 3. Spalte: 0
5. Zeile, 4. Spalte: 0
5. Zeile, 5. Spalte: 5

1.000000 0.000000 1.000000 0.000000 1.000000
0.000000 2.000000 0.000000 1.000000 0.000000
0.000000 0.000000 3.000000 0.000000 1.000000
0.000000 0.000000 0.000000 4.000000 0.000000
0.000000 0.000000 0.000000 0.000000 5.000000
Det: 120.000000



(ich schau mir jetzt deine Matrix an)
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
061
05.01.2004, 12:41 Uhr
Pablo
Supertux
(Operator)


Ich habe mir deine Matrix angeschaut und MatrInv wieder per Copy&Paste kopiert und bekomme: (Die erste Matrix ist die Eingabe Matrix, dann Det und dann Inverse und dann Det der Inverse Matrix)


Code:
./mat
Wir betrachten nur Quadartische Matrizen.
Geben Sie die Anzahl der Zeilen an: 3
1. Zeile, 1. Spalte: -1
1. Zeile, 2. Spalte: -2
1. Zeile, 3. Spalte: 0
2. Zeile, 1. Spalte: -2
2. Zeile, 2. Spalte: 3
2. Zeile, 3. Spalte: -3
3. Zeile, 1. Spalte: 0
3. Zeile, 2. Spalte: 3
3. Zeile, 3. Spalte: 3

-1.00 -2.00 0.00
-2.00 3.00 -3.00
0.00 3.00 3.00

Det=-30.000000
-0.60 -0.20 -0.20
-0.20 0.10 0.10
0.20 -0.10 0.23

Det Inv=-0.033333



Genau das, was ich wollte (bzw. was du wolltest)
Mir gefällt deine Art der Matrix Ausgabe nicht. Versuche so:

C++:
void printMat(const double* matrix, int Rang) {
    int i;
    for(i=0; i<Rang*Rang; ++i) {
        if (!(i % Rang)) printf("\n");
        printf("%0.2f ", matrix[i]);
    }
    printf("\n");
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 05.01.2004 um 12:42 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
062
05.01.2004, 12:48 Uhr
Lumina



und dann gehts? Klasse!
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
063
05.01.2004, 12:50 Uhr
Pablo
Supertux
(Operator)


Also, bei mir geht's. Vielleicht lag es an deiner Art die Matrix auszugeben, weil es scheint als die Funktionen bugfrei wären.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
064
05.01.2004, 12:52 Uhr
Lumina



oh, noch nicht ganz...
Warum nicht?
soll ich noch mal alles posten??
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
065
05.01.2004, 12:53 Uhr
Lumina



ich hab es ja jetzt mit deiner Art der ausgabe probiert... irgendwo ist noch ein Fehler... bei mir nat.
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
066
05.01.2004, 12:56 Uhr
Pablo
Supertux
(Operator)


Ja, also, mein Source Code: (hab wieder eine Kleinigkeit verändert und ich benutze schon memcpy, ich includiere string.h dafür)


C++:
#include <stdio.h>
#include <malloc.h>
#include <string.h>

void MatrInv(double *m, int Rang)
{
    int i, j, k;
    double    h;
    double *mat;
    
    mat = (double*)malloc (Rang*Rang*sizeof(double));
        if (mat==NULL) { // nicht vergessen
            fprintf(stderr, "Kein Speicher mehr\n");
            exit(1);
        }

    for(j = 0; j<Rang; j++)
        for(i = 0; i<Rang; i++) mat[i+j*Rang] = i != j ? 0:1;

    for(j = 0; j<Rang; j++)
    {
        h = m[j*Rang+j];

        for(k = 0; k<Rang; k++)
        {
            m[k+j*Rang] /= h;
            mat[k+j*Rang] /= h;
        }

        for(i = 0; i<Rang; i++)
            if(i != j && m[i*Rang+j] != 0)
            {
                h = -m[i*Rang+j];
                for(k=0; k<Rang; k++)
                {
                    m[k+i*Rang] += h * m[k+j*Rang];
                    mat[k+i*Rang] += h * mat[k+j*Rang];
                }  
            }
    }
    memcpy(m, mat, Rang*Rang*sizeof(double));
        /*
    for(j=0; j<Rang*Rang; ++j) m[j] = mat[j];
    free(mat); */


}

double Det(double *matrix, int Rang)
{
    double *h;
    double r = matrix[0] * matrix[3] - matrix[1] * matrix[2];
    int i, j, k, x = Rang-1, b = 1;
        if(Rang-2)
        {
            r = 0;
            for(i = -1; ++i<Rang; b = -b)
            {
                h = (double*)malloc(x*x*sizeof(double));
        if (h==NULL) { // nicht vergessen
        fprintf(stderr, "Kein Speicher mehr\n");
        exit(1);
        }
                for(j = 0; j<x; j++)
                    for(k=0;k<x;k++)
                        h[k+j * Rang-j] = matrix[(k<i?0:1) + Rang + k + j*Rang];
                r+= b * matrix[ i ] * Det(h,x);
                free(h);
            }
        }
    return r;
}

void EingabeDerMatrix(double* matrix, int Rang)
{
    int Spalte, Zeile;
    int n=0;

    for (Zeile = 0; Zeile < Rang; Zeile++)
        for (Spalte = 0; Spalte < Rang; Spalte++)
        {
            printf("%d. Zeile, %d. Spalte: ", Zeile+1, Spalte+1);
            scanf("%lf", &matrix[n]);
            n++;
        }
}
void printMat(const double*, int);
int main()
{
    int i, n;
    double* matrix;
    printf("Wir betrachten nur Quadartische Matrizen.\n");
    printf("Geben Sie die Anzahl der Zeilen an: ");
    scanf("%d", &n);
    matrix = (double*) malloc(n*n*sizeof(double));
    if (matrix==NULL) {
    fprintf(stderr, "Kein Speicher mehr!\n");
    return 1;
    }
    EingabeDerMatrix(matrix, n);
    printMat(matrix, n);
    printf("\nDet=%f\n", Det(matrix, n));
    MatrInv(matrix, n);
    printMat(matrix, n);
    printf("\nDet Inv=%f\n", Det(matrix,n));
    free(matrix);
    return 0;
}

void printMat(const double* matrix, int Rang) {
    int i;
    for(i=0; i<Rang*Rang; ++i) {
        if (!(i% Rang)) printf("\n");
        printf("%0.2f ", matrix[i]);
    }
    printf("\n");
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
067
05.01.2004, 12:57 Uhr
Pablo
Supertux
(Operator)


Stell lieber deine .c und .h Dateien ins Netz (zum Runterladen), so geht es schneller.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 05.01.2004 um 12:57 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
068
05.01.2004, 13:07 Uhr
Lumina



Juhu! Sieg! ich hab jetzt nur noch 2 Warnungen:

C:\Programme\DevStudio\MyProjects\Studienarbeit2Prog\Studienarbeit2Prog.c(88) : warning C4098: 'main' : 'void'-Funktion gibt einen Wert zurueck
C:\Programme\DevStudio\MyProjects\Studienarbeit2Prog\Studienarbeit2Prog.c(97) : warning C4098: 'main' : 'void'-Funktion gibt einen Wert zurueck
--
*******************************************
Willst du glücklich sein im Leben, trage bei zu and'rer Glück,
denn die Freude, die wir geben, kehrt ins eig'ne Herz zurück!
*******************************************

Dieser Post wurde am 05.01.2004 um 13:09 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
069
05.01.2004, 13:09 Uhr
Pablo
Supertux
(Operator)


Ja, die main Funktion soll int sein und nicht void!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] > 7 < [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: