• 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?

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
442 wizyt
pytanie zadane 26 maja 2017 w C i C++ przez kacper1445 Mądrala (5,050 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ź 1,027 wizyt
0 głosów
1 odpowiedź 223 wizyt
pytanie zadane 16 kwietnia 2019 w C i C++ przez zaliczenie14 Użytkownik (620 p.)
0 głosów
2 odpowiedzi 741 wizyt
pytanie zadane 16 kwietnia 2019 w C i C++ przez Joe Nowicjusz (200 p.)

93,191 zapytań

142,205 odpowiedzi

322,040 komentarzy

62,518 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2817p. - dia-Chann
  2. 2769p. - Łukasz Piwowar
  3. 2759p. - Łukasz Eckert
  4. 2738p. - CC PL
  5. 2704p. - Tomasz Bielak
  6. 2678p. - Łukasz Siedlecki
  7. 2666p. - rucin93
  8. 2485p. - Marcin Putra
  9. 2475p. - Adrian Wieprzkowicz
  10. 2426p. - Mikbac
  11. 2418p. - Michal Drewniak
  12. 2239p. - Michał Telesz
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1650p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...