Schreiben Sie in Python und C ein Programm, welches mittels zweier Schleifen folgende Ausgabe erzeugt:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
Ich habe vorkurzem programmiern an zulernen.
ich hab diese Frage aber weiß nicht, weder das Anfang noch das Ende der for_schleife.
Danke an allen !
mit for schleifen expermentieren
Ich würde im Tutorial der Dokumentation nachschlagen.
@moh: ich würde sagen, die for-Schleife startet mit einer 1 und endet mit einer 1.
Die Forderung, dass es exakt zwei for-Schleifen sein müssen, läßt befürchten, dass Du kein Python schreiben sollst, sondern C in Python-Syntax.
Was hast Du schon über for-Schleifen gelernt und wie wendet man sie an?
Die Forderung, dass es exakt zwei for-Schleifen sein müssen, läßt befürchten, dass Du kein Python schreiben sollst, sondern C in Python-Syntax.
Was hast Du schon über for-Schleifen gelernt und wie wendet man sie an?
nicht viel, bin noch anfänger.
Die Grundlagen .
for schleifer wird genutzt um anwisung zu wiedaholen.
Leider dein Vorschlag mit 1,1 hat nicht funktoniert.
mit diesem code habe ich ähnliche Ergebnise bekommen aber Klar die ausgabe Form ganz anders aussieht
for i in range(1,4):
for j in range (1,5):
print(i,j)
Die Grundlagen .
for schleifer wird genutzt um anwisung zu wiedaholen.
Leider dein Vorschlag mit 1,1 hat nicht funktoniert.
mit diesem code habe ich ähnliche Ergebnise bekommen aber Klar die ausgabe Form ganz anders aussieht
for i in range(1,4):
for j in range (1,5):
print(i,j)
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@moh: Welcher Vorschlag hat nicht funktioniert? Was hast Du denn aufgrund des Vorschlags an Code geschrieben?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@moh: So geht das natürlich nicht. `range()` liefert ja nur aufsteigende Zahlen, Du brauchst aber Zahlen die bei 1 beginnen, bis 5 aufsteigen, dann wieder absteigen und mit 1 enden. Da gibt es in Python mehrere Möglichkeiten sich das zu basteln. Im Grunde mehr als in C, weil ich mir das in Python wahrscheinlich aus entsprechenden Teilen zusammensetzen würde, während in C eher nur das berechnen dieser Zahlenfolge aus einer Folge von nur aufsteigenden Zahlen in Frage kommt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
es ist zu viel für mich, ich kenne noch keine andere möglichkeiten.__blackjack__ hat geschrieben: ↑Dienstag 16. April 2019, 22:25 @moh: So geht das natürlich nicht. `range()` liefert ja nur aufsteigende Zahlen, Du brauchst aber Zahlen die bei 1 beginnen, bis 5 aufsteigen, dann wieder absteigen und mit 1 enden. Da gibt es in Python mehrere Möglichkeiten sich das zu basteln. Im Grunde mehr als in C, weil ich mir das in Python wahrscheinlich aus entsprechenden Teilen zusammensetzen würde, während in C eher nur das berechnen dieser Zahlenfolge aus einer Folge von nur aufsteigenden Zahlen in Frage kommt.
kannst so ein code als bsp schreiben
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@moh: Ich würde an Deiner Stelle eher in Richtung C denken, also erst das Problem in C lösen und die Lösung dann nach Python portieren. Dann braucht man das grundsätzlich nur einmal zu lösen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- sls
- User
- Beiträge: 480
- Registriert: Mittwoch 13. Mai 2015, 23:52
- Wohnort: Country country = new Zealand();
Puh, keine Ahnung wie man sowas *schön* in C umsetzt, da ich C gerade eh irgendwie lernen möchte mal ein Ansatz:
Code: Alles auswählen
#include <stdio.h>
int main()
{
int c = 5;
for (int a=1; a<10; a++)
{
for (int b=1; b<6; b++)
{
if (b == c)
{
printf("%d", b);
c--;
break;
}
printf("%d", b);
if (a == b)
{
break;
}
}
printf("\n");
}
}
When we say computer, we mean the electronic computer.
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@sls: Die ``break``\s in der inneren Schleife sind halt irgendwie nicht schön. Die Aufgabe ist hier sozusagen aus `a` zu berechnen wie weit die innere Schleife laufen muss. Also die literale 6 ist da nicht gut. Ebenfalls die literale 10. Denn `c` und die 10 und die 6 hängen ja alle voneinander ab, sprich wenn Du `c` am Anfang ändern würdest, müsstest Du die 10 und die 6 auch ändern und zwar relativ zum Startwert von `c` – das lässt sich dann ja ausrechnen.
Wenn das C sein soll, dann fehlt das ``void`` in der Signatur um anzuzeigen, dass die `main()`-Funktion keine Argumente bekommt. So wie es da jetzt steht ist das C++, allerdings würde man dann idiomatischerweise Streams verwenden und nicht `printf()`. Und selbst dann wäre der korrekte Include dafür ``#include <cstdio>``.
Wenn das C sein soll, dann fehlt das ``void`` in der Signatur um anzuzeigen, dass die `main()`-Funktion keine Argumente bekommt. So wie es da jetzt steht ist das C++, allerdings würde man dann idiomatischerweise Streams verwenden und nicht `printf()`. Und selbst dann wäre der korrekte Include dafür ``#include <cstdio>``.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- sls
- User
- Beiträge: 480
- Registriert: Mittwoch 13. Mai 2015, 23:52
- Wohnort: Country country = new Zealand();
@__blackjack__:
ich habe das return 0; vergessen, der Compiler hat nicht gemeckert. Jetzt habe ich mich zumindest mal mit dem Thema auseinander gesetzt. Das mit den Literalen stimmt natürlich, ich überlege mir dann mal wie ich die Logik am besten umkehren kann, damit ich kein break mehr brauche.
ich habe das return 0; vergessen, der Compiler hat nicht gemeckert. Jetzt habe ich mich zumindest mal mit dem Thema auseinander gesetzt. Das mit den Literalen stimmt natürlich, ich überlege mir dann mal wie ich die Logik am besten umkehren kann, damit ich kein break mehr brauche.
Code: Alles auswählen
#include <stdio.h>
int main(void)
{
int a = 10;
int b = a / 2;
for (int c=1; c<a; c++)
{
for (int d=1; d<b+1; d++)
{
if (d == b)
{
printf("%d", d);
b--;
break;
}
printf("%d", d);
if (c == d)
{
break;
}
}
printf("\n");
}
}
When we say computer, we mean the electronic computer.
Ohne exzessives Pointer-Gefummel ist es kein C:
Code: Alles auswählen
#include <stdio.h>
int main(void) {
char *fmt = "%d %d %d %d %d\n";
int k;
for(k=0;k<9;k++) {
printf(fmt + (k<5?4-k:k-4)*3, 1, 2, 3, 4, 5);
}
return 0;
}
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Sirius3: Schöne Lösung aber nur die halbe Punktzahl weil nur die halbe Anzahl geforderter ``for``-Schleifen verbaut wurden.
Wobei das Folgen haben kann wenn die Anzahl der Argumente nicht mit der Anzahl der Platzhalter im ersten Argument übereinstimmt. Je nach Compiler/Platform kann da Datenmüll auf dem Stack liegen bleiben und das ``return`` dann ins Nirwana springen/das Programm zum Absturz bringen.
Wobei das Folgen haben kann wenn die Anzahl der Argumente nicht mit der Anzahl der Platzhalter im ersten Argument übereinstimmt. Je nach Compiler/Platform kann da Datenmüll auf dem Stack liegen bleiben und das ``return`` dann ins Nirwana springen/das Programm zum Absturz bringen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Komme leider auch nur auf die halbe Punktzahl ...
Code: Alles auswählen
l = []
for p in range(1, 10):
l.append(p) if p < 6 else l.pop()
print(' '.join(map(str, l)))
just for fun ...
Code: Alles auswählen
for i in [1,2,3,4,5,6,5,4,3,2,1]:
for j in range(1, i):
print(f'{j} ', end='')
print()
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Immerhin; mir bleiben alle Punkte verwehrt, weil die Schleifen ganz fehlen (dabei habe ich das damals mal so mit Pascal in der Schule gelernt, blöd) ...
Code: Alles auswählen
In [1]: def pyramid(x=1, treshold=5):
...: print(*range(1, x+1))
...: if x >= treshold:
...: return
...: else:
...: pyramid(x+1, treshold)
...: print(*range(1, x+1))
...:
In [2]: pyramid()
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
@nezzcarth: Originelle Idee. Es lässt sich noch etwas verkürzen:
Code: Alles auswählen
def pyramid(n, limit):
print(*range(1, n + 1))
if n < limit:
pyramid(n + 1, limit)
print(*range(1, n + 1))
if __name__ == '__main__':
pyramid(1, 5)
Oder bei Benutzung von itertools:
Code: Alles auswählen
from itertools import chain
def pyramid(n):
for i in chain(range(1, n + 1), reversed(range(1, n))):
print(*range(1, i + 1))
if __name__ == '__main__':
pyramid(5)
Stimmt Wobei am naheliegendsten natürlich dc wäre; geht sogar als "One-Liner":
Code: Alles auswählen
$ dc -e '0si5sx[li1+ddsj0sklbx[ ]pStsilx>a]sa[lk1+ddskn[ ]nlj>b]sb[li1-ddsj0sklbx[ ]pStsi1<c]sclaxlxsilcx'
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1