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

VPS Starter Arubacloud
0 głosów
383 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ź 844 wizyt
0 głosów
1 odpowiedź 191 wizyt
pytanie zadane 16 kwietnia 2019 w C i C++ przez zaliczenie14 Użytkownik (620 p.)
0 głosów
2 odpowiedzi 535 wizyt
pytanie zadane 16 kwietnia 2019 w C i C++ przez Joe Nowicjusz (200 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...