![]() |
Sternchenmuster erstellen
Hi,
wir sollen für die Schule ein Quelltext erstellen der folgendes "Bild" erstellt:
Code:
*********
******* ***** *** * *** ***** ******* ********* Es soll Abgefragt werden, wieviel Sterne verwendet werden sollen, also wieviel Zeilen bzw. die erste Zeile, wieviele Sterne dort verwendet werden soll. Die anderen Sternchenmuster habe ich ohne Probleme hinbekommen, doch nur dieses schaffe ich irgendwie nicht, habe es schon schon mit "repeat/until" probiert, aber irgendwie klappt das nicht :( Hat vielleicht jemand eine Idee wie ich das machen könnte...? :love: Danke UC PS: Die 2. Zeile soll um eins eingerückt sein, klappt aber hier irgendwie nicht wirklich... Soll also aussehen wie 2 Trichter. |
Re: Sternchenmuster erstellen
du fängst mit der maximalzahl sternchen an. dann gehst du eine zeile runter und machst ein leerzeichen mehr und zwei sterne weniger. dann gehst du eine zeile runterm, machst ein leerzeichen mehr und zwei sterne weniger. bis nur noch ein stern da ist (wenn am anfang ungerade zahl war). dann gehst du runter machst immer eine leerstelle weniger und zwei sterne weniger.
|
Re: Sternchenmuster erstellen
In welcher Schleife würdest du das machen?
While, Repeat/Until oder For? :love: Danke UC |
Re: Sternchenmuster erstellen
ich würde 2 for-schleifen hintereinander machen. Die eine für den oberen sternchenteil, die andere für den unteren Teil
|
Re: Sternchenmuster erstellen
Da du die Zeilenzahl weist kannst du es wahrscheinlich mit der For-Schleife machen :gruebel:
// edit: @ SirThornberry : Mist du warst schneller :mrgreen: |
Re: Sternchenmuster erstellen
Also soweit bin ich schon, nur weiter komm ich nicht, wie kann ich das in die andere richtung machen?
Delphi-Quellcode:
program dreieck_links;
{$APPTYPE CONSOLE} uses SysUtils; var s, i, x, y, z: Integer; begin Write('Wieviel Sterne: '); ReadLn(s); WriteLn; x := 0; z := s; for i := 0 to s - 1 do begin for y := 0 to z - 1 do Write('*'); x := x + 1; z := z - 2; WriteLn; for y := 0 to x - 1 do Write(' '); end; ReadLn; end. :love: Danke UC |
Re: Sternchenmuster erstellen
gleich Schleife mit
Delphi-Quellcode:
for i:= hoheZahl downto niedrigeZahl
|
Re: Sternchenmuster erstellen
Also irgendwie bin ich einfach nur ein bisschen zu grau um mitzubekommen warum das irgendwie nicht geht :(
Habe jetzt folgendes:
Delphi-Quellcode:
Also wie gesagt, der obere Teil funktioniert einwandfrei, nur beim unteren Teil kommen irgendwie Leerzeilen dazu (keine Ahnung warum) und es wird nicht ganz das gemacht was ich will (es wird die eine Zeile doppelt ausgegeben).
program dreieck_links;
{$APPTYPE CONSOLE} uses SysUtils; var s, i, x, y, z: Integer; begin Write('Wieviel Sterne: '); ReadLn(s); WriteLn; x := 0; z := s; for i := 0 to s - 1 do //Funktion für oberen Teil begin for y := 0 to z - 1 do Write('*'); x := x + 1; z := z - 2; if z >= 0 then begin WriteLn; for y := 0 to x - 1 do Write(' '); end; end; for i := 0 to s do //Funktion für unteren Teil begin for y := 0 to z - 1 do Write('*'); x := x - 1; z := z + 2; if z <= s then begin WriteLn; for y := 0 to x - 1 do Write(' '); end; end; ReadLn; end. Hat vielleicht irgendjemand eine Ahnung warum? Es ärgert mich zwar selber, aber ich probiere das jetzt schon seit fast einer Stunde und ich komme nur in kleinen Abständen vorran und jetzt kein bisschen mehr... :( :love: Danke UC |
Re: Sternchenmuster erstellen
Ich würde mir erst eine Function erstellen wie z.B.
Delphi-Quellcode:
Der du die Anzahl an Sternchen (z.B. 3, 7) übergibst, und die gibt dir dann z.B.
function Sternchen (Count: Byte; Length: Byte): String;
Code:
.
' *** '
Diese kannst du dann ganz bequem aufrufen, ausgeben und schon hast du dein Sternchenmuster ... |
Re: Sternchenmuster erstellen
Mein Vorschlag
Code:
program dreieck_links;
{$APPTYPE CONSOLE} uses SysUtils; var max, pos: Byte; function StrMulti (chr: Char; cnt: Byte):String; begin result := ''; if cnt = 0 then exit; repeat result := result + chr; until length (result) = cnt; end; begin Write ('Wieviel Sterne: '); ReadLn (max); // Wir brauchen eine ungerade Anzahl, dass wir in der Mitte einen Stern bekommen if (max mod 2 = 0) then inc (max, 1); pos := max; repeat WriteLn (StrMulti (' ', Round ((max - pos) / 2) ) + StrMulti ('*', pos)); Inc (pos, -2); until pos = 1; repeat WriteLn (StrMulti (' ', Round ((max - pos) / 2) ) + StrMulti ('*', pos)); Inc (pos, 2); until pos > max; ReadLn; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz