You are not logged in.

1

Tuesday, August 31st 2010, 8:30pm

Halbe Pyramide (Anfänger)

Hallo da draußen,

da ich vorm Anfang meines Studiums noch Zeit habe, bin ich dabei, mir ein paar Grundkenntnisse beizubringen.
Dafür versuche ich auch ein paar Aufgaben zu lösen und hab bei der folgenden ein Problem:

Aufgabe ist, in der unteren rechten Ecke eines Standard-Terminalfensters (80x24) eine Halb-Pyramide aus Sternen darzustellen, beginnend mit 2. Diese soll anhand des User Inputs erstellt werden (=Höhe der Pyramide)
Z.B. Eingabe 3:

C/C++ Quellcode

1
2
3
4
5
..
 
   **
  ***
 ****



So ohne Umschweife mal hier mein Code:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
int
main (int argc, char *argv[])
{
    int eingabe;
    int row;
    int space;
    int star;
 
    printf("Bitte geben Sie Höhe der Pyramide ein:\n");
    scanf("%d", &eingabe);
 
 
    for (row = 0; row < eingabe; row++) //for loop für jede reihe, solange bis gewünschte höhe erreicht ist
    {
 
 
     for (space = 1; space = 80-(row+2); space++) // bei Reihe 0 wäre das z.B. 80 - ( 0 +2), also 78 Leerzeilen
         printf(" ");
 
     for (star = 1; star = row + 2; star++) //bei Reihe 0 dann dementsprechend 2 Sterne, sodass alle 80 Stellen "ausgefüllt" sind
         printf("*");
 
 
     printf("\n");
 
    }
}


So soll dann bei Reihe 1: 77 Leerzeilen und 3 Sterne, Reihe 2: 76 Leerzeilen und 4 Sterne usw.
(Beachtet habe ich noch nicht, dass Eingabe <24 sein soll)

Nur wenn ich das Ganze ausführe, springt der blinking prompt nur durch die Gegend (Endlosschleife)

Ich weiß nicht, ob ich da irgendein Denkfehler drinhabe oder das generell der falsche Ansatz ist.
Kann mir da jemand helfen?

2

Tuesday, August 31st 2010, 8:50pm

Die erste Zeile mit dem
for ...
hast du richtig.

Die nächsten beiden
for ...
solltest du dir ansehen und über die Bedingung für das Schleifenende nachdenken ;)

MfG bcc-fann

3

Tuesday, August 31st 2010, 9:40pm

Danke für den Hinweis, habe es nun hinbekommen! :)

Nun ist es

C/C++ Quellcode

1
for (space = 0; space > 80-(row+2); space++)

und

C/C++ Quellcode

1
for (star = 0; star > row + 2; star++)


Hab nochmal die Syntax für eine for loop angeschaut; mir war nicht so bewusst, dass die Laufbedingung keine Grenze ist, sondern false sein muss für den Abbruch!

4

Wednesday, September 1st 2010, 10:59pm

for Schleifen sind zwar oft sehr praktisch, while Schleifen sind aber intuitiver, allein schon wegen dem "while" ;)

5

Wednesday, September 8th 2010, 12:13am

For-Schleifen sind nur ganz spezielle Whileschleifen. Es gibt sie eigentlich nur der Lesbarkeit und weil sie sich schnell schreiben lassen (Deklaration & Initialisierung des Zählers, Inkrementierung sowie Austrittsbedingung in einer Zeile). Ich weiß dass in einigen Sprachen (Delphi), der Compiler tatsächlich den gleichen Assemblercode aus einer for-Schleife wie aus der identischen while-Schleife macht, könnte mir vorstellen, dass es in anderen Sprachen auch so gemacht wird.

Social bookmarks