Skocz do zawartości
paury

C++ - Problem Z Wynikiem

Rekomendowane odpowiedzi

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;    }

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#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 przez razor1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#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 ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...