Forum: PC-Programmierung ganz einfache c frage (break, verschachteltes for)


von Linux (Gast)


Lesenswert?

Hallo
1
for(i = 0; i < 16; i++) {
2
  for(j = 0; j < 32; j++) {
3
    if (!ok) {
4
      break;
5
    }
6
    ...
7
  }
8
  ...
9
}


Beendet das break nur die innere Schleife oder beide?

: Verschoben durch Admin
von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ohne label nur die innere... Was spricht eigentlich dagegen es 
auszuprobieren?

von Link zu (Gast)


Lesenswert?

1
for(i = 0; i < 16; i++) {
2
  for(j = 0; j < 32; j++) {
3
    if (!ok) {
4
      break;
5
    }
6
    puts("innere Schleife\n");
7
  }
8
  puts("aeußere Schleife\n");
9
}
Selbst ist der Mann...

von Klaus W. (mfgkw)


Lesenswert?

Läubi .. schrieb:
> Ohne label nur die innere... Was spricht eigentlich dagegen es
> auszuprobieren?

oder gar ein Buch zu lesen?

von Linux (Gast)


Lesenswert?

OK, danke, bin mittlerweile durch  ausprobiern auch draufgekommen.
@link zu
warum ä als ae schreiben, aber dann scharf ß.

von dagger (Gast)


Lesenswert?

Linux schrieb:
> warum ä als ae schreiben, aber dann scharf ß.
Das 'ß' habe ich übersehen... ;-)

von Vlad T. (vlad_tepesch)


Lesenswert?

Läubi .. schrieb:
> Ohne label nur die innere... Was spricht eigentlich dagegen es
> auszuprobieren?

was heist denn ohne Label? wie sieht es denn mit aus?

von Klaus W. (mfgkw)


Lesenswert?

da steht halt irgendwo noch ein label: dabei.
Platz kannst du dir fast frei aussuchen (wo halt ausführbare
Anweisungen stehen dürfen in Funktionen).

von Rolf Magnus (Gast)


Lesenswert?

Klar kann man irgendwo ein Label hinschreiben. Aber was für eine 
Änderung erwartest du dir davon?

von nicht "Gast" (Gast)


Lesenswert?

break = böse

es geht auch ohne, z.B.:
1
for(i = 0; i < 16 && !ok; i++) {
2
  for(j = 0; j < 32 && !ok; j++) {
3
4
  }
5
  ...
6
}

oder so ähnlich

von Vlad T. (vlad_tepesch)


Lesenswert?

ist aber langsamer, da bei break direkt rausgesprungen wird, bei deiner 
Variante aber in jedem Schleifendurchlauf zusätzlich die Variable 
ausgewertet werden muss

von mp (Gast)


Lesenswert?

Warum verwaendert ihr nicht einfach eine goto Anweisung?
Vielleicht so:
1
for(i = 0; i < 16; i++) {
2
  for(j = 0; j < 32; j++) {
3
    if (!ok) {
4
      goto xy;
5
    }
6
    ...
7
  }
8
  ...
9
}
10
xy:

von Falk B. (falk)


Lesenswert?

@  mp (Gast)

>Warum verwaendert ihr nicht einfach eine goto Anweisung?

Weil das Böse^3 ist!

MfG
Falk

von bla (Gast)


Lesenswert?

>       ist aber langsamer, da bei break direkt rausgesprungen wird, bei deiner
> Variante aber in jedem Schleifendurchlauf zusätzlich die Variable
> ausgewertet werden muss


Da kann ich ja nur lachen, als ob 2 Taktzyklen kritisch wären.

Falls dus wirklich Böse^10 machen willst kannst auch Inline-Assembler 
verwenden und explizit die Code-Addresse angeben an der du landen 
willst.

Man man man, wir leben im 21. Jahrhundert, dort hat break KEINE 
daseinsberechtigung. Wirklich KEINE!

PS:
Ja du wirst jetzt aggresiv reagieren und es trotzdem antworten, und in 2 
Tagen kommt ein neuer Post "Misteriöser Fehler im Programm" und niemand 
wird ihn finden.

Break = Böse!
Versteht das einfach mal!

von Vlad T. (vlad_tepesch)


Lesenswert?

bla schrieb:
> Da kann ich ja nur lachen, als ob 2 Taktzyklen kritisch wären.
Das kommt auf den Prozessor an.
sind die Register belegt ist das ein Laden von einer Adresse, eine 
Auswertung und eine logische Verknüpfung mit der restlichen Bedingung.

Das kann in verschachtelten Schleifen (zB Imageprozessing) einen 
durchaus relevanten Anteil haben.


> Man man man, wir leben im 21. Jahrhundert, dort hat break KEINE
> daseinsberechtigung. Wirklich KEINE!
Man sieht, dass du offensichtlich keine Ahnung von der Industrie hast.
Wenn man nur 10Cent sparen kann um einen billigeren Controller zu 
benutzen, dann wird das gemacht.
Bei einem Absatz größer 1Mio Stück kann man schon mal einen Ingenieur 1 
Jahr lang Code optimieren lassen.

bla schrieb:
> PS:
> Ja du wirst jetzt aggresiv reagieren und es trotzdem antworten, und in 2
> Tagen kommt ein neuer Post "Misteriöser Fehler im Programm" und niemand
> wird ihn finden.

von mir sicherlich nicht.

von der mechatroniker (Gast)


Lesenswert?

Wenn die Alternative ein "verstecktes break" ist (in Form eines Flags, 
welches bewirkt, dass an denselben Codestellen ab sofort nix mehr/was 
anderes gemacht wird), ist ein echtes break alles andere als böse.

Bei einem versteckten break (Flag) muss man immer erstmal nachschauen, 
wo es noch gesetzt/gelöscht wird, was noch davon abhängt, und ob es 
nicht gar ein verstecktes goto ist. Wenn ich break lese, weiß ich, dass 
ab jetzt die Schleife nicht mehr weiter bearbeitet wird. Punkt.

von didadu (Gast)


Lesenswert?

> Man man man, wir leben im 21. Jahrhundert, dort hat break KEINE
> daseinsberechtigung. Wirklich KEINE!

Vor allem haben religiöse und quasireligiöse Glaubenskriege ihre 
Daseinsberechtigung verloren.

Warum kein goto oder break, wenn's Sinn macht und der Gott des Chips 
(aka Developer) es so WILL? Und er sagte: Spring!, und der Prozessor 
sprang, und er sah dass er gut sprang!

von Meister E. (edson)


Lesenswert?

bla schrieb:
> Man man man, wir leben im 21. Jahrhundert, dort hat break KEINE
> daseinsberechtigung. Wirklich KEINE!

Die Einen orientieren sich beim programmieren am C-Standard, die Anderen 
scheinbar am Kalender...
;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

bla schrieb:
> Break = Böse!
> Versteht das einfach mal!

Das ist gequirlter Quatsch. Versteh das mal einfach.

von Sven (Gast)


Lesenswert?

Kommen nicht in switch-case-Blöcken Haufenweise breaks vor, oder lebe 
ich hinterm mond, dass ich noch sowas benutze und nicht lieber ein 
verschachteltes If-else baue?

von Klaus W. (mfgkw)


Lesenswert?

Sven schrieb:
> Kommen nicht in switch-case-Blöcken Haufenweise breaks vor...

Ja, aber auch da sind sie inzwischen böse!
Lieber von dort mit einem goto hinter das switch springen.

von (prx) A. K. (prx)


Lesenswert?

C ist insgesamt böse. Mit oder ohne goto.

von Klaus W. (mfgkw)


Lesenswert?

Stimmt.
Ich sollte vielleicht doch zu BASIC wechseln.
Oder C++ nehmen und dabei alles weglassen, was C ist. Vielleicht
geht das ja?
Da kommt man notfalls mit einer Exception aus einer Schleife raus:
1
#include <iostream>
2
3
int main( int nargs, char **args )
4
{
5
  size_t i = 0;
6
  try
7
  {
8
    while( ++i, true )
9
    {
10
      std::cout << "Hallo" << std::endl;
11
      if( !(i-5) )
12
      {
13
        throw "raus!";
14
      }
15
    }
16
  }
17
  catch( const char *warum )
18
  {
19
    std::cout << "bin " << warum << std::endl;
20
  }
21
}

von Thomas K. (muetze1)


Lesenswert?

Hmm, eine komische Exception-Klasse die du da wirfst...

von Klaus W. (mfgkw)


Lesenswert?

Ich kann werfen, was ich will.
Wir sind hier doch nicht bei Java!
1
   class Wattebauschchen
2
   {};
3
   ...
4
   throw Wattebauschchen();

von Thomas K. (muetze1)


Lesenswert?

Klaus Wachtler schrieb:
> Ich kann werfen, was ich will.

Richtig, aber dann kündige nicht C++ an und schreib dann sonstwas...

von Klaus W. (mfgkw)


Lesenswert?

Ist das nicht C++?
Der gcc übersetzt das.

von U.R. Schmitt (Gast)


Lesenswert?

Wenn schon Java dann richtig :
class WatteBauschchenException extends Exception ...
und hackt doch nicht auf dem armen bla so rum, der traut sich ja nicht 
mal ein richtigen alias zu benutzen.
Soll er uns doch mal die Lösung für das 21 Jahrhundert für das gestellte 
Problem zeigen. Ich bin gespannt ob da noch was kommt und lerne gerne 
dazu.

von Thomas K. (muetze1)


Lesenswert?

Klaus Wachtler schrieb:
> Ist das nicht C++?
> Der gcc übersetzt das.

Ich habe eben nochmal nachgelesen, also throw nimmt eigentlich nur 
Klassen entgegen. Man kann sogar ein std::string werfen, dann ist aber 
die Frage: wer räumt den geworfenen String wieder ab? Deine Version mit 
dem stack text ist schon etwas komisch und vielleicht auch nur eine GCC 
Erweiterung (wie auch die Ranges bei der switch() Anweisung) - oder er 
erstellt implizit ein std::string. Obwohl, das kann wieder nicht sein, 
weil implizit würde Stack Objekt voraussetzen und der würde mit 
verlassen der Funktion wieder abgeräumt werden und somit würde jeder 
äußere Handler in die Grütze greifen. Das wiederrum lässt einen auch 
wieder zu der Aussage verleiten: der geworfene String darf kein lokaler 
sein, weil sonst im äußeren Handler der String schon wieder weg ist...

Fragen über Fragen, aber so ein Konstrukt wie deins, ist mir noch nicht 
untergekommen. Ich vermute eine GCC Erweiterung. Ich würde mal 
behaupten, es ist kein Standard C++.

von Klaus W. (mfgkw)


Lesenswert?

U.R. Schmitt schrieb:
> Wenn schon Java dann richtig :
> class WatteBauschchenException extends Exception ...

Sorry, aber ich wollte doch gar nicht Java nehmen!
Ich schrub C++!
Kann es sein, daß wir irgendwie aneinander vorbeischreiben und -werfen?

> und hackt doch nicht auf dem armen bla so rum, der traut sich ja nicht
> mal ein richtigen alias zu benutzen.

Was ist denn sein richtiger Alias? Blabla?

von Klaus W. (mfgkw)


Lesenswert?

Thomas K. schrieb:
> Ich habe eben nochmal nachgelesen, also throw nimmt eigentlich nur
> Klassen entgegen.

Wer sagt das? Das wäre mir neu. Kann sein, daß es an mir
vorbeigegangen ist...

Der gcc schluckt es aber wirklich:
1
klaus@i4a:~ > cat t.cpp
2
#include <iostream>
3
4
int main( int nargs, char **args )
5
{
6
  size_t i = 0;
7
  try
8
  {
9
    while( ++i, true )
10
    {
11
      std::cout << "Hallo" << std::endl;
12
      if( !(i-5) )
13
      {
14
        throw "raus!";
15
      }
16
    }
17
  }
18
  catch( const char *warum )
19
  {
20
    std::cout << "bin " << warum << std::endl;
21
  }
22
}
23
klaus@i4a:~ > g++ -Wall -Wextra t.cpp && ./a.out
24
t.cpp:3: warning: unused parameter ‘nargs’
25
t.cpp:3: warning: unused parameter ‘args’
26
Hallo
27
Hallo
28
Hallo
29
Hallo
30
Hallo
31
bin raus!

Thomas K. schrieb:
> Man kann sogar ein std::string werfen, dann ist aber
> die Frage: wer räumt den geworfenen String wieder ab?

Der unwinding-Mechanismus. Wie bei allen automatischen und
temporären Variablen.

Thomas K. schrieb:
> Deine Version mit
> dem stack text ist schon etwas komisch...

Vielleicht nicht unbedingt empfehlenswert, zugegeben.

Aber was hat das mit dem Stack zu tun?

Thomas K. schrieb:
> oder er
> erstellt implizit ein std::string.

nein, ich fange doch ein const char*

Thomas K. schrieb:
> und der würde mit
> verlassen der Funktion wieder abgeräumt werden und somit würde jeder
> äußere Handler in die Grütze greifen. Das wiederrum lässt einen auch
> wieder zu der Aussage verleiten: der geworfene String darf kein lokaler
> sein, weil sonst im äußeren Handler der String schon wieder weg ist...

Man kann in C++ werfen, was man will.
Es wird bei Bedarf ein temporäres Objekt als Kopie angelegt,
und das fliegt dann durch die Gegend..

Klaus Wachtler schrieb:
> Fragen über Fragen, aber so ein Konstrukt wie deins, ist mir noch nicht
> untergekommen.

Ist es deshalb falsch? :-)

von U.R. Schmitt (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> Was ist denn sein richtiger Alias? Blabla?

Ne das schreibt er nur :-)
Jungs mal im Ernst (bitte nicht nochmal die Diskussion was ist besser 
C++ oder Java) aber wenn ich versuche die Diskussion mit dem throw in 
c++ zu verstehen, habe ich in der gleichen Zeit in Java für ein gesamtes 
Programm das Fehlerhandling geschrieben.
Manchmal ist weniger doch mehr.
(No offend, Gerätetreiber, Systemprogramme und vor allem Microcontroller 
will ich nicht in Java programmieren).

Schönes Wochenende.

von Klaus W. (mfgkw)


Lesenswert?

Auch ohne jetzt den Längenvergleich provozieren zu wollen, aber:
Was ist in C++ da schwieriger als in Java?
In Java muß man eine Standardklasse für Ausnahmen nehmen,
in C++ sollte man das wg. Verständlichkeit, kann aber
prinzipiell alles werfen, niemand verbietet es. C++ halt.
Nimmt man also die Standardklasse, sind doch beide ziemlich
gleich.

von Mark B. (markbrandis)


Lesenswert?

Wenn man jetzt aus vielen vielen ganzvielen ineinander verschachtelten 
Schleifen heraus will, dann ist ein goto nicht nur gut, sondern sogar 
optimal. :-) (aber auch so ziemlich der einzige Anwendungsfall, in dem 
man es verwenden sollte)

von Klaus W. (mfgkw)


Lesenswert?

Ich glaube ich verkneife mir jetzt die Frage, ob deine ganz
vielen ineinandergeschachtelten Schleifen nicht auch böse sind :-)

von Rolf Magnus (Gast)


Lesenswert?

Mark Brandis schrieb:
> Wenn man jetzt aus vielen vielen ganzvielen ineinander verschachtelten
> Schleifen heraus will, dann ist ein goto nicht nur gut, sondern sogar
> optimal. :-) (aber auch so ziemlich der einzige Anwendungsfall, in dem
> man es verwenden sollte)

Ich wüßte noch einen zweiten, und zwar das Aufräumen im Fehlerfall, 
wobei man das in C++ auch mit RAII machen kann.

Klaus Wachtler schrieb:
> Ich glaube ich verkneife mir jetzt die Frage, ob deine ganz
> vielen ineinandergeschachtelten Schleifen nicht auch böse sind :-)

Man sollte sich zumindest sehr gut überlegen, ob man die nicht in 
mehrere Funktionen aufteilt.

Ganz allgemein würde ich sagen, daß es ganz besonders böse ist, 
irgendwas ganz allgemein als "böse" zu bezeichnen.

von Andreas F. (aferber)


Lesenswert?

Thomas K. schrieb:
> Ich habe eben nochmal nachgelesen, also throw nimmt eigentlich nur
> Klassen entgegen.

Aber nicht im Standard. Gleich das erste Beispiel dort im Abschnitt 
"Throwing an exception" benutzt ein String-Literal als Exception, mit 
dem dazugehörigen "catch(const char* p) ...".

Offenbar hat sich da jemand davon in die Irre führen lassen, dass immer 
die Rede von einem "Object" ist, das geworfen wird. Ein "Object" meint 
aber nicht nur Instanzen von Klassen, auch z.B. ein Integer oder ein 
Pointer fallen durchaus darunter.

Andreas

von Mark B. (markbrandis)


Lesenswert?

Klaus Wachtler schrieb:
> Ich glaube ich verkneife mir jetzt die Frage, ob deine ganz
> vielen ineinandergeschachtelten Schleifen nicht auch böse sind :-)

Also bis zu drei sind sicher drin, mehr als das? Hm. In der Mathematik 
gibt es ja bis zu unendlich vielen Dimensionen, auch wenn ich nie so 
ganz verstanden habe wozu man die braucht ;-)

von Andreas F. (aferber)


Lesenswert?

Mark Brandis schrieb:
> In der Mathematik
> gibt es ja bis zu unendlich vielen Dimensionen, auch wenn ich nie so
> ganz verstanden habe wozu man die braucht ;-)

Unter anderem um Probleme zu beschreiben, die jeder Mensch Tag für Tag 
löst, ohne sich über die mathematischen Hintergründe Gedanken zu machen 
;-)

Beispiel: du willst einen neuen Rechner kaufen. Dabei spielen Kriterien 
wie Prozessor, Mainboard, Arbeitsspeicher, Hersteller, 
Festplattengrösse, Bildschirmauflösung, Preis und und und eine Rolle. 
Mathematisch betrachtet ist also die Auswahl deines neuen Rechners ein 
Problem mit locker 10 und mehr Dimensionen, die noch dazu teils komplex 
voneinander abhängen (die Wahl des Mainboards hängt vom Prozessor ab 
etc.).

Andreas

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Vlad Tepesch schrieb:
> bla schrieb:
>> Da kann ich ja nur lachen, als ob 2 Taktzyklen kritisch wären.
> Das kommt auf den Prozessor an.

Das kommt vor allem auf die Anwendung an.

Vor einigen Jahren (~1996) arbeiteten Kollegen mit einem 
Simulationsprogramm und hatten dort mit tage- und wochenlangen 
Berechnungen zu kämpfen. Ich schaute mir den Quellcode an und konnte 
durch minimale Umstellungen von Schleifen schon etwa eine Verzehnfachung 
des Durchsatzes erreichen! Und mit ein paar anderen Optimierungen 
zusammen ergab sich nochmals eine Steigerung um 10%.

Auch heute gibt es Simulationen und andere Berechnungen mit einem 
gigantischen Rechenleistungsbedarf, so dass auch dort schon minimale 
Optimierungen gewaltige Auswirkungen haben können.

Es geht ja nicht darum, dass die o.g. zwei Taktzyklen nur einmalig 
ausgeführt werden sollen, sondern dass ggf. zehnzausend Prozessoren sie 
jeweils pro Sekunde eine Million Male ausführen müssen!

von Andreas F. (aferber)


Lesenswert?

Andreas Schweigstill schrieb:
> Auch heute gibt es Simulationen und andere Berechnungen mit einem
> gigantischen Rechenleistungsbedarf, so dass auch dort schon minimale
> Optimierungen gewaltige Auswirkungen haben können.

In dem Bereich wird auch heute immer noch oft FORTRAN eingesetzt, da 
einerseits die Compiler dafür meines Wissens immer noch ein bisschen 
besser optimieren können als C-Compiler, andererseits gerade im 
mathematischen Bereich dafür Bibliotheken existieren, in denen 
Jahrzehnte der Optimierung stecken.

Aber bei jemandem, der meint, break wäre nicht mehr zeitgemäss, da wir 
ja im 21. Jahrhundert sind, würde da vermutlich der Kopf explodieren 
oder so ;-)

Andreas

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Andreas Ferber schrieb:
> In dem Bereich wird auch heute immer noch oft FORTRAN eingesetzt, da
> einerseits die Compiler dafür meines Wissens immer noch ein bisschen
> besser optimieren können als C-Compiler,

Hmm, ich glaube, das ist mittlerweile eher ein Gerücht, das der 
FORTRAN-Fraktion das Gefühl vermitteln soll, softwaretechnisch immer 
noch auf der Höhe zu sein.

Für bestimmte Rechnerarchitekturen gibt es bei HPF (High Performance 
FORTRAN) auch leistungsfähige Konzepte zur Nutzung von massiv parallelen 
Systemen.

Ich hatte mich hinsichtlich des damaligen Projektes überhaupt nicht zu 
den Programmiersprache geäußert, die dafür eingesetzt wurde. 
Schleifenkonstrukte, die sich umstellen lassen, gibt es in den meisten 
Programmiersprachen, insbesondere dem großen Haufen der imperativen.

Aber es war in der Tat ein C-Programm. Es lief damals im Hintergrund auf 
den OS/2-Rechnern der Arbeitsgruppe sowie später auch auf verschiedenen 
UNIX-Systemen (Sun, DEC Alpha) im Uni-Rechenzentrum.

> andererseits gerade im
> mathematischen Bereich dafür Bibliotheken existieren, in denen
> Jahrzehnte der Optimierung stecken.

Nicht nur Bibliotheken, sondern auch komplette Programmpakete dienen da 
als Vorlage. Und an einigen Instituten lehren die Dozenten eben auch nur 
FORTRAN, weil sie keine andere Programmiersprache kennen. Für den 
jeweiligen Anwendungsfall, nämlich die Erweiterung vorhandener 
(FORTRAN-)Programmpakete, mag das ja auch völlig ausreichend sein. Nicht 
jeder Wissenschaftler hat schließlich Lust, als Programmierer oder 
SW-Entwickler zu arbeiten/verenden.

<historischeverklaerung>
Ich finde, das alte DQS (Distributed Queuing System) von VMS immer noch 
unübertroffen! Zwar gibt es unter UNIX/Linux auch schon haufenweise 
Ansätze, aber das Aufsetzen eines neuen Rechners in einem VAX-Cluster 
und die Bereitstellung der Ressourcen war damit trivial.
</historischeverklaerung>

von Mark B. (markbrandis)


Lesenswert?

Andreas Ferber schrieb:
> Beispiel: du willst einen neuen Rechner kaufen. Dabei spielen Kriterien
> wie Prozessor, Mainboard, Arbeitsspeicher, Hersteller,
> Festplattengrösse, Bildschirmauflösung, Preis und und und eine Rolle.
> Mathematisch betrachtet ist also die Auswahl deines neuen Rechners ein
> Problem mit locker 10 und mehr Dimensionen, die noch dazu teils komplex
> voneinander abhängen (die Wahl des Mainboards hängt vom Prozessor ab
> etc.).

Ja gut, aber ich meine jetzt Räume mit mehr als 3 Dimensionen. Das kann 
man sich nicht mehr anschaulich vorstellen, und die Mathematiker 
behaupten meines Wissens nach, dass man auch Räume mit z.B. 26 
Dimensionen mit senkrecht zueinander stehenden Vektoren aufspannen kann, 
wenn ich das richtig mitbekommen habe. Ich halte das ja für Humbug ;-)

von Linux (Gast)


Lesenswert?

es ist nicht zeitkritisch, die Schleife wird ~3000 * 32*16 mal 
durchlaufen, ausserdem ist das bissl if nicts gegen das strcmp das 
danach steht.

von Linux (Gast)


Lesenswert?

Und ausserdem ist break gut, ich verwende es häufig.
goto dagegen mag ich nicht in C.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Mark Brandis schrieb:
> Räume mit z.B. 26
> Dimensionen mit senkrecht zueinander stehenden Vektoren aufspannen kann,
> wenn ich das richtig mitbekommen habe. Ich halte das ja für Humbug ;-)

Oh, das ist ganz einfach. Mögliche Einheitsvektoren für einen solchen 
Raum sind:

(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0),
(0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0),
.
.
.
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 1)

Räume mit mehr als drei Ortsachsen kann man sich behelfsweise unter 
Zuhilfenahme andersartiger Achsen vorstellen, so z.B. einer Zeitachse. 
Betrachtet man ein stationäres vierdimensionales System, so kann man 
sich einfach eine dreidimensionale Schnittebene vorstellen, die man 
durch den vierdimensionalen Raum bewegt. Dadurch hat man die vierte 
Dimension gedanklich in einen zeitlich veränderlichen Parameter 
transformiert.

Um einen besseren räumlichen Eindruck zu gewinnen, muss man sich nur 
vorstellen, wie es aussieht, wenn man unterschiedliche Raumachsen zur 
Zeitachse macht.

Hat man jedoch ein zeitlich veränderliches System, darf man die 
Zeitachse des Systems und die Hilfszeitachse in Gedanken nicht 
miteinander verwechseln.

Auch für höhere Dimensionen gibt es Konzepte, sich das ganze zu 
veranschaulichen.

von Karl H. (kbuchegg)


Lesenswert?

Mark Brandis schrieb:

> Ja gut, aber ich meine jetzt Räume mit mehr als 3 Dimensionen. Das kann
> man sich nicht mehr anschaulich vorstellen,

muss man auch nicht.
Solange man damit rechnen kann genügt das.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.