funkcja obliczająca szereg w języku C

ania-wera116
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 18 cze 2023, o 18:44
Płeć: Kobieta
wiek: 18
Pomógł: 1 raz

funkcja obliczająca szereg w języku C

Post autor: ania-wera116 »

Dzień dobry,
mam problem dotyczący poniższego zadania:

Napisz funkcję w języku C: Przy założeniu, że \(\displaystyle{ x}\) jest rzeczywiste obliczyć: \(\displaystyle{ S= \sum_{i=1}^{k}\text{ctgh}\, ix}\).
Należy zdefiniować funkcję: \(\displaystyle{ \text{ctgh}\,ix=\frac{e^{ix}+e^{-ix}}{e^{ix}-e^{-ix}}.}\)

Napisałam taki kod:

Kod: Zaznacz cały

#include <stdio.h>
#include <math.h>

float ctgh(float x)
{
    return (exp(x) + exp(-x)) / (exp(x) - exp(-x));
}

float calculateS(int k, float x)
{
    float sum = 0.0;
    
    for (int i = 1; i <= k; i++)
    {
        sum += ctgh(i * x);
    }
    
    return sum;
}

int main()
{
    int i, k;
    float x;
    
    printf("Podaj i: ");
    scanf("%d", &i);
    
    printf("Podaj x: ");
    scanf("%f", &x);
    
    printf("Podaj k: ");
    scanf("%d", &k);
    
    float result = calculateS(k, x);
    
    printf("Wartość S wynosi: %f\n", result);
    
    return 0;
}
Podobno ma być ze zmienną typu float, ale nie wiem tego dokładnie.
Nie bardzo chce się to kompilować.

Proszę o pomoc i ewentualne wskazanie błędów.
Z góry dziękuję
Ania :D
Ostatnio zmieniony 18 cze 2023, o 20:07 przez Jan Kraszewski, łącznie zmieniany 2 razy.
Powód: Nieczytelny zapis - brak LaTeX-a. Proszę zapoznać się z instrukcją: http://matematyka.pl/latex.htm.
sylvi91
Użytkownik
Użytkownik
Posty: 64
Rejestracja: 10 paź 2017, o 04:40
Płeć: Mężczyzna
wiek: 47
Lokalizacja: Łódź
Podziękował: 6 razy

Re: funkcja obliczająca szereg w języku C

Post autor: sylvi91 »

Typy zmiennych są określone poprawnie. Jak na moje oko funkcje są zdefiniowane zgodnie z formułami z zapisu Latex.

Nazywasz plik np. main.c
Kompilujesz w gcc z wiersza poleceń w ten sposób.

dla linux/unix

Kod: Zaznacz cały

gcc -o main main.c -lm
dla windows

Kod: Zaznacz cały

gcc -o main.exe main.c -lm
Musisz zlinkować bibliotekę lm czyli bibiotekę z funkcjami matematycznymi, bo inaczej dostaniesz błąd z powodu nieokreślonej funkcji exp.

Kod: Zaznacz cały

main.c:(.text+0x52): undefined reference to `exp'
Więcej o tym.

Kod: Zaznacz cały

http://web.mit.edu/10.001/Web/Course_Notes/c_Notes/tips_math_library.html

Kod: Zaznacz cały

https://stackoverflow.com/questions/1033898/why-do-you-have-to-link-the-math-library-in-c
Pozdrawiam.

[EDIT:]

Właściwie to funkcja exp zwraca wartośc typu double, a nie float. Double ma ponad dwa razy większą liczbę bitów względem float.
Ale to przy małych zakresach liczb nie robi różnicy w wynikach.
ODPOWIEDZ