Bash skript vykreslující kosočtverec

Bash skript vykreslující kosočtverec
« kdy: 10. 05. 2011, 16:26:10 »
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:

$               .
                ..
               ....
             ........
               ....
                ..
                 .


Diky
« Poslední změna: 11. 05. 2011, 10:55:37 od Petr Krčmář »


nhx

Re: Bash Script (kosoctverec)
« Odpověď #1 kdy: 10. 05. 2011, 17:59:52 »
Ze by
Kód: [Vybrat]
#!/bin/sh

echo "  ."
echo " ..."
echo "....."
echo " ..."
echo "  ."

belzebub

Re: Bash Script (kosoctverec)
« Odpověď #2 kdy: 10. 05. 2011, 19:24:55 »
tohle mozna pomuze, nekomentoval sem to, ber to jako prilezitost k seznameni s manualovejma strankama :)

normalne to pouzije velikost 4, pri zadani cisla na prikazovy radce pouzije to zadany cislo

#!/bin/sh

print_n_chars()
{
   n=$1
   char=$2
   i=0;
   while [ $i -lt $n ]
   do
      echo -n "$char"
      i=$((i + 1))
   done
}

print_pyramid()
{
   init_val=$1
   end_val=$2
   increment=$3

   row=$init_val

   while [ $row -ne $end_val ]
   do
      cols=$((size - row))
      print_n_chars $((cols + 1)) " "
      print_n_chars $((row * 2 - 1)) "."
      echo
      row=$((row + increment))
   done
}


if [ "$1" != "" ]
then
   size=$1
else
   size=4
fi

print_pyramid 1      $size   1
print_pyramid $size    0   -1

aaa

Re: Bash Script (kosoctverec)
« Odpověď #3 kdy: 10. 05. 2011, 22:03:04 »

#!/usr/bin/env bash

CHAR='.'; NCHAR=$2; LENGTH=4

fill_line(){
    L=''
    let TOT=$LENGTH-$1-1; let TOT*=2; let TOT+=1

    I=0; while [[ $I -lt $1 ]]; do L="$L "; let I+=1; done
    I=0; while [[ $I -lt $TOT ]]; do L="$L$CHAR"; let I+=1; done
    echo "$L"
 }

if [[ "x$1" == "x-h" || "x$1" == "x--help" ]]; then echo -e "Usage: `basename $0` [<size>] [<character>]\n"; exit; fi
if [[ "x$1" != "x" ]]; then LENGTH=$1; fi
if [[ "$NCHAR" != '' && "$NCHAR" != ' ' ]]; then CHAR=$NCHAR; fi
if [[ $LENGTH -le 1 ]]; then echo "$CHAR"; exit; fi

LINE=1; OPER="+1"
while [[ $LINE -ne 0 ]]
do
    let SPACES=$LENGTH-$LINE
    fill_line $SPACES
    let LINE=$LINE$OPER
    if [[ $LINE -ge $LENGTH ]]; then OPER="-1"; fi
done