Wie kann man zählen wie oft eine schleife durchläuft?
-
ähm ja ich weis es ja aber da gabs ne Funktion die das macht es sind 180 durchläufe.
Aber ich würde gern wissen wie die Funktion geht also die zählt wie oft die Schleife durchläuft das die Frage.
@ Braunstein: Das sieht ja schon vielversprechend aus danke.
-
Was nun aber dagegen spricht, das ganze einfach auszurechnen, versteh ich immer noch nicht.
-
@ Taschenrechner mit dem namen ists verständlich das du ausrechnen willst nein spaß
also ich solls so machen das spricht dagegen und das programm soll flexibel sein also ich muss die schritte verändern können und dann doch schnell wieder die anzahl bekommen. Deswegen ist es mit der Größen angabe sinvoller.
aber ich habs noch ned hinbekommen von nem Vektor schon aber ned von der schleife wenn ichs so mach wie oben krieg ich fehler.
-
GT schrieb:
aber ich habs noch ned hinbekommen von nem Vektor schon aber ned von der schleife wenn ichs so mach wie oben krieg ich fehler.
Naja, schade. Aber das wird schon noch.
-
das size_t versteh ich nicht !!!mit counter ist mir klar aber das size blick ich nicht durch vorallem wenn man danach sucht gibts so viele treffer.
-
size_t ist nur ein Typ der normalerweise unsigned int entspricht.
-
GT schrieb:
das size_t versteh ich nicht !!!Wenn man über allozierte Felder iteriert, muß man immer size_t nehmen, da nur so garantiert ist, daß auch alle Elemente durchlaufen werden.
Es gilt z.B. auf einem 64Bit UNIX sizeof(int) == 4 und sizeof(size_t) == 8.
Im konkreten Fall ist es egal, aber als Stilübung ist es besser sich das zu merken.
-
ok jetzt ists schon klarer.
danke.
Ich glaub ich hab jetzt ne Möglichkeit es besser zu beschreiben. Es gibt ne möglichkeit sich den Belegten Speicher anzeigen zu lassen der von der schleife verwendet wird. Das wär auch wichtig für mich.
-
hey hab ne idee^^
könnte ich nicht den inhalt der schleife als vektor machen? und das kann ich mir dann anzeigen lasse wie viel es ist ? das weis ich dann wies geht
aber wie oft sie durchläuft weis ich immernoch nicht wie die funktion heist glaub was mit size aber des mit einen Zähler einbauen so soll ichs nicht machen naja.
Wenn wer die funktion weis wer ich ihm sehr verbunden.
-
GT schrieb:
aber wie oft sie durchläuft weis ich immernoch nicht wie die funktion heist glaub was mit size aber des mit einen Zähler einbauen so soll ichs nicht machen naja.
waszumgeierwillstdukennstdupunktundkommasowiegrossundkleinschreibungodernichtnaja?
In Ernst: Was für eine Funktion sollte es geben, um die Durchläufe einer Schleife zu zählen? Lass einen Zähler mitlaufen, wenn das Schleifenende unbestimmt ist, ansonsten rechne es aus. Es gibt keine "funktion glaub irgendwas mit size", die "Schleifendurchläufe" "zählt".
-
for( int phi = 10; phi < 180; phi += 10 ) // bei dieser schleife wie krieg ich raus das sie 308 mal durchläuft { for( int theta = 0; theta < 360; theta += 20 ) { double x = r * cos_d(theta) * sin_d(phi); myFile << x <<" "; double y = r * sin_d(theta) * sin_d(phi); myFile << y << " "; double z = r * cos_d(phi); myFile << z << "\n"; } }Mag jetzt an mir liegen, aber geht die schleife nicht maximal 17 mal?
Und selbst wenn verstehe ich das problem mit dem mitzählen nicht. was soll denn daran so schlimm sein?
-
Ihr scheint ja alle sehr auf die Schreibweise zu achten. Tut mir leid das ich das immernoch nicht richtig mache.
Ok dann gibts das nicht.
-
stimmt schon, kommen halt 308 werte raus sorry.
Aber ich kann doch sicher auslesen, dass die Schleife 308 werte drin stehen hat? Ohne es auszurechen, in dem ich den Speicher oder so abfrage?
Und mir dann den Wert 308 ausgeben lasse weil die Schleife 308 Werte drin stehen hat, geht das?
-
So
int counter =0; for( int phi = 10; phi < 180; phi += 10 ) // bei dieser schleife wie krieg ich raus das sie 308 mal durchläuft { for( int theta = 0; theta < 360; theta += 20 ) { double x = r * cos_d(theta) * sin_d(phi); myFile << x <<" "; double y = r * sin_d(theta) * sin_d(phi); myFile << y << " "; double z = r * cos_d(phi); myFile << z << "\n"; counter ++; } } cout << "Schleifeiterationen: " << counter << " " ; system("pause");Da kommt jetzt 306 raus was richtig ist, da es 306 Punkte sind. Die beiden Letzten Punkte sind ganz oben und ganz unten zum eintragen. Damit hab ich meine 308.
-
Bietet bitte mal Kurse "Wie drücke ich aus, was ich WIRKLICH will" an.
-
Die Schleife hat nicht 308 Werte drinstehen, sondern sie wird 308 mal durchlaufen. Hat aber jedesmal nur einen einzelnen Wert drinstehen (oder 3, wenn du 3 Variablen drin hast).
Was die Schreibweise angeht:
Wenn man einen Satz lesen muss, der ohne Punkt und Komma geschrieben ist, oder der, wie bei anderen oft gesehen, von Grammatik- und Rechtschreibfehlern trieft, dann behindert das den Lesefluss. Die Leute muessen mehr Konzentration ins reine Lesen investrieren und weniger in das angesprochene Problem. Und da du derjenige bist, der Hilfe haben moechte, ists in deinem eigenen Interesse, das zu verhindern. Denn irgendwann ist den Leuten das zu nervig und sie lesens garnicht mehr. Also ists nur gut, wenn sie an deinem Schreibstil rummaekeln, anstatt es gleich dranzugeben und dich im Regen stehen zu lassen
-
Ja ich bin halt nicht sonderlich gut in Gramatik und Rechtschreibung. Tut mir echt
Leid.Was die 308 betrifft meinte ich ja das sie 306 mal durchläuft und immer 3 Werte reinschreibt. Und die letzten 2 Werte schreib ich dann manuell rein.
Und man kann das echt nicht anderster rauskriegen die 306?
-
GT schrieb:
...die letzten 2 Werte schreib ich dann Manuel rein....
Was kann der arme Manuel denn dafür ?

Gruß,
Simon2.
-
GT schrieb:
Und man kann das echt nicht anderster rauskriegen die 306?
Nunja, dir wurden bisher zwei Moeglichkeiten genannt:
a) Zehler mitlaufen lassen, dann weisst dus hinterher.
b) Wenn alle Bedingungen vorher bekannt sind (wie in deinem Fall hier), einfach ausrechnen wie oft die Schleife durchaufen wird. In deinem Fall sinds geschachtelte Zaehlschleifen, die Zaehlvariable wird nicht geaendert, also ist die jeweilige Anzahl der Durchlaeufe nur abhaengig vom Startwert, Endwert und der Schrittweite. Die Rechnung dazu ist folgene:int min, max, step; //startwert, endwert, schrittweite int nloop = (max - min - 1)/step + 1; if (nloop < 1) nloop = 1;Die letzte Abfrage tritt nur in Kraft, wenn max < min ist, sonst wuerden da negative Werte rauskommen, was nicht gut moeglich ist. Die Schleife wird schliesslich mindestens einmal durchlaufen.
Jetzt berechnet man nloop fuer die innere und aeussere Schleife und mitlipliziert das ganze miteinander. Spezialisiert auf deinen Fall, wo ja nur die Schrittweite fuer phi und theta veraenderbar sind, kommt dann folgendes bei raus:int step_phi, step_theta; int nloop, nloop_phi, nloop_theta; step_phi = /*20*/; step_theta = /*10*/; nloop_phi = 359/step_phi + 1; // = 17 + 1 = 18 nloop_theta = (179-step_theta)/step_theta + 1; // = 16 + 1 = 17 nloop = nloop_theta + nloop_phi; // = 17 * 18 = 306 //deine Schleife: for( int theta = step_theta; theta < 180; theta += step_theta ) { for( int phi = 0; phi < 360; phi += ste_phi ) { //... } }Ich hab mir mal die Freiheit rausgenommen, die Kugelkoordinaten theta und phi so zu benutzen wie sie normalerweise benutzt werden, wie ich oben schon geschrieben hatte hast du das vertauscht

Verscuh meinen Fetzen mal mit anderen Werten fuer step_theta und step_phi, du wirst sehn dass genau die richtige Zahl an loops bei rauskommt, wenn du den counter noch drinlaesst.
-
Danke für die Erklärung.

Ok das probier ich aus! Aber wenigstens ists mir beim lesen jetzt schon klar.
Du hast dich da verschrieben
nloop = nloop_theta + nloop_phi; // = 17 * 18 = 306ist * nicht +