Kleines C-Programm schreiben - Hilfe
-
Danke euch beiden schon einmal für die Antwort
Ach so, ja ich habe die andere 6 (also die ganz rechts unten gemeint) deswegen habe ich die Schleife bis <7 laufen lassen...ok erklärt einiges
-
CStoll schrieb:
vor der Schleife den Zeilenwechsel und die Zeilennummern.
Das führt aber eher zu dieser Ausgabe:
//leer 0 11 212 3123 41234 512345 6123456
Die einzig wahre Lösung muss also lauten:
#include <stdio.h> int main() { printf("0\n" "11\n" "212\n" "3123\n" "41234\n" "512345\n" "6123456\n"); return 0; }
Sogar nur ein printf verwendet!
-
hmm, jetzt hänge ich gerade komplett^^
jetzt gibt er die ganze Zeit in Dauerschleife 6123456 aus, was ja in der letzten Zeile auch richtig wäre
D.h. aber auch, dass irgendetwas mit meinem Schleifenabbruch nicht stimmt, denn sonst würde er ja irgendwann aufhören?! Und wieso fängt er nicht bei 0 an? sondern direkt bei 6
#include <stdio.h> int main (){ int max=6; int i,j; for (i=0;i=max;i++){ printf("\n%d", i); for (j=1;j<=i;j++){ printf("%d", j); } } return 0; }
// cooky451 auf den gedanke kam ich auch als aller erstes...allerdings hat mir die Vorgabe von 2 for-Schleifen dabei einen Strich durch die Rechnung gemacht
-
Bedingung der ersten Schleife falsch, sollte lauten: i < max.
-
cooky451 schrieb:
CStoll schrieb:
vor der Schleife den Zeilenwechsel und die Zeilennummern.
Das führt aber eher zu dieser Ausgabe:
Ach, damit werde ich auch noch fertig
printf("%s%d",i?"\n":"",i);
@Kaula: Du hast die Abbruchbedingung der äußeren Schleife versaut - das ist kein Vergleich, sondern eine Zuweisung.
-
Ok, also habe das jetzt mal umgeändert auf i<max - soweit stimmt jetzt auch alles
Aber, i<max kann doch gar nicht sein oder?! Denn max ist ja 6 und bei i<max würde er ja nur von 0 bis 5 "durchlaufen" und somit fehlt die letzte Zeile "6123456" oder täusche ich mich irgendwo?
// ok ok ok i<=max muss es heißen
danke euch für die schnelle Hilfe!
-
Oder du setzt max auf 7... .. .. .
-
Würde natürlich auch gehen. Aber da es in der Aufgabe so vorgegeben ist, dass max 6 sein muss bleibt ja nur noch i<=max übrig...
-
Oder i < max+1
-
Wenn die Leerzeile am Anfang stört:
#include <stdio.h> int main(int argc, char *argv[]) { int x, i, j; if(argc < 2) return -1; x = atoi(argv[1]); for(i = 0; i <= x; ++i) { for(j = 0; j <= i; ++j) { printf("%d", j == 0 ? i : j); } /* Hier eigentlich eher putchar('\n'); */ printf("\n"); } return 0; }
-
bin jetzt gerade mal dabei den Aufgabenteil b) zu lösen und zwar soll dort die innere Schleife durch eine kopfgesteuerte Schleife ersetzt werden...
mein bisheriger Versuch sieht so aus:
while (i>0 && i<=max) { printf("%d", i++); }
Allerdings klappt das noch nicht richtig. Wie es theoretisch aussehen müsste ist mir bewusst. Mir fällt aber kein passender Ausdruck ein, wie ich das überprüfe, sodass er in Zeile 1 z.B. nach Ausgabe der 11 in die nächste Zeile geht und so weiter...Das i<=max ist irgendwie falsch an der Stelle dort?!
Jmd eine Idee?
-
Die innere Schleife war doch die for(j)-Schleife - sowas kann man recht meschanisch ineinander übersetzen.
Die for-Schleife
for(j=0;j<=i;++j) { mach was }
ist (fast) äquivalent zur while-Schleife
j=0; while(j<=i) { mach was ++j; }
-
Ist die Frage eigentlich C-spezifisch, oder eher so, wie man das ganze überhaupt in ein Programm hineinbekommt, also in diesem Falle eher selberdenkspezifisch?
-
danke dir! gut zu wissen, dass man den "Ausdruck", also j<=i, quasi übernehmen kann...
while(j<=i) { printf("%d",j); j++; }
jetzt fehlt mir quasi "nur" noch der innere Teil...Bei mir gibt er bisher immer nur folgendes aus:
0
11
22
33
44
55
66Was bedeuten würde, dass irgendetwas mit j beim hochzählen nicht wirklich stimmt...
-
nurkurz schrieb:
Ist die Frage eigentlich C-spezifisch, oder eher so, wie man das ganze überhaupt in ein Programm hineinbekommt, also in diesem Falle eher selberdenkspezifisch?
ich würde sagen c-spezifisch...denn ich soll es ja explizit in c schreiben und nicht z.B. in Java, was mir persönlich trotzdem lieber wär
-
Kaula schrieb:
Was bedeuten würde, dass irgendetwas mit j beim hochzählen nicht wirklich stimmt...
Das Hochzählen verläuft völlig richtig, du hast nur die Initialisierung der Schleife wegrationalisiert (beim for() der erste Ausdruck im Schleifenkopf, bei der äquivalenten while()-Schleife mußt du das vorher erledigen).
-
taadaaaaaaaaaa
ich danke dir vielmals!
int main (){ int max=6; int i; for (i=0;i<=max;i++){ printf("\n%d", i); int j=1; while(j<=i) { printf("%d",j); j++; } } return 0; }
Ich hatte j bereits initialisiert mit 1. Allerdings habe ich dies ganz oben bei den anderen Variablen dazu geschrieben und dies führte zu der oben genannten Ausgabe
Heftig, dass nur durch die falsche Platzierung die komplette Ausgabe falsch wird
-
Kaula schrieb:
Ich hatte j bereits initialisiert mit 1. Allerdings habe ich dies ganz oben bei den anderen Variablen dazu geschrieben und dies führte zu der oben genannten Ausgabe
Heftig, dass nur durch die falsche Platzierung die komplette Ausgabe falsch wirdDu brauchst die Variable nicht neu definieren. Eine einfache Zuweisung hätte es auch getan.
So wie es CStoll in seiner Erklärung for -> while (kurz nach Mitternacht) schon gemacht hat.
Hätteste mal die Antwort in Ruhe durchgelesen.Es ist immer wieder erstaunlich, kaum macht man es richtig, funktioniert es.
-
Kaula schrieb:
bin jetzt gerade mal dabei den Aufgabenteil b) zu lösen und zwar soll dort die innere Schleife durch eine kopfgesteuerte Schleife ersetzt werden...
[...]
Jmd eine Idee?Die innere Schleife ist doch bereits, ebenso wie die äußere, kopfgesteuert
-
Belli schrieb:
Kaula schrieb:
bin jetzt gerade mal dabei den Aufgabenteil b) zu lösen und zwar soll dort die innere Schleife durch eine kopfgesteuerte Schleife ersetzt werden...
[...]
Jmd eine Idee?Die innere Schleife ist doch bereits, ebenso wie die äußere, kopfgesteuert
nee waren zwei zählergesteuerte Schleifen...
ja da hast du recht...ich nehm einfach mal die Uhrzeit als Entschuldigung für mein ungenaues lesen