Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Matrix auf bestimmte eigenschaften prüfen...

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
03.11.2003, 20:14 Uhr
~kunt
Gast


kennt jemand von euch zufällig eine programmroutine die ein n*n matrix dadrauf prüft das alle zahlen von 1 bis n² dadrin vorkommen und das alle spalten-, zeilen- und diagonalensummen die gleichen sind.
ich versuch schon den ganzen tag das gebacken zu kriegen aber irgendwodran haperts bei mir immer...ausserdem sind die die ich schreibe nicht allgemein sonder für matrizen mit nem festen n wert.
das ganze soll ein programm werden das die anzahl verschiedener magischer quadrate für die ordnung n berechnet...schreib ne facharbeit über das thema

kunt

--edit: Pablo. Ich habe den Namen von marix zu Matrix geändert --

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


Die Frage ist: C, oder C++ und wie du die Matrix darstellst, mit einer Klasse, Template, 1-dimensionales Array der Länge n*n, n*n-dimensionales Array, usw. Die Überprüfung hängt von der Darstellung der Matrix, das muss man meiner Meinung nach selber machen, weil es keinen richtigen fertigen Algorithmus, da man eine Matrix auf verschiedenen Art und Weisen programmieren kann.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 03.11.2003 um 20:27 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.11.2003, 20:43 Uhr
0xdeadbeef
Gott
(Operator)



C++:
int is_magic(int **matrix, int n) {
  int magic_number = (n*n + 1) * n / 2;
  int tmp_vert, tmp_horiz, tmp_diag1, tmp_diag2, i, j;
  for(i = tmp_diag1 = tmp_diag2 = 0; i < n; ++i) {
    for(j = tmp_vert = tmp_horiz = 0; j < n; ++j) {
      tmp_vert += matrix[i][j];
      tmp_horiz += matrix[j][i];
    }
    if(tmp_vert != magic_number || tmp_horiz != magic_number)
      return 0;
    tmp_diag1 += matrix[i][i];
    tmp_diag2 += matrix[i][n-i-1];
  }
  return(tmp_diag1 == magic_number && tmp_diag2 == magic_number);
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.11.2003, 20:45 Uhr
Pablo
Supertux
(Operator)


Nur so zum Fragen, da ich deinen Code noch nicht bzw. nicht jetzt lesen werde, was macht deine Funktion? Was gibt sie aus?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.11.2003, 20:48 Uhr
0xdeadbeef
Gott
(Operator)


Wenn ich mich nicht verbastelt habe, überprüft sie, ob eine übergebene nxn-Matrix ein magisches Quadrat ist, und gibt je nachdem false (0) oder true (1) zurück.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.11.2003, 20:50 Uhr
Pablo
Supertux
(Operator)


Ach so, d.h. du hast sie jetzt nicht selbst gebastelt, oder?
--
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
03.11.2003, 20:52 Uhr
0xdeadbeef
Gott
(Operator)


Doch, aber nicht getestet.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.11.2003, 20:56 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


da ich ein freund von eindimensionalen feldern bin..
ich poste das mal direkt ohne was zu testen, also vorsicht

C++:
double matrix*;
int n=5;
matrix = new double[n*n];

matrix[0]=1; matrix[1]=15;.....//hier die matrix mit werten füllen

bool check_matrix_inhalt(double *m, int n){
double *help=new double[n*n];
int i,j;
memcpy(help,m, n*sizeof(double));

for(j=0;j<n-1;++j)
for(i=j+1;i<n;++i)
  if(help[i]<help[j]){help[i]+=help[j];help[j]=help[i]-help[j];help[i]-=help[j];}

for(j=0;j<n*n;++j)if(help[j]!=j+1){delete [] help;return false;}
delete [] help;
return true;
}




C++:
bool check_matrix_spaltensummen(double *m, int n){
double *help=new double[n];
bool rv=true;
for(j=0;j<n;++j)help[j]=0;

for(j=0;j<n;++j)
  for(i=0;i<n;++i)
    help[j]+=m[j+i*n];

for(j=0;j<n-1;++j) if(help[j]!=help[j+1])rv=false;

delete [] help;
return rv;
}

//das mit zeilen und diagonalsumme ist analog



[Edit] upsi viel zu spät, da war wohl beefy schneller
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 03.11.2003 um 20:57 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.11.2003, 21:53 Uhr
~kunt
Gast


ich habs bisher nur mit nem 2 dimensionalem array versucht.
die matrix soll halt drauf geprüft werden ob sie ein magisches quadrat ergibt oder nich und wenn sie eins ergibt soll das nur gezählt werden. vielleicht wollte ich das dann noch erweitern und die magischen quadrate alle speichern lassen aber das is ja sone masse an variationen......
bisher hatte ich auch nur schwierigkeiten mit den gleichungssystemen für die jeweiligen ordnungen, dauert ewig lange bis man die raushat, jedenfalls für magische quadrate höherer ordnungen.

kunt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.11.2003, 22:01 Uhr
0xdeadbeef
Gott
(Operator)


Es gibt unendlich viele magische Quadrate. Und die Anzahl für ein bestimmtes n nimmt mit n sehr stark zu - ich glaube, proportional zu n!, aber sicher bin ich da grad nicht. Zum Beispiel gibt es 275305224 magische 5x5-Quadrate - ich denke, du wirst ernsthafte Probleme kriegen, die alle aufzuzeichnen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
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: