Úkol v Bashi: vykreslení teček

Úkol v Bashi: vykreslení teček
« kdy: 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
« Poslední změna: 05. 05. 2011, 21:05:14 od Petr Krčmář »


kanus

Re: Bash Script (while)
« Odpověď #1 kdy: 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

merlyn

Re: Bash Script (while)
« Odpověď #2 kdy: 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


telra

Re: Úkol v Bashi: vykreslení teček
« Odpověď #3 kdy: 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
 

Re: Úkol v Bashi: vykreslení teček
« Odpověď #4 kdy: 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


marek

Re: Úkol v Bashi: vykreslení teček
« Odpověď #5 kdy: 06. 05. 2011, 11:31:25 »
Tohle bude zarucene nejrychlejsi :)
echo "..
....
......
.........
...........
.........
.......
....
.."
marek

marek

Re: Úkol v Bashi: vykreslení teček
« Odpověď #6 kdy: 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

marek

Re: Úkol v Bashi: vykreslení teček
« Odpověď #7 kdy: 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

vn158

Re: Úkol v Bashi: vykreslení teček
« Odpověď #8 kdy: 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

vn158

Re: Úkol v Bashi: vykreslení teček
« Odpověď #9 kdy: 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