Nowe posty

Autor Wątek: Kalkulator ONP w bashu  (Przeczytany 5609 razy)

MadAdam

  • Gość
Kalkulator ONP w bashu
« dnia: 2009-01-14, 21:47:53 »
Witam,(jako ze jestem początkujący w bashu) mam pytanie, mianowicie moze mi ktoś wytłumaczyć ten kod:
#!/bin/bash
echo "USAGE: Liczby, operacje i komendy wprowadzaj potwierdzajac enterem, liczby dzisietne wpisuj za pomoca kropki";
echo "Dostepne operacje to:";
echo "  +)  dodawanie";
echo "  -)  odejmowanie";
echo "  *)  mnozenie";
echo "  /)  dzielenie";
echo "Dostepne komendy to:";
echo "  c)  anuluje wszystkie wprowadzone liczby";
echo "  q)  opuszcza program";
pointer=0;
request=" Podaj parametr: ";
a='0';
stos[pointer]='a';
((pointer++));

until [ "$a" == "q" ]; do
    read -p "$request" a;
    #echo $a;
    la=`echo "$a" | egrep -e '^[0-9]|^[0-9].[0-9]*$'`;
    lo=`echo "$a" | egrep -e '^\\+|\\-|/|*'`;

    #echo "$la";
    if [ "$la" != "" ];
    then
        echo $a;
        stos[pointer]=$a;
        ((pointer++));
    elif [ "$lo" != "" ];
    then
        echo "Podano: ${stos[*]}";
        ((pointer--));
        if [ ${#stos[@]} -gt 1 ]; then
            stos[$[pointer - 1]]=`echo "${stos[pointer-1]} $lo ${stos[pointer]}" | bc -l`;
            unset stos[pointer];
            echo ${stos[$[pointer - 1]]};
        else
            stos[pointer]=`echo "${stos[pointer]} $lo ${stos[pointer]}" | bc -l`;
            echo ${stos[pointer]};
            ((pointer++));
        fi
    elif [ "$a" == "c" ];
    then
        unset stos[*];
        pointer=0;
        stos[0]="0";
        echo "${stos[pointer]}";
        ((pointer++));
    else
        echo "Blad";
    fi
done;
czy stos jest to po prostu tablica znaków??? w kodzie jest 'pointer' jest to zwykła inkrementacja???
z góry thx

arctgx

  • Gość
Kalkulator ONP w bashu
« Odpowiedź #1 dnia: 2009-01-14, 22:59:01 »
a=(b c d e)
k=3
echo ${a[k]}
echo ${a[$k]}
((k--))
echo ${a[k]}
echo $k
i inne proste przykłady na początek oraz man bash.

P.S. Możesz używać tagu CODE - http://forum.linux.pl/help.php#bbcode

MadAdam

  • Gość
Kalkulator ONP w bashu
« Odpowiedź #2 dnia: 2009-01-14, 23:07:54 »
Sorki ale nic nie kumam z twojego posta :)

arctgx

  • Gość
Kalkulator ONP w bashu
« Odpowiedź #3 dnia: 2009-01-15, 00:56:25 »
Mam wrażenie, że chcesz pojąć bardziej złożony skrypt, nie mając prędzej do czynienia z próbami zrozumienia elementów.
Skąd wpadłeś na pomysł, by załapać akurat to? Zadanie domowe?
Dostałeś właśnie prosty przykład, który wydaje mi się po części być odpowiedzią. W man bash masz odpowiedź na resztę.

MadAdam

  • Gość
Kalkulator ONP w bashu
« Odpowiedź #4 dnia: 2009-01-15, 17:30:04 »
Ten kod który ja napisałem w miare rozumiem, podstawy z basha znam, jeśli zauwazyłeś pod kodem są dwa pytania które jego dotyczą,i o odpowiedz na nie mi chodzi ;/

arctgx

  • Gość
Kalkulator ONP w bashu
« Odpowiedź #5 dnia: 2009-01-16, 15:14:57 »
Cytat: MadAdam
jeśli zauwazyłeś pod kodem są dwa pytania które jego dotyczą,i o odpowiedz na nie mi chodzi ;/
Odpowiadam Ci na nie i nie zauważyłem zarazem, przepraszam :P

Dostałeś zbiór elementarnych poleceń, które same w sobie będą odpowiedzią na drugą część jeśli je wykonasz i zobaczysz wyniki. Jeśli przeszukasz polski manual basha, znajdziesz o sposobach konstruowania tablic i odpowiesz sobie czy stos[/b] jest tablicą.

Czy to też za mało elementarnie?

Jeszcze jedna uwaga: zakładam, że to co nazwałeś "zwykłą inkrementacją", jest po prostu podnoszeniem o 1. W przeciwnym razie mógłbyś bardziej precyzyjnie formułować pytanie. Przy okazji, kod którego ono dotyczy, mógłbyś w miarę możliwości ograniczać do tego co potrzebne, np.
stos[pointer]='a';
((pointer++));
Można odpowiedzieć "tak", "tak", ale czy wiele warta jest dla Ciebie taka odpowiedź? Może o "tablicę znaków" w odróżnieniu od tablicy elementów typu integer czy innego Ci chodziło? Dlaczego nie masz ochoty doprecyzować pytania?

Zobacz przy okazji coś:
  tmp $ declare -i a[1]=1
  tmp $ a[2]=2
  tmp $ a[3]='s'
  tmp $ echo ${a[*]}
1 2 0
  tmp $ b[1]=2
  tmp $ b[2]='s'
  tmp $ echo ${b[*]}
2 s