Zadanie - wyznaczanie liczby

0

Witam,
mam takie oto zadanie: " Dla jakich liczb naturalnych n prawdziwa jest nierówność: 1+1/2+1/3+...1/n>10? Napisz program w C wyznaczający najmniejszą z takich liczb n.".

Zabrałam się za to, ale nie mam pojęcia, czy mój tok myślenia jest dobry:

#include <stdio.h>
#include <math.h>
int main()
{
    int s;
    int z;
    int n;
    
    while(s>10)
    {
        s=(1/n);
        z=s;
        n=n+1;
        s=z+s;
    }
    printf("LICZBA SZUKANA TO %d\n", n);
    return 0;
}
   

Proszę o pomoc i z góry dziękuję :)

2

Tok tak średnio, kod bardzo źle.

  1. Dzielenie int/int zawsze da wynik całkowity. Np. 2/3 to 0.
  2. Operujesz na niezainicjalizowanych zmiennych. UB.
  3. Nigdzie nie masz pętli obliczającej wartość ciągu
1

Nazwij zmienne sensownie, bo s, z, n nic nie mówią.

int s;
while(s>10)

Nie inicjalizowałaś wartości s, więc tutaj masz undefined behaviour. Podobnie z n wewnątrz pętli.

Ta cała pętla to absolutny bezsens.

  1. Dla danego n masz sprawdzić czy suma 1 + 1/2 + 1/3 + ... + 1/n jest > 10
  2. Podstawiasz do n kolejno 1, 2, 3, 4, 5, ... i patrzysz która spełni warunek (1). Potrzebujemy najmniejszej, więc jak tylko znajdziesz pierwszą taką liczbę to przerywasz pętlę.
1

Nie jest dobry, więcej powiem jest zły.

    int n = 1;
    double sum = 0.0;
 
    while(sum <= 10.0)
    {
        s+=(1.0/n);
        n=n+1;
    }
0

Ok, dzięki za pomoc, już działa.

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