[ osmania @ 11.10.2007. 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
[ Burgos @ 11.10.2007. 21:03 ] @
Zato sto je to celobrojno deljenje i pri njemu se ostatak zanemaruje.

5 / 10 = 0
0 * 2 = 0
[ osmania @ 11.10.2007. 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?
[ Mali Misha @ 11.10.2007. 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.
[ osmania @ 11.10.2007. 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
[ Mali Misha @ 11.10.2007. 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 )
[ osmania @ 11.10.2007. 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?
[ Mali Misha @ 11.10.2007. 21:51 ] @
Možda zato što se račun obavlja pre dodele?
Elem, razlog je isti. Celobrojno deljenje.
[ MadHouseRock @ 11.10.2007. 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);
[ osmania @ 11.10.2007. 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 ????
[ MadHouseRock @ 11.10.2007. 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";
[ osmania @ 11.10.2007. 22:17 ] @
hvala punooo..... ekipa hvala jos jednom svaka cast ....
[ Mali Misha @ 11.10.2007. 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.