Nowe posty

Autor Wątek: [Bash] prosba o sprawdzenie petli  (Przeczytany 3249 razy)

kordi

  • Gość
[Bash] prosba o sprawdzenie petli
« dnia: 2012-09-02, 10:34:25 »
Hej!
Storzylam nastepujaca petle:

C[0]=0

    for (( l=1; $l<= 4; l=$((l+1)) )) ;
     do
       C[$l]= echo$((${C[$l-1]}+3/3.14)|bc)

     done
       echo ${C[*]}
Czymoglabym prosic o sprawdzenie i wskazanie miejsca, gdzie popelniam blad?

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
[Bash] prosba o sprawdzenie petli
« Odpowiedź #1 dnia: 2012-09-02, 10:53:33 »
Pisz, co Ci nie działa, bo nie każdy może się domyśleć.

Na pierwszy rzut oka, to nie ustaliłaś skali w bc. Skala to liczba cyfr po przecinku w systemie dziesiętnym. Komenda "bc" używa wewnętrznie systemu obliczeń na liczbach dziesiętnych, ble ble ble....

echo "1.0/2.0" | bc
da wynik 0 (bo standardowo, przynajmniej u mnie skala wynosi 0).

echo "scale=5;1.0/2.0" | bc
da wynik .50000 (przy skali 5).

lub biblioteka math i standardowa skala 20.

echo "1.0/2.0" | bc -l
da wynik .50000000000000000000


W tej chwili masz (prawdopodobnie, bo nie wiem, czy akurat to Ci nie działa) nadal operacje na liczbach całkowitych ze skalą 0.

Ustal skalę przy obliczeniach, albo daj "bc -l" (będziesz mieć standardową skalę 20 przy minimalnej zmianie kodu).

kordi

  • Gość
[Bash] prosba o sprawdzenie petli
« Odpowiedź #2 dnia: 2012-09-02, 11:40:36 »
Dziekuje :-)

kordi

  • Gość
[Bash] prosba o sprawdzenie petli
« Odpowiedź #3 dnia: 2012-09-02, 20:37:05 »
Narodzil mi sie jeszcze jeden problem

C[0]=0

    for (( l=1; $l<=48; l=$((l+1)) )) ;
     do

         C[$l]=$(echo "${C[$l-1]} + 3 / 3.14*${name[$l]}" | bc -l )

     done
       echo ${C[48]}
Wszystko pieknie dziala (otrzymuje wyniki) gdy skrypt ma wyliczyc wartosci dla l<48. Powyzej tej wartosci wyrzuca mi blad: (standard_in) 1: syntax error.

Czy da sie temu jakos zaradzic?

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
[Bash] prosba o sprawdzenie petli
« Odpowiedź #4 dnia: 2012-09-02, 21:06:42 »
Założę się, że ${name[$l]} jest poza zakresem. Sprawdzaj, czy ta wartość istnieje, zanim zaczniesz liczyć.

kordi

  • Gość
[Bash] prosba o sprawdzenie petli
« Odpowiedź #5 dnia: 2012-09-02, 21:27:44 »
Wlasnie sprawdzilam, wszystkie tablice maja po 50 wartosci. :(

Jednakze ostatnie elementy tablicy sa bardzo male:
dim[47] = 0.000240889
dim[48] = 7.01647e-05
dim[49] = 1.16504e-05
dim[50] = 4.202e-07

Czy to moze miec wyplyw na pojawiajacy sie blad?

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
[Bash] prosba o sprawdzenie petli
« Odpowiedź #6 dnia: 2012-09-02, 21:47:47 »
Z tego, co się orientuję, to bc nie obsługuje notacji wykładniczej.

kordi

  • Gość
[Bash] prosba o sprawdzenie petli
« Odpowiedź #7 dnia: 2012-09-02, 22:00:22 »
Zgadza sie.

Wielkie dzieki za pomoc!