Ciag arytmetyczny bash - is it possible?

0

Wyliczyć i wyświetlić pierwszych n wyrazów ciągu oraz podać ich sumę.
Kompletnie nie ogarniam, zrobiłem takie coś

#!/bin/bash
echo "Podaj r n i a1"
read r n a1
for (( i=0; $i < $n; i++ )) ; do
an=$[$a1+($n+1)*$r]
wyrazy[$i]=$an
done
echo"Wyrazy tego ciagu to ${wyrazy[*]}"

Sume oblicze juz sam tylko pytanie jak wpisywac dynamicznie te liczby do tablicy???

1

poza tym tam nie powinno byc (n-1)r?
EDIT: a tak w sumie i-1

stivens@K53SC ~ $ head test.sh 
#!/bin/bash
echo "Podaj a1, r, n"
read a1 r n
for (( i=1; $i <= $n; i++ )) ; do
an=$[$a1+($i-1)*$r]
echo $an
done
stivens@K53SC ~ $ ./test.sh 
Podaj a1, r, n
5 5 3
5
10
15
stivens@K53SC ~ $ 
0

A po co pchasz do tablicy? Przecież wyświetlić masz a nie składować.

0

Dzieki. Ale chce do tablicy poniewaz pozniej musze obliczyc sume tego ciagu liczb wiec nie widze innego sposobu albo zastosowac od razu 2 wzor na sume. Chociaz z tablica bylo by ciekawiej

1

sum=0 i w kazdej iteracji +=an?...

0

no w sumie tak. ale jutro to przetestuje.

poza tym jakby wygladala ta tablica w petli for na przyszlosc ? bo na necie nie ma chyba ze w bashu sie nie da xddd

0

Dobra mistrzu dzięki, po prostu we wzorze podałem

an=$[$a1+($i-1)*$r]

$n zmiast $i
Ogólnie tak wygląda skrypt:

echo "Podaj a1, r, n"
read a1 r n
wyraz[0]=$a1  #tutaj pobieranie wpisanego 1 wyrazu
for (( i=1; $i <= $n; i++ )) ; do
an=$[$a1+($i-1)*$r]
wyraz[$i]=$an
done
echo "Wyrazy tego ciagu to: ${wyrazy[*]}"

A jeśli chodzi o tą sumę to chyba o taką: Sn=(a1+an)*n/2 o sume ciagu a nie suma+=an czyli tych wyrazow wiec ja mysle ze latwiej z tabeli bedzie mozna pobrac ostatni wyraz.

Tylko teraz pytanie czy mozna w prosty sposob to zrobic???

${wyraz[i co tutaj]}
1

Petle tez zla miales bo literacje zaczynales od 0 a konczyles na n-1

${#wyrazy[@]}-1

To ostatni index

a += po kazdej iteracji jest prostsze bo nie musisz nic wiecej potem robic tylko wypisac

0

A tak później zobaczyłem z tą pętlą i w takim razie to nie jest potrzebne

wyrazy[0]=$a1

Ogólnie to masz racje, ale ja jakoś życie utrudniam sobie xddd.
Bez tablic dziala tez tylko jak mamy np. 100 tych liczb i

echo $an 

to jak w jednej lini je wyswitlic xddd??

1

printf

0

Dobra zrobiłem tak:

echo "Podaj a1, r, n"
read a1 r n
echo -n "Wyrazy ciagu to:"

for (( i=1; $i <= $n; i++ )) ; do
an=$[$a1+($i-1)*$r]
echo -ne \ $an
done

echo -ne \ "Suma ciagu to:"
echo "scale=1;($a1+$an)*$n/2" | bc

Takze to dziala i git

Dzięki Ci za pomoc. :D

0

printf moglby byc ale nie robi spacji i burdel jest.

1

To ja sobie recznie doloz "%d "

0

Działa tak:

printf \ $an

%d - wyswietla 0

Dobra dzieki problem rozwiazany.

1

man printf

printf "%d " $an
printf "%d wyraz ciagu wynosi %d" $i $an

Tak dziala printf, no ale po Twojemu tez moze byc

1 użytkowników online, w tym zalogowanych: 0, gości: 1