paury Opublikowano 29 Sierpnia 2005 Zgłoś Opublikowano 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 Więcej opcji udostępniania...
Polar Opublikowano 29 Sierpnia 2005 Zgłoś Opublikowano 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 Więcej opcji udostępniania...
Severus Opublikowano 29 Sierpnia 2005 Zgłoś Opublikowano 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 Więcej opcji udostępniania...
Polar Opublikowano 29 Sierpnia 2005 Zgłoś Opublikowano 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 Więcej opcji udostępniania...
paury Opublikowano 31 Sierpnia 2005 Zgłoś Opublikowano 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 Więcej opcji udostępniania...
MeHow Opublikowano 3 Września 2005 Zgłoś Opublikowano 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 Więcej opcji udostępniania...