Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Priblem bei der Ausgabe

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 <
000
12.11.2007, 17:09 Uhr
shyguy



Hallo.


Habe folgendes Problem:
Ich bin Ein Mathe Student im 3.Semester und muss in diesem semester Programmieraufgaben abgeben.
Habe nun mit hilfe eines Freundes folgendes programm Geschrieben:




C++:
#include <stdio.h>
#define N 3

typedef double Matrix[N][N+1];
typedef double Vector[N];


Matrix matrixA = { {2,2,0,6},
                   {1,1,2,9},
           {2,1,1,7} };

Vector vectorX;

void OutputMatrix(Matrix (*matrix)) {
  unsigned char i, k;
  for (i = 0; i < N; i++) {
    for (k = 0; k < N+1; k++) {
      printf("%f\t", (*matrix)[i][k]);
    }
    printf("\n");
  }
  printf("\n");
}

void OutputVector(Vector (*vector)) {
  unsigned char i;
  for (i = 0; i < N; i++) {
      printf("%f\n", (*vector)[i]);
  }
  printf("\n");
}

void OutputPoly(Vector (*vector)) {
  signed int i;
  printf("f(x) = ");
  for (i=N-1; i>=0; i--) {
    if (i==0) printf("%f", (*vector)[i]);
    else printf("%f*x**%i + ", (*vector)[i], i);
  
  }
  printf("\n");
}

double betrag(double zahl) {
  if (zahl < 0) return -zahl;
  else return zahl;
}

void tausche_zeilen(unsigned int k, unsigned int l) {
  unsigned int i;
  double a;
  for (i=0; i<=N; i++) {
    a = matrixA[k][i];
    matrixA[k][i] = matrixA[l][i];
    matrixA[l][i] = a;
  }
}

void sub_zeile_mit_faktor(unsigned int i, unsigned int j, double faktor) {
  unsigned int m;

  for (m=0; m<=N; m++) {
    matrixA[i][m] = matrixA[i][m] - faktor * matrixA[j][m];
  }
}

void gauss() {
  unsigned int j;
  unsigned int i;
  unsigned int r = 0;

  for (j=0; j<=N-2; j++) {
    r = j;
    for (i=j; i<=N-1; i++) {
      if (betrag(matrixA[i][j]) > betrag(matrixA[r][j])) r = i;
      //printf("%f:abs=%f\n", matrixA[i][j], betrag(matrixA[i][j]));
    }
    tausche_zeilen(r,j);
    OutputMatrix(&matrixA);
    for (i=j+1; i<=N-1; i++) {
      sub_zeile_mit_faktor(i,j,matrixA[i][j]/matrixA[j][j]);      
    }
    OutputMatrix(&matrixA);
  }

}

void rueckwaertseinsetzen() {
  signed int k;
  unsigned int i;
  double sum;
  for (k=N-1; k>=0; k--) {
    sum = 0;
    for (i=k+1; i<=N-1; i++) {
      sum += matrixA[k][i] * vectorX[i];
    }
    vectorX[k] = 1/matrixA[k][k] * (matrixA[k][N] - sum);
//    printf("%f\n", vectorX[k]);
  }
}

int main() {

  OutputMatrix(&matrixA);
  //printf("\n\n");
  gauss();
  OutputMatrix(&matrixA);
  rueckwaertseinsetzen();
  OutputVector(&vectorX);
  OutputPoly(&vectorX);
  system("PAUSE");
  return 0;
}    



soooo, das programm funktioniert einwandfrei (wen es interessiert...es ist der Gauß algorithmus mit zeilenpivotsuche und rückwärtseinsetzen.Später muss noch interpoliert werden, deswegen das polynom am schluss).

Nun das Problem.Das Programm lief bei meinem Freund ohne Probleme, aber bei mir kommen bei der Ausgabe Falsche Werte Raus, zB habe ich lauter Nullen in meinen Matrixeinträgen.
Für jede Hilfe Ware ich Sehr dankbar


Bearbeitung:
Bitte CPP Tags verwenden

Dieser Post wurde am 12.11.2007 um 17:46 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.11.2007, 00:51 Uhr
0xdeadbeef
Gott
(Operator)


Ich kann den Fehler so ohne Weiteres nicht nachvollziehen. Kannst du vielleicht die Ausgabe, die du kriegst, und die eigentlich erwartete Ausgabe posten?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: