Informatică, întrebare adresată de d3steptu1337, 8 ani în urmă

Ce e gresit de da "0"?? :))))


#include < iostream >
using namespace std;
int main()
{
float fractie;
fractie = 3/4;
cout<<(float)fractie;
return 0;
}

Răspunsuri la întrebare

Răspuns de andrei750238
1

Constantele 3 si 4 sunt interpretate ca fiind variabile intregi.

Impartirea a doua numere intregi in C++ are ca rezultat un numar intreg al carei valori este catul dintre cele doua numere.

Impartirea dintre doua numere reale are ca rezultat un numar real. Impartirea dintre un numar real si unul intreg (indiferent de ordine) are ca efect conversia tipului intreg la real si apoi efectuarea impartirii dupa regula mentionata adineauri.

Deci dupa executarea "fractie = 3/4;" se memoreaza valoarea 0 in variabila fractie. Intai are loc evaluarea expresii (3/4=0) apoi are loc salvarea rezultatului in variabila, se face conversie la tipul cerut (0 se transforma din intreg in valoarea 0, dar ca float si variabila fractie ia valoarea 0). Faptul ca tu ai declarat fractie ca numar real nu influenteaza cu nimic faptul ca noi impartim doua numere intregi. Intai se evalueaza expresia, apoi se face conversia.

Acea conversie explicita "cout<<(float)fractie;" nu isi are rostul, e complet inutila la linia aceea.

=========

Solutia cea mai naturala este sa convertim explicit unul dintre operanzi la tipul real( 3 sau 4, nu conteaza care):

ex : fractie = float(3)/4;

Alta solutie ar fi sa semnalam ca 3 si/sau 4 sunt numere reale, nu intregi. Acest lucru poate fi facut in c++ specificand si partea zecimala a numarului, separata prin punct.

ex : fractie = 3.0/4;

Pentru a fi si mai clar ca vrem ca aceste valori sa fie de tip float (si nu double/int sau alte chestii pe care le poate crede compilatorul) putem adauga un "f" in dreapta lor, dupa specificarea partii zecimale:

ex: fractie = 3.0f / 4.0f


d3steptu1337: Multumesc mult! Acum inteleg <3
metal78: Bună ziua!Aveți timp să răspundeți la ultima întrebare postată pe cont? Vă mulțumesc !
Alte întrebări interesante