You are on page 1of 7

Valós típusú változó

Deklarálása:
float a;

Műveletek: +, -, *, /
6/4 és 6/4. közti különbség: Az első kifejezés értéke 1 lesz a második kifejezés értéke 1.5

#include <iostream>
using namespace std;
int main()
{
float a,b,c;
a=6/4;
b=(float)6/4;
c=6/4.;
cout << a << endl<< b<< endl<< c;
return 0;}

a=6/4; Kiértékelődik a kifejezés majd a kapott érték átadódik a jobb oldali változónak (a), szükség
esetén végbemegy a konvertálás (mivel a 6 és 4 is egész számok, ezért az eredmény is egész lesz, hiába,
hogy az eredmény az a változóba kerül, ami valós. Ilyenkor adatvesztés történhet – az int alsóbbrendű
mint a float)

b=float(6)/4; Vagy b=6/float(4); Ahhoz hogy a helyes eredményt megkapjuk explicit konvertáló
operatort használunk (vagyis a 6-ost valóssá konvertáljuk, vagy a 4-es a második esetben) nem módosítja
a típust, csak a kifejezés kiértékelésére érvényes.

Más megoldás:
c=6/4.; vagy c=6./4; 4. a 4-es mint valós szám, 6. a 6-os mint valós szám

Példák:
1. Mi az eredménye a programrészletnek?
Megjegyzés: Az ‘\n’ az endl-t helyettesíti. Mindegy melyiket használom.

int a=5, b=4, c;


float d=2.5, e;
c=d;
cout << "c=" << c<< '\n'; //a kiírt érték 2 lesz, mert a c int típusú változóba átadtuk a d float
típusú változó értékét, mivel az int alacsonyabb rendű mint a float, ezért
adatvesztés történt
e=a/b;
cout << "e=" << e<< endl; // a kiírt érték 1 lesz, mert két egész szám osztási hányadosa egész
szám
e=float(a)/b;
cout << "e=" << e<< '\n'; // a kiírt érték 1.25 lesz, mert típuskonverzióval a-ból valós lesz, való
osztva egész, valós eredményt ad, és a végeredmény az e valós
változóba kerül

e=a+b+d;
cout << "e=" << e<< '\n'; // a kiírt érték 11.5 lesz
c=d*a;
cout << "c=" << c<< endl; // a kiírt érték 12 lesz, hiába hogy az a*d=5*2.5=12.5, az eredmény a
c int típusó változóba kerül, adatvesztés történik és csak a 12 marad
meg
e=d*a;
cout << "e=" << e<< '\n'; // a kiírt érték 12.5 lesz, float=float*int, vagyis az eredmény marad
valós
e=a/2;
cout << "e=" << e<< '\n'; // a kiírt érték 2 lesz
e=a/2.;
cout << "e=" << e<< '\n'; // a kiírt érték 2.5 lesz

2. Adottak a, b int típusú és c,d float típusú adatok. Milyen az alábbi kifejezések típusai?
a+b a+d a/b a/d c+d c/2 a+c*2
3. Mi az eredménye a programrészletnek?
int a,b=8;
float x,y;
a=5;
x=3.14;
y=2;
cout<<a+b<<’\n’;
cout<<a-x<<’\n’;
cout<<b-y<<’\n’;
cout<<a/x<<’\n’;
cout<<b%a<<endl;

Fontosabb függvények használata a cmath könyvtárból valós és egész típusú változókkal:


pow(x,y) – hatványoz pl. pow(3,4)=81 (34)
sqrt(x) – négyzetgyököt von pl. sqrt(16)=4
round(x) – kerekít
trunc(x) – csonkolás egészre
floor(x) - a legközelebbi nála kisebb egészre kerekít pl. floor(3.6)=3, floor(-3.6)=-4;
ceil(x) - a legközelebbi nála nagyobb egészre kerekít pl ceil(3.6)=4, floor(-3.6)=-3;
fmod(x,y) (ő az x%y valós számokra-az eredmény is valós),
hypot(x,y) - (x,y befogókkal rendelkező derékszögű háromszög átmérője),
M_PI – konstans, értéke: 3.14159265358979323846
Függvények a cstdlib, ctime könyvtárból (egész és valós típusokra)
rand() - véletlenszerű egész számot generál a [0, 32767] intervallumból
Használata:
srand(time(0)); az aktuális gépidővel egy kicsit belekever a sorsolásba, így – mivel az idő minden
programfuttatáskor már más értéket mutat – mindig máshogy kever bele, így valóban véletlennek tűnik
rand(); /// [0, 32767]
rand() % 21; ///[0;20]
rand() % 21 + 10; ///[10;30]

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
{…
srand(time(0));
cout << "[-10;20]" << endl;
cout << rand() % 31 - 10 << " ";
}

Feladatok:
1. Mi az eredménye a programrészletnek?
a)
int a=5, b=4;
float e;
e=sqrt(pow(a,2)+pow(b,2));
cout << "e=" << e<< '\n';
cout << endl;
float x=2.8, y=1.2, z,t;
cout << "x=" << x<< " y=" << y << '\n';
z=floor(x); t=ceil(x);
cout << "z=" << z<< " t=" << t << '\n';
z=floor(y); t=ceil(y);
cout << "z=" << z<< " t=" << t << '\n';

b)
int a=5, b=4, c;
float d=2.5, e;
c=d;
cout << "c=" << c<< '\n';
e=a/b;
cout << "e=" << e<< '\n';
e=float(a)/b;
cout << "e=" << e<< '\n';
e=a+b+d;
cout << "e=" << e<< '\n';
c=d*a;
cout << "c=" << c<< '\n';
e=d*a;
cout << "e=" << e<< '\n';
e=a/2;
cout << "e=" << e<< '\n';
e=a/2.;
cout << "e=" << e<< '\n';
e=sqrt(pow(a,2)+pow(b,2));
cout << "e=" << e<< '\n';
cout << endl;
float x=2.8, y=1.2, z,t;
cout << "x=" << x<< " y=" << y << '\n';
z=floor(x); t=ceil(x);
cout << "z=" << z<< " t=" << t << '\n';
z=floor(y); t=ceil(y);
cout << "z=" << z<< " t=" << t << '\n';
c)
float a=3.33, b;
int c=3, d;
b=a/c; c=b;
d=c/2.;
a=7/2;
cout<<a<<" "<<b<<" "<<c<<" "<<d;

d) float a=3.5, c, e;
int b=5, d, f;
c=a-b;
e=floor(c);
d=a;
f=7./3;
cout<<ceil(a)<<" "<<b/2.<<" "<<c<<" "<<d<<" "<<e<<" "<<f;
A cin utasítás

Ahhoz, hogy még általánosabb legyen a program a bemeneti adatokat beolvasásásra használjuk a cin
utasítást:
cin>>változó neve;
pl.
int hossz, szel;
cout<<”Olvasd be egy teglalap hosszusagat”;
cin>>hossz;
cout<<”Olvasd be egy teglalap szelesseget”;
cin>>szel;

(Megoldott feladat) Írjunk programot, amely beolvas három egész számot. Egy változóba kiszámolja a
számtani középarányosukat egy másikba a mértani középarányosukat és kiírassa az eredményt a
képernyőre.

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int a, b, c; Futtatás után a program várja, hogy az a
float ma, mg; változónak olvassunk be egy értéket. Majd a b
cout<<"a="; cin>>a; változónak és a c-nek. Miután beolvastuk, egy-egy
cout<<"b="; cin>>b; enterrel elválasztva, kiírja az eredményt.
cout<<"c="; cin>>c;
ma=(a+b+c)/3;
cout<<ma<<endl;
mg=sqrt(a*b*c);
cout<<mg<<'\n';
return 0;
}

Feladatok:
1. Olvassuk be egy könyv árát az x változóba, és két egymás utáni drágulás százalékos értékét (a és b
változók). Számítsuk ki, majd írassuk a képernyőre a könyv új árát.
2. Olvassunk be egy egész számot az x változóba, számítsuk ki, majd írassuk a képernyőre az
E(x)=(x+2)/(x2+6) valós kifejezés értékét.
1 1 1
3. Számítsuk ki, majd írassuk a képernyőre az 𝐸 = 𝑎 + 𝑏 + 𝑐 valós kifejezést, ahol a, b, c egész típusúak.
𝑎
6+
4+ 𝑏
5
4. Számítsuk ki, majd írassuk a képernyőre az 𝐸 = 3 1 𝑎 valós kifejezést, ahol a, b egész típusúak.
3+ +
3 𝑏
𝑎
√1+𝑏
5. Számítsuk ki, majd írassuk a képernyőre az 𝐸 = 𝑎2 + 𝑎 valós kifejezést, ahol a, b egész
2+ 𝑏
√3
típusúak.
6. Egy kosárban van n alma és m körte. Határozzuk meg és írassuk a képernyőre az almák és körték
arányát, valamint az összgyümölcs hány százaléka az alma?
7. Számítsuk ki egy kör területét és kerületét, ha ismerjük az átmérőjét.
8. Számítsuk ki egy henger teljesfelszínét és térfogatát, ha ismerjük az alap átmérőjét valamint a henger
magasságát.
9. Számítsátok ki egy derékszögű háromszög átfogóját és területét, ha ismerjük a két befogót.
10. Adott két pont a síkban: x1, y1, x2, y2,. Határozzuk meg a két pont által határolt szakasz hosszát.
11. Generáljunk három véletlenszerű kétjegyű számot, majd írassuk ki a számtani középarányosukat.
12. Generáljunk egy véletlenszerű háromjegyű Generáljunk egy véletlenszerű háromjegyű, valamint egy
véletlenszerű kétjegyű számot. Határozzuk meg a számok ötödik hatványainak különbségének az
utolsó számjegyét.
13. Kérd be Árpi órabérét. Ezután kérd be a ledolgozott időt órában és percben. Számold ki Árpi bérét 1
tizedes jegyre kerekítve.
14. Olvasd be egy piskótatorta átmérőjét és magasságát, valamint a ráteendő krém vastagságát cm-ben.
Számold ki mennyi krémre van szükség a torta bevonásához, ha 5 %-os a ráhagyás.
15. Mi az eredménye az alábbi programrészletnek:
float x=3.54,y=4.5,z;
int a=16,b=10,c;
a=y;
cout<<a<<" "<<y<<endl;
cout<<a/b<<endl;
c=x+y;
cout<<c<<endl;
z=2*x+c/b;
cout<<z<<endl;
z=z+(float)a/b;
cout<<z<<endl;
c=x+y+z;
cout<<c<<endl;
z=a/2.+b/2.+c/2.;
cout<<z<<endl;
z=ceil(x+y)+floor(x+y);
cout<<z<<endl;

Tesztek
1. Melyik értéket írja ki a következő C/C++ programrészlet, tudva, hogy x és y egész típusú
változók, z pedig egy valós változó?

x=30;
y=5;
z=(x+y)/6.0;
z=floor(z*100);
z=z/100;
cout<<z;

2. Mi jelenik meg a következő C/C++ programrészlet végrehajtása után, ha az y valós változó, az x


pedig egész változó?
y=10.1234;
x=(int)(y*100)/100;
cout<<x;

3. Az x és y változók valós típusúak. Határozza meg azt az utasítást, amely egyenértékű a mellékelt
utasítással. y=x*x;
a. y=sqrt(x); b. y=pow(x,2); c. y=floor(x); d. y=ceil(x);
4. Az x és y valós változók pozitív értékeket tárolnak. Adja meg a mellékelt kifejezés C/C++
nyelvre való átírását.

5. Melyik értéket ír ki a következő C/C++ programrészlet

float x,y;
int z,t;
x=30.858;
y=7.158;
z=x-y;
t=x+y;
cout<<z<<" "<<t<<endl;
z=float(x)+ceil(y);
cout<<z<<endl;
z=10; t=3;
cout<<z/t/2.<<endl;
cout<<abs(t-z)<<endl;
cout<<(int)y/2.;

6. Írd át C++ nyelvre:


𝒙𝟑 +√𝒚 𝝅𝒓𝟐
a). ( 𝒙 ) b.
𝒚
√𝒂𝟐 +𝒃𝟐
7. Az a, b, c és d valós típusú változók. Melyik utasítással kapja a d változó az a és b, illetve az a és c
középarányosainak összegét?
a). d=a+b/2+a+c/2; c) d=a+(b+c)/2;
b). d=(a+b+a+c)/4; d) d=(a+b+a+c)/2;

8. Az a, b, c egész típusú változók és d valós típusú változó. Melyik utasítással kapja a d változó az a, b
és c középarányosát?
a) d=(a+b+c)/3; b) d=a/3.+(float)b/3+c/3.;
c) d=(a+b+c)*2/6; d) d=a/3.+b/3+c/3;

9. Mi lesz a mellékelt C/C++ kifejezés értéke? 9/2.*2-5


a. 3 b. 4
c. -3 d. -3.75
21. Az a és b int típusú változók, a c és d változók pedig float típusúak. A következő értékadó
utasítások közül melyik nem helyes szintaktikailag? (4p.)
a. c=d+2*c; b. c=2-d%2*a; c. c=sqrt(b*b); d. b=(d<=c);

You might also like