Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Subtraktion und Multiplikation

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 ]
000
17.10.2003, 20:10 Uhr
~stempe
Gast


Hallo,

kann mir jemand sagen wieso mein Programm wenn ich den Befehl eingebe:

c=(a*b)-(d*e);
wenn a= 1, b=1
d=-1, e=-1,
also c=(1*1)-(-1*-1)

das Erbebnis 2 ausgibt und nicht wie Richtig 0.

Komme da einfach nicht dahinter.

Danke

Flo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.10.2003, 20:16 Uhr
Pablo
Supertux
(Operator)


Gibt das 2 oder 0 aus? Wie ist c deklariert?

Postet mal deinen Code.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 17.10.2003 um 20:19 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.10.2003, 20:19 Uhr
Pablo
Supertux
(Operator)



C++:
#include <stdio.h>
int main()
{
    int a,b,c,d,e;
    a=b=1;
    d=e=-1;
    c=(a*b)-(d*e);
    printf("%d\n", c);
    return 0;
}



Ausgabe :0
Bei mir gehts doch!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.10.2003, 00:26 Uhr
~stempe
Gast


Mein Programm ist ein wenig aufwendiger und da geht es nicht.

Gib mal die Matrix

1 1 -1
1 -1 1
-1 1 1

ein.


C++:
#include <iostream.h>
#include <stdio.h>
#include <math.h>

const int zeilen=2;
const int spalten=2;

typedef float matrix[zeilen][spalten];

class Matrixrechnung
{
public:
    
    matrix a;
    matrix b;
    matrix c;
    matrix d;
    matrix e;
    matrix f;
    matrix g;
    matrix h;
    matrix k;
    matrix l;
    matrix m;
    
    

public:
    void Matrixrechnung::eingabe();
    void Matrixrechnung::ausgabe();
    void Matrixrechnung::Transponiert();
    void Matrixrechnung::Allgemein();
    void Matrixrechnung::Determ();
    void Matrixrechnung::Invers();
    };
void Matrixrechnung::Allgemein()
{
    cout<<"Programm zur Berechnung einer beliebigen Transponierten Matrix"<<endl<<endl;
    cout<<"zur Berechnung der Determinante einer 2x2 oder 3x3 Matrix"<<endl<<endl;
    cout<<"zur Berechnung der Inversen einer 3x3 Matrix"<<endl<<endl;
}
void Matrixrechnung::eingabe()
{ int i,j;
i=0;
while(i<zeilen)
{j=0;
while(j<spalten)
{
     printf("Geben sie den Wert fuer x%i%i ein:\n",i+1,j+1);
     cin>>a[i][j];
     j++;
}
i++;
}
}

void Matrixrechnung::ausgabe()

{ printf("Ihre eingegebene Matrix ist: \n\n");
int i,j;

i=0;
while(i<zeilen)
{
j=0;
while(j<spalten)
{  cout<<" ";
    cout<<a[i][j];
    cout<<" ";
    j++;
    
}cout<<""<<endl<<endl;
i++;
}
  
cout<<""<<endl<<endl;
}

void Matrixrechnung::Transponiert()

{ printf("Die Transponierte Matrix ist: \n\n");
int i,j;

j=0;
while(j<spalten)
{
i=0;
while(i<zeilen)
{  cout<<" ";
    cout<<a[i][j];
    cout<<" ";    

    i++;
    
}cout<<""<<endl<<endl;
j++;
}
  
cout<<""<<endl<<endl;
}

void Matrixrechnung::Determ()


{
switch(zeilen)

{case 2:
{
    int i,j;
    i=0;j=0;
    {cout<<"Die Determinante ist: ";
    b[i][j]=(a[0][0]*a[1][1])-(a[0][1]*a[1][0]);
    cout<<b[i][j];
    cout<<" ";
    }

}
    

break;



case 3:
    { int i,j;
      i=0;j=0;
      {cout<<"Die Determinante ist: ";
      b[i][j]=(a[0][0]*a[1][1]*a[2][2])+(a[0][1]*a[1][2]*a[2][0])+(a[0][2]*a[1][0]*a[2][1])-(a[0][2]*a[1][1]*a[2][0])-(a[0][0]*a[1][2]*a[2][1])-(a[0][1]*a[1][0]*a[2][2]);
      cout<<b[i][j];
      cout<<" ";
      }
    }

break;

    
default: cout<<"!!!!! Achutung !!!!!"<<endl;
    cout<<"Es kann nur die Determinante "<<endl;
        cout<<"von einer 2x2 oder eine 3x3 Matrix berechnet werden!";

}
}

void Matrixrechnung::Invers()
{int i,j;
i=0;j=0;
    if(b[i][j]!=0)
{
    switch(zeilen)
    {



     case 3:
    {    int i,j;
      i=0;j=0;
      { c[i][j]=(a[1][1]*a[2][2])-(a[1][2]*a[2][1]);//*(1/b[i][j]);
        d[i][j]=-((a[1][0]*a[2][2])-(a[1][2]*a[2][0]));//*(1/b[i][j]);
        e[i][j]=(a[1][0]*a[2][1])-(a[1][1]*a[2][0]);//*(1/b[i][j]); //hier macht er die Mulitplikation (1*1)-(-1*-1)=2
                                                                    //Ergebnis ist aber eigentlich 0. Warum ?
        f[i][j]=-((a[0][1]*a[2][2])-(a[0][2]*a[2][1]));//*(1/b[i][j]);
        g[i][j]=(a[0][0]*a[2][2])-(a[0][2]*a[2][0]);//*(1/b[i][j]);
        h[i][j]=-((a[0][0]*a[2][1])-(a[0][1]*a[2][0]));//*(1/b[i][j]);
        k[i][j]=(a[0][1]*a[1][2])-(a[0][2]*a[1][2]);//*(1/b[i][j]);
        l[i][j]=-((a[0][0]*a[1][2])-(a[0][2]*a[1][0]));//*(1/b[i][j]);
        m[i][j]=(a[0][0]*a[1][1])-(a[0][1]*a[1][0]);//*(1/b[i][j]);
        cout<<"Die Inverse ist: "<<endl<<endl;
        cout<<c[i][j];cout<<" ";cout<<" ";cout<<" ";
        cout<<f[i][j];cout<<" ";cout<<" ";cout<<" ";
        cout<<k[i][j];cout<<" ";cout<<" ";cout<<" "<<endl;
        cout<<d[i][j];cout<<" ";cout<<" ";cout<<" ";
        cout<<g[i][j];cout<<" ";cout<<" ";cout<<" ";
        cout<<l[i][j];cout<<" ";cout<<" ";cout<<" "<<endl;
        cout<<e[i][j];cout<<" ";cout<<" ";cout<<" ";
        cout<<h[i][j];cout<<" ";cout<<" ";cout<<" ";
        cout<<m[i][j];cout<<" ";cout<<" ";cout<<" "<<endl;
        
      }
    }
break;

    case 2:
    {    int i,j;
      i=0;j=0;
      { c[i][j]=a[1][1];//*(1/b[i][j]);
        d[i][j]=-(a[1][0]);//*(1/b[i][j]);
        e[i][j]=-(a[0][1]);//*(1/b[i][j]);
        f[i][j]=a[0][0];//*(1/b[i][j]);
        cout<<"Die Inverse ist: "<<endl<<endl;
        cout<<c[i][j];cout<<" ";cout<<" ";cout<<" ";
        cout<<e[i][j];cout<<" ";cout<<" ";cout<<" "<<endl;
        cout<<e[i][j];cout<<" ";cout<<" ";cout<<" ";
        cout<<f[i][j];cout<<" ";cout<<" ";cout<<" "<<endl;
      }
    }
            
break;

default: cout<<"!!!!! ACHTUNG!!!!"<<endl;  
        cout<<"Die Inverse kann nur fuer eine 3x3 oder 2x2 Matrix berechnet werden!"<<endl;
    
    }
}    
else
cout<<"Die Inverse kann nicht berechnet werden da die Determinante 0 ist: "<<endl;
}




  
void main (void)
{
    Matrixrechnung objMatrixrechnung;
    
    objMatrixrechnung.Allgemein();
    cout<<""<<endl;
    objMatrixrechnung.eingabe();
    objMatrixrechnung.ausgabe();
    objMatrixrechnung.Transponiert();
    objMatrixrechnung.Determ();
    cout<<""<<endl;
    cout<<""<<endl;
    objMatrixrechnung.Invers();
    cout<<""<<endl;
    cout<<""<<endl;
}




--edit: Pablo. [ cpp ] tags gesetzt --

Dieser Post wurde am 18.10.2003 um 01:21 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.10.2003, 01:23 Uhr
Pablo
Supertux
(Operator)


Ufffff, sehr langer Code. Sag besser, an welcher Stelle was falsch gemacht wird.
Bearbeitung:
// upsss hast die Stelle markiert.


void main()???? int main()!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 18.10.2003 um 01:27 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.10.2003, 01:33 Uhr
Pablo
Supertux
(Operator)


Die Inverse Matrix ist falsch! Die Transponierte Matrix einer 2x2 Matrix habe ich nicht bekommen, ich meine, keine richtige.

Und wie schaffe ich, dass ich eine 3x3-Matrix eingebe?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.10.2003, 15:15 Uhr
~stempe
Gast


du musst die eingabe bei zeilen und spalten ganz oben ändern dann kannst du die 3x3 Matrix eingeben.

Er macht dann alles richtig bis auf die Inverse.

Und das ist meine Frage.

Gib mal 1 1 -1
1 -1 1
-1 1 1 ein.

Die Inverse sollte dann sein

0.5 0.5 0
0.5 0 0.5
0 0.5 0.5

Das macht er aber nicht und ich weiß nicht wieso?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.10.2003, 15:41 Uhr
Pablo
Supertux
(Operator)


Ich kenne keine "Fomel" a la Mitternachtsformel für die Berechnung der Inverse. Ich hab gestern versucht, eine allgemeine Inverse Matrix zu A aus |R^(2x2)


Code:
       a11 a12
A :=
       a21 a22



Und ich hab 2 verschiedene, aber wenn man eine 0 in a12 oder a21 einbigt, klappt das nicht, deshalb habe ich nicht gepostet. Ich hab mir auch nicht deinen Algorithmus angeschaut, es gibt zu viele kleine Matrixen, und ich weiß nicht, wozu. Aber stimmt, nur die Inverse ist nicht richtig.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.10.2003, 15:48 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


das sollte dir hoffentlich deine matrix invertieren.
n ist dann zeilenanzahl oder spalten der matrix (ist ja bei einer zu invertierenden matrix indentisch)


C++:
void matrix_inv(double*m,int n){
int i,j,k;
double    h,*mat=new double[n*n];
    
    for(j=0;j<n;j++)for(i=0;i<n;i++)mat[i+j*n]=i!=j?0:1;

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



--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
18.10.2003, 16:45 Uhr
(un)wissender
Niveauwart


@windalf
Von übersichtlichem Code und aussagekräftigen Variablenbezeichnungen hälst du nicht viel, oder?
Ich hoffe, ich komme nie in die Verlegenheit, deinen Code debuggen zu müssen!
Nicht böse sein...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: