• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak obliczyć sumę n-elementowego ciągu?

Object Storage Arubacloud
0 głosów
389 wizyt
pytanie zadane 26 maja 2017 w C i C++ przez kacper1445 Gaduła (4,880 p.)
Mam ciąg od 1-46. I mam obliczyć sumę 1/(2*i), gdzie "i" to kolejny wyraz ciąg. Wynik mam przedstawić w postaci ułamka zwykłego nieskracalnego, czyli np:

wejście: 1

wyjście: 1/2

wejście: 2

wyjście: 3/4

3 odpowiedzi

0 głosów
odpowiedź 26 maja 2017 przez d0n Mądrala (6,440 p.)
Liczymy nww ( a * b podzielone przez nwd( a, b ) ) i rozszerzamy ulamki, dodajemy liczniki i tak az do konca, gdzie liczymy nwd licznika i mianownika i skracamy ulamek do najprostszej postaci.
0 głosów
odpowiedź 26 maja 2017 przez Chess Szeryf (76,710 p.)
edycja 27 maja 2017 przez Chess
#include <iostream>

using namespace std;

int main()
{

    int liczba1=0.5;

    float a=0.5;
    int i=1; float x;
    for(;i<=46;i++){


      x= (i-1)*0.25;
            cout<<a+x;cout<<endl;

    }

}

1/2*x=3/4

x=3/2

Czyli q=3/2. Następne to chyba: 9/8, 27/16, 81/32

an=a1*(q)*(n-1)

Wtedy byłby ciągiem geometrycznym, a ty chcesz policzyć sumę. Więc szukamy wzoru na ciąg arytmetyczny.

1/2+r=3/4

r=1/4

an=a1+(n-1)*r

a46=1/2+45/4=47/4

Pewien nie jestem, czy dobrze to rozwiązałem, bo nadal trochę pytania nie rozumiem.

Jak nie chcesz ułamków dziesiętnych to możesz je zamienić na zwykłe robiąc tablicę.

Np.:
 

$liczba1="1/2";

$zmienna_x=0;

if($wynik==$zmienna_x.'.'.5){

   echo $liczba1;

}

Coś w tym stylu, chyba, że jest jakaś biblioteka w cpp, która obsługuje ułamki zwykłe i nie pozwala ich zamieniać na dziesiętne, nie wiem.

1/(2*1)*x=1/2

x=1

1/(2*2)*x=3/4

x=3

 

 

0 głosów
odpowiedź 27 maja 2017 przez manjaro Nałogowiec (37,390 p.)
edycja 27 maja 2017 przez manjaro

Wydaje mi się że nie da się tutaj zastosować żadnych wzorów i chyba na tym polega trudność zadania. Ja bym to robił krokowo w pętli 1-46. Czyli najpierw dodaje do siebie aktualny wynik + kolejny ułamek po tej operacji wysyłam uzyskany wynik do funkcji NWD żeby skrócić. Mo i po tym kolejny krok aż do 46. Ułamek trzymałbym w 2 zmiennych licznik oraz mianownik. W zasadzie poniżej masz całe zadanie tylko musisz sobie napisać funkcję skracającą (NWD) ale to już chyba nie problem

int licznik = 0, mianownik =1;

for (i=1; i<=46; i++) {
   int dzielnik;
   licznik = licznik * 2 * i + mianownik;
   mianownik = mianownik * 2 * i;
   dzielnik = nwd(licznik, mianownik);
   licznik = licznik / dzielnik;
   mianownik = mianownik / dzielnik;
}

 

Podobne pytania

+1 głos
1 odpowiedź 872 wizyt
0 głosów
1 odpowiedź 195 wizyt
pytanie zadane 16 kwietnia 2019 w C i C++ przez zaliczenie14 Użytkownik (620 p.)
0 głosów
2 odpowiedzi 548 wizyt
pytanie zadane 16 kwietnia 2019 w C i C++ przez Joe Nowicjusz (200 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...