Bash Script (while)

Bash Script (while)
« kdy: 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.
 


telra

Re: Bash Script (while)
« Odpověď #1 kdy: 10. 05. 2011, 15:52:42 »
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....

Zopper

  • *****
  • 744
    • Zobrazit profil
Re: Bash Script (while)
« Odpověď #2 kdy: 10. 05. 2011, 16:04:18 »
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ů).

and

Re: Bash Script (while)
« Odpověď #3 kdy: 10. 05. 2011, 16:59:02 »
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.