Skocz do zawartości

[Bash]Wzory Skróconego Mnożenia I Potęgi


Facman

Rekomendowane odpowiedzi

Witam użytkowników. Mam ogromny problem jak napisać skrypt, który będzie liczył wzory skróconego mnożenia do potęgi 2 i 3 oraz obliczał potęgi. Męczyłem się z tym długie godziny, lecz nic nie wskórałem.

Mogę napisać 2 programy lub 1 zawierający oba skrypty.

Jeżeli chodzi o potęgi najlepiej by program działał tak, by prosił o podanie liczby, później potęgi, a potem to obliczał. Co do wzorów skróconego mnożenia to, by dać listę wzorów skróconego mnożenia, czyli: (a+b)2, (a-b)2, (a+b)3, (a-b)3. Później podać odpowiednie liczby i obliczyć wzór.

Z góry dzięki za pomoc! Sam to próbowałem ogarnąć, ale jedynym tego skutkiem były zmarnowane godziny.

Odnośnik do komentarza
Udostępnij na innych stronach

Sam to próbowałem ogarnąć, ale jedynym tego skutkiem były zmarnowane godziny.
Pokaż co wyprodukowałeś, to może ktoś powie gdzie jest błąd. Mam nadzieję, ze nie masz problemu z algorytmem, bo trudny nie jest. Przekazanie 2 parametrów do skryptu to też nie rocket science.
Odnośnik do komentarza
Udostępnij na innych stronach

Ok. Jestem nie bylo mnie, wiec przedstawie teraz skrypt, który mi dziala, chodz za ladnie nie wyglada, który dotyczy wzorów skróconego mnozenia:

 

#!/bin/bash
echo "!Witam w programie wzory skróconego mnozenia i potegi!"
echo "wybierz wzór który chcesz uzyc"
echo "1  (a+b)2"
echo "2  (a-b)2" 
echo "3  (a+b)3"
echo "4  (a-b)3"
read nr
case "$nr" in
1)
echo "podaj a i b"
read a
read b
wynik=$(($a*$a))
wynik2=$((2*$a*$)
wynik3=$(($b*$)
w=$(($wynik+$wynik2+$wynik3))
echo "wynik to $w";;
2)
echo "podaj a i b"
read a
read b
wynik=$(($a*$a))
wynik2=$((2*$a*$)
wynik3=$(($b*$)
w=$(($wynik-$wynik2+$wynik3))
echo "wynik to $w";;
3)
echo "podaj a i b"
read a
read b
wynik=$(($a*$a*$a))
wynik2=$((3*$a*$a*$)
wynik3=$((3*$a*$a*$)
wynik4=$(($b*$b*$)
w=$(($wynik-$wynik2+$wynik3+$wynik4))
echo "wynik to $w";;
4)
echo "podaj a i b"
read a
read b
wynik=$(($a*$a*$a))
wynik2=$((3*$a*$a*$)
wynik3=$((3*$a*$a*$)
wynik4=$(($b*$b*$)
w=$(($wynik-$wynik2+$wynik3-$wynik4))
echo "wynik to $w";;
esac

 

Ok, a teraz glówny problem z potegami. Próbowalem pouzywac kilku sposobów, lecz wciaz nie dziala. Tu pokaze owoce moich dzialan. Prosze powiedzcie gdzie tkwi problem, albo go poprawcie:

 

#!/bin/bash
echo "!Witam w programie potegi!"
echo "Podaj liczbe ktura chcesz podniesc do potegi"
read liczba
echo "Podaj potege do której chcesz podniesc liczbe"
read potega
$wynik bc 1;
for $liczba=1 le $potega do
  $wynik=$(($wynik*$liczba));

echo "Wynikiem, $liczba, do potegi, $potega, jest, $wynik"
done

Odnośnik do komentarza
Udostępnij na innych stronach

Poprawilem. Mam dzialajacy kod, ale pomecz sie jeszcze troche. Dowód:

 

[morsik@vader Scripts]$ ./potega.sh 2 10
2 ^ 1 = 2
2 ^ 2 = 4
2 ^ 3 = 8
2 ^ 4 = 16
2 ^ 5 = 32
2 ^ 6 = 64
2 ^ 7 = 128
2 ^ 8 = 256
2 ^ 9 = 512
2 ^ 10 = 1024

[morsik@vader Scripts]$ ./potega.sh 3 6
3 ^ 1 = 3
3 ^ 2 = 9
3 ^ 3 = 27
3 ^ 4 = 81
3 ^ 5 = 243
3 ^ 6 = 729

 

Blad masz w linijce z forem, jest tam konstrukcja która po prostu nie istnieje... dodatkowo, linijka w której jest $wynik bc 1, jest jakas dziwna. Nie wiem zupelnie co ma tam oznaczac.

W powyzszym wyjsciu lekko zmodyfikowalem program zeby mozna bylo podac liczby jako argumenty, zamiast w programie.

 

Jako pomoc, podam Ci ta strone: http://www.cyberciti.../bash-for-loop/ (pomine fakt Twojego lenistwa, bo akurat po wpisaniu w Google "bash for loop" ta strone jest pierwszym wynikiem...)

 

Na koniec... pisze sie "która" a nie "ktura".

Odnośnik do komentarza
Udostępnij na innych stronach

Mam jeszcze jeden problem z potegami. Liczby dodatnie to liczy, ale przy minusowych cos nie dziala wiecie o co w tym chodzi?

#!/bin/bash
echo "!Witam w programie potegi!"
echo "Podaj podstawe potegi"
read x
echo "podaj wykladnik potegi"
read y
let potega=x**y #zamiast: potega=$[x**y]
echo $potega

Edytowane przez Facman
Odnośnik do komentarza
Udostępnij na innych stronach

Zawsze możesz troszkę oszukać ;)

#!/bin/bash
echo "!Witam w programie potęgi!"
echo "Podaj podstawę potęgi"
read x
echo "podaj wykładnik potęgi"
read y
if [ $y -lt 0 ]
then
let potega=x**-y
let wynik=1000000/potega
echo "0."$wynik
else
let potega=x**y
echo $potega
fi

 

"Analizę kodu ;) " pozostawiam Tobie.

 

Pozdrawiam,

andrew

Odnośnik do komentarza
Udostępnij na innych stronach

Osobiście przychylam się do wersji thofa. Zamiast skomplikowanego kodu wystarczy:

#!/bin/bash
echo "${1}^${2}" | bc -l

przykładowe wyniki

bash-2.05a$ ./abc.sh 17 -15
.00000000000000000034
bash-2.05a$ ./abc.sh -17 -15
-.00000000000000000034
bash-2.05a$ 

Oczywiście parametry przekazywane do skryptu można zastąpić czytaniem zmiennej w skrypcie, ale i tak zapis z wykorzystaniem bc jest znacznie prostszy.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...