2016. július 28., csütörtök

A C++ alapjai

                              
A C++-t Bjarne Stroustroup fejlesztette ki a C nyelv kibõvítéseként az objektum-orientált paradigmával.
Kezdõknek nem ajánlott,de ez az írás a legkönnyebb,amit csak találhatsz és a legeredményre vezetõbb.
A továbbképzés a C++ reference angol nyelvû oldalon,a grafikához az OpenGL,grafikai nyelv.
Ajánlott fordítók:Dev C++ 4.9.9.2 vagy 5.0.0.4.
Bocs a nyelvtani hibákért,de kb.1 óra alatt írtam ezt le(plusz dev c++-szal fordítottam html-re).
1.Alapok
1.1 Hello World!

#include <stdio.h>
#inlclude <conio.h>
main(){
printf("Hello World");
getch();
}

#include-beágyazott fájlok(stdio-printf,conio-szöveges,getch());
printf()-kiiratás
getch()-egy karakter megadását várja
main()-a c++ programok fõtörzse

1.2Beolvasás:
scanf()-ez tipusosan olvas
Pl.:

#include <stdio.h>
#include <conio.h>
main(){int d;
printf("Irj be egy számot:");
scanf("%d",&d);
printf("A szám:%d",d);
getch();
}

%d-integer tipusú számváltozó
scanf("%változótipus",&változó)
-a kiiratas is hasonló

1.3Tipusos olvasás,kiírás:

%c-karakter
%s-karaktertömb
%d,i-egész szám(int,long,short)
%e,f,g-lebegõpontos(double,float)
%E-exponenciális függvényhez
%p-pointerhez

1.4Változótipusok
A változó nevében csak az angol ABC betûi, a számok és a _  jel lehet
Pl.:
valtozo_1-helyes
valtozo*1-helytelen
const-konstans változó,változhatatlan;Pl.: const int x=5;
Számok:
int=integer-integrált tipus,kb. 11 jegyû számokat kezel +,-;létezik unsigned,vagyis elõjelnélküli verziója
long-hosszú;
long long-hosszabb(20 jegy fölött)
double-lebegõpontos(helyezhetsz bele egész számot)
float-lebegõpontos
A számváltozók határait próbálgasd,jó a gyakorláshoz
char-karakter
string-szöveg

1.5Megjegyzések
//egy soros
/*
t0bb soros
*/

1.6Tömbök
Példa:
vátozótipus tömbnév[elemekszáma];
Pl.:
#include <stdio.h>
#include <conio.h>
main(){int tombnev[1];               //két eleme van(0,1,2 stb.)
printf("Irj be egy számot:");
scanf("%d",&tombnev[0]);          //1. elem bekérése
printf("A szám:%d",tombnev[0]);         //1. elem kiírása
getch();
}
Bekéri majd kiírja a tömb elsõ elemét

Pl2.:
#include <stdio.h>
#include <conio.h>
int tombnev[2];               //3 eleme van
main(){
printf("Irj be egy számot:");
scanf("%d\n%d\n%d",&tombnev[0],&tombnev[1],&tombnev[2]);          //1. három elem bekérése
printf("A szám:%d\t%d\t%d",tombnev[0],tombnev[1],tombnev[2]);         //elemek kiírása
getch();
}
\t-tabulátor utána
\n-új sorba utána

1.7Ciklusok
1.7.1Elõltesztelõs

while(feltétel){
utasítások;
};

Pl.:
#include <stdio.h>
#include <conio.h>
main(){int i;
while(i!=5){
i=i+1;
};
getch();
}

!=-nem egyenlõ
addig számol,ameddig i nem egyenlõ 5-tel
1.7.2Hátultesztelõs ciklus
do{
utasítások:
}while(feltétel);
Ugyanaz,mint az elõltesztelõs,csak ebben az utasítás mindenképpen végrehajtódik.
1.7.3Számláló ciklus
for(kezdeti érték;feltétel;módosítás){
utasítás;
};
Pl.:
#include <stdio.h>
#inlclude <conio.h>
main(){
for(int i=1;i<=10;i++){
printf("Hello World");};
getch();
}
Kiírja a Hello World-öt 10-szer
<=-kisebb vagy egyenlõ
i++-növelés
1.7.4Switch(kapcsoló)
switch(változóneve){
case(1. érték):  utasítás;break;
case(2. érték):  utasítás;break;
default: utasítás ;break;
};
break helyett continue=folytatás
default-alapértelmezett parancs
csak számérték mehet zárójelbe, a karakter két ' jel közé:
PL.:
case 'c':ut.;break;
Elágazás-if(ha)-a feltétel teljesülésébõl kifolyólag teljesülnek a parancsok:
if(feltétel){parancsok;} else if(2. feltétel){2. parancs}...if(n f.){n ut.;};
1.8Mûveletek
Aritmetika:
+  -plusz
-   -mínusz
*   -szorzás
/   -osztás
%  -moduló,meghatározza az osztás nem egész részét
Pl.:
int a=5;
int b=10;
int c=a+b;
c=10;
Logikai:
&&-és
||-vagy
!-nem,tagadás
Bitmûveletek:
&-és
|-vagy
^-kizáró vagy
!= nem egyenlõ
<<-eltolás balra
>>-eltolás jobbra
~-egyes komplemens
Összehasonlítás
<-kisebb,mint
>-nagyobb,mint

1.9Matematikai(math.h include-dal)
sqrt-négyzetgyök
sqr-négyzet
exp-exponenciális,e a x-ediken
Pl.:
double x=exp(5);
sin,cos,tan-trigonometriai:double x=sin(0.5);
sinh,cosh,tanh-a hiperbolikus értékük
atan2  -  double z=atan2(1,2);-1/2 arkusz tangense
frexp-double x=frexp(&x,&y);az ldexp ugyanígy
pow-hatvány- int x=pow(2,5);  //2 az 5.-en
ceil-kerekítés fel;int x=ceil(5.5);
floor-kerekítés le

Complex számok(complex.h-val)
complex szám készítése:
#include <stdio.h>
#inlclude <conio.h>
#include <math.h>
#include <complex.h>
main(){
complex<double> mycomplex(5.5,2.560);   //complex készítése
printf("Complex:%g",real(mycomplex));     
getch();
}
realon kívül lehet:
conj,abs,arg,polar,imag;


2.0  Struct,enum
enum-felsorolás
Pl.:

enum color{blue,red,green};
color[0]=blue;

struct-struktúra
Pl.:
struct{
int x;
int y;
}hello;
hello.x=5;

A Union:

union{
int a;
struct{
int b;
}hello1;}hello2;
hello2.a=5;  //a külsõ(uniós)
hello.1.b=10;  //belsõ struktúrás

2.1Az OOP(Objektum-orientált programozás) alapjai 
Az OOp egy új paradigma,amely a természetes,valóságos gondolkodást támogatja.
Kisebb bemutató:
class-az osztály;használata :

class valami{
public:
int x;
int y;
};
valami deklaralas; //ez a valami osztály deklarálása,nem magyarázat
deklaralas.x=5;
deklaralas.y=10;

public-az osztály tartalmának a tulajdonsága(ez publikus),lehet:
protected-védett
private-magán(alapértelmezett)

Konstruktor és destruktor:

class valami{
int x;
inty y;
valami(int newx,int newy); //konstruktor deklarálása
~valami()void; // destruktor deklarálása
};
valami::valami(int newx=5,int newy=10){  //konstruktor definíciója
x=newx;
y=newy;
}
valami::~valami(){    //destruktor definíciója(nem szükséges mindig)
delete [] x;  // az x változó törlése
};
Öröklés:
Új osztály nyitása egy elõzõ osztály gyermekeként:
Pl.:class gyermekosztalyneve:apjaé(,anyjaé is,ha kell){...};

Fontos összetevõ még a polimorfizmus(többrétûség):egy osztályon belü több azonos nevû függvény is lehet.

2.2Konverterek

itoa-integer stringgé
Pl.:
int x=5;
int szammod=10; //decimélis számrendszer,(2-36-ig)
char y[3];
itoa(x,y,szammod);

atol-string longba:
char x[2];
x[0]='a';
long y=atol(x[0]);
egyéb stringbõli:
atof-lebegõpontosba
atoi-integerbe

ecvt,fcvt,gcvt-double stringbe
char x[5]=ecvt(double értéke,int meddig,int decimális_határ,int sign);

gcvt(ajánlottabb):
gcvt(double doublerteke,int hanyszamot,karaktervaltozoneve);

toupper:nagybetûbe a stringet:
toupper(stringnev);
toascii(stringnev); //ascii-ba

strlwr(stringnev);  // a stringben lévõ nagybetûket kicsire cseréli

strcmp(char x,char y); //összehasonlítsa az elsõt a másodikkal

strcat(char x,const char y);  //az elsõ stringet a másodikba fûzi

copy(&char[0],&char[100],&char2[0]);// az elsõ string elsõ karakterétõl a 100.-ig
a másodikba másolja az 1. elemétõl

2.3Makrók
va:
va_list
va_start
va_arg
va_end
Pl.:
(Összeadja a számokat)
int summa(int n,...)
{
int sum=0;
va_list list;
va_start(list,n);
sum=sum+va_arg(list);
va_end (list);
return sum;
};


IS:

isalpha:alpha-e Pl.:
int x=isalpha(int condition);
egyéb:
isalphanum-        alphanumerikus-e
isascii-  ascii-e
iscntrl-  controll-e
isspace-  space-e
isdel...
isdigit-  szám-e
isxdigit-  hexadecimális szám-e

2.3A rendezés
A rendezés terén a legegyszerûbb és egyben legcélszerûbb a quicksort a tömben lévõ elemek
sorba állítására:

#include <stdio.h>
#include <conio.h>
#include <algorithm>  //az algoritmus include f'ájlt kell használni
main(){
int tomb[6]={2,6,7,5,8,4};  
int compare(const void *,const void *){ //a compare mód definiálása
return *(int*)a-*(int*)b;
};
qsort(tomb,6,sizeof(int),compare); //vagyis:(tombnev,int elemekszama,sizeof(valtozotipus),compare);
getch();
}

2.4 Az iostream elõnyei
#include <iostream>
main(){
int a=5;
int b;
int tomb[10];
cout<<"Hello"<<endl;   //kiiratás
cin>>b;  //beolvasás
int c=a+b;
cout<<c<<endl;
cin.getline(tomb,10); // vagyis: cin.getline(tombnev,hanyat) - karaktertömbök könnyed beolvasására
cin.get(); //rendszer pause
}
/*
Több a c++ reference oldalán
*/

2.5 A string.h
Egy string:
string mystring("Hello");
több stringgel:

string mystring("Hello");
string mystring1("Chao");
string mystring2("Hi");
string mystring3=mystring+mystring1+mystring2;

2.6 A permutáció
Számok,karakterek elhelyezkedésének indexsora. 
Ird be:
#include <stdio.h>
#include <iostream>
#include <algorithm> //legszükségesebb include
#include <conio.h>
main(){
int myints[3]={1,2,3,4};
int d=1;
printf("Négy szám permutációja:");
do{
cout<<d<<". "<<myints[0]<<myints[1]<<myints[2]<<myints[3]<<endl;
}while(next_permutation(myints,myints+4));
getch();
}


2.7 Fájlkezelés:
Könnyítõpéldák(így egészben nem feltétlen mûködik,de a kódokat ajánlott külön tanulmányozni!):
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(){int x,i=5;
char tomb[5];
FILE * File;   // File nevû belsõ fájlnév létrehozása
File=fopen("text.txt","w"); // text.txt létrehozása,ha nincs,megnyitása,ha van
/*
File=fopen("fájlnév kiterjesztéssel","mód*");  *módok: w=írásra;r=olvasásra;
a=hozzáfûzésre és olvasásra;a+=hozzáfûzésre és írásra;
*/
if(File!=NULL){
fputs("Hello World!",File); //szöveget helyez a fájlba
fprintf(File,"%d",i);  //Fájlba ír típusosan:fprintf(BelsoFile,"valtozotipus",valtozo);
fscanf(File,"%d",x);  //beolvasás a fájlból:egy x,integer típusú értéket;
fgets(tomb,5,File);  //karakterek,vagy számok megadása a fájlból
}
getch();
}

Az fread fájlból olvasás használata:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(){
FILE * File;
long lsize=ftell(File);
size_t result;
char buffer[10];
buffer=(char*)calloc(10,sizeof(char)); //calloc:memóriafoglalás a char változóhoz
fseek(File,0,SEEK_END);
rewind(File);
result=fread(buffer,1,lsize,File);
getch();
}
2.8 Mutatók vagy pointerek
A pointerek szám típusú változók,melyek egy változó memóriában foglalt címét jelzi.Nagyon fontosak a programozásban,a c++ ereje.
Egyszerû pointer:  int valtozo;
int *pointer=&valtozo;

Referenciatípus:(a változó referenciája,a pointerrel szemben csak egyszer adható neki érték)
int valtozo;
int &referenciatipus=valtozo;

Pointeres referenciatípus:
int *pointer;
int *&referenciapointer=&pointer;

New típus:
double *ujcim;
ujcim=new double;
*ujcim=5.5;

Pointerre mutató pointer:
Egyszerû,csak elé kell tenni mégegy csillagot:
int valtozo;
int *pointer=&valtozo;
int *pointerremutatopointer=&pointer
int *pointerremutatopointerremutatopointer=&pointerremutatopointer

Azt hiszem ennyi elég lesz az alapszinthez.A továbbiakban látogasd meg a c++ reference
oldalát és keresgess benne.Ajánlom a for ciklus használatának gyakorlását,mivel annak
elsajátítása könnyedén haladó és magasabb szintre emeli a gyakorlót és erõs eszköz is lehet.


Nincsenek megjegyzések:

Megjegyzés küldése