While Schleife
-
BasicMan01 schrieb:
Zunächst einmal empfehle ich dir bessere Variablennamen. Anstatt N eventuell sowas wie maxRows oder anstatt j vielleicht cntRows.
Darf ich Vokale kaufen? :p
-
übrigens kannst du
j=j++;
ganz einfach mit
j++;
abkürzen.
Das solltest du dir auch angewöhnen und die Unterschiede zwischen
j++;
und
++j;
verstehen.
Solltest du wirklich mal einer anderen Variablen den Wert einer inkrementierten Variable zuweisen wollen gibt es nämlich einen Stolperstein.
Beispiel:
int eineZahl = 5; int nochEineZahl = 7; eineZahl = nochEineZahl++; printf("%i", eineZahl);
Die Ausgabe dieses Schnipsels wäre 7!
eineZahl bekommt nochEineZahl zugewiesen und danach erst wird nochEineZahl erhöht.Nun das andere Beispiel:
int eineZahl = 5; int nochEineZahl = 7; eineZahl = ++nochEineZahl; printf("%i", eineZahl);
Hier ist die Ausgabe 8. Weil das ++ nun vor nochEineZahl steht, wird diese Variable erhöht bevor sie eineZahl zugewiesen wird.
Hoffe, ich hab mich verständlich ausgedrückt.
das würde also nun bedeuten:
j=j++;
müsste bei dir eigentlich
j=++j;
heißen, und da ists wirklich besser gleich
j++;
zu schreiben.
edit: ja ich weiß, viele cpp tags
-
SeppJ schrieb:
BasicMan01 schrieb:
Zunächst einmal empfehle ich dir bessere Variablennamen. Anstatt N eventuell sowas wie maxRows oder anstatt j vielleicht cntRows.
Darf ich Vokale kaufen? :p
Wr brcht schn Vkl ... lls brbwrtt.
-
TheQ schrieb:
int eineZahl = 5; int nochEineZahl = 7; eineZahl = nochEineZahl++; printf("%i", eineZahl);
Die Ausgabe dieses Schnipsels wäre 12!
???
Die Ausgabe wäre doch eher 7, miteineZahl += nochEineZahl++;
käme man auf die Ausgabe von 12.
-
#include<stdio.h> int main() { int N, i, j, x, y; N=3; i=N; j=0; while(j<=N){ j++; while(x>0) { printf(" "); x=i-1; } while(y>0){ printf("*"); y=(2*(N-i)+1); } printf("\n"); i--; } return 0; }
ist das so nun besser?
irgendwie funktioniert das Programm immernoch nicht.
-
TheQ hat da wohl ein "+" vergessen
eineZahl += nochEineZahl++; // und eineZahl += ++nochEineZahl;
-
Du hast Recht. Denkkompillierung ist immer fehleranfällig. habs verbessert, danke
Ja, j++ ist nun richtig an der Stelle.
-
wenn ich das programm ausführe, werden nur leerzeichen angezeigt und das bis ins unendliche... ich weis aber nicht warum
-
@Aleph1 ... wieviele meiner Tipps konntest du erfolgreich umsetzen?
- x ist uninitialisiert (besitzt also keinen definierten Wert zu Beginn) >> vor die while-Schleife "x=i"
- "x=i-1;" liefert immer das gleiche Ergebnis in deinem Fall >> "x--"
- "y=(2*(N-i)+1);" solltest du eigentlich über die while-Schleife bringen
- in die zweite gehört noch ein y--ich habs genau gesehen, du hast keinen Schreibtischtest gemacht
-
Ich kann dir nur empfehlen, deine Wünsche in eine Funktion mit min. Parameteranzahl zu kapseln, z.B. brauchst du hier eigentlich nur die Höhe:
void maleTurm(int h) { int i,j; for( i=0; puts(""),i<h ;++i) for( j=0; j<2*h && putchar(j>=h-i&&j<=h+i?'*':' ') ;++j); }
Das wird übersichtlicher falls dein Programm mal mehr machen soll als genau eine Aufgabe.
-
Danke BasicMan01,
nun habe ich folgenden code:
#include<stdio.h> int main() { int N, i, j, x, y; N=3; i=N; j=0; while(j<=N){ j++; x=i; while(x>=0) { printf(" "); x=--i; } y=i; while(y<=0){ printf("*"); y=(2*(N-i)+1); y--; } printf("\n"); i--; } return 0; }
Leider gibt er nur jeweils einen Stern pro Zeile aus und die Leerzeichen, die den Turm formen, fehlen, bis auf die an der Spitze des Turms.
Woran könnte das liegen?
@Wutz ich muss mich leider an dieses Konstrukt halten (vorgegeben) aber trotzdem danke.
-
Ich vermute an einer Leseschwäche, was die Tipps der anderen angehen
*scherz*
ich selbst schrieb:
- "x=i-1;" liefert immer das gleiche Ergebnis in deinem Fall >> "x--"
- "y=(2*(N-i)+1);" solltest du eigentlich über die while-Schleife bringenDie 2 Sachen hast du aber nicht beherzigt.
und wo kommt das y=i her
... und Schreibtischtest hast bestimmt auch noch keinen gemacht. Spätestens bei der nächsten Klassenarbeit wärst du dankbar
-
#include<stdio.h> int main() { int N, i, j, x, y; N=3; i=N; j=0; while(j<=N){ j++; x=i; while(x>=0) { printf("%d",x); x=--i; } y=(2*(N-i)+1); while(y<=0){ printf("*"); y--; } printf("\n"); i--; } return 0; }
ist das so besser? wenn ich x=--i schreibe, sind die Ergebnisse ja 3,2,1,0.
ist es so richtiger?
-
Mach doch aus "x=--i" einfach "x--" ... sonst würdest du ja i verändern.
-
vielen dank für die hilfe soweit:
#include<stdio.h> int main() { int N, i, j, x, y; N=3; i=N; j=0; while(j<=N){ j++; x=i; while(x>0) { printf(" "); x--; } y=(2*(N-i)+1); while(y>0){ printf("*"); y--; } printf("\n"); i--; } return 0; }
soweit bin ich nun!
ich habe jedoch ein problem! das programm gibt N+1 Zeilen für die Turmhöhe aus und nicht genau N also 3 zeilen.Woran liegt das?
EDIT: Ist es ok, wenn ich aus while(y>0) -> while(y>N-1) mache?
oder gibt es eine elegantere Lösung?
-
while(j<=N){
0<=3 //1. Druchlauf 1<=3 //2. Druchlauf 2<=3 //3. Druchlauf 3<=3 //4. Druchlauf
Entferne einfach das = aus dem Schleifenkopf
-
Ahhh vielen, vielen Dank!
Ich schulde dir nen Bier