Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich will ein umgekehrtes gleichschenkliges Dreieck aus Sternen:
Als Eingabe habe ich die Anzahl der Sterne auf Hypotenuse zur Verfügung.
Z.b für n=3 habe ich:
*
**
***
**
*
D.h also die die letzte Spalte ist die Hypotenuse.
Wie kann ich das lösen. Ich komme so einfach nicht dahinter.
Hat jmd einen Tipp?
Das ist für den Fall n=5.
Die letzte Spalte ist für die Anzahl der Sterne auf der Hypotenuse.
Wie kriege ich sowas hin mithilfe von eher einfachen Strukturen wie for, while-Schleife.
Hättest du nicht einfach schreiben können: "Die rechte Spalte soll 'n' Sterne in der Vertikalen haben und das Ganze soll so aussehen [gefolgt von einem kleinen Beispiel, wie du es ja schon geschrieben hast]." oder "Die rechte Spalte soll einfach 'n' Sterne übereinander haben." gefolgt von "Jede Spalte soll zwei Sterne weniger in der Vertikalen haben als die Spalte direkt rechts daneben und die Sterne sollen zentriert/mittig ausgerichtet sein."
Dass das Ganze jetzt nun ein Dreieck darstellen soll, was auch noch rechtwinklig ist, ist fragwürdig. Das mit Hypothenuse verwirrt nur.
Eine Hypothenuse gibt es nur bei einem rechtwinkeligen Dreieck, soweit ich weiß.
Deswegen die Verwirrung.
Was wäre denn die Hypothenuse bei einem gleichschenkligen und sogar gleichseitigen Dreieck, also mit nur 60° Winkeln?
@LeonInfo19 die Hypotenuse existiert nur im rechtwinkligen Dreieck; damit haben wir in Deiner Aufgabenbeschreibung zwei widersprüchliche Aussagen. Es geht einfach nur darum, den Widerspruch aufzulösen. Stimmt das Bild oben mit der Angabe, dass hier n=5 ist?
Wenn Du Dein Bild ansiehst, dann hast Du ein Rechteck, das aus Leerzeichen und Sternchen besteht. Das Rechteck hat die Höhe n und die Breite (n+1)/2.
Das Grundgerüst sieht nun so aus:
Java:
int breite = (n+1)/2;
for (int i = 0; i < n; i++) {
// In diesem Block wird jeweils eine Zeile des Dreiecks ausgegeben.
// Dazu wird z. B. erst die Anzahl der Leerzeichen bzw. Sternchen
// berechnet.
// Dann: Leerzeichen ausgeben, Sternchen ausgeben,
// Zeile abschließen
}
Der Kommentar soll nur deutlich machen, was passiert. Man ersetzt ihn durch sinnvolleren Code:
Java:
int breite = (n+1)/2;
for (int i = 0; i < n; i++) {
// Anzahl Sternchen und Leerzeichen berechnen
int sternchen = 0;
int leerzeichen = breite - sternchen;
// Leerzeichen ausgeben
for (int j = 0; j < leerzeichen; j++) {
System.out.print(" ");
}
// Sternchen ausgeben
for (int j = 0; j < sternchen; j++) {
System.out.print("*");
}
// Zeile abschließen
System.out.println();
}
Im Code ist die Anzahl der Sternchen mit 0 angegeben. Die Aufgabe, die richtige Anzahl zu berechnen, überlasse ich Dir.
Die Anzahl der Sterne hängt von der aktuellen Höhe ab, also muss die Variable auf i gesetzt werden. Muss dann nicht egtl die äußere for-schleife bis n+1/2 laufen und dann brauche ich nochmal das gleiche Gerüst nur mit vertauschen Wollen, z.b Leerzeichen=i, um den unteren Teil des Dreieck zu bekommen?
Muss dann nicht egtl die äußere for-schleife bis n+1/2 laufen und dann brauche ich nochmal das gleiche Gerüst nur mit vertauschen Wollen, z.b Leerzeichen=i, um den unteren Teil des Dreieck zu bekommen?
Echt schöne Aufgabe hab Sie auch mal gemacht
Und auch danke mihe7 für den Quelltext von oben ich hätte das etwas anders gemacht doch deine Variante ist deutlich besser.
Ich weiß nur nicht ob meine wirklich effizient ist würde sie gerne Posten doch will Ihm ja nicht gleich die Lösung zeigen sonst lernt man es nicht !!!
Hallo, du kannst die Lösung ruhig zeigen . Ich habe es erstmal so:
Java:
int breite=(hoehe+1)/2;
for(int i=1; i<breite;i++) {
int sterne=i;
int leerzeichen=breite-sterne;
for(int j=0;j<leerzeichen;j++) {
System.out.print(" ");
}
for(int j=0;j<sterne;j++) {
System.out.print("*");
}
System.out.println();
}
for(int i=0; i<=breite;i++) {
int leerzeichen=i;
int sterne=breite-leerzeichen;
for(int j=0;j<leerzeichen;j++) {
System.out.print(" ");
}
for(int j=0;j<sterne;j++) {
System.out.print("*");
}
System.out.println();
}
Wen ich das mit if mache, habe ich trotzdem keinen Vorteil, denn ich muss die beiden for-Schleifen in der for-Schleife trotzdem vertauschen. Oder übersehe ich etwas?
Ich hab deinen Quellcode nur überflogen aber erstmal ist die Hauptsache das es läuft
Hier ist meines das habe ich mit if else gemacht dann brauchst du die for Schleifen nicht 2x
Java:
int n=9;
int breite=(n+1)/2;
int sternchen=0;
for(int i=0;i<n;i++) {
if(i<breite)
sternchen = i+1;
else sternchen = n-i;
int leerzeichen = breite - sternchen;
for(int j=0;j<leerzeichen;j++)
System.out.print(" ");
for(int j=0;j<sternchen;j++)
System.out.print("*");
System.out.println();
}
Ich weiß nur nicht zu 100% ob es so richtig ist die genau Aufgabenstellung kenne ich ja nicht
Der Vorteil besteht darin, Code nicht mehrfach schreiben und später warten zu müssen. Wichtig ist aber erstmal, überhaupt ein Gespür dafür zu bekommen, wie man Probleme angeht.
Wir haben jetzt hier zwei Varianten gesehen: zwei for-Schleifen und eine for-Schleife mit if-Abfrage. Wie oben geschrieben: es gibt fast immer mehrere Möglichkeiten, daher will ich noch eine dritte Variante beisteuern.
Man kann die Anzahl der Sternchen/Leerzeichen direkt berechnen. Wenn man sich die Zahl der Leerzeichen nämlich ansieht, ist dies eine Zahl, die bei breite-1 beginnt, immer kleiner wird, bis sie "irgendwann" 0 erreicht. Man könnte also mal hergehen und von breite-1 einfach i abziehen. Dann würde für n=5 folgendes passieren:
mihe7 leider habe ich das nicht mehr.
Ich hatte es zuerst Probiert und hatte nur das hier raus:
*
**
***
Dann hab ich hier weiter gelesen und habe dein Entwurf gesehen und ihn mir angeschaut. Da kamst du ja direkt auf die Geniale Idee mit der Breite das wäre mir so nicht eingefallen bzw. wenn dann erst viel später