Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: dzielenie z resztą  (Przeczytany 13163 razy)

piotrino

  • Gość
dzielenie z resztą
« dnia: 2013-10-13, 15:34:23 »
Witam mam skrypst z dzieleniem, ale nie podaje mi reszty z dzielenia.
 [root@centos programowanie]# cat dzielenie
#!/bin/bash
echo  "Dzielimy liczby"
echo "podaj pierwszą liczbe"
read  L1
echo "podaj drugą liczbę"
read  L2
dzielenie=$(($L1 % $L2))
echo "wynik dzielenia liczb wynosi: $dzielenie"

[root@centos programowanie]# ./dzielenie
Dzielimy liczby
podaj pierwszą liczbe
7
podaj drugą liczbę
2
wynik dzielenia liczb wynosi: 1
[root@centos programowanie]#
Jeśli zastosuję zamiast %, to: / . Działa dzielenie ale przez liczby parzyste np. 8/2. 9/3 itp... WYnik dostaję dobry...
Z tego co wyczytałem % odpowiada za resztę z dzielenia.... ale tu nie dział mi to... Gdzie robię błąd?

  • Gość
dzielenie z resztą
« Odpowiedź #1 dnia: 2013-10-13, 17:05:31 »
Po pierwsze, 9 i 3 nie są liczbami parzystymi.

#!/bin/bash
a=3
b=2
c=$(expr $a / $b)
echo '$a/$b='$c
Przykład zerżnięty stąd. Spróbuj.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2765
  • 1709
    • Zobacz profil
dzielenie z resztą
« Odpowiedź #2 dnia: 2013-10-13, 17:16:37 »
Twoj program działa dobrze , ale chyba mylisz pojęcia.
"Reszta z dzielenia" to nie to samo "dokładniejszy wynik"

Dzielenie:
$ echo $[7/2] 
3
7:2= 3,5
więc nie dokładnie

Aby dokładniej policzyć korzysta się z innych programów, np. bc
$ echo $(echo "10/6" | bc -l)
1.66666666666666666666
Reszta z dzielenia:
$ echo $[7%2] 
1
7:2=3 całe  

 jak odwrócisz działanie te 3*2=6 , to żeby było 7 brakuje 1,
czyli 1 to jest reszta z dzielenia

http://www.youtube.com/watch?v=I0fXWRH2wy4

"reszta z dzielenia"  dosc dziwna dla mnie nazwa, ale to juz nie na temat.
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

piotrino

  • Gość
dzielenie z resztą
« Odpowiedź #3 dnia: 2013-10-13, 20:51:05 »
Cytat: Pavlo950
Po pierwsze, 9 i 3 nie są liczbami parzystymi.

#!/bin/bash
a=3
b=2
c=$(expr $a / $b)
echo '$a/$b='$c
Przykład zerżnięty stąd. Spróbuj.
Co do liczb parzystych moja wina w błędnych podanych liczbach 9 i 3. Za szybko podawałem przykłady. I tu moja pomyłka. Chodzi mi o zastosowanie twojego przykładu w moim skrypcie, w którym podaje liczby dowolne, a nie wpisane w skrypcie  Pokombinuję sobie dalej :).Pozdrawaim

P.S Zrobiłem poprawiony skrytp:
#!/bin/bash
echo  "Dzielimy liczby"
echo "podaj pierwszą liczbe"
read  L1
echo "podaj drugą liczbę"
read  L2
dzielenie=$(($L1/$L2 | bc -l ))
echo "Wynik dzielenia wynosi: $dzielenie"
ALe nie wychodzi mi wynik  prawidłowy....
np.
[root@centos programowanie]# ./dzielenie
Dzielimy liczby
podaj pierwszą liczbe
5
podaj drugą liczbę
2
Wynik dzielenia wynosi: 2
[root@centos programowanie]#
WYnik powinien wyjsc mi 2,5...

alvaro

  • Gość
dzielenie z resztą
« Odpowiedź #4 dnia: 2013-10-13, 22:17:10 »
Zamień linię:
dzielenie=$(($L1/$L2 | bc -l ))
na:
dzielenie=$(echo "$L1"/"$L2" | bc -l )
Bash nawet w wersji 4 nie posiada wbudowanej obsługi operacji zmiennoprzecinkowych.

Więcej informacji znajdziesz na Greg's Wiki oraz Bash-Hackers Wiki:
Cytuj
In addition to the let command, one may use the (( )) syntax to enforce an arithmetic context. If there is a $ (dollar sign) before the parentheses, then a substitution is performed (more on this below). White space is allowed inside (( )) with much greater leniency than with normal assignments, and variables inside (( )) don't require $ (because string literals aren't allowed)

piotrino

  • Gość
dzielenie z resztą
« Odpowiedź #5 dnia: 2013-10-20, 16:55:00 »
Cytat: alvaro
Zamień linię:
dzielenie=$(($L1/$L2 | bc -l ))
na:
dzielenie=$(echo "$L1"/"$L2" | bc -l )
Dzięki pomogło.  UCzę się basha z przerwami, ale w tym wypadku dziwne według mojego kodu nie działało. . Dopiero usunięcie jednego nawiasu i wzięcie w cudzysłów pomogło... Tak czy siak dzięki za pomoc