|
nu sunt recunoscute chiar daca rezultatul este reprezentabil (Exemplu
|
səhifə | 28/55 | tarix | 07.05.2018 | ölçüsü | 4,6 Mb. | | #50260 |
| 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;
4932>308>
Dostları ilə paylaş: |
|
|