Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: krcek12 05. 05. 2011, 14:17:27

Název: Úkol v Bashi: vykreslení teček
Přispěvatel: krcek12 05. 05. 2011, 14:17:27
Hezdy den vsem,

Potreboval bych mensi radu... Mam za ukol vytvorit script, ktery by vykresloval tohle?:

Kód: [Vybrat]
..
....
......
.........
...........
.........
.......
....
..

Mam tohle :

Kód: [Vybrat]
znaku=0
while [ $znaku -lt 12 ]; do
        znak=0
        while [ $znak -lt $znaku ]; do
                echo -n "H"
                echo ""
                znak=$(( znak+1 ))
        done
        znaku=$(( znaku+1 ))
done

To je prvni pulka a potreboval bych vykreslit tu spodni cast.   
Diky moc
Název: Re: Bash Script (while)
Přispěvatel: kanus 05. 05. 2011, 14:45:55
#!/bin/bash
a=..
b=0
while [ $b -le 4 ]; do
   echo $a
   a=$a".."
   b=$((b+1))
done
echo $a
until [ $b -eq 0 ]; do
   a=${a:2}
   echo $a   
   b=$((b-1))
done
Název: Re: Bash Script (while)
Přispěvatel: merlyn 05. 05. 2011, 15:14:04
no, sice je to v ruby, ale muzes se inspirovat. treba u change (+1/-1). max urcuje hloubku "zanoreni"


#!/usr/bin/env ruby
max=5
pokracuj=1; num=0; change=1
while 1
    num=num+change
    num.times { print ".." }
    if num == max then
        change=-1
    elsif num == 0 then
        break
    end
    puts
end

Název: Re: Úkol v Bashi: vykreslení teček
Přispěvatel: telra 06. 05. 2011, 09:56:45
v bashi som davno nepisal, ale co takto rekurzia?

def f(n,max,delta):
   print n*char
   if n<max:
      f(n+delta,max,delta)
      print n*char
 
Název: Re: Úkol v Bashi: vykreslení teček
Přispěvatel: Tomas Matejicek 06. 05. 2011, 10:08:43
Pokud to mas do skoly, tak tvuj vyucujici bude mit asi nejvetsi radost z tohohle:
Kód: [Vybrat]
#!/bin/bash
function ukaz_tecky()
{
   local MAX=$1

   for i in $(seq 1 $MAX); do
      for j in $(seq 1 $i); do
         echo -n ..
      done
      echo ""
   done

   for i in $(seq 2 $MAX); do
      for j in $(seq $i $MAX); do
         echo -n ..
      done
      echo ""
   done
}

ukaz_tecky 5
Název: Re: Úkol v Bashi: vykreslení teček
Přispěvatel: marek 06. 05. 2011, 11:31:25
Tohle bude zarucene nejrychlejsi :)
echo "..
....
......
.........
...........
.........
.......
....
.."
marek
Název: Re: Úkol v Bashi: vykreslení teček
Přispěvatel: marek 06. 05. 2011, 11:54:30
Kód: [Vybrat]
#/bin/bash
BLABLA=""
for ((i=0;i<MAX/2;i++)); do BLABLA="${BLABLA}.."; done
for ((i=0;i<10;i=i+2)); do echo ${BLABLA:0:i}; done
for ((i=0;i<10;i=i+2)); do echo ${BLABLA:i}; done

Ale ta rekurse je stejne nejhezci.
marek
Název: Re: Úkol v Bashi: vykreslení teček
Přispěvatel: marek 06. 05. 2011, 11:57:17
Kód: [Vybrat]
#/bin/bash
MAX=10
BLABLA=""
for ((i=0;i<MAX/2;i++)); do BLABLA="${BLABLA}.."; done
for ((i=0;i<MAX;i=i+2)); do echo ${BLABLA:0:i}; done
for ((i=0;i<MAX;i=i+2)); do echo ${BLABLA:i}; done
Omyl
marek
Název: Re: Úkol v Bashi: vykreslení teček
Přispěvatel: vn158 07. 05. 2011, 00:43:49
oneliner:
S=.......... ; for i in 2 4 6 8 10 8 6 4 2 ; do echo ${S:1:$i} ; done
Název: Re: Úkol v Bashi: vykreslení teček
Přispěvatel: vn158 07. 05. 2011, 01:19:28
Ještě vylepšená verze (M je sudé a minimálně 2)

M=10 ; S=`for((i=0;i<=$M;i++)); do echo -n . ; done` ; for i in `seq 2 2 $M` `seq $(($M-2)) -2 2` ; do echo ${S:1:$i} ; done