Limbajul c si C++ abc-doar


nu sunt recunoscute chiar daca rezultatul este reprezentabil (Exemplu



Yüklə 4,6 Mb.
səhifə28/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   24   25   26   27   28   29   30   31   ...   55

nu sunt recunoscute chiar daca rezultatul este reprezentabil (Exemplu:

pow(1,1.0E100) ).

EXEMPLU: #include

#include

#include

double x,y,z;

main()

{

for(x=1.13;x<5;x++)

{ for(y=7.77;y<11;y++)

{ z=pow(x,y);

printf(" %lf la puterea %lf este: %lf \n\n",x,y,z);

sleep(2);

}}}

Observati ca atat baza cat si exponentul pot fi numere fractionare.

Versiunea C++ include si functia powl() care este similara dar opereaza

si returneaza numere de tip long double.SINTAXA GENERALA este:

long double powl(long double x,long double y);
FUNCTIA pow10() si pow10l()

-calculeaza 10 la puterea p

SINTAXA GENERALA este: double pow10(int p); long double pow10l(int p);

Functia calculeaza valoarea pentru 10 la puterea specificata prin p.

Exponentul p trebuie sa fie in numar de tip int.Valorile extreme ale lui

p pot genera rezultate in afara domeniului de reprezentare.

Versiunea C++ include si pow10l() care returneaza un numar long double.


-198- [ math.h -sin() si sinh() ]

Pentru pow10l() SINTAXA GENERALA este: long double pow10l(int p);

Functia returneaza valori valide pentru p<308 in cazul functiei pow10()

si pentru p<4932 in cazul functiei pow10l().

Rezultatul returnat are precizia de tip long double.

EXEMPLU: #include

#include

#include

double x;

int y;

main()

{

for (y=100;y<107;y++)

{ printf(" 10 la puterea %d este: %lf \n\n",y,pow(y));

sleep(2);

}}
FUNCTIA sin() si sinl()

-calculeaza sinusul valorii

SINTAXA GENERALA este: double sin(double x);

Functia calculeaza valoarea sinusului din valoarea respectiva (x) unde

se considera ca x este valoarea exprimata in radiani a unui unghi.

Valoarea returnata este valoarea sinusului din unghiul x.

Functia poate fi apelata si pentru numere complexe sau pentru numere BCD

(binary-coded decimals).

Versiunea C++ include si functia sinl() care este similara dar opereaza si

returneaza numere de tip long double.SINTAXA GENERALA este:

long double sinl(long double x);

Erorile de reprezentare se arhiveaza in variabila globala error si pot fi

manevrate cu ajutorul functiilor matherr() si _matherrl().

EXEMPLU: #include

#include

#include

double x,y;

int z;

main()

{

for (z=1;z<21;z++)

{ y=1+y+3.14/7;

printf("unghiul este: %lf \n",y);

printf("sinus de %lf este: %lf \n\n",y,sin(y));

sleep(2);

}}
FUNCTIA sinh() si sinhl()

-calculeaza sinusul hiperbolic al valorii respective

SINTAXA GENERALA este: double sinh(double x);

Functia calculeaza valoarea sinusului hiperbolic de x,unde x este un unghi

exprimat in radiani.Valoarea calculata este egala cu (e^x-e^-x)/2.

Versiunea C++ include si functia sinhl() care este similara dar opereaza

si returneaza numere long double.SINTAXA GENERALA este:

long double sinhl(long double x);


-199- [ math.h - sqrt() ]

Functia poate fi apelata si pentru numere complexe sau BCD(binary-coded).

Functia returneaza valoarea sinusului hiperbolic al unghiului x.Daca

valoarea rezultata prin calcul este mai mare decat valoarea maxima repre-

zentabila,atunci functia returneaza HUGE_VAL (1.7E308) cu semnul cores-

punzator si seteaza variabila errno la ERANGE.Erorile de reperezentare

pot fi resetate cu ajutorul functiilor matherr() sau _matherrl().

EXEMPLU: #include

#include

#include

double x,y,w,z;

main()

{

for (z=0.13;z<10;z++)

{

printf("sinus hiperbolic de %lf este: %lf \n",z,sinh(z));

printf("verificare: \n");

y=(exp(z)-(exp(-z))/2;

printf("(e^%lf-e^-%lf)/2 este: %lf \n",z,z,y);

print("iar: \n");

printf("cosinus hiperbolic de %lf este: %lf \n",z,cosh(z));

printf("verificare: \n");

w=(exp(z)+exp(-z))/2;

printf("(e^%lf+e^-%lf)/2 este: %lf \n\n",z,z,w);

sleep(7); }

}

Observati ca cu cat unghiul este mai mare,cu atat valorile pentru sinus

si respectiv cosinus hiperbolic devin tot mai apropiate (e^-x devine tot

mai putin discriminativ).
FUNCTIA sqrt() si sqrtl()

-calculeaza radacina patrata pozitiva

SINTAXA GENERALA este: double sqrt(double x);

Functia extrage radicalul din valoarea specificata.Atat valoarea specifi-

cata cat si cea returnata vor fi numere de tip double.

Functia poate fi apelata si pentru numere complexe sau BCD.

Functia returneaza valoarea rezultata.Daca x este un numar real dar nega-

tiv functia seteaza variabila errno la valoarea EDOM(domain error)

Erorile de reprezentare pot fi resetate cu functia matherr().

EXEMPLU: #include

#include

#include

double x;

main()

{ for(x=17.171315;x>0;x--)

{ printf("radical din:%lf este: %lf \n\n",x,sqrt(x));

sleep(2);

}}

Versiunea C++ include si functia sqrtl() care este similara dar opereaza

si returneaza numere de tip long double.SINTAXA GENERALA este:

long double sqrtl(long double x);

Erorile de reprezentare pot fi resetate cu _matherrl().


-200- [math.h -tan() si tanh() ]

FUNCTIA tan() si tanl()

-calculeaza tangenta unghiului specificat

SINTAXA GENERALA este: double tan(double x);

Functia calculeaza valoarea tangentei de x unde x este un unghi exprimat

in radiani.Functia calculeaza practic sin(x)/cos(x) si returneaza valoarea

calculata.

Versiunea C++ include si functia tanl() care opereaza si returneaza numere

long double.SINTAXA GENERALA este: long double tanl(long double x);

Functia poate fi apelata si pentru numere complexe sau BCD iar erorile de

reprezentare pot fi resetate cu ajutorul functiilor matherr()/_matherrl().

EXEMPLU: #include

#include

#include

double x,y;

main()

{ for (x=1;x<20;x++)

{ y=x/3.14;

printf("Tangenta de: %lf este: %lf \n\n",y,tan(y));

sleep(2);

}}
FUNCTIA tanh() si tanhl()

-calculeaza tangenta hiperbolica

SINTAXA GENERALA este: double tanh(double x);

Functia calculeaza valoarea tangentei hiperbolice,respectiv sinh()/cosh()

din x,unde x este valoarea pentru un unghi exprimat in radiani.

Functia poate fi apelata si pentru numere complexe sau BCD(binary-coded)

Versiunea C++ include si functia tanhl() care opereaza si returneaza

numere de tip long double.Erorile de reprezentare sunt arhivate in varia-

bila errno si pot fi resetate cu functiile matherr() sau _matherrl().

Practic returneaza (e^x-e^-x)/(e^x+e^-x).

EXEMPLU: #include

#include

#include

double a,b,x,y,z,w;

main()

{ for (y=0.13;y<10;y++)

{ z=y/3.14;

printf("tangenta hiperbolica de: %lf este:%lf \n",z,tanh(z));

printf("verificare=sinh(z)/cosh(z): \n");

a=sinh(z);

b=cosh(z);

x=a\b;

printf("sinh(z)/cosh(z)= %lf \n",x);

w=(exp(z)-exp(-z))/(exp(z)+exp(-z));

printf("(e^z-e^-z)/(e^z+e^-z) este: %lf \n\n",w);

sleep(4);

}}

Observati ca cu cat valoarea unghiului este mai mare,cu atat tangenta

hiperbolica tinde spre 1 (deoarece e^-x devine nesemnificativ).

Pentru calculul cotangentelor se vor utiliza functiile cos() si sin().


-201- [ math.h -constante ]

CONSTANTE,TIPURI DE DATE,VARIABILE GLOBALE (definite in )

Versiunea C include:-complex,EDOM,ERANGE,exception,HEGE_VAL si _mexcep

Versiunea C++ include si:M_E,M_LOG2E,M_LOG10E,M_LN2,M_LN10,M_PI,M_PI_2,

M_PI_4,M_1_PI,M_2_PI,M_1_SQRTPI,M_2_SQRTPI,M_SQRT2,M_SQRT_2,_exceptionl
complex: -este o structura utilizata pentru reprezentarea numerelor

complexe.Se utilizeaza cu cabs().Are forma:

struct complex {

double x,y;

};

EDOM: -este codul de eroare pentru erorile domeniului de reprezentare

ERANGE: -este codul de eroare pentru erori de dimensionare a valorii

HUGE_VAL:-este codul de eroare pentru overflow (valori prea mari)

exception: -este o structura utilizata pentru manevrarea erorilor mate-

matice.Se utilizeaza pentru functia matherr().Are definitia:

struct exception {

int type;

char *name;

double arg1,arg2,retval;

};

unde: type este tipul de eroare care a intervenit

name este numele functiei care a generat eroarea

arg1 este primul argument transferat functiei eronate

arg2 este ale doilea argument (eventual) al functiei

retval este valoarea implicita (si poate fi modificata)

pentru resetarea modului de manipulare a erorilor,practic se utilizeaza

algoritmi care reseteaza valoarea implicita (retval)

M_E -este valoarea pentru e (baza logaritmilor naturali)

M_LOG2E -este valoarea pentru log(e)

M_LOG10E -este valoarea pentru log10(e)

M_LN2 -este valoarea pentru ln(2)

M_LN10 -este valoarea pentru ln(10)

M_PI -este pi (3.149265.....)

M_PI_2 -este pi/2

M_PI_4 -este pi/4

M_1_PI -este 1/pi

M_2_PI -este 2/pi

M_1_SQRTPI -este unu impartit la radical din pi (1/3.14...)

M_2_SQRTPI -este doi impartit la radical din pi (2/3.14...)
_mexcep: -este un tip de data care contine o serie de constante ce re-

prezinta posibilele erori matematice:

DOMAIN =argument in afara domeniului [Exemplu: log(-1)]

SING =argumentul determina o exceptie [Exemplu: pow(0,-2)]

OVERFLOW =argumentul determina MAXDOUBLE [Exemplu: exp(1000)]

UNDERFLOW =argumentul determina MINDOUBLE [Exemplu: exp(-1000)]

TLOSS =argumentul determina pierderea unor biti semnificativi

din valoarea finala(pierdere completa a semnificatiei)

[Exemplu: sin(10**70)]

_complexl() si _exceptionl() sunt versiunile destinate numerelor de tip

long double si sunt similare cu complex si exception.


-202- [ graphics.c -generalitati ]

BIBLIOTECA C -FILA ANTET graphics.h

Contine un mare numar de functii (peste 80) destinate realizarii de gra-

fice si imagini bidimensionale.Filele realizate cu ajutorul acestor

functii pot fi rulate independent sau pot fi lansate cu ajutorul unui

program special destinat,denumit interfata grafica.O astfel de biblioteca

de functii se regaseste si in C++(versiunea Borland) sub numele de BGI

(Borland Graphics Interface) dar este uneori greu de accesat,in functie

de particulatitatile sistemului de operare.In general nu este compatibila

cu sistemul de operare Windows(dar poate rula in Windows daca C++ este

incarcat pe sistemul de operare MS-DOS).Versiunea C++ include si un editor

grafic specializat pentru prelucrarea de imagini bitmap(se lanseaza din

meniul File cu New si apoi Resource Project).

Versiunea Visual C++ a renuntat complect la biblioteca de functii

grafice 2D,pe care le-a inlocuit cu o clasa speciala de functii (CDC)

specializate si la care adauga un editor grafic si prelucrarea de imagini

bitmap,imagini video digitale etc.

Biblioteca grafica 2D are nu numai o importanta istorica ci si una

practica esentiala (genereaza grafice cu minimum de memorie consumata).

Functiile pot fi grupate dupa actiunea lor in:rutine de configurare,rutine

de stabilire a coordonatelor grafice sau a paletei de lucru,rutine pentru

stabilirea unor atribute sau pentru afisarea imaginilor,rutine pentru

afisarea textului sau pentru transferarea imaginii etc.

In manual,functiile vor fi prezentate in ordine alfabetica dar exemplele

vor putea contine doua sau mai multe functii,simultan.Pentru orice nelamu-

rire,consultati si functia auxiliara din fiecare aplicatie.Toate functiile

si exemplele vor fi prezentate simplist,pentru a respecta scopul propus

(cel de abecedar).Nu este recomandabil sa experimentati prea multe moduri

de afisaj grafic sau setari de drivere,decat daca stiti exact ce rezulatat

vor avea (riscati sa compromiteti complet sistemul de afisare).

Exista diferente mai mici sau mai mari intre diferitele versiuni de C

si C++ (Turbo,Borland,ARM etc.) pentru care va trebui sa consultati manual-

ul fiecarei versiuni.Aplicatiile grafice 2D sunt simple,spectaculoase,usor

de implementat si aspecteaza orice program sau aplicatie generata.Nu con-

suma decat foarte putina memorie si nu suprasolicita procesoarele,pot fi

salvate si tampoane de memorie relativ mici si pot fi eventual rulate doar

din memoria de operare.Pot fi utilizate pentru jocuri grafice sau pentru

artificii si icon-uri in aplicatiile si programele banale.Imaginile 3D sunt

mai spectaculoase dar si mult mai pretentioase (necesita o placa grafica

speciala,ocupa multa memorie,incarca procesoarul cu drivere special dedi-

cate,genereaza conflicte de software/hardware etc...).

Pentru incepatori,si pentru neprofesionisti,gama de aplicatii grafice

generata cu biblioteca 2D acopera aproape toate necesitatile posibile,

poate rula aproape in orice configuratie de calculator si este mult mai

usor de programat si/sau depanat.

La inceput este bine sa va rezumati la functiile destinate pentru

desenare (bar,bar3d,circle,drawpoly,ellipse,fillelipse,fillpoly,line,

lineto,moveto,rectangle,setcolor si setbkcolor).Intr-o etapa mai avansata

puteti genera si aplicatii pentru configurarea si setarea automata (dar

este bine sa va asigurati ca aveti mijlocul de a remedia eventualele

erori (este recomandabil sa utilizati o unitate slave).

Daca aveti timpul si rabdarea necesara,merita sa invatati aceste functii.


-203- [ graphics.h -bar() si bar3d() ]

FUNCTIA bar()

-deseneaza dreptunghiuri colorate in culoarea penitei

SINTAXA GENERALA este:

void far bar(int left,int top,int right,int bottom);

Functia se utilizeaza mai ales pentru grafice care prezinta datele sub

forma de bare rectangulare.Imaginile vor fi umplute in culoarea sau cu

sablonul (pattern-ul) actual al penitei,fara contur.Pentru a realiza

bare 2D cu contur,puteti utiliza functia bar3d la care adancimea va fi

setata la zero.Cele patru argumente ale functiei specifica coltul din

stanga sus si dreapta jos (coordonatele x si y).Valoarea specificata

se refera la coordonatele pixel-ului respectiv.Pozitia pe ecran va fi

influentata de modul de afisaj al ecranului.Frecvent se utilizeaza

modul ecran de 640/480 pixeli si majoritatea programelor vechi vor fi

calculate pentru aceasta rezolutie.

Pentru lansare in executie este necesar sa fie initializat modul

grafic al ecranului cu functia initgraph() (vezi si functia)

EXEMPLU: #include

#include

int a,b,c,d,n;

int *graphdriver,*graphmode,*cale;

main()

{

graphdriver=DETECT;

initgraph(graphdriver,graphmode,"");
for (n=1;n<16;n++)

{ setbkcolor(n-1);

a=n+n*5;

b=2*n+n*10;

c=3*n+n*5;

d=4*n+n*10;

bar(a,b,c,d);

bar(d,c,b,a);

sleep(1);

}}
FUNCTIA bar3d()

-deseneaza bare tridimensionale si le umple cu sablonul penitei

SINTAXA GENERALA este:

void far bar3d(int left,int top,int right,int bottom,int depth,int topflag)

unde: left si top sunt coordonatele x si y ale coltului din stanga sus,iar

right si bottom sunt coordonatele x si y ale coltului din dreapta jos,

depth este adancimea(grosimea) iar topflag seteaza aria de sus a barei.

Poligonul va fi conturat in culoarea si cu stilul penitei.Ultimul para-

metru (topflag) poate fi zero sau nonzero.Daca este nonzero,imaginea tri-

dimensionala va cuprinde si aria de sus a poligonului,iar daca este zero,

se va omite aria de sus astfel incat doua bare tridimensionale sa poata

fi suprapuse fara a realiza imagini de sumatie.

Obisnuit,adancimea(grosimea) imaginii tridimensionale se calculeaza

astfel incat sa fie 25% din dimensiunea barei (1/4 din right-left).

Functia nu returneaza nici o valoare.


-204- [ graphics.h -circle() ]

EXEMPLU: #include

#include

int a,b,c,d,e,f,n;

int *drv,*mod,*cale;

main()

{

drv=DETECT;

initgraph(drv,mod,"");

for(n=1;n<16;n++)

{ a=30*n;

b=40*n;

c=30*n+20*n;

d=10*n+20*n;

e=3*n;

f=n;

setcolor(n);

setbkcolor(n-1);

bar3d(a,b,c,d,e,f);

sleep(1);

}

return 0;

}
FUNCTIA circle()

-deseneaza cercuri

SINTAXA GENERALA este: void far circle(int x,int y,int radius);

Functia deseneaza cercuri cu culoarea penitei,de raza radius si cu

centrul cercului situat la coordonatele specificate prin x si y.

Daca modul ecran are alti parametri decat cei standard,cercurile nu vor

fi perfect rotunde.Pozitia pe ecran este influentata de rezolutie.

Parametrul penitei care determina stilul grafic nu influenteaza cercurile

si elipsele deoarece se utilizeaza doar parametrul pentru grosimea liniei.

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

#include

int a,b,c,n;

int *drv,*mod,*cale;

main()

{

randomize();

drv=DETECT;

initgraph(drv,mod,"");

setcolor(GREEN);

setbkcolor(RED);

for (n=1;n<16;n++)

{ a=random(500);

b=random(400);

c=random(100);

circle(a,b,c);

sleep(1); }}


-205- [ cleardevice() si closegraph() ]

FUNCTIA cleardevice()

-sterge ecranul si deplaseaza cursorul la pozitia 0,0

SINTAXA GENERALA este: void far cleardevice(void);

Functia sterge intregul ecran (respectiv umple intregul ecran cu culoarea

de fond) si apoi deplaseaza pozitia curenta a cursorului la pozitia 0,0

adica in coltul din stanga sus (dar ecranul ramane in modul grafic de

afisaj).Se utilizeaza pentru a sterge ecranul sau pentru a realiza efecte

de animatie(cu delay() ).

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

int a,b,c,d,e,f,n;

int *dr,*m,*ca;

main()

{

dr=DETECT;

initgraph(dr,m,"");

setbkcolor(GREEN);

setcolor(RED);

for (n=8;n<28;n++)

{

a=100+n*10;

b=200+n*10;

Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   24   25   26   27   28   29   30   31   ...   55




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin