paury Napisano 29 Sierpnia 2005 Zgłoś Napisano 29 Sierpnia 2005 Mam taki oto programik do obliczania średniej w c++ (mój pierwszy :) ) i mam z nim problem. Mianowicie zmienna "średnia" mimo typu float jest w wyniku wyświetlania jako int (zaokrąglana). Dlaczego?? Co zrobić żeby liczyło do 0.01 miejsca?? #include <IOStream>#include<StdLib.h>using namespace std;int main(void) { int liczbap , a=1 , b , c=0; float srednia; cout << "Podaj liczbę przedmiotów:" << endl; cin >> liczbap; for(a; a<=liczbap; a++) { cout << "Podaj ocene z przedmiotu " << a << endl; cin >> b; c=c+b; } srednia=c/liczbap; cout << "Twoja średnia to " << srednia << endl; system("PAUSE"); return 0; } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
Polar Napisano 29 Sierpnia 2005 Zgłoś Napisano 29 Sierpnia 2005 (edytowane) #include <iostream>#include <cstdlib>#include <iomanip>using namespace std;int main(){ int liczbap, b, c=0; cout << "Podaj liczbe przedmiotow:" << endl; cin >> liczbap; for(int a=0; a < liczbap; a++) { cout << "Podaj ocene z przedmiotu " << a+1 << endl; cin >> b; c+=b; } cout.precision(3); //<------- tu manipulator prezycji cout << "Twoja srednia to " << (float)c/liczbap << endl; //<--- czyt.niżej system("PAUSE"); return 0;}Tłumacze jak początkującemu: Dzieje sie tak dlatego że w oznaczonej przezemnie instrukcji następuje uciecie części ułamkowej niejawne dlatego że dzielone są dwie liczby typu int, wtedy zmienna chwilowa tego dzielenia może być tylko całkowita, bo 2 liczby są typu int, to nic że wyrażenie jest wpisane potem do zmiennej float , ale tak jak mówiłem wcześniej zmienna chwilowa wyrażenia c/liczbaap jest całkowita. Można to rozwiązać na 2 sposoby albo ustawić ( wymusić na kompilatorze rzutowanie typu (float) //float() tu nie zadziała// , lub poprostu zadeklarować liczby na górze jako float, bez rzutowania. Przyda sie też manipulator setprecision(int) gdzie można ustawić dokładność, zmiennego przecinka. Pisz kod czytelniej mniej wiecej tak jak ja tutaj , bo czasami cieżko sie czyta, i nie szastaj tak deklaracjami zmiennych, tu można deklarować je wszędzie tam gdzie potrzeba. Edytowane 29 Sierpnia 2005 przez razor1 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
Severus Napisano 29 Sierpnia 2005 Zgłoś Napisano 29 Sierpnia 2005 #include <cstdlib>#include <iostream>using namespace std;int main(void){ float lp, srednia, ocena, suma_ocen = 0; cout << "Podaj liczbe przedmiotow: "; cin >> lp; cout << endl; for (float a = 1; a<=lp; a++) { cout << "Podaj ocene z przedmiotu " << a << ": "; cin >> ocena; suma_ocen+=ocena; } srednia = suma_ocen / lp; cout.precision(3); cout << "Twoja srednia wynosi: " << srednia << endl; system("PAUSE"); return EXIT_SUCCESS;} Najprościej jest zadeklarować wszystkie zmienne jako typ zmiennopozycyjny. U Ciebie wynik był podawany w zaokrągleniu, ponieważ do dzielenia zostały podane dwie liczby całkowite co również musi dać wynik w postaci liczby całkowitej ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
Polar Napisano 29 Sierpnia 2005 Zgłoś Napisano 29 Sierpnia 2005 for (float a = 1; a<=lp; a++) A po jakiego diabła typ float w tej pentli :mellow: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
paury Napisano 31 Sierpnia 2005 Zgłoś Napisano 31 Sierpnia 2005 Dzięki chłopaki :) Teraz już kapuje o co biega. (BTW: dobrze, że łopatologicznie bo jestem naprawde początkujący :wink: ) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
MeHow Napisano 3 Września 2005 Zgłoś Napisano 3 Września 2005 no wlasnie to jest tendencja do zuzywania zasobow. Tam gdzie mozna, lepiej uzywac typow zajmujacych mniej pamieci. pozdr Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...