Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Moze li mi ko objasniti ovu pojavu u C++

[es] :: C++ programiranje :: C++ za početnike :: Moze li mi ko objasniti ovu pojavu u C++

[ Pregleda: 523 | Odgovora: 12 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

osmania
Wien

Član broj: 26316
Poruke: 331
*.20.11.vie.surfer.at.



Profil

icon Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 20:58

evo code:

Code:

#include <iostream>
using namespace std;
main() {
  int Arbeiter, Stueck, ArbeiterFrage;
  cin >> Arbeiter >> Stueck >> ArbeiterFrage;
  cout << (Stueck/Arbeiter*ArbeiterFrage);
    system("PAUSE");
    return EXIT_SUCCESS;
}


Ukucajte brojeve 10 5 2 dobice te rezultat nula zasto je nula rezultat??? ovo je vec drugi program koji mi pravi gresku tu.
promijenio sam int u double i program radi pravilno. U cemu caka... jer unosim INT vrijednosti...

code koji radi pravilno:

Code:

#include <iostream>
using namespace std;
main() {
  double Arbeiter, Stueck, ArbeiterFrage;
  cin >> Arbeiter >> Stueck >> ArbeiterFrage;
  cout << (Stueck/Arbeiter*ArbeiterFrage);
    system("PAUSE");
    return EXIT_SUCCESS;
}


ima li ko kakvo obajsnjenje za ovo... koristim devc++ 4.9.9.2
11.10.2007. u 20:58 

Burgos
Zrenjanin

Član broj: 12484
Poruke: 1256
217.169.209.*

ICQ: 290190857
Sajt: www.last.fm/user/Burgos


Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 21:03
Zato sto je to celobrojno deljenje i pri njemu se ostatak zanemaruje.

5 / 10 = 0
0 * 2 = 0

Dejane, vrati se :)
11.10.2007. u 21:03 

osmania
Wien

Član broj: 26316
Poruke: 331
*.20.11.vie.surfer.at.



Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 21:33
a sto to ovdje ne radi jer definisane su varijable kao double

Code:

#include <math.h>
#include <iostream>
using namespace std;

int main()
{
   double a,b,c,d;
   double const x = 8145060;
   cout<<"Wahrscheinlichkeit bei Lotto 6 Richtigen system 6 aus 45:\n";
   cout<< (a = 1/x) <<"\n";
   cout<< "Wahrscheinlichkeit bei Lotto 4 Richtigen system 6 aus 45\n";
   cout<< (b = 11115/x)<<"\n";
   cout<< "Wahrscheinlichkeit bei Lotto 3 Richtigen system 6 aus 45\n";
   cout<< (c = 182780/x)<<"\n";
   cout<< "Wahrscheinlichkeit bei Lotto 5 Richtigen mit Zusatzzahl system 6 aus 45\n";
   cout<< (d = 234/x*1/39)<<"\n";

   system("PAUSE");
   return EXIT_SUCCESS;
}


stavi int const x = 8145060; nece da radi zbog cega?
11.10.2007. u 21:33 

Mali Misha
Mihajlo Anđelković

Član broj: 79396
Poruke: 313
78.90.101.*

ICQ: 195487525


Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 21:35
Možeš ti i sa intidžerima da radiš (logičniji su u ovom slučaju), ali onda pri računu treba staviti nešto poput:

Code:
cout << ((double)Stueck/Arbeiter*ArbeiterFrage);

Ovo (double) pretvara Stueck u double pre deljenja sa Arbeiter, te je i rezultat double. Daljim množenjem sa int ostale double, a i dalje su sve promenljive int.

Ovo je bio odgovor na prvo pitanje. Zapravo, kako mi se čini, ovo je (zajedno sa drugim postom ovde) odgovor na oba pitanja.
Dim di dam...
11.10.2007. u 21:35 

osmania
Wien

Član broj: 26316
Poruke: 331
*.20.11.vie.surfer.at.



Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 21:40
Citat:
Mali Misha: (odgovor na prvi post)
Možeš ti i sa intidžerima da radiš (logičniji su u ovom slučaju), ali onda pri računu treba staviti nešto poput:

Code:
cout << ((double)Stueck/Arbeiter*ArbeiterFrage);

Ovo (double) pretvara Stueck u double pre deljenja sa Arbeiter, te je i rezultat double. Daljim množenjem sa int ostale double, a i dalje su sve promenljive int.


hmmm??? malo mi je nejasno
11.10.2007. u 21:40 

Mali Misha
Mihajlo Anđelković

Član broj: 79396
Poruke: 313
78.90.101.*

ICQ: 195487525


Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 21:44
I meni već počinje onako da biva nejasno šta te još buni. Jesi l' čuo za celobrojno deljenje? To se upravo dešava kad koristiš int. Da bi ga izbegao možeš koristiti double svo vreme, ili svoje int samo pri računu kastovati (sgn Typumwandlung) ka double.

( Ajd' sad reci da si ovo parče koda koje sam ti dao isprobao pre pisanja gornjeg odgovora pa još i da nije radilo )
Dim di dam...
11.10.2007. u 21:44 

osmania
Wien

Član broj: 26316
Poruke: 331
*.20.11.vie.surfer.at.



Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 21:46
all right sada je sve kako treba... kontam zbog cega zato sto uzima samo 0 ako je 0,32758768 int....
ali u cemu je fora kod drugog iskaza onog

Citat:
osmania: a sto to ovdje ne radi jer definisane su varijable kao double

Code:

#include <math.h>
#include <iostream>
using namespace std;

int main()
{
   double a,b,c,d;
   double const x = 8145060;
   cout<<"Wahrscheinlichkeit bei Lotto 6 Richtigen system 6 aus 45:\n";
   cout<< (a = 1/x) <<"\n";
   cout<< "Wahrscheinlichkeit bei Lotto 4 Richtigen system 6 aus 45\n";
   cout<< (b = 11115/x)<<"\n";
   cout<< "Wahrscheinlichkeit bei Lotto 3 Richtigen system 6 aus 45\n";
   cout<< (c = 182780/x)<<"\n";
   cout<< "Wahrscheinlichkeit bei Lotto 5 Richtigen mit Zusatzzahl system 6 aus 45\n";
   cout<< (d = 234/x*1/39)<<"\n";

   system("PAUSE");
   return EXIT_SUCCESS;
}


stavi int const x = 8145060; nece da radi zbog cega?
11.10.2007. u 21:46 

Mali Misha
Mihajlo Anđelković

Član broj: 79396
Poruke: 313
78.90.101.*

ICQ: 195487525


Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 21:51
Možda zato što se račun obavlja pre dodele?
Elem, razlog je isti. Celobrojno deljenje.
Dim di dam...
11.10.2007. u 21:51 

MadHouseRock

Član broj: 154937
Poruke: 7
*.BVCOM.NET.



Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 22:03
Mozda te zbunjuje sto pise 1,22774e-007 to je normalan rezultat samo sto je pomnozen sa 107
Stavi ovo iznad prvog cout to ce da zaokruzi rezultat na 6 decimala

Code:

cout.setf( ios_base::fixed, ios_base::floatfield );
cout.precision(6);
11.10.2007. u 22:03 

osmania
Wien

Član broj: 26316
Poruke: 331
*.20.11.vie.surfer.at.



Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 22:05
Citat:
Mali Misha: Možda zato što se račun obavlja pre dodele?
Elem, razlog je isti. Celobrojno deljenje.

e ovo bas ne kontam jer ovdje je konstanta int i ona je dodjeljena x znaci jedan cjelobrojni broj je dodjeljen x a ostale varijable su double...
kako ja to vidim a = 1/int je sigurno double vrijednost a ta double vrijednost se dodjljuje double varijabli ili mozda grijesim ne kontam bas ovu zezanciju ????
11.10.2007. u 22:05 

MadHouseRock

Član broj: 154937
Poruke: 7
*.BVCOM.NET.



Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 22:14
Izvini sad sam video da pise ono za int x = 8145060

Problem je sto on prvo radi 1/x i posto je x int rezultat toga ce biti int tj 0, stavi (double) ispred x i onda ce on prvo biti pretvoren u double pa ce se raditi 1/x i rezultat ce biti double
Npr:
Code:

cout<< (a = 1/(double)x) <<"\n";
11.10.2007. u 22:14 

osmania
Wien

Član broj: 26316
Poruke: 331
*.20.11.vie.surfer.at.



Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 22:17
hvala punooo..... ekipa hvala jos jednom svaka cast ....
11.10.2007. u 22:17 

Mali Misha
Mihajlo Anđelković

Član broj: 79396
Poruke: 313
78.90.101.*

ICQ: 195487525


Profil

icon Re: Moze li mi ko objasniti ovu pojavu u C++11.10.2007. u 22:52
Kad imaš ovako brojeve, osim

Code:
1/(double)x

može i:
Code:
1.0/x


Inače, izrazi poput
Code:
cout<< (a = 1/(double)x) <<"\n";

nisu baš poželjni. Zašto ne bi mogao da definišeš sve vrednosti pri vrhu? Znači:

Code:
   int const x = 8145060;
   double a = 1.0 / x,
          b = ... ,
          c = ... ,
          d = ... ;

I onda ih jednostavno štampaš kao a,b,c,d. Ili pak, ako ti a,b,c,d ne trebaju kasnije, slobodno ih izbaci.
Preglednije je.
Dim di dam...
11.10.2007. u 22:52 

[es] :: C++ programiranje :: C++ za početnike :: Moze li mi ko objasniti ovu pojavu u C++

[ Pregleda: 523 | Odgovora: 12 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.