Professional Documents
Culture Documents
C++ Alapok
Tartalom
C++ program struktrja Adatok brzolsa s a beptett tpusok Elfeldolgoz (preprocessor) utastsai Megjegyzsek (comments) I/O Opertorok s kifejezsek Folyamatirnytsa
; ciklus vge
Procedurlis vs. OO
Procedurlis nyelveknl a programokat alprogramok-eljrsokkal ptjk fel (procedure subroutine). Az objektum orientlt nyelveknl a programok objektum tpusokbl (osztly) tevdik ssze (classes). C++ tudja mindkettt! Kezdjk a procedurlis szemllettel, majd ttrnk a OO-re.
Hello World++
// Hello World program #include <iostream.h> int main(void) {
megjegyzs Elfeldolgoz utastsa
A program utastsai
}
A program befejezse (0 az OK)
Alkalmazs ksztse
szerkeszts
fordts
futtats
[const] tpus nv [= rtk]; A tpus lehet beptett vagy felhasznl ltal definilt A nv az a szmok, betk s az alhzsjel tetszleges sorozata(*!) Az rtkads opcionlis (deklarci) A const kulcssz konstansot jell
Vltozk - variables
A nevek megadsnl gyeljnk arra, hogy: Az angol abc betkszlett hasznljuk (A` -> Z, s a -> z, a szmokat (0 -> 9) s az alhzs jelt (`_`). Az els karakter nem lehet szm! A kis s a nagy bet klnbznek szmt (CaseSensitive)! A vltoz nevnek maximlis hosszt a fordt hatrozhatja meg. Nvnek nem adhat foglalt sz.
A C lefoglalt szavai
asm
auto break
continue
default delete
float
for friend
new
operator private public register return
signed
sizeof static switch template this
try
typedef union
case
catch char class
do
double else enum
goto
if inline int
protected struct
unsigned
virtual void volatile
const
extern
long
short
throw
while
Adattpusok karaktertpus
char
Egyszeres idzjelek kz (aposztf) zrt egy vagy tbb karaktersorozat, pl.
\ jel),
cout<<OOP\n ;
Adattpusok egszek 1
integer
pl. int x=42; Lehetnek decimlis (10-es), oktlis (8-as) vagy hexadecimlis (16-os) szmrendszerben Pldk:
short ev=18; (2 byte) (signed) int fizetes=42000; (4 byte) (signed) long ar=420000; (4 byte) (signed) unsigned int szazad=21;(csak pozitv)
Mdostk: u, U, L, l :
Unsigned eljelnlkl: 125U, 072u, 0xFFABu Long- hossz: 12345L, 1234568l Kombinlva: 65432UL
Adattpusok egszek 2
Tpus
hossz
tartomny
unsigned char 8 bit 0 - 255 char 8 bit -128 - 127 enum 16 bit -32,768 - 32,767 unsigned int 16 bit 0 - 65,535 short int 16 bit -32,768 - 32,767 int 32 bit 2,147,483,648- 2,147,483,647 unsigned long 32 bit 0 - 4,294,967,295 long 32 bit -2,147,483,648 - 2,147,483,647 float 32 bit -3.4 * (10**-38) - 3.4 * (10**+38) double 64 bit 1.7 * (10**-308) - 1.7 * (10**+308) long double 80 bit 3.4 * (10**-4932) - 1.1 * (10**+4932)
Adattpusok lebegpontosak
Adattpusok igaz/hamis
Adattpusok Felsorols
Felsorolt tpusok
enum felNeve { nv1 [= rtk1], nv2, nv3, ... } nvx egyedi azonostk rtkx-ek egsz szmok Alaprtelmezett rteke a nv1-nek 0 A sorszm egyesvel n Kezdrtk lehet negatv szm is
Adattpusok Felsorols
pldk enum nyelvek{angol, magyar, spanyol}; enum szinek {piros, kek, zold}; enum szinek {piros=2, kek, zold}; //kek =3 enum szinek {piros=1, kek=5, zold}; Deklarci: nyelvek Pista; enum nyelvek Pista; Pista = magyar; //rtkads
A balrtk (Lvalue) hely a memriban ahova runk A jobboldali rtk (Rvalue) egy adat az olvasott helyrl A baloldali vltozk engedelyezik az ltaluk lefoglalt memria mez rtknek vltoztatst A jobboldali vltozk rtkt nem lehet megvltoztatni
AdatTpusok Typedefs
A typedef-el adattpusoknak szinonmkat hozhatunk ltre. rsmd: typedef tpus szinonima_neve Pldk:
typedef char *String; // String nevek; typedef unsigned char Byte; // Byte ascii; typedef char Screen[80]; // Screen disply;
Elfeldolgoz utastsai
Az elfeldolgoz klnll rsze a C++ programozsi krnyezetnek. Feladata: beszrja a fejlcfjlokat a forrsfjlunkba, szvegek helyettestset vgzi, s lehetv teszi a feltteles fordtst. Az utastsok a sorelejn tallhat # jellel kezddnek.
Az include fjl utaststst ad a fordtnak, hogy egy msik fjlbl programsorokat illessze be a mi kdunk kz rsmd: #include fajl
A fordt az aktulis knyvtrban keresi
#include <fajl>
Keress a standard knyvtrakban
C++ elfeldolgoz
C++ program
Futtathat program
#define square(a) (a * a)
z = (y*x * y*x);
Megjegyzsek
Egysoros megjegyzsek (comments) // szveg Tbbsoros megjegyzsek /* szveg ... mg tbb szveg.... mg..... */
Ki/bemenet (I/O)
Az I/O mveleteknl tipusellenrzs trtnik, csak a megfelel tpus rtkek lesznek elfogadva
Pillants a memrira
cin >> integer1; (45 lett bevve)
integer1 45
cin >> integer2; integer2 (72 lett bevve) sum = integer1 + integer2;
integer1 integer2 sum
integer1
45 72
45
72
117
I/O Pldk
char name[10]; int ev; cout << Kerem a nevet: ; cin >> nev; cout << Hany eves vagy: ; cin >> ev; cout << A neved << nev << endl; cout << Te most << ev << eves vagy endl;
Aritmetikai opertorok: +, -, *, /, % *
szorzs
/
oszts Egszek osztsakor elhagyodnak a tizedesek !
7 / 5 eredmnye 1
%
Modulus oszts maradka
7 % 5 eredmnye 2 (7ben az 5 meg van 1szer, 7ig marad mg kett)
Kirtkelsi sorrend:
Elszr a zrjelben lev mveletek
(rszletek ksbb)
Hozzrendels
Egyszer hozzrendels
var = exp; x = 5; y = 2*x;
sszeadsos hozzrendels
var += ertek ekvivalens a var = var + ertek; Ervnyes minden ktoperandusos szmtani mvre s a bitopertorokra, pl: x += 5; y &= 0xFF00; i*=j; k/=32; stb.
Plda
int i=5, j=11, M; M=i+j; M=i++ +j; M=++i +j; M=i-- +j; M=i+j- -; M=- -i+- -j;
16 16 18 18 17 14
Els alak:
a) if (kifejezs)utasts;
b) if (kifejezs) { utastsok; } if ( x > 0) { avg = sum / x; cout << tlag= << avg << endl; }
Msodik alak:
if (x > 0) { avg = sum / x; cout << tlag= << avg << endl; } else { Cout << tlag <<nem <<rtelmezett; }
A switch
cin>>jegy; //csak int vagy char lehet! switch (jegy){ case 1: cout<<elgtelen;break; case 2: cout<<elgsges;break; case 3: cout<<kzepes;break; case 4: cout<<j;break; case 5: cout<<jeles;break; default : cout<<ilyen jegy nincs!; }
Ciklusok while
while (kifejezs) { utasts1; } int n = 0; while (r > m) { n++; r -= m;
Ciklusok do while
do { utasts1; } while (kifejezs);
do { : cout << Mg egyszer?; cin >> valasz; } while (valasz == i);
Ciklusok for
for (exp1; exp2; exp3) { utasts(ok); }
for (n = 10; n >= 0; n--) { cout << n << endl; }
for vs while
cout << Jegyek szama ==> ; cin >> jegyekSzama; cout >> Dikok szma ==> cin >> diakSzam;
ciklSzam = 0;
while (ciklSzam < diakSzam) { cout << A dik jegye ==> ; cin >> jegy; szazalek = 100 * jegy / jegyekSzama; cout << A diak eredmenye %-ba: ; cout << szazalek ; ciklSzam = ciklSzam +1; }
NB: a ciklusvltoz inicializlsa
for vs while
cout << Jegyek szama ==> ; cin >> jegyekSzama; cout >> Dikok szma ==> cin >> diakSzam; ciklSzam = 0; while (ciklSzam < diakSzam) { cout << A dik jegye ==> ; cin >> jegy; szazalek = 100 * jegy / jegyekSzama; cout << A diak eredmenye %-ba: ; cout << szazalek ; ciklSzam = ciklSzam +1; }
NB: a ciklus felttele
for vs while
cout << Jegyek szama ==> ; cin >> jegyekSzama; cout >> Dikok szma ==> cin >> diakSzam; ciklSzam = 0; while (ciklSzam < diakSzam) { cout << A dik jegye ==> ; cin >> jegy; szazalek = 100 * jegy / jegyekSzama; cout << A diak eredmenye %-ba: ; cout << szazalek ; ciklSzam = ciklSzam +1; }
NB: a ciklusvltoz rtkvltoztatsa
for vs while
cout << Jegyek szama ==> ; cin >> jegyekSzama; cout >> Dikok szma ==> cin >> diakSzam; for (cikSzam = 0; cikSzam<diakSzam; cikSzam++) { cout << A dik jegye ==> ; cin >> jegy; szazalek = 100 * jegy / jegyekSzama; cout << A diak eredmenye %-ba: ; cout << szazalek ;
}
for vs while
cout << Jegyek szama ==> ; cin >> jegyekSzama; cout >> Dikok szma ==> cin >> diakSzam; for (cikSzam = 0; cikSzam<diakSzam; cikSzam++) { cout << A dik jegye ==> ; cin >> jegy; szazalek = 100 * jegy / jegyekSzama; cout << A diak eredmenye %-ba: ; cout << szazalek ;
}
for vs while
cout << Jegyek szama ==> ; cin >> jegyekSzama; cout >> Dikok szma ==> cin >> diakSzam; for (cikSzam = 0; cikSzam<diakSzam; cikSzam++) { cout << A dik jegye ==> ; cin >> jegy; szazalek = 100 * jegy / jegyekSzama; cout << A diak eredmenye %-ba: ; cout << szazalek ;
}
Ciklusok for x2
const char buf[]=A legjobb burek a ; const char *p; int szamlal = 0;
Ciklusokrl valamit
Leggyakoribb hibk :
Ciklus amely sose ll meg (vgtelen cikl. ) Ciklus mely tl hamar lell
Activity_1
Mit r ki?
for ( int szam= 0; szam< 5; szam++ ) { cout << szam= << szam << endl; }
Activity_2
Mit r ki?
for ( int szam= 0; szam!= 5; szam++ ) { cout << szam= << szam<< endl; szam= szam+ 1; }
Activity_3
Mit r ki?
beng = 5; boom=0; while (beng > 0) { boom += beng ; beng-- ; } cout << A boom= << boom;
Activity_4
Mit r ki?
boom=0; beng=0; while (beng > 0) { boom += beng ; beng-- ; } cout << A boom= << boom;
Vgtelen ciklus an infinite loop osszeg = 0 ; szam = 5; while (szam > 0) { osszeg += szam ; szam++; } cout << Az osszeg:
Activity_5
Logikai hiba! Ellenrizzk le a cikl. felttelt!
<< osszeg;;
Bemenrtk ellenrzse
A while ciklus gyakori alkalmazsa a bemeneten megjelen rtkek ellenrzse. Pldul: 1. Ha azt szeretnnk megtudni, hogy a bevitt rtk az adott tartomnyba esik-e. 2. Leellenrizzk, hogy a felhasznl milyen vlaszt adott (kisbets i vagy n, vagy nagybets I vagy N).
Bemenet ellenrzse_1
float jegy=0,maxJegy=0 cout<< Krem a legnagyobb jegyet"; cin >> maxJegy; cout<< Krem a dik jegyt"; cin >>jegy;
while(jegy<0||jegy>maxjegy)
{ cout<<venytelen jegy! Krem jra"; cin>>jegy; } cout << jegy /maxJegy*100;
Bemenet ellenrzse_2
cout <<Folytatni szeretn?(I,i,N,n); cin>> valasz; while((valasz!=I)&&(valasz!=i)&&(va lasz!=N)&&(valasz!=n)) { cout << Hibas valasz! Krem jra; cin >> valasz; } A ciklus addig forog mig a valaszra nem kapunk I, i, N vagy n!
Plda ciklusokra
Szmtsuk ki az egsz tpus alap egsz hatvnyt! Alkalmazzuk a for, a while s a do while ciklusokat!
hatvnyszmol
int i, alap, kitevo; double hatvany=1; cout<<"Alap=";cin>>alap; cout<<"Kitevo=";cin>>kitevo; if (kitevo) { for (i= 1;i<=abs(kitevo);i++) hatvany*=alap; if (kitevo<0) hatvany=1./hatvany; } cout << "hatvany="<<hatvany; }
#include <iostream> using namespace std; void main (){ int i, alap, kitevo; double hatvany=1; cout<<"Alap=";cin>>alap; cout<<"Kitevo=";cin>>kitevo;
hatvnyszmol
if (kitevo) { n=kitevo;if (kitevo<0) n=abs(n); while (n>0){ hatvany*=alap; n--; } if (kitevo<0) hatvany=1./hatvany; cout << "hatvany="<<hatvany; }
#include <iostream> using namespace std; void main (){ int i, alap, kitevo; double hatvany=1; cout<<"Alap=";cin>>alap; cout<<"Kitevo=";cin>>kitevo;
hatvnyszmol
if (kitevo) { n=kitevo;if (kitevo<0) n=abs(n); do { hatvany*=alap; n--; }while (n>0) if (kitevo<0) hatvany=1./hatvany; cout << "hatvany="<<hatvany;
Esettanulmny
Els plda
rjon olyan C++ programot, amely karaktereket olvas be a billentyzetrl mindaddig, amig Entert nem kap. Jelentse meg a kvetkez adatokat: A nagybets karakterek szmt. A kisbets karakterek szmt. A szmok szmt. Az egyb karakterek szmt. Az sszes karakterek szmt.
Analzis
karakterek olvassa a billentyzetrl Enterig. ==> ciklus, teszt az Enter kdjra
Nagybetk szma ==> szmll a A..Z karaktrkre Kisbetk szma ==> szmll a..z karakterekre Szmok szma ==> szmll 0..9 karakterekre Egyb karaktere szma ==>
szmll mindazokra, amik az 1. 3-hoz nem tartznk.
Tervezs
Szmllk inicializlsa Beolvasni ch ( 1 karaktert) Amig (while) nincs Enter csinld inkrementld (nveld 1-el) az Osszes-et Ha (if) ch nagybet, akkor nveld a Nagybetu-t else if ch kisbet, akkor nveld a Kisbetu-t else if ch az szm, akkor novel a Szamok-at else nveld az Egyeb-et olvasd be ch-t A while vge Kirni a szmllk rtkeit
Program csontvza
#include <iostream.h>
// // // // // // // // Nev: Kovacs Pista. Csoport: 1G23 Project: Elso gyakorlat Datum: 2006.02.29 Ez a program meghatarozza a standard bemeneten megjelent karaktersorozatban a nagybetuk, a kisbetuk, a szmok s egyb karakterek szmt.
Vltozk deklarlsa
char ch; int Osszes int Nagybetuk int Kisbetuk int Szamok int Egyeb
= = = = =
0; 0; 0; 0; 0;
Loop Structure
cout << Krem a karakterek: ; cin >> ch; while ( ch != \n ) { Osszes++; : cin >> ch; }
Karakterek tesztelese
if (ch >= A && ch <= Z)
Nagybetuk++;
else if (ch >= a && ch <= z)
Kisbetuk++;
else if (ch >= 0 && ch <= 9) Szamok++; else Egyeb++;
A ciklus
cout << Krem a karaktereket: ; while ( (ch = cin.get()) != \n ) { Osszes++; : }
Eredmnyek megjelentse
cout << "Nagybetuk =" << Nagybetuk
<< "\nEgyeb=" << Egyeb<< endl; cout << "Osszes karakterek szama=" << Osszes << endl;