Odejmowanie i dodawanie wartości wytworzonych przez inne funkcje

0

Hej,
potrzebuję pomocy z językiem C.
Potrzebuję odjąć od siebie dwie wartości, które są liczone w dwóch różnych funkcjach. Jedna funkcja oblicza jedną rzecz, a druga inną. A potrzebuję odjąć jedno od drugiego w jeszcze innej funkcji.

Pierwsza funkcja wygląda tak :

double srednia(int tablica[])
{
int i = 0;
int suma = 0;
for(i;i<N;i++)
suma+=tablica[i];
return (double)suma/N;
}
druga funkcja : 
float odchylenie(int tablica[])
{
float odchyl = 0.0, suma = 0.0,x,odchyleniestand;
int i=0;
for(i;i<N;i++){
suma+=tablica[i];
}
x=suma/N;

for(i=0; i<N; i++)
    odchyl += pow(tablica[i] - x, 2);

odchyleniestand = sqrt(odchyl)/N;
return odchyleniestand;

}

Teraz potrzebuję odjąc od siebie wartości tego co obliczą te fukncje i dać je w trzecią, która aktualnie wygląda tak :

void mniejsze(int tablica[])
{
    int i = 0;
    float roznica;
    roznica = srednia(tablica[N]) - odchylenie(tablica[N]);
    for(i;i<N;i++)
        if(roznica>tablica[i])
        printf("%d", tablica[i]);

}

Wnioskuję, że problem jest w obliczaniu "roznica" z tego powodu, że gdy wyłączę obliczanie "roznica" to program wyświetli wszystkie ujemne liczby z mojej tablicy a gdy jest włączone to "obliczanie" to program nie wyświetla tego oraz przestaje działać

2

Na szybko:

srednia(tablica[N]) - odchylenie(tablica[N]);

Źle - funkcja srednia chce całą tablicę, nie zaś jej element, który jest poza zakresem.

Masz przekazać funkcji tablicę: a więc po prostu: srednia(tablica) - odchylenie(tablica); (upraszczam tu - tak naprawdę przekazujesz wskaźnik do tej tablicy, co z Twojej perspektywy oznacza, że wszystkie ew. zmiany w tablicy, których dokona funkcja srednia, będą widoczne poza tą funkcją, ale na szczęście chyba funkcja srednia nic nie zmienia)

tablica[N] nie odnosi się do całej tablicy, a tylko do jej N-tego elementu, którego, jak wnoszę, nie ma, bo elementy zdają się być numerowane od 0 do N-1

1

srednia(tablica[N])
Kompilator nic nie narzeka czy warningów nie czytasz? Przekazujesz int zamiast wskaźnika. Powinno być srednia(tablica), tak samo dla odchylenia.

0
kmph napisał(a):

Na szybko:

srednia(tablica[N]) - odchylenie(tablica[N]);

Źle - funkcja srednia chce całą tablicę, nie zaś jej element, który jest poza zakresem.

Masz przekazać funkcji tablicę: a więc po prostu: srednia(tablica) - odchylenie(tablica); (upraszczam tu - tak naprawdę przekazujesz wskaźnik do tej tablicy, co z Twojej perspektywy oznacza, że wszystkie ew. zmiany w tablicy, których dokona funkcja srednia, będą widoczne poza tą funkcją, ale na szczęście chyba funkcja srednia nic nie zmienia)

tablica[N] nie odnosi się do całej tablicy, a tylko do jej N-tego elementu, którego, jak wnoszę, nie ma, bo elementy zdają się być numerowane od 0 do N-1

Zapomniałem wspomnieć, że N jest wcześniej globalnie zdefiniowaną liczbą #define N liczba.
Usunięcie [N] naprawiło problem. Wcześniej jak chciałem bez N to zostawiałem puste [] i wyskakiwał mi błąd o braku czegoś przez "]", więc wpisałem N bo zapomniałem ze po prostu mogę napisać bez kwadratowego nawiasu

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