Średnia arytmetyczna
Kategoria: Zadania z programowania
Średnią arytmetyczną n liczb obliczamy dzieląc sumę tych liczb przez ich ilość. Liczenie średniej arytmetycznej w C++ najlepiej wykonać mając liczby zapisane do tablicy liczb całkowitych. Innym rozwiązaniem jest pobieranie liczb bezpośrednio od użytkownika, w czasie wykonywania programu.
Kod programu w C++
Aby obliczyć średnią liczb zapisanych w tablicy wystarczy zsumować je w pętli, a następnie podzielić przez ich ilość:
#include <iostream> using namespace std; int main() { int liczby[5] = {2,2,3,3,6}; double srednia = 0; for (int i = 0; i<5; i++) { srednia = srednia + liczby[i]; } srednia = srednia / 5; cout << "srednia liczb to " << srednia << endl; system("PAUSE"); return(0); }
Możemy także zmodyfikować program, aby pobierał od użytkownika dynamiczną ilość liczb. Wczytując liczby w pętli, musimy umówić się na jakiś znak, przy którym zakończymy wczytywanie liczb Przykładowy kod może wyglądać następująco:
#include <iostream> using namespace std; int main() { int liczby[999]; int licznik = 0; double srednia = 0; int liczba; // petla pobierajaca liczby od uzytkownika while(true) { cout << endl << "Wpisz liczbe numer " << licznik + 1 << ". Wpisz -1 aby zakonczyc wczytywanie. "; cin >> liczba; if (liczba < 0) { // koniec wczytywania jezeli wpisano -1 break; } liczby[licznik] = liczba; licznik++; } // oblicz srednia w petli for (int i = 0; i<licznik; i++) { srednia = srednia + liczby[i]; } srednia = srednia / licznik; cout << "Srednia liczb to " << srednia << endl; system("PAUSE"); return(0); }
Komentarze
W języku C/C++ niezainicjowana zmienna posiada wartość niezdefinioiwaną (undefined). Prowadzi to do błędu typu „niezdefiniowane zachowanie” (undefined behavior). Błąd nie zawsze się ujawni. Debugowanie będzie trudne. Nawet w językach takich jak java, mimo że zmienne są inicjowane do wartości domyślnych podręczniki programowania zalecają wyrobienie sobie dobrego nawyku inicjowania zmiennych.
W tym programie zmienna srednia NIE MUSI mieć wartości 0, ale zwykle będzie miała. Zależy to od zawartości pamięci i rodzaju użytego kompilatora. Visual C++ zgłasza w tym programie błąd.
Powinno być:
double srednia = 0;
W programie jest błąd: zmienna srednia nie została zainicjowana.
Pozdrawiam
A co to za różnica? Jaki to błąd?
Dzięki za pomoc artykuł się przydał.