While-Schleife - Brauche dringend hilfe!!!
-
Hallo Leute!
Ich habe folgende aufgabe mit einer for-schleife problemlos lösen können,jedoch mit der while-schleife,welche sich eigentlich nicht viel von der for-schleife unterscheidet dachte ich,klappt es garnicht!
Also die Aufgabe lautet:
1.1 Multiplikationstabelle Schreiben Sie ein Programm, das eine Multiplikationstabelle ausgibt: 1 2 3 4 . . . 2 4 6 8 . . . 3 6 9 12 . . . : : : : : : : : Die Anzahl der Zeilen und die Anzahl der Spalten soll vom Nutzer eingegeben werden können. D.h. das Programm fragt zunächst nach der Anzahl der Spalten, dann nach der Anzahl der Zeilen. Anschließend zeigt das Programm die Tabelle am Bildschirm an. Achtung: Schreiben Sie zwei Versionen diese Programms: Eine Version mit For-Schleifen und eine Version mit While-Schleifen. Hinweis: Schreiben Sie erst ein Programm, das genau eine Zeile ausgibt. Überlegen Sie sich, wie sie dieses Programm erweitern müssen, so daß es mehrere Zeilen ausgibt.
Und das ist mein fehlgeschlagenes Prog:
int main(void) { int spalte=0; int zeile=0; int i=0; int k=0; printf("Bitte geben sie die Spalte ein: "); scanf("%d", &spalte); printf("Bitte geben sie die Zeilen ein: "); scanf("%d", &zeile); while (i<spalte && k<zeile){ i=i+1; k=k+1; printf("%3d", i*k); } return 0; } }
Hoffe ihr könnt mir helfen!
Danke im voraus
-
Hi
Also ich glaub da brauchst du 2 verschachtelte Schleifen.
Das es so, wie es jetzt ist, nicht klappt ist klar.Zeig doch mal deine Version in der du For-Schleifen benutzt hast.
icepacker
-
Ich habs auch mal mit 2while schleifen versucht,das klappte auch nicht!
ALso mit der for schleife habe ich es so gelöst:int main(void) { int spalte=0; int zeile=0; int i,k; printf("Bitte geben sie die Spalte ein: "); scanf("%d", &spalte); printf("Bitte geben sie die Zeilen ein: "); scanf("%d", &zeile); for (i=1;i<=spalte;i=i+1){ for (k=1;k<=zeile;k=k+1) printf("%3d", i*k); } return 0; } }
Mit der for-schleife klappts ohne probleme,was muss ich den bei der while alles beachten?
-
Eigentlich nur das:
Aus
for ( a ; b ; c ) { /* d */ }
wird
a; while (b) { /* d */ c; }
-
aus:
for (i=1;i<=spalte;i=i+1){ for (k=1;k<=zeile;k=k+1) printf("%3d", i*k);
wird
while (i<spalte){ i=i+1; while (k<zeile){ k=k+1; printf("%3d", i*k);
Jedoch bekomme ich nicht das selbe ergebnis?!!?Wo könnte den sonst der fehler liegen?
-
Eventuell vergessen i und k einen Startwert zu geben?
-
Du hast a (i=1 bzw k=1) nicht vor die Schleife gesetzt, und c (i=i+1 bzw k=k+1) muss ans Ende des Schleifenkörpers.
Ist es wirklich so schwer ein Analogiebeispiel "nachzuspielen"? Du brauchst doch eigentlich nur in Deiner for-Schleife zu schauen was a, b, c und d sind (im Zweifel aufschreiben, deutlich genug getrennt sind sie durch die ";") und das dann in meine while-Vorlage einzufügen. Wenn Du das zuerst für die innere Schleife machst, kannst Du das komplette Ergebnis als "d" für die äussere Schleife nehmen.
-
Startwert habe ich ganz oben vergeben,also daran liegts nicht!
Andere frage,welchen freeware prog würdet ihr für c empfehlen?Habe dev c++ und damit kommt mein pc nicht klar...
-
Also habs mal so verändert wie du es gemeint hast:
int main(void) { int spalte=0; int zeile=0; int i=1; // Startwert bzw a int k=1; // Startwert bzw a printf("Bitte geben sie die Spalte ein: "); scanf("%d", &spalte); printf("Bitte geben sie die Zeilen ein: "); scanf("%d", &zeile); while (i<spalte){ //b while(k<zeile){ //b printf("%3d\n", i*k); //d k=k+1; //c i=i+1; //c } return 0; }
Ich bekomme aber trotzdem nicht das gleiche Ergebnis wie bei der For-schleife...ich bin verzweifelt!!!
-
FAST richtig
Der Schleifenkörper der äusseren Schleife geht bis zum } der inneren Schleife. Du musst nur noch k=k+1 nach } zu notieren statt davor (ausserdem ist das return 0 noch im ersten Schleifenkörper statt nach beiden Schleifen, eine schliessende Klammer fehlt also):
int main(void) { int spalte=0; int zeile=0; int i=1; // Startwert bzw a int k=1; // Startwert bzw a printf("Bitte geben sie die Spalte ein: "); scanf("%d", &spalte); printf("Bitte geben sie die Zeilen ein: "); scanf("%d", &zeile); while (i<spalte){ //b /* Hier fängt "d" der äusseren Schleife an */ while(k<zeile){ //b printf("%3d\n", i*k); //d k=k+1; //c } /* Hier ist "d" der äusseren Schleife zuende */ i=i+1; //c } return 0; }
-
Man sollte schon noch ein k=1 o.ä. vor die innere Schleife schreiben, sonst wird sie nur einmal durchlaufen.
-
Und sowas geht mir durch
Klar, k=1 muss hinter den Kommentar "Hier fängt d ...." und nicht an den Programmanfang
-
k=1; //Statt am Programmanfang oder?? i=1; while (i<spalte){ //b /* Hier fängt "d" der äusseren Schleife an */ while(k<zeile){ //b printf("%3d\n", i*k); //d k=k+1; //c } /* Hier ist "d" der äusseren Schleife zuende */ i=i+1; //c } return 0;
Habs versucht klappt leider immer noch nicht!
-
i=1; //Statt am Anfang while (i<spalte){ //b /* Hier fängt "d" der äusseren Schleife an */ k=1; // //Statt am Anfang while(k<zeile){ //b printf("%3d\n", i*k); //d k=k+1; //c } /* Hier ist "d" der äusseren Schleife zuende */ i=i+1; //c } return 0;
KLappt immernoch nicht..