Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: krcek12 10. 05. 2011, 15:36:19
-
Dobry den,
Chtel bych poprosit o pomoc, zacinam sa programovanim, ale strasne se mi to libi. A chtel jsem poprosit o pomoct se scripem, ktery by mi vykreslil tohle:
$ .
..
....
........
....
..
.
Je to jenom priklad samozrejmne to pak bude ve vetsim, potreubuju pomoct jen to trochu napsat, zkousel jsem jednodusi verzi jeden pulku
a=H
b=0
while [ $b -lt 10 ]; do
echo $a
a=$a" H"
b=$(( b+1 ))
done
until [ $b -eq 0 ]; do
a=${a:1}
echo $a
b=$((b-1))
done
Dekuju moc vsem za rady.
-
Pseudozapis:
vykonaj(n,max,delta):
write ((max-n)/2)*" "
write n*"."
if(m<max)
vykonaj(n+delta,max,delta)
write ((max-n)/2)*" "
write n*"."
rekurzia ftw....
-
V první řadě nemáš na začátku řádku mezery pro "centrování" - na místě mě napadá hned několik možností řešení (například druhá proměnná s mezerami, mezery i tečky/H v jedné proměnné a záměna znaků...).
Za druhé, v části "while" vypisuješ PŘED zvětšením řetězce - po skončení smyčky je řetězec o " H" delší, než se vypíše - z toho vychází to, že následující řádek je stejně dlouhý.
Pokud jde o samotné zkracování znaků, tam si nejsem úplně jistý, čím to je, ale předpokládám problém ve znaku ukončujícím řetězec. Každopádně {a:2} korektně zkracuje při každém průchodu (a ne při každém druhém, jak máš ty).
Poznámka: Určitě se nauč rekurzivní funkce, ale nespoléhej na ně vždy - uvědom si, že pro každé takové volání se musí vytvořit "podshell", zkopírovat data na zásobník... Lepší je převést problém rekurze na iteraci (tedy za předpokladu, že to jde v rozumném čase a nepovede to k přílišnému zvětšení nároků).
-
Ja bych doporucil se programovani naucit na jinem jazyce nez shell/bash. Usetris si do budoucna odbouravani spousty nevhodnych navyku. A prvni kruzky se ti budou taky delat lehceji.
-
:o
http://forum.root.cz/index.php?topic=2224.msg17527;topicseen#new