Referat Programare

Mai jos puteti citi fragmente din Referat Programare si de asemenea puteti face Download Referat Programare

Citeste fragmente din Referat Programare

MEMORIU EXPLICATIV Unit-ul standard Graph implementează un număr de subprograme axate spre prelucrări grafie. Programele care utilizează subprogramele destinate prelocrărilor grafice trebuie să conţină directiva Uses Graph. Subprogramele Graph pot fi clasificate astfel: Iniţializarea modului grafic; Tratarea erorilor grafice; Definiri de ferestre şi pagini; Subprograme orientate spre puncte: Subprograme orientate spre linii; Subprograme orientate spre arcuri, cercuri şi alte curbe; Subprograme orientate spre poligoane şi haşurări; Subprograme orientate spre salvarea imaginilor; Subprograme orientate spre texte; Defini de culori şi palete. În accepţiunea Unit-ului Graph, colţul stănga sus al ecranului graifc are coordonatele (0, 0). Valorile X sau coloanele cresc spre dreapta. Valoriile Z sau liniile cresc în jos. În Unit-ul Graph este folosită noţiunea de pointer actual (curent) Pointeru actual este similar cursorului din modul text, cu deosebirea că acest pointer nu este vizibil. Monitorul unui calculator afişează o imagine formate din puncte independente, numite pixeli. Fiecare pixel are o culoare şi o luminiozitate propie, independenţa de culoare şi luminiozitatea celorlalţi. Imaginea afişată de monitor este formată dintr-un număr oarecare de linii şi coloane. Cu cât numărul delinii şi coloane este mai mare cu atât calitatea imaginii obţinute este mai ridicată. Spunem că un monitor cu o rezoluţie de 640 / 480 pixeli este mai bun decât un monitor de 320 / 200. Monitorul poate afişa litere, cifre şi semne speciale cât şi portrete, peisaşe, grafice de foncţii, desene, etc. Pentru aceasta nu are nici oimportamţa dacă imaginea afişată reprezintă o poză sau un text. Din punctul de vedere al calculatorului situaţia se prezintă cu totul altfel. Monitorul nu trebuie decât să preia şi să afişeze o imagine deja construită, pe când calculatorul trebuie să gestioneze individual fiecar pixel care compune imaginea. Pentru o imagine formată din 640 / 480 pixeli aceasta înseamnă 307.200 pixeli şi deci un necesar de memorie considerabilă. Din acest motiv primele calculoatoare personale permiteau folosirea exclusivă a modului text. Calculatoarele posedau o compunentă numită placă grafică (sau interfaţă video), componentă în sarcina căreia cade gestionare memoriei video şi controlo monitorului. Aceste plăci grafice au avut o evoluţie notabilă în timp. Unit-ul Graph pune la dispoziţia utilizatorului o bibliotecă grafică cu peste 50 de rutine, ce variază de la subprogramele de nivel înalt, ca SetWiewPort, Circle, Bar3d, Drawpolz, la suprograme orientate pe operaţii de biţi, cum ar fi Getlmage si Putlmage. Sunt suportate diferite tipuri de linii şi modele de haşurare, precum şi mai multe tipuri de caractere, ce pot fi mărite, aliniate şi orientate orizontal sau vertical. Prin intermediul acestor rutine este posibilă construirea unei aplicaţii sofisticate, fiind posibilă programarea independentă de interfaţă grafică folosită de calculatorul pe care se va executa aplicaţia respectivă. Biblioteca grafică a limbajului Turbo Pascal constă din următoarele fişiere: GRAPH. TPU - conţine codul obiectiv al subprogramelor definite în unit-ul graph; *.BGI – aceste fişiere reprezintă drivere specifice pentru mai multe tipuri de interfeţe grafice, pentru rularea programului este necesar numai fişierul .BGI corespunzător plăcii grafice utilizate; *.CHR – aceste fişiere conţin descrierile stilurilor suplimentare de caractere. Unit-ul standard Crt implementează pintre alte programe, trei subprograme destinate generărilor de sunet, clasificate astfel: Suprograme destinate generatorului de sunet. Programele care utilizează aceste subrutine trebuiesă conţină directiva users Crt. În lucrarea de faţă am prezentat toate subprogramele unit-ului Graph, care au fost grupate după domeniul de aplicabilitate. Fiecare capitol este însoţit de aplicaţii practice care ilustrează modul în care sunt definite şi apelate subrutinelor unit-urilor Graph şi Crt. Capitolul 1 INIŢIALIZAREA MODULUI GRAFIC 1.1 Proceduri şi funcţii Detecgraph Procedura DetectGraph testează hardware-ul şi determină driverul şi modul utilizabil. Procedura este definită astfel: Procedure DetectGraph (var gd, gm: integer); Gd- reprezintă codul driver-ului, gm-reprezintă codul modului utilizabil. După revenirea din procdura DetectGraph în modobligatoriu trebuie apelată procedura InitGraph care va încărca efectiv driverul detectat. În cazul în care nu se detectează un driver grafic, variabila gd va avea valoarea -2; în acest caz funcţia GraphResult va returana de asemenea valoarea -2. InitGraph Procedura InitGraph iniţializează sistemul grafic, prin încărcarea driver-ului grafic corespunzător echipamentului, pune sistemulin mod grafic, după care redă controlul programului aplelat. Procedura este definită astfel: Proedure InitGraph (var gd: integer; var gm: integer; cd:string ); Variabilele Gd şi Gm vor conţine valorile returnate de InitGraph, codul corespunzător driver-ului şimodului grafic. Variabila Cd de tip strig în momentul apelului conţine calea spre driverul *.Bgi, unde sunt stocate fişierele corespunzătoare driverelor (de exemplu ‘C:TPBGI’). Dacă variabila Cd un şir vid ”,driverul actual va fi căutat în unitatea şi directorul actual. Variabila Gd poate fi iniţializată constanta detect, care este predefinită în Unit-ul Graph şi în acest caz nu mai este necsară apelarea procedurii DetectGraph. GetDriverName Funcţia GetDriverName returnează numele driver-ului grafic utilizat. Funcţia este definită astfel: Functiun GetDriverName: string; Funcţia poate fi apelată după apelarea InitGraph GetGraphMode Funcţia GetGraphMode returnează codul modului grafic actual şi este definită astfel: Function GetGraphMode: integer; Valoare returnată de fucţia GetGraphMode variază între 0-5, în funcţie de driverul grafic actual. GetModeName Funcţia GetModeName returnează numele modului grafic actual şi este defită astfel: Function GetModeName (Gm: word): sting; GetMaxMode Funcţia GetMaxMode returnează numărul maxim de moduri ce pot fi folosite de driverul actual. Funcţia este definită astfel: Function GetMaxMode: integer; GetMondeRange Procedura GetModeRange determină valoarea cea mai mică şi valoarea cea mai mare a codului modului grafic ce se poate utiliza, corespunzătoare unui driver dat. Procedura este devinită astfel: Procedure GetModeRange(gd: integer; var LoMade, HiMode:integer); Gd este codul corescpunzător driver-ului grafic; Variabilele de tip întreg LoMade şi HiMode vor conţine valoarea minimă şi maximă a modului grafic. Dacă driverul nu este acceptat, valorile returnate sunt –1. GraphDefaults Procedura GraphDefaults poziţionează pointerul curent în colţul stânga sus de coordonate (0, 0) şi variabilele sistemului grafic la valorile implicite. Procedura este definită astfel: Procedure GraphDefaults; GetMaxX şi GetMaxY Funcţia GetMaxX numărul de ordine al coloanei din drepta (rezoluţia X) a driver-ului şi a modului actual. Funcţia este definită astfel. Function GetMaxX:integer; De exemplu în cazul utilizării unui driver VGA în modul VGALo (de rezoluţie 640 / 480) funcţia GetMaxX returnează valoarea 639. Funcţia GetMaxZ numărul de ordine al liniei situată la bază (rezoluţia X) a driver-ului si al modului actual. Funcţia este definită astfel: Function GetMaxZ:integer; De exemplu, în cazul utlizării unui driver VGA în modul VGAHi (de rezoluţie 800 / 600 ) funcţia GetMaxZ returnează valoarea 599. GetX şi GetY GetX returnează abscisa X a cursorului actual, funcţia fiind definită astfel: Function GetX:integer; GetZ returnează ordonata Y a cursorului actual, funcţia fiind definită astfel: Function GetY:integer; Dacă pe ecran sa definit o fereastră, valorile returnate de aceste funcţii definesc coordonata relativă la fereastră. SetGraphBufSize Procedura SetGraphBufSize permite utilizatorului să schimbe dimensiunea tamponului grafic utilizat pentru realizarea haşurării cu modelul actual a unei zone închise; Tamponul iniţial estde de dimensiunea 4K0, care permite haşurarea unui poligon pănâ la 655 de vârfuri. Prin modificarea dimensiunii tamponului este posibilă efectuarea haşurării poligoanelor cu maimulte vârfuri. Procedura este definită astfel: Procedure SetGraphBufSize (dimbuf:word); Dimbuf reprezintă dimensiunea tamponului în octeţi. CloseGraph Procedura CloseGraph termină lucrul cu modul grafic şi va apare ecranul dinaintea iniţializării acestui mod. Procedura este definită astfel: Procedure CloseGraph; RestureCrtMode Ecranul fiind în mod grafic, există posibilitatea restabilirii modului caracter existând înaintea iniţializării modului grafic. Această restabilire se realizează prin procedura RestoreCrtMode care este definită astfel: Procedure CrtMode; SetGraphMode Revenirea din modul caracter în modul grafic este realizată de procedura SetGraphMode, care este definită astfel: Procedure SetGraphMode (mg:integer); Mg defineşte modul grafic al plăciia ctuale. Această procedură realizează şi stergerea ecranului. InstallUserDriver Instalarea unui driver propriu se realizează cu funcţia InstallUserDriver, care este definită astfel: Function InstallUserDriver (name:strig; Autodetect:pointer ):word; InstallUserFont Instalarea unui set de caractere propriu se realizează cu funcţia InstallUserFont care este definită astfel: Function InstallUserFont (FontFileName:string): integer; FontFileName este numele fişierului fizic care conţine setul de caracter. Funcţia returnează codul (de tip întreg) corespunzător setului instalat. RegisterBGIdriver Funcţia RegisterBGIdriver ( pe baza unei valori ce reprezintă un driver ) returnează un cod (de tip intreg), ce reprezintă numărul driver-ului. Funsţia este definită astfel: Function RegisterBGIdriver (driver: pointer): integer; Driver conţine adresa driver-ului. RegisterBGIFont Funcţia RegisterBGIFont returnează un cod care reprezintă numărul setului de caractere fiind definită astfel: Function RegisterBGIFont (font: pointer): integer; Font conţine adresa setului de caractere. 1.2 Aplicaţie Pentru a se lucra în modul grafic este nevoie de iniţializarea sistemului în mod grafic. Programul initmodg relizează iniţializarea sistemului grafic, prin detectarea driver-ului. Funcţia Conv de tip string converteşte un număr întreg într-un şir de caractere şi este folosită pentru afişarea în mod grafic al numerelor. Program initmodg; User crtgraph; Var gd, gm : integer; Lomode, himode: integer; Function conv(l: longint):string; Var s: string; Begin str(l, s); conv:= s; end; Begin {detectarea driver-ului grafic} detectgraph (gd, gm); {punerea sistemului în mod grafic driver-ului găsit} initgraph(gd, dm, ‘c:pgi’); outtextxy (10, 10, ‘ numele driver:’+getdrivername’); outtextxy (10, 30,’ mod grafic: ‘+conv(getgraphmode)); outtextxy (10, 50,’nume mod: ‘+getmodename(gm) ); outtextxy (10, 70, ‘nr. Moduri: ‘+conv(getmaxmode)); getmoderange(gd, lomode, himode); outtextxy(10, 90, ‘val, min.: ‘+conv(lomode)+’val. Max.: ’+cov( himode) ); outtextxy (10, 110, ‘X,Y maxi: ‘+conv(getmaxx)+’,’+conv (getmaxy)); ăsaţi o tastă pentru restabilirea modului carracter.’); readkey; {Restabilirea modului caracter} restorecrtmode; writeln (‘Acum suntem în mod caracter’); writeln(Apăsaţi orice tastă); readkey; {Revenirea ]n modul grafic} setgraphmode (gm); outtextxy(100, 235,’ Acum suntem în mod grafic.’); readkey; closegraph; End. CAPITOLUL 2 TRATAREA ERORILOR GRAFICE 2.1 Proceduri şi funcţii GaphResult Erorile interne ale unit-ului Graph sunt returnate de funcţia GraphResult. Această funcţie retunează un cod de eroare care raportează starea ultimei operaţii grafice executate. Codul returnat este 0 în cazul unei operaţii grafice reuşite şi o valoare negativeă când ultima operaţie s-a terminat cu eşec. Funcţia este definită astrfel: Function GraphResult: integer; Codurile predefineti returnate de funcţie sunt următoarel: GrOK=0; -operaţie reuşită GrNolnitGraph=-1; -grafică BGI neinstalată cu InitGraph GrNOtDetected=-2; -grafică hardware nedetectat GrNotFound=-3; -fişier driver BGI negăsită GrInvalidDriver=-4; -fişier driver invalid GrNoLoadMen=-5; -emorie insuficientă pentru încărcarea driverului GrNoScanMen=-6; -memorie insuficientă pentru manevre GrNoFloodMen=-7; -memorie insuficientă pentru haşurare GrFontNoFound=-8; -fişier cu careactere speciale negăsite GrNoFontMen=-9; -memorie insuficientă pentru încărcarea caracter GrInvalidMode=-10; -mod grafic invalidpentru driverul selectat GrError=-11; -eroare genetică de grafică GrIOError=-12; -eroare de intrare / ieşire grafică GrInvalidFont=-13; -fişier de caractere invalid GrInvalidFontNum=-14; -Număr invalid de set de caractere Valoarea returnată de funcţia de GraphResult trebuie salvată într-o variabilă temporară în vederea testării ulterioare întru-cât apel valoarea va fi reiniţializată la 0. GraphErrorMsg Funţia GraphErrorMsg returnează textul mesajului de eroare corespunzător codului de eroare obţinut de GraphRezult. Funcţia este definită: Function GraphErrorMsg (cod: integer): string; Cod este codul de eroare. 2.2. Aplicaţie Program erorigr; uses Graphcrt; var CodEror, gd, gm:integer; begin gd:=detect; initGraph (Dd, Gm, ‘ ‘); codEror:=GraphResult; {Citirea rezultatului} if CodEror<>grOk the begin writeln (‘Eroare:’, GraphErorMsg(CodEroare) ); writeln(‘Se părăseşte programul’); hait (1); end; closeGraph; End. CAPITOLUL 3 DEFINIRI DE FERESTRE ŞI PAGINI Anumite echipamente permit utilizarea facilităţii de paginare, foarte utile la aplicaţii de gen animeţii, existând posibilitatea de a modufica paginile vizibile precum şi cele active. 3.1. Proceduri şi funcţii SetVizualPage Procedura SetVizualPage fixează pagina vizuală. Procedura este definită astefel: Procedure SetVizualPage (nrpag: word); Nrpag defineşte numărul paginii vizuale. SetActivePage Procedura SetActivePage fixează pagina activată pentru echipamentul grafic de ieşire. Procedura este defintă astfel: Procedure SetActivePage (Nrpag: word ); NrPag defineşte numărul paginii active. SetViewPort Prin fereastră se înţelege o zonă dreptunghiulară a ecranului, care în particular poate să conincidă cu întregul ecran. Procedura ViewPort are ca efect ca toate comenzile de desenare / scriere să opereze în regiunea rectangulară definită. Toate înscrierile pe ecran se referă la ferestra actuală, până la o nouă schimbare a ferestrei. Ptrocedura este definită astfel: Procedure SetViewPort (x1, x2, y1, y2: integer; Clip: boolean); X1, Y1 sunt coordonatele absolute stânga sus ale ferestrei active; X2, Y2 sunt coordonatele absolute dreapta jos ale ferestrei. Variabila boolenă clip defineşte dacă liniile din afara ferestri sunt sau nu vizibile. Constantele predefinite pentru stabilirea valorii variabilei Clip sunt utmătoarele: Const ClipOn:=True; -tăierea este activă; exterior invizibilă; ClipOff:=false; -tăierea este pasivă; exterior vizibil; GetViewSetting Procedura GetViewSetting permite ca utilizatorul să obţină informaţii referitoare la fereastra actuală şi felul tăierii. Procedura este definită astfel. Procedure SetViewSetting (var infofer: viewporttype); Variabila infofer este de tip predefinit ViewPortType va conţine informaţiile referitoare la fereastră. Tipul ViewPortType este definit astfel: Type WiewPortType:= record; X1, Y1, X2, Y2: Integer; Clip:boolean; End; ClearDevice Procedura ClearDevice şterge ecranul grafic actual şi poziţionează pointe-ul actual în poziţia (0, 0), culoarea este determintă de procedura SetBkColor. Procedura este definită astfel: Procedure ClearDevice; ClearViewPort Procedura ClearViewPort şterge fereastra grafică actuală. Culoarea fere estrei va fi culoarea de fond, este apelată procedura Bar pentru trasarea unu dreptunghi corespunzător ferestrei şi pointer-ul actual este mutat în colţul stânga sus al ferestrei; de coordonate relative (0, 0). Procedura este definită astfel: Procedure ClearViewPort; 3.2. Aplicaţia Programul ferpag demosntrează lucrul cu pagini şi ferestre grafice. Program ferpag; uses Graphcrt; var gd, gm, i: integer; begin gd:detect; initgraph(gd, gm, ‘c:pgi’); if graphresult <> grOk then halt (1); if gd = vga thne begin i:-0l repeat setactivepage (0); setcolor(i); rectangle (20, 40, 100, 200); setvisualpage(0)l i:=i+1; if i=16 then i:=0 ; until Keypressend; end else outText(‚paginarea nu este suportata.’); cleardevice; setbkcolor(3); rectangle(20, 20, 300-20, 200-20); setViewPort(21, 21, 300-21, 200-20, clipOn); repeat OutTextXY(0, 0, ‚<1> sterge fereastra actuala:’); OutTextXY(10, 10, ‚<2> pentru iesire,:’); readkey; if readkey=’1’ then ClearViewPort; until ReadKey=’2’; closeGraph; End. CAPITOLUL 4 SUPROGRAME ORIENTATE SPRE PUNCTE 4.1. Proceduri şi funcţii PutPixel Procedura PutPixel produce un punct de culoarea dată. Procedura este definită astfel: Procedure putpixel (x, y: integer; cul: word); X şi y definesc coordonatele punctului. Cul defineşte culoarea punctului, având valori între 0 şi valoarea returnată de funcţia GetMaxcolor ( numărul maxim de culori utilizate). Pentru definirea culorii pot fi folosite constante de culoare predefinite. GetPixel Funcţia GetPixel determină culoarea unuipunct de coordonate date. Funcţia este defintă astfel: Function GetPixel (x, z: integer): word; X şi y sunt coordonatele punctului, iar valoarea returnată de funcţie reprezintă codul culorii având valorile între 0 şi valoaraea returnată de funcţia GetMaxColor. 4.2. Aplicaţie Programul Pixel determină culoarea unui punct dat de coordonate (x, y) şiafişarea acestuia în cazul în care culoarea punctuluieste 0 atunci se va afişa un punct de culoare GetMaxcolor. Program pixel; users Crt,graph; var gd, gm:integer; culoarepunct:woard; begin Gd:=detect; initgraph (gd, gm, ‘c:pgi’); if graphresult <> grOk then halt(1); culoareapunct:=getpixel (10, 10); if culoarepuncr:=0 thne putpixel (10, 10, getmaxcolor); readln; cleardevice; repet putpixel (random (640), random (480), random (16)); until keypressed; closegraph; End. CAPITOLUL 5 SUBPROGRAME ORIETNTATE SPRE LINII roceduri şi funcţii Line Procedura Line desenează puncte de coordonate (x1, y2) şi (x2, y2). Culoarea liniei poate fi stabilită cu procedura SetColor, stilul şi grosimea ei pot fi stabilite cu procedura SetLineStyle. Procedura este definită astfel: Procedure Line (x1, y1, x2, y2:integer); X1, Y1 sunt coordonatele de început ale liniei. X2, Y2 sunt coordonate de sfârşit ale liiei. LineTo Procedura LineTo desenează o linie de la poziţia pointer-ului actual la un punct dat de coordonate (x, y). Culoarea liniei se stabilişte cu procedura SetColor, stilul, modul şi grusimea se stabilesc cu procedura SetLinesStyle. Procedura este stabilită astfel: Procedure LineTo (x, y: integer); X şi Y sunt coordonate de sfârşit ale liniei. LineRel Procedura LineRel desenează olinie de la poziţia pointer-ului actual până la un punctdat definit de destinaţie DX şi DY. Culoarealiniei se stabileşte cu procedura SetColor, stilul şi grosimea se stabilesc cu procedura SetLineStyle. Procedura este definită astfel: Procedure LineRel (DX, DY: integer); DX şi DY reprezintă distanţa în sensul axei x, respectiv y. MoveTo Procedura MoveTo mută pointer-ul actual de coordonate x, y. Procedura este definită astfel: Procedure MoveTo (x, y:integer); MoveRel Procedura MoveRel mută pointer-ul actual din poziţia curentă la un punct definit de distanţele DX, DY. Procedura este definită astfel. Procedure MoveRel (DX, DY:integer); DX şi DY reprezintă distanţa în sensul axei X, respenctiv Y. SetLineStzle Proceura SetLineStyle stabileşte stilul şi grosimea liniei. Procedura este stabilită astfel: Procedure SetLineStyle (Stil, Model, grosime:word); Pentru desenarea unei linii se pot folosi următoarele constante predefinite pentru stabilirea stilului: Const Solidln=0; -liniecontinuă; DottedLn=1; -linie întreruptă de forma -----; CenterLn=2; -Linie întreruptă de forma -.-.-.; DeshedLn=3; -Linie întreruptă de forma - - - -; UserbitLn=4; -Stil definit de utilizator. Dacă stilul variază între SolidLn şi DashedLn, valoarea variabilei model trebuie să fie 0. Dacă stilul este poziţionat la UserBitLn, stilul liniei este definit de utilizator, şi în acest caz variabila model este un număr hexazecimal pe 16 biţi care descrie modul de prezentare a liniei (1= semn luminos,0=fără semn ). Grosimea liniei poate fi stabilită cu următoarele constante predefinite. Const NormWidth=1; -grosme normală; ThickWidth=3; -Linie groasă. GetLineSettings Procedura GetLineSetiings returnează stilul şi grosimea liniei utilizate şi este definită astfel: Procedure GetLinSettings (var infol:lineSetiingType); InfoLin conţine informaţii referitoare la linie, având tipul predefinit LineSettingType; Type LineSettingsType=record LineStyle:word: {stil} Pattern:word: {model} Thickness:word: {grosime} End; SetWritemode Procedura SetWritemode stabileşte modul de scriere pe ecran a unei linii. Procedura este definită astfel: Procedure SetWritemode (modscriere:integer); Modscriere este o variablă de tip întreg şi poate lua următoarele valori predefinite. Const CopyPut=0; XorPut=1; Valoarea CopyPut înseamnă folosirea instrucţiunii MOV a asamblorului. Valoarea XOrPUT înseamnă folosirea instrucţiunii XOR între punctele liniilor şi punctele actuale din ecran. Astfel două instrucţiuni consecutive vor şterge linia, rămânând imaginea anterioară pe ecran. 5.2. Aplicaţie Programul linii arată cum se pot apela şi utiliza procedurile de trasare a liniilor, cum se pot cere date despre un anumit stil de linie, cum se pot defini stilul utilizator. Program linii; uses crt, graph; var gd, gm, I :integer; stil:linesettingstype; begin i:=0; gd:-=detect; initgraph(gd, gm,’c:pgi’); if graphresult <> grOk then Halt (1); randomize; setlinestyle(dottedln, 0, thickwidth); getlinesettings(stil); repeat line (random(gatmaxx), random(getmaxy); random(getmaxx), random(gatmaxy); moveTo(100, 200); lineRel(100, 100); lineTo(200, 200); cleardevice; setLineStyle(userbitln, $45, normwidth ); rectangle(100, 300, 200, 400); i:=i+1; until i=100; repeat line (random (getmaxx), random(getmaxy); random ((getmaxx), random(getmaxy)); moveTo(100, 200); linerel(100,100); lineTo(200, 200); cleardevice; setlinestyle(Stil, LineStyle,Stil.Pattern, Stil.Thickness); rectangle (100, 300, 200, 400); i:=i+1; until i:=1; readkey; closeGraph; End. CAPITOLUL 6 ŞI ALTE CURBE 6.1. Proceduri şi funcţii Circle Procedura Circle desenează un cerc de centru şi rază dată; culoarea de desenare este stabilită de procedura SetClolor. Procedura este stabilită astfel. Procedure Circle (x, y:integer ; raza:word); X şi Y definesc coordonatele cercului Raza defineşte lungimea razei Arc Procedura Arc desenează un arc de cerc şi este definită astfel: Procedure Arc (x, y:integer;Ustrat, Ufinal:word); Coordonatele cercului sunt definite de x şi y, raza arcului de cerc este definită de r, iar Ustrat şi Ufinal reprezintă unghiul de început şi de sfârşit al arcului, valorile lor sunt date în grade, în sensul trigonometric. Deci, dacă Ustrat este 0, iar Ufinal este 360, atunci este de desenat un cerc complet. Elipse : Z $ h Ü h h h ᘌ둨尣㔀脈࡜媁se desenează un arc de elipsă şi este definită astfel: Procedure elipse (x,y:integer;Ustrat, ufinal:word;Xraza,Yraza:word); X şi Y reprezintă coordonatele cetrului. Ustrat şi Ufinal reprezintă unghiul de sfârşit al arcului de elipsă, în grade, în sens trigonometric. Valorile Xraza şi Yraza definesc raza orizontală respectiv axa verticală a elipsei. GeatArcCoords Procedura GteArcCords returnează centrul şi coordonatele de început şi de sfrărşit ale ultimului arc desenat. Procedura este definită astfel: Procedure GetArcCoords (var coordonare:ArcCoordsType); Coordarc detip predefinit ArcCoordsTzpe va conţine coordonatele centrului crcului sau elipsei şi cordonatele punctului de început şi de sfărşit al arcului . Tipulpredefinit ArcCordsTzpe este: Type ArcCoordsType=record x,y: integer; {centru} Xstart, Ystart:integer {inceputul arcului} Xend,Yend:ineteger {sfarsitu arcului} End; PieSlice Procedure PieSlince deseneză şi haşurează un sector de cerc şi este definită astfel: Procedure PieSlice (x, y:integer; Ustart, Ufinal, r:word); X şi y Ufinal reprezintă unghiul de început şi de sfârşit al sectorului, iar r este raza. Culoarea cercului este culoarea actuală, iar modelul de haşurare şi culoare de haşurare este definită este definită de procedurile SetFillStyle sau SetFillPattern. Sector Procedura Sector desenează şi haşurează un sector de elipsă şi este definită astfel: Procedure Sector (x,y:integer; Ustar, Ufinal, Xraza, Yraza:word); X şi y reprezintă coordonatele centrului; Ustart, Ufinal reprezintă unghiul de început şi de sfârşitul al sectorului de elipsă în grade, în sens trigonometric. Variabilele Xraza şi Yraza definesc axa orizontală respectiv axa verticală a elipsei. Culoarea este culoarea actuală, iar modelul de haşurare este definit de procedurile SetFillStyle şi SetFillPattern. FillEllipse Procedura FillEllipse desenează şi haşurează o elipsă şi este definită astfel: Procedure FillEllipse (x, y:integer;Xraza;Yraza:word); x,y reprezintă coordonatele centrului; Xraza şi Yraza reprezintă axa orizontală respectiv verticală a elipsei. Culoarea elipsei este culoarea actuală, iar modelul şi culoarea de haşurare este definită de procedurile SetFillStyl sau SetFillPattern. GetAspectRatio Procedura GetAspectRatio determină dimensiunile maximale ale ecranului grafic. Procedura se determină astfel: Procedure GetAspectRatio (var xasp; vasp:word); Xasp, yasp reprezintă valoarea maximă a abscisei şi a ordonatei, adică rezoluţia efectivă a ecranului grafic. Din aceste valori se poate calcula raportul dimensional xasp; yasp. Acest raport este utilizabil la „rotunjiri” necesare la trasarea cercurilor, sectoarelor şi arcelor de cerc. SetAspectRetio Procedura SetAspectRatio defineşte raportul dimensional implicit. Procedura se defineşte astfel: Procedure SetAspectRatio (xasp, yasp:word); xasp, yasp reprezintă valorile amxime pentru abscisă şi ordonată. Cu aceste valori definite, un cerc torsionat poate fi rectificat pe baza raportului dimensional definti. 6.2. Aplicaţie Programul curbe realizează trasarea de cercuri, arcuri, elipse, sectoare de cerc, sectoare de elipse. Program curbe; Uses crt, graph; Var Raza, gd, dm:integer; ch: char; Xasp, yasp:word; Begin gd:=detect; initgraph (gd, gm,’c:pgi’); if graphresult<>grOk then halt (1); repeat outTextXY(11. 0. ’apasati’); outTextXY(10. 10. ’1-cerc 2-arc 3-elipsa 4-sector de cerc 5-sector elipsa 6-hasurarea elipsei); OuttextXY(10. 470. ‘0-iesire’); ch:=readkey; case ch of ‘1’ :begin for raza:=1 to 5 do circle (100.100. raza*10); end; ‘2’ begin for raza:=1 to 5 do arc(200.200.0.90. raza* 10); end; ‘3’ begin elipse(300.100.0.360.30.50); end; ‘4’:begin pieslice(400.100.0.270.40); end; ‘5’:begin sector(getmaxx div 2. getmay div 2.0.45.50.50); getaspectratio(xasp, yasp); {sector circular} sector(getmaxx div 2. getmaxy div 2 180.135.50.50*longint(xasp) div yasp); {punc centrat} end; ‘6’:begin fillellipse(100.350.50.50); getaspectration(xasp,yasp); {elipsa circulara} fillellipse(50.50.30.30); end; end; until ch=’0’; closegraph; end. Capitolul 7 SUBPROGRAME ORIENTATE SPRE POLIGOANE ŞI HAŞURĂRI 7.1 Proceduri şi funcţii Rectangle Procedura rectangle desenează un dreptunghi şi este definită astfelŞ Procedure rectangle (x1, y1, x2, y2:integer); X1 şi Y1 reprezintă coordonatele colţului stânga sus ale dreptunghiului. X2 şi Y2 reprezintă coordonatele colţului dreapta jos ale dreptunghiului. Desenarea se face cu stilul şi culoarea actuală. Bar Procedura Bar desenează un dreptunghi şi îl haşurează cumodelul şi culoarea satabilite cu procedura SetFillPattern sau SetFillStzle. Procedura este definită astfel: Procedure Bar(x1,y1,x2,y1:integer); X1 şi Y1 reprezintă coordonatele colţului stânga sus ale dreptunghiului. X2 şi Y2 reprezintă coordonatele colţului dreapta jos ale dreptunghiului. Bar3d Procedura Bar3d desenează un paraşeşipiped dreptunghic şi îl haşurează cu modelul şi culoarea actuală. Procedura este definită astfel: Procedura Bar3d (x1,y1,x2,y2:integer; ad:word; top:boolean); X1 şi Y1 reprezintă coordonatele colţului stânga sus al corpului . X2 şi Y2 reprezintă coordonatele colţului dreapta jos al corpului. DrawPolv Procedura DrawPolv desenează olinie poligonală şi este definită astfel: Procedure DrawPolv (nrpct:word; var puncte ); Nrpct reprezintă numărul vârfurilor, iar variabila puncte este untabel ale carui elemente sunt de tip predefinit PoinzType care reprezintă coordonatele (x,y) ale vârfurilor. Tipul PointType este definit astfel: Type PoinType= record x,y:integer; End; În cazul în care se doreşte obţinerea unui poligon închis de n vârfuri, variabila puncte trebuie să fie un tablou de n+1 elemente astfel încât coordonatele primului punct şi coordonatele ultimului punct să coincidă. FillPolv Procedura FillPolv desenează şi haşurează un poligon şi este defintă astfel: Procedure FillPolv(nrpct:word; var puncte); Nrpct reprezintă numărul vârfurilor, iar variabila puncte este un tabel ale cărui elemente sunt de tip predefinit Pointtypeb, care reprezintăcooronatele (x,y) ale vârfurilor. Conturulpoligonului este formt din linii ale căror stil este determinat de procedura SetFillPattern sau SetFillStyl. FloodFill Procedura FloodFill haşurează cu modelul actual o zonă închisă şi este definită astfel: Procedure FloodFill(x,y:integer;c:word); x,y reprezintă coordonatele unui punct interior zonei închise, iar c reprezintă culoarea de haşurare, având valori de la 0 până la valoarea returnată de funcţia GetmaxColor. SetFillStyle Procedura SetFillStyle fixează modelul de haşurare utilizat şi culoarea de haşurare. Procedura este definită astfel: Procedure SetFillStyle(m:word;c:word); m defineşte modul de haşurare, iar c defineşte culoarea de haşurare. Pentru definirea modului de haşurare se pot utiliza următoarele constante predefinite: Const EmptyFill=0; SolidFill=1; Linefill=2; LtSlashFill=3; SlashSill=4; BkSlashFill=5; LtBkSlashFill=6; HatchFill=7; XhatchFill=8; InterLeaveFill=9; WideDotFill=10; CloseDotFill=11; UserFill=12; Haşurarea poate fi realizată pentru poligon, dreptunghi, paralelipiped, sector de cerc, elipsa. GetFillSettings Procedura GetFillSettings permite utilizatorului să obţină informaţii despre modelul actual de haşurare şi de culoare, informaţii care au fost fixate anterior cu procedura SerFillStyle sau SetFillPattern. Procedura este definită astfel: Procedure GetFillSetting (var infohas:FillSettingsTyipe); Infohas este de tip predefinit FillSettingstype şi va conţine informaţii referitoare la haşurare. Tipul FillSettingsType este defint astfel: Type FillSettingstype=record Pattern:word; Color:word; End; SetFillPatten Procedura SetFillPattern oferă utilizatorului posibilitatea de a defini un model propriu de haşurare. Procedura este definită astfel: Procedure SetFillPattern (m:FillPatternType; c:word); M este de tip predefinit FillPatternType şi descrie modelul de haşurare folosind un tabel de optocteţi, adică un tabel bidimensional de 8X8 biţi. C defineşte culoarea de haşurare.Tipul SetFillPatern este definit astfel: Type FillPatternType=array[1..8] of byte; GetFillPattern Procedura GetFillPattern permite obţinerea informaţiilor despre ultimul model de haşurare stabilit printr-un apel de procedură SetFillpattern. Procedura este definită astfel: Procedure getfillPatter (var m:FillPatternType); M este de tip predefinit FillPatterntype şi va conţine modelul utilizatorului. 7.2 Aplicaţie program poligon; uses crt,graph; const triunghi: array [1..4] of pointtype=((X:50;Y:100), (X:100; Y:100), (X:150;Y:150), (X:50;Y:100)); var Gd,gm,I,width:integer; Ch:char; Fillinfo: FillSettingsType; Begin Gd:=detect; Initgraph(gb,gm,’c:pgi’); If graphresult<>grOk then halt(1); Repeat OutTextXY(10.0.’apasati’); OutTextXY (10.10.’1-Bar 2-Bar3D 3-Triunghi 4-HasurareTriunghi 5-reptunghi 6-HasurareDreptunghi’); OutText 10.470.’0-iesire’); Ch:=readkey; Case ch of ‘1’:begin for I:=1 to 5 do bar(I*10,I*10,succ(I)*10,200); end; ‘2’ begin bar3d(500,300,650,360,10,TopOn); bar3d(500,360,600,380,10,TopOff); end; ‘3’:begin drawpoly(SizeOff(triunghi)div SizeOff(PointType), triunghi); end; ‘4’:begin Fillpoly(Sizeoff(triunghi) div sizeoff(pointtype), triunghi); End; ‘5’:begin rectangle(100.100.200.200); end; ‘6’:begin GetFillSettings(fillInfo); Bar(0,0,50,50); Setfillstyle(xhatchfill, GetMaxColor); Bar(50, 0, 100, 50); With FillInfo do SetFillStyle (Pattern, Color); Bar(100.0.150.50); End; End; Until ch=’0’; Readln; CloseGraph; End. Capitolul 8 SUBPROGRAME ORIETNTATE SPRE SALVAREA IMAGINILOR 8.1 Proceduri şi funcţii ImageSize Functia ImageSize returnează numărul de octeţi necesari salvării unei imagini. Funcţia se defineşte astfel: Function ImageSize(x1,y1,x2,y1:integer):word; X1,Y1 reprezintă coordonatele colţului stânga sus ale dreptunghiului; X2,Y2 reprezintă coordonatele colţului dreapta jos ale dreptunghiului. GetImage Procedura GetImage salvează o imagine într-o zonă de memorie definită de utilizator. Procedura se defineşte astfel: Procedure GetImage (x1,y1,x2,y2:integer;varBitMap); X1,y1 reprezintă coordonatelor colţului stânga sus ale dreptului, iar x2,y2 reprezintă coordonatele colţului dreapta jos ale dreptunghilui ce se salvează. Se pot salva zone mai mici de 64K octeţi. Variabila BitMap referăzona în care se face salvarea imaginii. Primele două cuvinte ale zonei conţin lăţimea şi lungimea zonei dreptunghiuluilare, de aceea dimensiunea obţinută cu funcţia GetImage. PutImage Procedura PutImage suprapune regiunea salvată peste ecran. Procedura se defineşte astfel: Procedure PutImage(x,y:integer;var:BitMap;BitBlt:word); X,y reprezintă colţul stânga sus al regiunii dreptunghiular de pe ecran unde va fi restabilită imaginea. Variabila Bitmap conţine lăţimea, lungimea regiunii şi harta în biţi a imaginii. Variabila Bitblt descrie operaţia binară între punctele regiunii ce se suprapune pe ecran şi punctele ecranului. Această variabilă se defineşte astfel: Const NormalPut=0; MOV –mutare simplă CopyPut= 1; MOV – mutare simplă XORPut=2; XOR –sau exclusiv OrPut=3; OR - disjuncţie AndPut=4; AND - conjuncţie NotPut=5; Not- negaţie 8.2 Aplicaţie Programul image realizează culorarea ecranului cu albastru, decupează o porţiune din aceasta şi o salvează în memorie după ce sa rezervat spaţiu de memorie necesar salvării, după care este restabilită acea porţiune (imagine). Uses Graph, Crt; Var gd, gm:integer; P:pointer; Size:word; Begin Gd:=detect; InitGraph (Gd, Gm, ’c:pgi’); If graphresult <> grOK then Halt(1); SetFillStyle (1.1); Bar(0.0.GetMaxX.GetMaxY); Size :=ImageSize (1.20.30.40); GetMen(p,Size); GetImage(10.20.30.40.p^); Readln; ClearDevice; PutImage(100.100.p^,xorput); Readln; CloseGraph; end. Capitolul 9 SUBROGRAME ORIENTATE SPRE TEXTE 9.1 Proceduri şi funcţii Set text Style Procedura SetTextStyle defineşte foma caracterelor textului ce se vor utiliza la scrierea textelor, direcţia de scriere precum si dimensiunea caracterelor. Procedura este definită astfel: Procedure SetTextStyle(font:word;dir:word;dimcar:word); Font defineşte numarul seturilor de caractere, dir stabileşte direcţia de scriere, iar dimcar dimensiunea caracterelor. Variabila font poate să ia următoarele valori: Const DefaultFont=0 ; TriplexFont=1; SmallFont=2; SansserifFont=3; GothicFont=4; Caracterele implicite sunt desemnate de constanta Default-Font. Celelate tipuri de caractere sunt depuse in fişiere de tip *.CHR. În cazul în care aceste fişiere nu se găsesc vor fi utilizate caracterele implicite chiar dacă variabila font arată o alta valoare. Variabila dir de tip word stabileşte direcţia scrieri şi poate să ia urmatoarele valori: Const HorizDir=0; VertDir=1; HorizDir stabileşte scrierea de stanga la dreapta; VertDir stabileşte scrierea de jos in sus. Valoare implicită este HorizDir. Variabila DimCar de tip word fixează dimensiunea caracterelor: valoarea n=1 inseamnă marimea normală (implicita) a caracterelor,valoarea n>1 inseamnă mărirea de n ori a dimensiunii implicite. Această variabilă poate să ia şi valoarea predefinită UserCharSize, caz in care dimensiunea implicită poate fi modoficată de procedura SetUserCharSize. SetUserCharSize Procedura SetUserCharSize este definită astfel: ProcedureSetUserCharSize(multx,divx,multy,divy:word); Lăţimea normală este inmulţită cu valoarea raportului Multx:Divy,iar înălţimea noramală este îmulţită cu valoarea raportului MultyDivy. Prin fixarea acestore parametri utilizatorul poate sa definească inălţimea şi laţimea proprie a caracterelor speciale. SetTextJustify Procedura SetTextJustify fixează valorile de aliniere ale textului. Aceste valori sunt utilizate de procedurile de editare propriuzise. Procedura este definită astfel: Procedure SetTextJustify(oriz,vert:word); Oriz stabileşte alinierea orizontală; Vert alinierea verticală. Penbtru stabilirea alinieri pot fi utilizate urmaătoarele constante predefinite: Const {alinierea orizontală} LeftText=0; {stânga} CenterText=1; {centru} RighText=2; {dreapta} {alinierea verticală} BottmText=0; {jos} CenterText=1; {centru} TopText=2; {sus} GetTextSettings Procedura GetTextSetting retunează numărul setului de caractere, direcţia de scriere dimensiunea caracterelor valoarea alinieri verticale şi orizontale utilizate actual. Procedura este definită astfel: Proceduere GetTextSettings(var infotext:TextSetingsType); Infotext este de tip predefinit TextSetingsType şi va conţine informaţii referitoare la text. Tipul este definit astfel: Type TextSettingsType=record Font:word; {număr set de caractere} Direction:word; {direcţia scrieri} Charsize:word; {dimensiunea} Horiz:word; {alinierea orizontală} Vert:word; {alinierea verticală} end; TextHeight Funcţia TextHeight returneaza înălţomea unui lanţ de caractere în puncte imagine (pixeli). Funcţia este definită astfel: Function TextHeight (lc:string):word; Lc reprezintă lanţul de caractere. TextWidth Funcţia TextWidth returnează laţimea unui lanţ de caractere in pixeli. Funcţia este definită astfel: Funcţion Textwidht (lc:string):word; Lc reprezintă lanţul de caractere. OutText Procedura OutText trimite un şir de caractere la dispozitivul standard de ieşire cordonatele punctului de inceput al textului fiind determinată de poziţia pointerului actual. Textul scris va apare conform informaţiilor stabilite de procedurile SetTextStyle,SetUserCharSize şi SetTextJustify. Procedura este definită astfel: Procedure OutText (lc:string); Lc conţine textul ce se va scrie. OutTextxy Procedura OutTextxy trimite un şir de caractere la dispozitivul standard de ieşire, coordonatele punctului de început al textului sunt determinate de coordonatele (x,y) ale ecreanului (şi nu de poziţia pointer-ului actual). Textul scris va apare conform informaţiilor stabilite de procedurile SetTextStyle, SetUserCharSize şi SetTextJustify. Procedura este definită astfel: Procedure OutTextxy (x,y:integer;lc:string); Lc conţine textul ce se va scrie . 9.2Aplicaţie Programul texte arată modul de folosire a procedurilor şi funţiilor de utilizare a caracterelor în modul grafic, setările acestora, mărimea de scriere a caracterelor şi ditecţia de scriere. Program texte; Uses CRT,GRAPH; Var gd,gm:integer; Y,Size,linie:integer; Begin GD:=detect; InitGraph(gd,gm,`c:pgi`); If GraphResult<>grOK then Halt(1); Y:=0; For size:=1 to 4do Begin SetTextStyle(DefaultFont,HorizDir,Size); OutTextXY(0,y,`size= `+Chr(Size+48)); Inc(YtextHeight(`H`)+1); End SetTextStyle(DefaultFont,HorizDir,1); SetTextJustify(CenterText, CenterText); OutTextXY(Succ(GetMaxX)div2,Succ(GetMaxY)div2,`Textul centrat in centrul ecranului`); ReadKey; ClearDevice; SetTextJustify(CenterText,CenterText); OutTextXY(Succ(GetMaxX)div2,GetMaxY-10,`textul centrat in partea de jos a ecranului`); ReadKey; ClearDevice SetTextJustify(CenterText, CenterText); OutTextXY(Succ(GetMaxX)div2,10,`textul centrat in partea de jos a ecranului`); Readln; CloseGraph; End. Capitolul 10 Definiri de culori şi palete Informaţiile referitoare la culori sunt coţinute într-un tabel, numit paletăŞstructura paletei este descrisă te tipul predefinit PaletteType astfel: Const MaxColors=15; Type PaletteType=record Size:byte; Colors:array[0..MaxColors] of shortint; End; Câmpul calificat cu size conţinenumărul culori paletei, iar cămpurile calificate de colors contin codurile corespunzătoare diferitelor culori existente. Paleta implicită este iniţializată de procedura InitGraph; numărul elementelor paletei este în funţie de placa grafică utilizată. 10.1. Proceduri şi funcţii GetDefaultPalette Procedura GetDefaultPalette încarcă intr-o variabilă (de tip predefinit PaletteType) paleta implicită; acestă paletă implicită a fost iniţializată de procedura InitGraph. Procedura este definită astfel : Procedure GetDefaultPalette(var pal:PaletteType); Pal desemnează variabila în care este încarcată paleta implicită. Câmpul pal.size conţine numărul culorilor ce pot fi utilizate. Câmpul pal.colors(I) conţine codul crespunzător culori I. SetColor Procedura SetColor permite stabilirea culori scrisullui. Procedura este definită astfel: Procedure SetColor(colnum:word); Colnum este indexul din paleta al culori selectate. GetBkColor Funcţia GetBkColor returnează valoarea utilizată la ultimul apel al proceduri SetColor. Funcţia este definită astfel: Function GetBkColor:word; GetColor Funcţia GetColor returnează valoarea utilizată la ultimul apel al procedurii SetColor. Funcţia este definită astfel: Function GetColor:word; 10.2. Aplicaţie Programul palete realizează lucrul cu palete de culori setările paletelor şi schimbarea culorilor unui text şi a fundalului. Program palete; Usese Crt,Graph; Var gd,gm,i:integer; Color:word; MyPal,OldPal,Palette:PaletteType; Begin Randomize; Gd:=Detect; InitGraph(gd,gm,`c:pgi`); If GraphResult<0 then Halt(1); GetDefaultPalette(OldPal); MyPal:=OldPal; {afiseaza ceva} for i:=0 to MyPal.Size-1 do begin SetColor(i); OutTextXY(10,i*10`******Se schimba culorile******`); OutTextXY(400,i*10`***Turbo Pascal***`); End; Repeat {Schimba paleta de culori pana se apasa o tasta} With MyPal do Colors[Random(Size)]:=Random(Size+1); SetAllPalette(MyPal); Until KeyPressed; SetAllPalette (OldPal); {restaurarea paletei originale} ClearDevice; OutTextXY(10,10,`apsa…`): Capitolul 11 SUBPROGRAME DESTINATE GENERATORULUI DE SUNET 11.1.PROCEDURI ŞI FUNCŢII Sound Procedura Sound asigură pornirea generatorului de sunet cu o fregvenţă dată. Procedura este definită astfel: Procedure Sound (Hz:word); Hz defineşte frecvenţa sunetului în Hertz. Difuzorul va suna până la apelul proceduri NoSound. NoSound Procedura NoSound decupleza generatorul de sunet. Procedura este definită astfel: Procedure NoSound; Delay Procedura Delay fixsează intervalul de timp destinat funţionări generatorului de sunet. Procedura este definită astfel: Procedure Delay (ms:word); Ms defineşte timpul de îtârziere (durata) în milisecunde. 11.2. Aplicaţie Programul muzică deonstreză cum sunt utilizate procedurile pentru generarea de sunete. Program muzică; Uses Crt; Var i: word; Begin For i:=1 to 5 do Begin Sound(220*i); Delay(200+i*i); NoSound; End; For i:=5 downto 1 do Begin Sound (220*i); Delay (200+i*i); NoSound; end; end. BIBLIOGRAFIE NICULESCU ST. Progaramarea calculatoarelor, SORIN EFTENE Editura ditactică şi pedagogică, Bucureşti, 1997 2.*** Turbo Pascal, Version 6.0 Programmer guide Borland Internaţional,inc.,1990 3.TUDOR SORIN Algoritmi şi limbaje de programare, Editura L&S informatică 1996 4 *** Turbo Pascal 6.0, Ghid de utilizare, Editat sub egida Comisiei Naţionale de Informatică, Cluj-Napoca, 1992 5.MAKKAI A. Ghid de utilizare Turbo Pascal 5.0-5.5 CRIŞAN C. Micro informatică, Cluj-Napoca,1991 PAGE PAGE 50 쥁@