Wie erstelle ich ein Dreieck in *-Form?

Hallo,
ich programmiere verzweifelt eine Aufgabe:
Es soll ein Dreieck aus Sternen mit der Grundseite x (Eingabe vom Benutzer) gemalt werden. Bei einer geraden Zahl für x wird die nächst größere Zahl genommen.
So soll es aussehen: x=7

*
***
*****
*******

Ich habe schon das Grundgerüst geschrieben für ungerade Zahl, aber weiß nicht, wie ich zu der Spitze komme!Bei mir ensteht bisher immer ein Rechteck:

*******
*******
*******
*******

#include
using namespace std;
int main()
{
int a,b,c,d,i,j,x,k;
int erg;
cin>>x;
if (x%2==1)
{
for (i=1;i>d;
}

Hallo S.,

ich programmiere verzweifelt eine Aufgabe:
Es soll ein Dreieck aus Sternen mit der Grundseite x (Eingabe
vom Benutzer) gemalt werden. Bei einer geraden Zahl für x wird
die nächst größere Zahl genommen.
So soll es aussehen: x=7

*
***
*****
*******

Ich würde die Funktionen für Eingabe/Ausgabe heraus
abstrahieren, dann sieht das Programm ganz simpel
aus:

#include
#include

 ...
 int main()
{
 int len, seq;
 
 eingeben(len, "Bitte eine Laenge Eingeben:");
 len |= 1; // Eingegebene Zahl "ungerade" machen

 for(seq=1; seq

Jetzt brauchst Du nur noch je eine
Funktion für Eingabe/Ausgabe. Ich
mache mal einen Vorschlag und Du bringst
das dann zum laufen, ok.? :wink:



    
    ...
     void eingeben(int& x, std::string s="") { 
     std::cout \> x; 
     }
    
     void ausgeben(char chr, int seq, int len) { 
     std::string r(len/2-seq/2, ' '); // Anzahl Leerzeichen (Zentrierung)
     std::string s(seq, chr); // Anzahl Zeichen (seq)
     std::cout 
    
    Grüße & viel Spaß
    
    CMБ

Hallo,

leider verstehe ich jetzt nur noch Bahnhof :frowning: Ich fange mit dem Programmieren erst jetzt an und ich muss nur mittels einfacher Schleifen die Aufgabe lösen. Um ein Dreieck hinzubekommen müsste ich mit einem Dekrement arbeiten, da sonst aus dem Rechteck kein Dreieck wird!Vielen Dank für die Info, aber leider kann ich den Code nicht verwenden (soweit sind wir noch nicht)…Alternative? Das Dreieck muss so aussehen: z. B. für x=7

—*
–***
-*****
*******

Hallo S.Willibald,

ich muss nur mittels
einfacher Schleifen die Aufgabe lösen. Um ein Dreieck
hinzubekommen müsste ich mit einem Dekrement arbeiten, da
sonst aus dem Rechteck kein Dreieck wird!

Das Dreieck muss so
aussehen: z. B. für x=7

—*
–***
-*****
*******

Ist doch schon eine gute Ausgangslage, so eine Zeichnung. Wenn Du die Sterne zählst, wird doch klar, wieviel Du immer abziehen musst:
Anzahl der Sterne in jeder Zeile:
7, 5, 3, 1 -> immer 2 abziehen (Dekrement)
Anzahl der Leerzeichen davor:
0, 1, 2, 3 (Increment = 1)
Das musst Du jetzt nur noch in eine Schleife bauen und schon hast Du das schönste Dreieck. Noch ein kleiner Tipp, gib am Anfang das Dreieck ruhig auf dem Kopf stehend aus, das vereinfacht meiner Meinung nach das Problem. Und dann: rücke deinen Quelltext ordentlich ein, da kommst Du auch nicht mit deinen Schleifen durcheinander.

viel Erfolg
Marvin

bei der eingabe der ziffern solltest du am besten nur einstellige ziffern erlauben weil das dreieck, wenn es zu groß ist, evtl fehlerhaft angezeigt werden könnte. dies kannst du mit getch() machen. ich hab das programm einfach mal geschrieben. hab eine schleife gemacht die so oft durch läuft bis die taste x anstelle einer zahl gedrückt wird. werd dir aber nur die anfänge verraten, weil wir keine schulaufgaben lösen sollen…

// hier funktion die das dreieck ausgibt, parameter : gedrückte taste
/\* da die gedrückte taste nicht wie auf der tastatur eingegeben erscheint muss die zahl noch umgerechnet werden in die richtige zahl\*/
int variable = eingegebene zahl - 48;
if ((variable % 2) == 0) variable++; // zahl ungerade machen

//jetzt kommen die 3 schleifen
[schleife] i = 1; solange i kleiner oder gleich variable ist wird i um 2 erhöht und folgendes getan:
[schleife] j = 0; solange j kleiner als variable - i / 2, wird ein leerzeichen eingefügt /\* dadurch dass i immer größer wird, kommt bei der berechnung immer die richtige leerzeichenanzahl raus, wenn der benutzer also 9 eingegeben hat beispielsweise käme bei der berechnung ((9 - 1) / 2) = 8/2 = 4, nächster schleifendurchlauf i = 3: ((9 - 3) / 2) = 6 / 2 = 3 usw \*/
[/schleife]
[schleife] k = 0; solange k kleiner i ist erhöhe k und füge ein '\*' ein // gebe i mal einen stern aufm bildschirm aus - das sollte ja wohl klar sein
[/schleife]
cout= '1')) führe die funktion mit dem parameter key aus

 /\* das steht vor der tastenabfrage weil es sonst gelöscht wär bevors angezeigt wird \*/

 key = getch();
} while (key != 'x');

das is ja ganz schön kompliziert geworden, ich hoffe du steigst da durch, ich wollt dir das jetz nich ZU einfach machen :wink: das umsetzen in c++ code musst du schon selbst machen

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

import java.util.Scanner;
public class Sternchen5
{
public static void main(String args[])
{
int zeile, a, sternanzahl, sternanzaehler, y, hochkant;
String neu;
Scanner eingabe = new Scanner(System.in);
do
{
System.out.print("Eingabe Zeilen: ");
zeile = eingabe.nextInt();
sternanzaehler = 1;
hochkant = zeile;
for (a = 1; a<= zeile; a++)
{
for (y = 1; y<= hochkant; y++)
{

				System.out.print(" ");
			}
			for (sternanzahl = 1 ; sternanzahl <= sternanzaehler; sternanzahl++)
			{
				
				System.out.print("*");	
			}
			System.out.println(" ");
			sternanzaehler = sternanzaehler + 2;
			hochkant = hochkant - 1;
		}
		System.out.print("Bei erneuter Eingabe 'Ja' schreiben: ");
		neu =eingabe.next();
	    System.out.println("");
	}while (neu.equals ("JA") || neu.equals ("Ja") || neu.equals ("jA") || neu.equals ("ja"));
	
	
	
}//public static void main(String args[])

}//public class Sternchen5
So gehts…