#include <dos.h>
void getdate (struct date *datep);
In structura referita de datep se intoarce data sistemului.
struct date;
#include <dos.h>
void gettime (struct time *timep);
struct time;
#include <time.h>
time_t time (time_t *timer);
Functia time() intoarce timpul in secunde masurat de la 1 ianuarie 1970 00:00:00 GMT si il memoreaza in locatia indicata de pointerul timer (acest pointer nu trebuie sa fie NULL).
Exemplu de utilizare:
#include <time.h>
#include <stdio.h>
#include <dos.h>
int main(void)
#include <time.h>
struct tm *gmtime (const time_t *timer);
Accepta adresa unei valori intoarse de time() si intoarce un pointer la structura de tip tm care contine rezultatul conversiei in GMT.
timezone = variabila globala de tip long care trebuie setata la diferenta in secunde intre GMT si timpul standard local;
daylight = variabila globala care trbuie setata la valoare diferita de 0 numai in SUA (U.S.Daylight Savings time conversion)
struct tm ;
Aceasta structura este un static suprascris de fiecare data.
Exemplu de utilizare:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
/* Pacific Standard Time & Daylight Savings */
char *tzstr = 'TZ=PST8PDT';
int main(void)
#include <time.h>
char *ctime (const time_t *time);
Functia ctime() realizeaza conversia parametrului time intr-un sir de 26 caractere. Acest sir are forma urmatoare terminandu-se cu caracterele new line (n) si terminator de sir (0):
DDD MMM dd hh:mm:ss YYYY
unde:
DDD = Day (Mon, Tue, Wed, etc.)
MMM = Month (Jan, Feb, Mar, etc.)
dd = Date (1, 2, , 31)
hh = Hour (1, 2, , 24)
mm = Minutes (1, , 59)
ss = Seconds (1, , 59)
YYYY = Year
Exemplu:
Mon Oct 20 11:31:54 1952n0
Toate campurile au
o lungime
Functia intoarce un pointer la un sir de caractere ce contine data si timpul. Acest sir este o variabila statica, suprascrisa la fiecare apel al functiei.
Exemplu de utilizare:
#include <stdio.h>
#include <time.h>
int main(void)
asctime Conversia datei in format ASCII
#include <time.h>
char *asctime (const struct tm *tblock);
Functia asctime() realizeaza conversia parametrului intr-un sir de 26 caractere. Fiormatul acestui sir este acelasi ca in cazul functiei ctime(). De remarcat faptul ca functiile ctime() si asctime() au acelasi efect, diferenta constand in modul in care este stocat argumentul functiei.
Functia intoarce un pointer la un sir de caractere ce contine data si timpul. Acest sir este o variabila statica, suprascrisa la fiecare apel al functiei.
Exemplu de utilizare:
#include <stdio.h>
#include <string.h>
#include <time.h>
int main(void)
#include <time.h>
int stime (time_t *tp);
Functia stime() seteaza data si timpul sistem, avand ca data de referinta 1 ianuarie 1970 00:00:00 GMT. Parametrul tp reprezinta noua valoare a timpului data in secunde, iar functia intoarce 0.
Exemplu de utilizare:
#include <stdio.h>
#include <time.h>
int main(void)
Pentru compilarea unui program care utilizeaza primitive grafice se include fisierul graphics.h:
#include <graphics.h>
Pentru a se rula un program care utilizeaza functii si definitii din graphics.h sunt necesare unul sau mai multe drivere grafice (fisiere cu extensia .BGI), iar daca se scrie si text in mod grafic, unul sau mai multe fisiere cu extensia .CHR
Exista drivere pentru o clasa larga de ineterfete grafice. Tabelul din figura 1 prezinta cateva drivere si adaptorul grafic corespunzator:
Driver-ul grafic |
Adaptorul grafic |
CGA.BGI |
IBM CGA, MCGA |
EGAVGA.BGI |
IBM EGA, VGA |
HERC.BGI |
Hercules monocolor |
ATT.BGI |
ATT400 |
PC3270.BGI |
IBM 3270 |
IBM8514.BGI |
IBM 8514 |
Figura 1 - Drivere grafice
Un numar de functii sunt puse la dispozitia utilizatorului pentru exploatarea facilitatilor grafice ale calculatoarelor personale :
Functia initgraph realizeaza initializarea sistemului grafic;
void far initgraph (int far *graphdriver, int far *graphmode, char far *pathtodriver);
Prototipul acestei functii se afla in graphics.h.
graphdriver este un pointer far la o expresie de tip intreg care precizeaza driverul;
graphmode este un pointer far la o expresie de tip intreg care precizeaza modul grafic;
pathtodriver este un pointer far la o expresie de tip sir de caractere care precizeaza catalogul ce contine fisierul .BGI curent.
graphdriver si graphmode trebuie setate corect. Ele pot fi detectate automat daca graphdriver=DETECT. Dupa apel *graphdriver este setat la driverul grafic curent si *graphmode la modul grafic curent.
Exista un indicator intern de eroare pe care functia il seteaza in urma executiei sale. Valoarea sa se poate afla prin apelul functiei graphresult().
error = graphresult();
Fiecarui nume de eroare grafica ii este atribuita cate o valoare intreaga unica denumita in tabelul din Figura 2 cod de eroare.
Cod eroare |
|
Explicatii |
grOk |
Fara eroare |
|
grNoInitGraph |
Driver grafic BGI neinstalat |
|
grNoDetected |
Nu sesizeaza hardware-ul grafic (placa grafica negasita) |
|
grFileNotFound |
Lipseste driver-ul (fisier .BGI negasit) |
|
grInvalidDriver |
Driver (fisier .BGI) invalid |
|
grNoLoadMem |
Memorie insuficienta pentru driverul grafic |
|
grNoScanMem |
Memorie insuficienta (apel fillpoly) |
|
grNoFloodMem |
Memorie insuficienta (apel floodfill) |
|
grFontNotFound |
Fisier de font negasit |
|
grNoFontMem |
Memorie insuficienta pentru incarcarea fisierului de font |
|
grInvalidMode |
Mod grafic invalid pentru driverul grafic ales |
|
grError |
Eroare grafica |
|
grIOError |
Eroare grafica de intrare/iesire |
|
grInvalidFont |
Fisier de font invalid |
|
grInvalidFontNum |
Numar de font invalid |
|
grInvalidDeviceNum |
Numar de driver invalid |
|
grInvalidVersion |
Versiune invalida |
Figura 2 - Mesaje de eroare obtinute cu functia graphresult()
Se poate detecta placa accelerator grafic si modul utilizand functia:
void far detectgraph (int far *graphdriver, int far *graphmode);
Aceasta functie detecteaza placa grafica si alege modul care asigura cea mai mare rezolutie suportata de acest adptor grafic.
Functia detectgraph poate fi apelata inainte de a initializa modul grafic cu functia initgraph.
Functia closegraph indeparteaza driverul din memorie si restaureaza modul video precedent. Se elibereaza emoria ocupata de driver, fonturi si bufferul I/O (se apeleaza graphfreeem). Sintaxa functiei este:
void far closegraph (void);
Functia setgraphmode trece sistemul in mod grafic, eventual seteaza un mod diferit de cel implicit si sterge si ecranul. Daca se indica un mod inexistent pentru placa video prezenta, functia graphresult() intoarce -10 (grInvalidMode). Sintaxa functiei setgraphmode este:
void far setgraphmode (int mode);
Functia restorecrtmode restaureaza modul initial salvat (detectat) de initgraph. In conjuctie cu setgraphmode se foloseste pentru a comuta din mod grafic in mod alfanumeric daca este necesara o introducere de date. Sintaxa functiei este urmatoarea:
void far setgraphmode (int mode);
In modul text, ecranul poate fi impartit in 40 sau in 80 de coloane si 25, 43 sau 50 de linii, astfel ca ecranul apare ca fiind format din niste celule, in fiecare celula putandu-se inscrie un singur caracter.
Cursorul este vizibil:
dupa ultimul caracter afisat;
in prima coloana a liniei urmatoare daca s-a scris in ultima coloana;
in prima coloana, ultima linie daca s-a scris in ultima linie, ultima coloana; se realizeaza defilare cu o linie a continutului ecranului (scroll);
Cursorul CP (Current Posotion) este invizibil; el se afla in punctul final al deplasarii produse de functiile moveto() si lineto(). Exemple:
moveto (0, 0); /* muta cursorul in origine */
lineto (20, 20); /*se traseaza linia din origine pana in punctul de coordonate (20, 20) */
Driverele grafice recunoscute
de Borland C sunt prezentate in tabelul din Figura 3, fiecarui driver
grafic corespunzandu-i o
COD DRIVER |
|
DETECT |
||||
CGA |
||||||
MCGA |
||||||
EGA |
||||||
EGA64 |
||||||
EGAMOND |
||||||
IBM8514 |
||||||
HERCMONO |
||||||
ATT400 |
||||||
VGA |
||||||
PC3270 |
||||||
CURRENT_DRIVER |
||||||
Figura 3 - Constantele corespunzatoare driverelor grafice
Constantele corespunzatoare culorilor sunt prezentate in tabelul din Figura 4:
Cod culoare |
|
Culoarea |
|||
BLACK |
Negru |
||||
BLUE |
Albastru |
||||
GREEN |
Verde |
||||
CYAN |
Turcoaz |
||||
RED |
Rosu |
||||
MAGENTA |
Violet |
||||
BROWN |
Maro |
||||
LIGHTGRAY |
Gri deschis |
||||
DARKGRAY |
Gri inchis |
||||
LIGHTBLUE |
Albastru deschis |
||||
LIGHTGREEN |
Verde deschis |
||||
LIGHTCYAN |
Turcoaz deschis |
||||
LIGHTRED |
Rosu deschis |
||||
LIGHTMAGENTA |
Violet deschis |
||||
YELLOW |
Galben |
||||
WHITE |
Alb |
||||
Figura 4 - Constantele corespunzatoare culorilor
Constantele corespunzatoare stilurilor de linie sunt prezentate in tabelul din Figura 5. De remarcat ca utilizatorul isi poate defini propriul stil de linie, un model de linie fiind reprezentat pe 16 biti.
|
Cod linie |
|
Stil linie |
Exemplu |
||||
SOLID_LINE |
Linie neintrerupta |
|
||||||
DOTTED_LINE |
Linie punctata |
|
||||||
CENTER_LINE |
Linie intrerupta si cu puncte |
|
||||||
DASHED_LINE |
Linie intrerupta |
|
||||||
USERBIT_LINE |
Stil linie definita utilizator |
|
||||||
Figura 5 - Constantele corespunzatoare stilurilor de linie
Constantele corespunzatoare grosimii liniei sunt prezentate tabelul din Figura 6.
Cod grosime |
|
Grosimea liniei |
NORM_WIDTH |
Normala (1 pixel grosime) |
|
THICK_WIDTH |
Tripla (3 pixeli grosime) |
Figura 6 - Constanatele corespunzatoare grosimii de linie
Se permite scrierea de texte in mod grafic, aliniate in mai multe moduri. Sunt permise urmatoarele moduri de aliniere:
Cod aliniere |
|
Modalitate aliniere |
LEFT_TEXT |
Orizontala stanga |
|
CENTER_TEXT |
Orizontala centrata |
|
RIGHT_TEXT |
Orizontala dreapta |
|
BOTTOM_TEXT |
Verticala jos |
|
CENTER_TEXT |
Verticala centrata |
|
TOP_TEXT |
Verticala sus |
Figura 7 - Constante de aliniere text
Sunt prevazute mai multe moduri de umplere a unei suprafete. Tabelul din Figura 8 prezinta constantele predefinite de umplere a contururilor inchise, cu mentiunea ca se pot declara propriile stiluri de umplere. Stilurile de umplere sunt definite pe 8x8 biti.
Cod hasura |
|
Tipul de hasura |
EMPTY_FILL |
Cu culoarea fondului |
|
SOLID_FILL |
Cu culoarea de desenare, nuanta uniforma |
|
LINE_FILL |
Cu linii orizontale (- - - - - - - - - - - - - - - -) |
|
LTSLASH_FILL |
Cu slash-uri dese subtiri (////////////////////////) |
|
SLASH_FILL |
Cu slash-uri dese groase (////////////////////////) |
|
BKSLASH_FILL |
Cu backslash-uri dese subtiri () |
|
LTBKSLASH_FILL |
Cu backslash-uri dese groase () |
|
HATCH_FILL |
Subtire deschisa |
|
XHATCH_FILL |
Cu deschizatura puternica in cruce |
|
INTERLEAVE_FILL |
Cu linii punctate dese (intretesute) |
|
WIDE_DOT_FILL |
Cu linii punctate rar |
|
CLOSE_DOT_FILL |
Cu puncte intermediare |
|
USER_FILL |
Stil definit de catre utilizator |
Figura 8 - Constante corespunzatoare stilurilor de umplere
bar - deseneaza o bara (dreptunghi fara frontiera) cu culoarea si modul de umplere curent. Sintaxa functiei:
void far bar (int left, int top, int right, int bottom);
Coordonatele se dau in pixeli.
bar3d - deseneaza o bara tridimensionala (paralelipiped dreptunghic) cu contur si hasureaza fata sa cu modelul curent si culoarea curenta. Sintaxa functiei este urmatoarea:
void far bar3d (int left, int top, int right, int bottom, int depth, int topflag);
a)
b)
Figura 9 - Optiuni ale functiei bar3d
daca topflag ≠ 0, atunci se deseneaza si partea de sus, ca in Figura 9 a)
daca topflag = 0, atunci partea de sus nu se mai deseneaza, ca in Figura 9 b)
circle - deseneaza un cerc de raza r data, cu centrul in (x, y) dat. Sintaxa functiei este urmatoarea:
void far circle (int x, int y, int raza);
Cercul se deseneaza cu culoarea curenta, netinandu-se cont de parametrul linestyle ci numai de parametrul thickness.
getc - citeste un caracter din sirul de intrare. Este un MACRO.
#include <stdio.h>
int getc (FILE *stream);
La end of file intoarce EOF.
getch - citeste un caracter de la tastatura fara ecou;
#include <conio.h>
int getch (void);
getchar - citeste un caracter din sirul de intrare. Este un MACRO.
#include <stdio.h>
int getchar (void); echivalent cu getc(stdin) */
getcolor - intoarce culoarea curenta;
int far getcolor (void);
getdrivername - intoarce un pointer spre un sir continand numele driverului curent. Se apeleaza dupa initgraph.
char * far getdrivername (void);
getgraphmode - intoarce modul grafic curent. Se apeleaza numai daca functia initgraph a fost apelata cu succes.
int far getgraphmode (void);
getimage - salveaza in memorie un bitmap al imaginii din regiunea indicata. Regiunea specificata este o zona de pe ecran ce contine imaginea ce va fi salvata intr-o zona tampon din memorie.
void far getimage (int left, int top, int right, int bottom, void far * bitmap);
putimage - afiseaza o iagine bitmap pe ecran. Imaginea salvata cu getimage este pusa la loc pe ecran intr-un dreptunghi cu coltul de sus stanga in (left, top).
void far putimage (int left, int top, void far *bitmap, int op);
Parametrul op reprezinta un indicator de calcul al culorii tinand cont si de ce era desenat pe ecran. Acest parametru poate lua una din urmatoarele valori:
- COPY_PUT pentru scriere directa;
- XOR_PUT pentru SAU EXCLUSIV intre imaginea ecran si imaginea din memorie;
- OR_PUT pentru SAU intre imaginea ecran si imaginea din memorie;
- AND_PUT pentru SI intre imaginea ecran si imaginea din memorie;
- NOT_PUT pentru NEGATIA desenului existent;
getmaxcolor - intoarce valoarea maxima ce se poate da functiei setcolor;
int far getmaxcolor (void);
getmaxx - intoarce coordonata x maxim;
int far getmaxx (void) ;
getmaxy - intoarce coordonata y maxim;
int far getmaxy (void);
getpixel - intoarce culoarea pixelului de coordonate specificate;
unsigned far getpixel (int x, int y);
getx - intoarce coordonata x a pozitiei cursorului grafic;
int far getx (void);
gety - intoarce coordonata y a pozitiei cursorului grafic;
int far gety (void);
gotoxy - pozitioneaza cursor in fereastra text;
#include <conio.h>
void gotoxy (int x, int y);
graphresult - intoarce cod de eroare pentru ultima operatie efectuata. Codurile de eroare intoarse de aceasta functie au fost prezentate in Figura 2.
int far graphresult (void);
line - deseneaza o linie intre 2 puncte (x1, y1), (x2, y2). Desenarea se produce cu culoarea curenta, stilul de linie curent si grosimea de linie curenta. Nu se modifica pozitia cursorului CP (Current Posotion).
void far line (int x1, int y1, int x2, int y2);
lineto - traseaza o linie de la pozitia cursorului (CP) la punctul de coordonate (x, y); In urma executarii acestei instructiuni, CP se muta in punctul de coordonate (x, y).
void far lineto (int x, int y);
moveto - muta pozitia cursorului CP in punctul de coordonate (x, y);
void far moveto (int x, int y);
outtext - afiseaza la (CP) un text in fereastra de vizualizare utilizand fontul curent, dimensiunea si stilul curente. CP este marit cu textwidth (textstring) numai daca sunt indicate atributele LEFT_TEXT pentru horizontal text justification si HORIZ_DIR pentru text_direction. In caz contrar CP ramane neschimbat.
void far outtext (char far *textstring);
outtextxy - afiseaza textul dat ca parametru, incepand cu pozitia specificata;
void far outtextxy (int x, int y, char far *textstring);
perror - afiseaza un mesaj de eroare sistem. Se scrie pe stderr.
#include <<stdio.h>
void perror (const char *s);
Se afiseaza:
"string s": text corespunzator lui errno n
Conventie: s este numele fisierului care contine progrmul. errno se utilizeaza ca un indice in tabelul de mesaje sys_errlist.
putpixel - deseneaza un punct la coordonatele specificate;
void far putpixel (int x, int y, int color);
rectangle - deseneaza un dreptunghi. Desenarea se produce cu stilul, grosimea si culoarea curenta.
void far rectangle (int left, int top, int right, int bottom);
(left,top) reprezinta coordonatele coltului stanga-sus, iar (right,bottom) pe cele ale coltului dreapta-jos.
setcolor - seteaza culoarea de desenare. Parametrul color poate lua valori in intervalul 0.getmaxcolor.
void far setcolor (int color);
setfillstyle - setare model de hasurare (pattern) si culoare de umplere. Stilurile de umplere a contururilor inchise sunt definite in tabelul din Figura 8. In cazul ultimului stil de hasura, nu se utilizeaza valoarea 12, ci se apeleaza functia setfillpattern.
void far setfillstyle (int pattern, int color);
setfillpattern - selecteaza modul de hasurare definit de catre utilizator. Parametrul upattern este pointer la o zona de 8 octeti definind un model de 8x8 biti. Valoarea 0 pentru un bit semnifica faptul ca acel pixel nu va fi desenat, iar valoarea 1 semnifica desenarea pixelului respectiv.
void far setfillpattern (char far *upattern, int color);
setlinestyle - seteaza grosimea si stilul curent pentru linie;
void far setlinestyle (int lynestyle, unsigned upattern, int thickness);
In graphics.h este declarata structura linesettingstype astfel:
struct linesettingstype;
Campul upattern este pe 16 biti si se foloseste numai in conjunctie cu USERBIT_LINE.
Stilurile de linie (line styles) sunt definite in Figura 5, iar thickness sunt prezentate in cadrul Figurii 6.
settextjustify - setare aliniere text pentru functii grafice (in raport cu CP). Valorile implicite pentru alinierea textului sunt LEFT_TEXT pentru orizontala, respectiv TOP_TEXT pentru verticala. Aceasta functie afecteaza textele scrise cu outtext sau outtextxy si nu se foloseste in mod text sau cand se lucreaza cu functii stream.
Modurile de aliniere ale textelor sunt prezentate in Figura 7.
settextstyle - seteaza caracteristicile textului pentru afisare grafica. Aceasta functie afecteaza functiile de scriere in mod grafic outtext si outtextxy.
void far settextstyle (int font, int direction, int charsize);
textcolor - seteaza noua culoare pentru text;
#include <conio.h>
void textcolor (int newcolor);
Utilizarea recursivitatii pentru desenarea de curbe
Un numar important de curbe pot fi desenate prin apeluri recursive ale unor functii care deseneaza elemente ale acestor curbe. Sunt posibile mai multe abordari, dintre care vom exemplifica doua
Curbe (Hilbert, Sierpinski) definite recursiv, care pot fi desenate prin apeluri recursive ale unor functii care deseneaza curbe de ordin inferior. Iesirea din recursivitate se produce in momentul desenarii curbei de ordin 0.
Curbe desenate cu ajutorul elementelor grafice de tip 'turtle graphics'. Aceste primitive grafice descriu miscarile de rotatie si translatie ale unei broaste testoase, care in deplasarea sa lasa urme in planul in care evolueaza.
Curba Hilbert de ordinul 0 este vida. Asa cum este prezentat in Figura 10, o curba Hilbert de ordinul 1, H1 este compusa din patru curbe de ordin 0 unite prin trei segmente de dreapta (doua orizontale si unul vertical). La randul ei, curba Hilbert de ordin 2, H2, este compusa din patru curbe H1 cu diferite orientari, unite prin aceleasi trei segmente de dreapta. Curba de ordinul 3 este compusa din patru curbe H2, etc.
In general curba Hilbert de ordin i Hi+1 se obtine din patru curbe Hi cu dimensiunea o jumatate din cea a curbei Hi+1, rotite in diferite sensuri si legate intre ele cu segmente avand aceeasi dimensiune cu cea a elementelor curbelor Hi.
H3
Figura 10 - Curbele Hilbert de ordin 1, 2, si 3
Figura 11 - Schema de recursivitate
#include <stdio.h>
#include <graphics.h>
const int h0=256;
int TipDriver, ModGrafic;
int Nivel, NivelMax;
int xc, yc;
int x0, y0;
int h;
void A(int);
void B(int);
void C(int);
void D(int);
void A(int N)
} /*A*/
void B(int N)
} /*B*/
void C(int N)
} /*C*/
void D(int N)
} /*D*/
void main()
do while(!kbhit());
closegraph();
Figura 12 - Programul Hilbert.c
In Figura 13 sunt prezentate modificarile aduse programului, pentru ca curbele de diferite ordine din familie sa fie desenate cu culori diferite.
#include <stdio.h>
#include <graphics.h>
const int h0=256;
int TipDriver, ModGrafic;
int Nivel, NivelMax;
int xc, yc;
int x0, y0;
int h;
unsigned char culoare;
void main()
do while(!kbhit());
closegraph();
Figura 13 - Programul Hilbert1.c
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |