[C] nierówność, mała modyfikacja

verg
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 13 lis 2010, o 23:22
Płeć: Mężczyzna
Lokalizacja: Wro

[C] nierówność, mała modyfikacja

Post autor: verg »

Witam, mam mały problem. Załóżmy, że jest sobie taka suma szeregu:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define C 1



int main()
{
    int n=0; 
    double suma=0;
    while(suma < C)
    {
    n=n+10;
    suma=suma+1.0/n;           
    }
    
    printf("%d
", n);
    
    system("PAUSE");
    return 0;
}
I chciałbym to zmienić, żeby ta nierównośc wyglądało nieco inaczej, np. tak:
\(\displaystyle{ \frac{1}{\frac{1}{10}+\frac{1}{20}+\frac{1}{30}+\frac{1}{n}}}\)
Co należy zmienić, aby dodac tą 1 przez która będę dzielić? Bawiłem się trochę, ale chyba wychodzą mi złe wyniki dla róznych nierówności. Proszę o odp.
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

[C] nierówność, mała modyfikacja

Post autor: smiechowiec »

verg pisze: I chciałbym to zmienić, żeby ta nierównośc wyglądało nieco inaczej, np. tak:
\(\displaystyle{ \frac{1}{\frac{1}{10}+\frac{1}{20}+\frac{1}{30}+\frac{1}{n}}}\)
Co należy zmienić, aby dodac tą 1 przez która będę dzielić?
Wystarczy policzyć na końcu
double odwrotnosc = 1.0 / suma;
Wydaje się, że w tym przypadku prościej jest zmienić warunek w pętli na odwrotny, skoro to co w mianowniku ma być mniejsze od 1 to (1.0 / suma) >= 1
np. tak

Kod: Zaznacz cały

#include <stdio.h>
int main() {
    int n = 10;
    double suma = 0.1;
    while ((1.0 / suma) > C) {
			n += 10;
			printf("suma = %g + 1/%d = ", suma, n);
      suma += 1.0 / n;
			printf("%g
", suma);
    }
    return 0;
}
Można by to też uprościć do liczenia w mianowniku sumy ciągu 1/n wpisując 10 w liczniku.
ODPOWIEDZ