Odejmowanie i dodawanie wartości wytworzonych przez inne funkcje

Odejmowanie i dodawanie wartości wytworzonych przez inne funkcje
K1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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 :

Kopiuj
double srednia(int tablica[])
{
int i = 0;
int suma = 0;
for(i;i<N;i++)
suma+=tablica[i];
return (double)suma/N;
}
Kopiuj
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 :

Kopiuj
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ć

KM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 473
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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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.

K1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.