Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Logische Verknüpfungen

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
26.06.2007, 20:02 Uhr
jack26



Hi,

ich hab grad irgendwie nen Hänger bei den logischen Verknüpfungen, mein Code dazu sieht so aus:

C++:
#include <stdio.h>

#define Z 4

void MatrixSpiegelung(int (*matrix)[Z]) {
    int puffer, i, j;

    for(i=0; i<Z; i++) {
        for(j=0; j<Z; j++) {
        
            if(i>j) {

                if((matrix[i][j]==0 || matrix[j][i]==0) && matrix[i][j]>0 && matrix[j][i]>0) { // Hier muss irgendwo mein Fehler liegen
                    puffer=matrix[i][j];
                    matrix[i][j]=matrix[j][i];
                    matrix[j][i]=puffer;
                }
            }
        printf("%6i",matrix[i][j]);
        }
    printf("\n\n");
    }    
}

int main(void) {
    int tab[Z][Z] = {{12,0,15,1},    
                    {-13,3,10,8},    
                    {2,16,5,11},    
                    {7,0,-2,14}};    
    

    MatrixSpiegelung(tab);

}




Die Aufgabe meines Programmes sieht so aus:

Alle Werte einer int-matrix werden an der Hauptdiagonalen gespiegelt, aber nur wenn...
...einer der beiden Werte 0 ist
...beide Werte positiv sind

Leider arbeitet mein Programm nicht richtig. Wäre für einen Hinweis auf meinen Denkfehler sehr dankbar.

Vielen Dank
Gruß
jack26
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.06.2007, 00:08 Uhr
öni



Hmm ich verstehe nicht genau die Aufgabe. Welche Werte willst du vergleichen? Und wo spiegelst du deine Matrix? Und wieso muss i größer als j sein?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.06.2007, 01:28 Uhr
jack26



Ich will keine Werte vergleichen.
Ich will eigentlich nur die Werte von der einen Seite der Diagonalen mit den korrespondierenden Werten der anderen Seite vertauschen.
Ich spiegle also nicht die Matrix, sondern ich tausche nur die Werte oberhalb der Diagonalen mit den entsprechenden Werten unterhalb der Diagonalen.

Dieser ganze Tausch wird aber nur vollzogen, falls einer der Werte 0 und beide Werte positiv sind, also der Wert oberhalb der Diagonalen und der entsprechende Wert unterhalb der Diagonalen.

Ich laufe quasi mein 2 Dimensionales Array komplett mit 2 for Schleifen durch und spreche durch die Anweisung if(i>j) die untere Hälfte der Diagonalen an(i=j wäre die Diagonale selbst und i<j wäre die obere Hälfte der Diagonalen, was aber unnötig ist hier), vergleiche anschließend ob die Werte ober- und unterhalb der Diagonalen die vorgegebenen Prämissen erfüllen und tausche diese anschließend.

Ich hoffe es ist nun verständlicher, falls es immer noch unklar ist, schreib einfach nochmal ;-)

Danke trotzdem.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.06.2007, 12:58 Uhr
Th



Hi, wie kann einer der Werte gleich 0 sein und beide Werte größer als 0, das ergibt doch keinen Sinn???
Edit: ich verstehe die Aufgabe somit als "logisches oder"...

Dieser Post wurde am 27.06.2007 um 13:00 Uhr von Th editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.06.2007, 13:08 Uhr
Suba Esel



hab mir das Programm jetzt nicht genauer angesehn, aber... mach doch mal aus

Zitat:


C++:
if((matrix[i][j]==0 || matrix[j][i]==0) && matrix[i][j]>0 && matrix[j][i]>0)






C++:
if((matrix[i][j]==0 || matrix[j][i]==0) && matrix[i][j]>=0 && matrix[j][i]>=0)



Ich hab das jetzt so verstanden, dass du mit positiv größergleich 0 meinst, nicht größer.
--
Simon

Dieser Post wurde am 27.06.2007 um 13:09 Uhr von Suba Esel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.06.2007, 20:46 Uhr
jack26



Ich hab wohl bei der Aufgabenbeschreibung ein paar Verständnisprobleme mit eingebaut, dafür will ich mich entschuldigen ;-)

Danke für eure Hilfen.

Hier is der nun Funktionierende Code:

C++:
#include <stdio.h>

#define Z 4

void MatrixSpiegelung(int (*matrix)[Z]) {
    int puffer, i, j;

    for(i=0; i<Z; i++) {
        for(j=0; j<Z; j++) {
        
            if(i<j) {

                if(matrix[i][j]>=0 && matrix[j][i]>=0){                
                    puffer=matrix[i][j];
                    matrix[i][j]=matrix[j][i];
                    matrix[j][i]=puffer;
                }
            }
        printf("%6i",matrix[i][j]);
        }
    printf("\n\n");
    }    
}

int main(void) {
    int tab[Z][Z] = {{12,0,15,1},    
                    {-13,3,10,8},    
                    {2,16,5,11},    
                    {7,0,-2,14}};    
    

    MatrixSpiegelung(tab);

}





Die entscheidende Zeile war wie gesagt folgende:

if(matrix[i][j]>=0 && matrix[j][i]>=0)

So wird genau das gemacht was ich wollte, es wird überprüft, ob beide gegenüberliegenden Seiten Positiv oder eben gleich 0 sind.
Ich hatte da wohl selbst ein Verständnisproblem, da ich den ODER Fall, also dass es für eine Spiegelung eben auch schon ausreicht, wenn nur eins der beiden Elemente 0 ist, extra aufgeführt. Dies wird aber ja durch >=0 auch mitberücksichtigt.
 
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: