Introducere in c++

August 9, 2017 | Author: trilulilu89 | Category: N/A
Share Embed Donate


Short Description

Download Introducere in c++...

Description

Introducere in programare

&$3,72/8/

Introducere in programare

,QWURGXFHUH &DOFXODWRDUHOH HOHFWURQLFH DX DSUXW vQ MXUXO DQXOXL  7RWXúL XQHOH PDúLQL mecanice de calculat au fost propuse anterior: -

3DVFDO±UHDOL]DQXPDLDGXQDUHúLVFGHUH /HLEQLW]±UHDOL]DúLvQPXO LUH %DEEDJH±PDúLQDQDOLWLF

&KLDU úL vQ DFHVWH DSDUDWH SULPLWLYH XQHOH GLQ FRPSRQHQWHOH XQXL DUKLWHFWXUL PRGHUQH SRW IL JVLWH 'H H[HPSOX XQ UHJLVWUX WHPSRUDU GH PHPRULH FDUH PHQ LQH variabilele aflate în curs de procesare. Acest registru este cunoscut sub denumirea de UHJLVWUX DFXPXODWRU &DOFXODWRDUHOH HOHFWURQLFH DX IRVW LQL LDO SURSXVH VXE IRUPD XQXL DSDUDW DEVWUDFW FDUH SRDWH UHDOL]D VDX VLPXOD RULFH WLS GH PDúLQ PHFDQLF )RUPD WHRUHWLFDIRVWLQWURGXVGHAlan Turing pe la mijlocul anului 1930. &D úL vQ FD]XO PXOWRU DOWH WHKQRORJLL GH]YROWDUHD SUDFWLF D XQHL PDúLQL FDUH V respecte acest model, a fost LQIOHQ DW GH DO GRLOHD U]ERL PRQGLDO $FHVW OXFUX D IRVW posibil deoarece se dorea calcularea traiectoriilor de rachete (&ROORVXV úL Eniac) sau GHFRGDUHDFRGXOXL(QLJPDIRORVLWGH*HUPDQLDSHQWUXSURWHF LDPHVDMHORU Primul program stocat electronic a fost folosit în 1948. În primii ani de dezvoltare  FRPSXWHUHOHúLLPSDFWXOORUXOWHULRUvQYLD DXPDQDXIRVWPXOWVXEHYDOXDWH(GH QRWRULHWDWHGHFODUD LDOXLBill *DWHVIRQGDWRUXO0LFURVRIWFXPFQXYHGHFXPDUSXWHDIL YUHRGDWQHYRLHGHPDLPXOWGHKo RAM. ÌQ DQLL ¶ D DSUXW SDVWLOD GH VLOLFLX úL WHKQRORJLD 9/6, Very large Scale ,QWHJUDWLRQ  FD WHKQLF GH SURGXF LH IDSW FH DGXV OD FRPSXWHUH LHIWLQH úL UDSLGH $FHVW OXFUX D FRQGXV OD FUHúWHUHD úL GLYHUVLILFDUHD UDSLG D FDWHJRULLORU GH XWLOL]DWRUL FDUH úL SXWHDXSHUPLWHVOHDFKL]L LRQH]H 3HULRDGD  FDUH HVWH FDUDFWHUL]DW GH SULQ DSDUL LD microsistemelor pe 8 EL L FDUH GHúL HUDX VFXPSH SHUPLWHDX DFFHVXO VHSDUDW GH PDLQIUDPH OD SRVLELOLW LOH VLVWHPXOXLGHFDOFXO ÌQDFHDVW SHULRDG HVWH GHPQ GH UHPDUFDW DSDUL LD vQ   D OXL ,FDUHSRDWHILFRQVLGHUDWXQSXQFWGHUHIHULQ vQGRPHQLX'LQDFHVWPRPHQWVRIWXO DvQFHSXWVILHGH]YROWDWQXQXPDLSHQWUXFDOFXOHH[WUHPGHFRPSOH[HFLúLSHQWUXMRFXUL HGLWRDUHGHWH[WHSURJUDPHGHED]HGHGDWHúLDOWHIDFLOLW LFHUXWHGHSLD  7RW vQ DFHDVW SHULRDG IRU DW úL GH UXSHUHD GH PDLQIUDPH D SRUQLW úL GH]YROWDUHDVLVWHPHORUGHRSHUDUHORFDOH&30úLDSRL'26 6LVWHPXO GH RSHUDUH 06'26 D IRVW UHDOL]DW SULQ DGDSWDUHD OD QRLOH LQVWUXF LXQL PDúLQ D XQXL PLFURNHUQHO GH 81,; OD FDUH VDX DGXJDW IXQF LLOH QHFHVDUH FRQWUROXOXL SHULIHULFHORUFDUHvQFHSXVHUVILHDWDúDWHFDOFXODWRDUHORUSHUVRQDOH 'LQ  SkQ vQ  GHúL vQF IRDUWH VFXPSH DX vQFHSXW V DSDU SH SLD  DUKLWHFWXULGLQFHvQFHPDLSXWHUQLFHSHEL LLDUDULDORUGHIRORVLUHVDH[WLQVIRDUWH PXOWúLvQDOWHGRPHQLL 1XHVWHGHQHJOLMDWQLFLLPSDFWXOSURGXVGHLQWHUIH HOHYL]XDOHúLGHFRQWURDOHOHSULQ]RQH active ale ecranului. Aceste controale care sunt activate din PRXVH sunt caracteristice sistemului de operare WINDOWS.

1

Introducere in programare

7RW vQ DFHDVW SHULRDG GLQ UD LXQL HFRQRPLFH úL SUDFWLFH VD SURGXV GLVSDUL LD PLFURFDOFXODWRDUHORUDFHVWHDILLQGPXOWGHSúLWHGHFHULQ HOHSLH LL 'LQ  VH SRDWH VSXQH F VD LQWUDW vQWUR QRX HU vQ DFHVW GRPHQLX SULQ LHIWLQLUHDGUDPDWLFDKDUGZDUHXOXLúLDSDUL LDUH HOHORUGHFDOFXODWRDUH 2GDWFXLHIWLQLrea arhitecturilor de calcul s-a putut GLYHVULILFDúLPDLPXOWDULDGH XWLOL]DUHDORU$FHVWOXFUXDDYXWFDUH]XOWDWRFUHúWHUHDSUH XOXLVRIWXOXL &RQFHSWXOGHUH HDSHUPLWHDWUDQVIHUXULUDSLGHGHGDWHDFURUFDQWLWDWHDvQFHSXW VILHGLQFHvQFHPDLPDUH ,QL LDO PDMRULWDWHD UH HOHORU GH FDOFXODWRDUH HUDX vQFKLVH  vQ VHQVXO F QX FRPXQLFDX vQWUH HOH $SRL vQ XOWLPD SHULRDG WHUPHQXO GH VLVWHP GHVFKLV FDSW GLQ SXQFWGHYHGHUHSUDFWLFRUVSkQGLUHGLQFHvQFHPDLPDUHODQLYHOJOREDO'LQDFHVWSXQFW GHYHGHUHUH HOHGHWLSArpanet , Internet úDPGVXQWUHSUH]HQWDWLYH ÌQXOWLPLLDQLvQVXúLFRQFHSWXOGHWUDQVPLVLHGHLQIRUPD LHLQWHUXPDQWLQGHVVH VFKLPEH7HOHYL]LXQHDGLJLWDOHVWHGHMDLPSOHPHQWDWLDUSUH XOSHULIHULFHORUGHGLFDWHD VF]XW H[WUDRUGLQDU DVWIHO vQFkW VH SUHFRQL]HD] GH]YROWDUHD FDOFXODWRUXOXL DVWIHO vQFkW HO VQXPDLILHVWULFWRULHQWDWVSUHDSOLFD LLGHGLFDWHFLVILHROHJWXUGLQDPLFGHRULFHWLS (audio, video, teleworking) a individului cu societatea. 9RPSUH]HQWDFkWHYDGLQDSOLFD LLOHPDLFXQRVFXWHDOHFDOFXODWRDUHORUvQGLYHUVHGRPHQLL -

-

,QGXVWULHFRQWUROúLDXWRPDWL]DUHÆ microcontrolere, CAM (Computer Aided Manufactory); Economie: gestiune, transferul banilor, "banii electronici" . 0HGLFLQGLDJQR]DXWRPDWFHUFHWDUHDHOHFWURQLFODGLYHUVHQLYHOHDOH RUJDQLVPXOXLXPDQDQDOL]DFRGXOXLJHQHWLFGLDJQR]DXWRPDWÆUH HOHQHXUDOH VWD LLJUDILFHVLVWHPHH[SHUW 3LFWXU QRL UDPXUL DOH SLFWXULL IRORVLQG FRPSXWHUXO UHVWDXUDUH Æ KRORJUDILH UH HOH neurale, procesoare analogice. 0X]LF úL WHOHYL]LXQH SUHOXFUUL GH LPDJLQL úL VXQHWH SUDFWLF GH RULFH QDWXU Æ SURFHVRDUHDQDORJLFHVWD LLJUDILFHDUKLWHFWXUL00; Proiectare : programele de tip CAD (Computer Aided Design)

Se mai pot da exemple în mulWHGRPHQLLvQVHVWHFHUWF OD RUD DFWXDO YLD D úL VRFLHWDWHDXPDQQXPDLSRWILFRQFHSXWHIUFDOFXODWRU

2

Introducere in programare

3URJUDPDUHDúLOLPEDMHGHSURJUDPDUH

Prin SURJUDPDUHVHvQ HOHJHvQPRGJHQHULFWUDQVSXQHUHDXQRURSHUD LLUHSHWLWLYH DVXSUD XQXL VHW GH GDWH vQWUXQ OLPEDM LQWHOLJLELO GH FWUH XQ VLVWHP GH FDOFXO FDUH XUPHD]XOWHULRUVOHH[HFXWH$FHVWOXFUXHVWHUHDOL]DWvQGRXHWDSH -

HWDS vQ FDUH HVWH LPSOLFDW RPXO úL DQXPH FHD GH WUHFHUH GH OD SUREOHPD UHDO OD transpunerea într-un limbaj de programare. R D GRXD HWDS DXWRPDW FDUH WUDQVSXQH FRGXO VXUV vQúLUXLUHD GH LQVWUXF LXQL specifice limbajului respectiv  într-un FRGGLUHFWH[HFXWDELO inteligibil sistemului GHFDOFXO OXFUXGHFDUHVHRFXSSURJUDPHVSHFLDOL]DWHQXPLWHFRPSLODWRDUH.

5ROXO SURJUDPULL HVWH FD ILH GDW R DQXPLW RSHUD LXQH VDX VXLW GH RSHUD LXQL UHSHWLWLY H  FDUH VH DSOLF DVXSUD XQRU VHWXUL GH GDWH PHUHX GLIHULWH V ILH VFULV XQ SURJUDP FDUH V FHDU VHWXO GH GDWH GH LQWUDUH FHOH FDUH WUHEXLH V ILH SUHOXFUDWH  V H[HFXWH DVXSUD ORU VXLWD VWDQGDUG GH RSHUD LXQL úL V OLYUH]H GDWHOH GH LHúLUH DGLF rezultatele). ÌQ DFHVWH FRQGL LL SURJUDPXO WUHEXLH V ILH FRPSXV GLQ PDL PXOWH LQVWUXF LXQL ÌQ primul rând cele care UH]HUY GHFODUR]RQGHPHPRULHFDILLQGVSHFLDOGHGLFDWQXPDL SHQWUXDQXPLWHGDWH R]RQGHPHPRULHvQFDUHVHYRUFLWLGDWHOHGHLQWUDUHR]RQGH PHPRULHvQFDUHVHYRUSVWUDGDWHOHLQWHUPHGLDUH(cele care apar în decursul calculelor GDUGHFDUHXWLOL]DWRUXOQXDUHQHYRLH úLGHDVHPHQLSHFHOHGHLHúLUH3URJUDPXOWUHEXLH VFRQ LQLQVWUXF LXQLFDUHVFLWHDVFGHODXWLOL]DWRUGDWHOHGHLQWUDUHXUPDWHvQVIkUúLW GH LQVWUXF LXQLOH GH FDOFXO SURSULX ]LV FD vQ ILQDO V FRQ LQ LQVWUXF LXQLOH GH DILúDUH D UH]XOWDWHORU GDWHOHGHLHúLUH  $UKLWHFWXUDXQXLVLVWHPGHFDOFXO Ca REVHUYD LH de ED]: un sistem de calcul este pur úL simplu versiunea mult GH]YROWDW a unui calculator de buzunar úL deci nu trebuie V ne DúWHSWP de la el ca vreo GDW V IDF altceva decât l-a pus cineva, un programator prin intermediul unui program, V IDF. “,QWHOLJHQ D´DSDUHQWa unui sistem de calcul provine din cantitatea de LQWHOLJHQ  XPDQLQYHVWLWîn respectivul program aflat în H[HFX LH Hilar, am putea spune F omul vQFHDUF V ³IDF pe cineva GXS chipul úL DVHPQDUHD lui” dar rezultatul este o copie SDOLG FDUH altfel este extrem de XWLO Din aceste lucruri GHULY vestitul principiu de aur al primilor programatori GIGO (Garbage In Garbage Out), care într-o traducere SUR]DLF vQVHDPQ: “gunoi bagi gunoi VFR L” úL care are meritul, în DIDU de cel umoristic, de a atrage DWHQ LD oricui care se va apuca de programare F din nefericire calculatorul face numai ce i se LQGLF prin diverse metode V IDF. De aici UH]XOW R SULP DWHQ LRQDUH YDODELO aprope tot timpul în cazul GHSDQULL(H[HFX LHLSDVFXSDVîn scopul JVLULLeventualelor defecte în IXQF LRQDUH unui SURJUDP  &$87 Ì17Æ, (52$5($ 7$ '( 352*5$0$725 ù, $32, ' 9,1$ PE CALCULATOR. Desigur H[LVWun procent cam de 5% din VLWXD LLîn care un program scris corect este executat JUHúLW lucru care apare ca rezultat al LQWHUIHUHQ HL unor programe neautorizate, cum ar fi YLUXúLL FX programul aflat în H[HFX LH În cazul în care nu este

3

Introducere in programare

valabil acest lucru problema este mai FRPSOH[putând fi implicate GHIHF LXQLaleatorii ale SU LL KDUGZDUH Oricum ar fi aceste lucruri LQWU în sfera de DF LXQH a unui inginer de sistem, úLdeci nu sunt luate aprioric în FRQVLGHUD LHfiind de obicei rare. Pentru a putea vQ HOHJHarhitectura vom FXWDanumite analogii între un om úLun sistem de calcul. 6 DQDOL]P ce se vQWkPSO FX un om în momentul în care vede o formulare de genul : 2*2=… . 'HúLni se pare ceva evident, cu WR LLDPvQY DWpe de rost tabla vQPXO LULL V vQFHUFPacum o descompunere a SDúLORUFDUHsunt H[HFXWD L În primul rând PHPRUPîn memoria WHPSRUDU sau de VFXUWGXUDW RSHUDQ]LL datele asupra FURUDvom executa o RSHUD LXQH apoi UHDOL]PRSHUD LXQHDGHvQPXO LUHrezultând 4, care este SkQODcomunicarea lui YHUEDOsau prin scris tot în memoria WHPSRUDU6H REVHUYFoperanzii 2,2 úLRSHUD LXQHD DXfost preluate de pe un suport extern si anume cel scris, rezultatul putând fi UHWXUQDW trimis FWUHHPL WRUXOunei cereri de lucru GXS cum am spus tot pe DFHOúLsistem extern de stocare. $FHVWH[HPSOXQXDIRVWGDWIUXQVFRSúLDQXPHUROXOOXLHVWHSULQWUHDOWHOHGHD Y RELúQXL FX QLYHOXO H[WUHP GH VF]XW OD FDUH VH IDFH DQDOL]D úL GHVFRPSXQHUHD XQHL SUREOHPHUHDOHvQPRPHQWXOvQFDUHGRUHVFVRWUDQVSXQvQWUXQOLPEDMGHSURJUDPDUH ùi acum VDQDOL]PDUKLWHFWXUDEORF(structura IXQF LRQDO Dunui sistem de calcul. 'XS FXP VH REVHUY GLQ ILJ  într-un sistem de calcul H[LVW - un dispozitiv de stocare în PDV rolul caietului pe care scrim /citim în cazul nostru. Acest dispozitiv este materializat prin Hard Disk (HDD) FUXLD i se mai 0HPRULH 'LVSR]LWLY spune úLsuport fix de date úL)ORSS\'LVN 7HPSRUDUm ,QWUDUH (FDD) FUXLD i se mai spune úL suport 5$0 ,H LUH mobil de date . )LJ$UKLWHFWXUDXQXL - o memorie WHPRUDU 5$0 5DQGRP VLVWHPGHFDOFXO Acces Memory) care MRDF H[DFW rolul memoriei de VFXUWGXUDWumane. - dispozitive de Intrare sau de ,HúLUH prin care sistemul SULPHúWH sau UHWXUQHD] GDWH În cazul unui sistem de calcul acestea sunt tastatura úL PRXVH FD dispozitive de intrare úL monitorul sau imprimanta ca dispozitive de LHúLUH A mai Umas de OPXULWproblema microprocesorului care este “inima” unui sistem de calcul úL DUH rolul de a coordona întregul sistem. Desigur F DFHDVW coordonare se UHDOL]HD]WRWprin intermediul unor programe care H[LVWîn ceea cea am putea numi, prin analogie cu omul, partea de reflexe FRQGL LRQDWH aceste programe se JVHVF într-o memorie ROM (Read Only Memory) deci nu pot fi decât citite. ' LV S R ] LW LY G H

0 LF U R S U R F H V R U

VWR FDUH

+ ' ' ) ' '

ú

 )XQF LRQDUHDXQXLVLVWHPGHFDOFXO Sistemul de calcul GXS FXP VH REVHUY FRPSRUW destul similitudini cu omul la nivel de DUKLWHFWXUúLdeasemeni, GXSFXPvom discuta, úLODnivel de IXQF LRQDUH 6vedem cum se UHDOL]HD]ELQHvQ HOHVODnivel simplificat, H[HFX LDunei formule de genul 2*2=… .

4

Introducere in programare

Se FLWHúWH GH pe suportul de stocare programul care FRQ LQH cererea QRDVWU VH vQFDUF în memoria WHPSRUDU GH acest lucru se RFXS VLVWHPXOGHRSHUDUH programul specializat care se RFXS GH traducerea unor LQVWUXF LXQL VLPSOH úL LQWXLWLYH DOH utilizatorului în comenzi directe FWUH partea de H[HFX LH D sistemului , în urma cererii noastre explicite de lansare a programului) úL VH începe H[HFX LD lui de FWUH procesor H[HFX LHFDUHXUPHD]aproximativ sistemul uman de gândire. Pe scurt modul de H[HFX LH la nivelul procesorului poate fi descris ca : • FLWHúWHdatele utile (din RAM în aceast caz) (2,2) • FLWHúWHRSHUD LDFDUHtrebuie H[HFXWDWasupra datelor suspomenite(tot din RAM)(*) • H[HFXWRSHUD LD    • returneazrezultatul (înnapoi în RAM)(4). La nivelul sistemului de calcul modul de H[HFX LHDUDWFDmai jos: • FLWHúWHprogramul de executat (de pe sistemul de stocare fix/mobil) úL • vQFDUFOîn RAM • H[HFXWprogramul (din RAM) • la terminarea programului DúWHDSWnoua cerere de H[HFX LH

0HPRULD7HPSRUDUDXQXLVLVWHPGHFDOFXO 'XSFXPDPpomenit în primul capitol, una din componentele de ED]DOHunui sistem de calcul este memoria GLQDPLF5$0sau memoria WHPSRUDU $FHDVWmemorie a fost FRQFHSXW LQkQGcont de faptul Fsistemul de QXPHUD LH folosit în interiorul unui calculator este ED]  'H aici UH]XOW F orice fel de GDW sau LQVWUXF LXQHefectiv SURFHVDWsau H[HFXWDWODnivelul PDúLQLLtrebuie Vfie SDVWUDWVXE forma ei ELQDU deci FRUHVSXQ]WRDUH bazei 2). Întrucât în baza 2 nu H[LVW decât dou numere 0 úL  UH]XOW F vom avea UHSUH]HQWUL VXE IRUPD unor úLUXUL GH  úL GH  /D nivelul PDúLQLL materializarea HIHFWLY D respectivelor numere este UHDOL]DW GH obicei, prin DWDúDUHD ORJLF D lui “1” la o tensiune de 5 YRO L iar lui “0” lipsei acestei tensiuni. 7RWXúLindiferent de nivelul tehnologic este absolut nepractic ca VFRQVLGHUPIL[9sau fix 0 V ca valori de FRPSDUD LHpentru Facest lucru ar fi dus la QLúWHechipamente extrem de scumpe úLGHlente. Din aceasta FDX]VHFRQVLGHUDILsau 1 logic în jurul valorilor sus PHQ LRQDWH FX ±∆V. De aici a rezultat posibilitatea folosirii unui condensator ca element de memorare. Acest lucru este posibil deoarece în cazul unei UHvQFUFUL periodice a acestuia se poate RE LHQH FD tensiunea la bornele lui V varieze în limitele necesare QRX GDF fac suficient de repede DFHDVW UHvQFUFDUH În aceste FRQGL LL foarte simplist putem vedea o memorie GLQDPLF ca o matrice LPHQV de condensatoare care pot fi vQFUFDWHsau GHVFUFDWHîn cursul RSHUD LXQLORUGHscriere/citire. Aici mai apare o SUREOHPúLanume QXPUXOGHEL LFDUHcompun datele utile de calcul (ELW unitate LQIRUPD LRQDO FRUHVSXQ]WRDUH H[LVWHQ HL sau a unei tensiuni la intrarea unui dispozitiv digital) care pot fi SURFHVD LODun moment dat de un procesor. Întrucât memoria RAM este cea care IXUQL]HD] respectivele date era logic ca ea V fie RUJDQL]DW în diviziuni de o PULPH HJDO cu cea a QXPUXOXL de EL L sus PHQ LRQD L. Aceste JUXSUL se numesc ORFD LLGHPHPRULH úL pot fi considerate ca minima unitate care poate fi VFULV sau FLWLW dintr-o memorie. O GDW OPXULW acest aspect devine clar F pentru a P putea referi la una sau alta din ORFD LL trebuie V existe o PHWRG GH individualizare VWULFW6DDOHVcea mai VLPSOFXSXWLQ úLanume numerotarea lor QXPUXOORFD LHLnumindu-se DGUHVDORFD LHL. 5

Introducere in programare

1R LXQHDGHDOJRULWP

ÌQSURFHVXOGHUH]ROYDUHDXQHLSUREOHPHIRORVLQGFDOFXODWRUXOH[LVWGRXID]H -

GHILQLUHDúLDQDOL]DSUREOHPHL SURLHFWDUHDúLLPSOHPHQWDUHDXQXLDOJRULWPFDUHUH]ROYSUREOHPD

'HILQLUHDúLDQDOL]DSUREOHPHLSRDWHILODUkQGXOHLGHVFRPSXVvQ - specificarea datelor de intrare; - VSHFLILFDUHDGDWHORUGHLHúLUH 6SHFLILFDUHDGDWHORUGHLQWUDUHFRQVWvQ 1. 2. 3. 4. 5.

Ce date vor fi primite la intrare; Care este formatul (forma lor de reprezentare) a datelor de intrare; Care sunt valorile permise sau nepermise pentru datele de intrare; ([LVWXQHOHUHVWULF LL DOWHOHGHFkWOD SULYLQGYDORULOHGHLQWUDUH &kWH YDORUL YRU IL OD LQWUDUH VDX GDF QX VH SRDWH VSHFLILFD XQ QXPU IL[ GH YDORUL FXPVHYDúWLFkQGVDXWHUPLQDWGHLQWURGXVGDWHOHGHLQWUDUH

6SHFLILFDUHDGDWHORUGHLHúLUHWUHEXLHV LQFRQWGHXUPWRDUHOHDVSHFWH 1. &DUHGLQYDORULOHUH]XOWDWHvQFXUVXODSOLFULLDOJRULWPXOXLGHFDOFXODVXSUDGDWHORUGH LQWUDUHYRUILDILúDWH QHFHVDUHXWLOL]DWRUXOXL ÌQDFHVWSDVVHIDFHGLIHUHQ LHUHDFODU vQWUHGDWHLQWHUPHGLDUHúLGDWHGHLHúLUH 2. &DUHYDILIRUPDWXOGDWHORUGHLHúLUH GHH[HPSOXXQQXPUUHDOSRDWHILDILúDWFXWUHL VDXFXFLQFL]HFLPDOHVDXXQWH[WSRDWHILDILúDWLQWHJUDOVDXSDU LDO 3. 6XQW VDX QX QHFHVDUH H[SOLFD LL VXSOLPHQWDUH SHQWUX XWLOL]DWRU vQ DIDUD GDWHORU GH LHúLUH 4. &DUHHVWHQXPUXOGHGDWHGHLHúLUHFDUHWUHEXLHWUDQVPLVHFWUHLHúLUH 2GHILQL LHDQR LXQLLGHDOJRULWPSRDWHILvQOQ XLUHDGHSDúLVLPSOLRSHUD LLGLVWLQFWH FDUH GHVFULX PRGXO GH SUHOXFUDUH D XQRU GDWH GH LQWUDUH  vQ VFRSXO UH]ROYULL XQHL SUREOHPH 'HFL $/*257,08/ (67( $&($ 3$57( '( &$/&8/ &2081 Ì1 &$=8/5(=2/95,,81(,352%/(0('(&$/&8/ 8QH[HPSOXVLPSOXGHDOJRULWPDUILVXLWDGHRSHUD LLPDWHPDWLFHIFXWvQUH]ROYDUHD XQHL HFXD LL PDWHPDWLFH GH JUDGXO ,, D;E;F  FRHILFLHQ LL D E F VH VFKLPE GDU modul de procesare a valorilor lor, nu. 3URSULHW LOHXQXLDOJRULWPVXQW 1. (VWHFRPSXVGLQLQVWUXF LXQLVLPSOHúLFODUH 2. 2SHUD LXQLOHVSHFLILFDWHGHLQVWUXF LXQLVHH[HFXWvQWURDQXPLWVHFYHQ  3. 6ROX LDWUHEXLHRE LQXWvQWUXQQXPUILQLWGHSDúL 'LQ FHOH VSXVH PDL VXV UH]XOW F 81 $/*25,70 (67( ,1'(3(1'(17 '( 7,38/ '( /,0%$- Ì1 &$5( (67( 75$16386 6$8 '( 7,38/ '( 0$ù,1 3( CARE ESTE EXECUTAT. 6

Introducere in programare

2EVHUYD LHÌQDFHDVWFDUWHVHYRUGLVFXWDQXPDL$/*25,70,6(&9(1,$/,úL UHVSHFWLY352*5$0$5($6(&9(1,$/ 8Q DOJRULWP VHFYHQ LDO HVWH DFHO DOJRULWP FUHDW SHQWUX H[HFX LD  SH XQ FDOFXODWRU VHFYHQ LDO'HQXPLUHDGHVHFYHQ LDOSURYLQHGLQIDSWXOFDFHVWDQXSRDWHH[HFXWDGHFkW RVLQJXURSHUD LHODXQPRPHQWGDW 5HSUH]HQWDUHDDOJRULWPLORU

ÌQ JHQHUDO XQ DOJRULWP SRDWH IL FRQVLGHUDW FD R GHVFULHUH D SUHOXFUULL HIHFWXDWH asupra unui flux de date, prelucrare care are loc cu un scop bine determinat. Ca de obicei, vQ FD]XO GH]YROWULL XQHL QRL WHRULL VD FXWDW DWkW R FDOH GH VWDQGDUGL]DUH D PRGXOXL GH GHVFULHUH D XQXL DOJRULWP FkW úL R FDOH GH DO IDFH LQGHSHQGHQW GH XQ OLPEDM GH SURJUDPDUHDQXPHUH]XOWkQGGRXPHWRGHFODVLFH -

metoda schemei logice (diagramei de flux (flowchart)); metoda pseudocodului.

0HWRGDVFKHPHLORJLFH ÌQFDGUXODFHVWHLPHWRGHVHIRORVHúWHXQVHWGHVLPEROXULSUH]HQWDWvQILJXUD SHQWUXGHVFULHUHDSDúLORUFHWUHEXLHH[HFXWD LSHQWUXFDSURJUDPXOUH]XOWDWVQHUH]ROYHR DQXPLWSUREOHP 'HúLDIRVWH[WUHPGHIRORVLWSkQQXGHPXOWDFHDVWPHWRGSDUHDSLHUGHWHUHQ vQ ID D UHSUH]HQWULL GH WLS SVHXGRFRG SRDWH úL GDWRULW WLPSXOXL VXSOLPHQWDU SLHUGXW GH utilizator cu executarea simbolurilor grafice. 6 DQDOL]P XQ SURJUDP GH FDOFXO D PHGLHL SHQWUX WUHL QRWH úL V YHGHP FXP DU DSUHDGHVFULVSULQDFHDVWPHWRG 'XSFXPVHREVHUYvQILJXUDVHGHVFULXHIHFWLYSDVFXSDVWRDWHRSHUD LXQLOH care trebuiesc urmate. ÌQ ILJXUD  VD VSHFLILFDW úL vQFHSXWXO SURJUDPXOXL IDSW FDUH SDUH LQXWLO GDU vQ FD]XOGHVFULHULLXQXLSURJUDPIRDUWHPDUHVHSUHDSRDWHFDVFKHPDORJLFVVHvQWLQGSH ]HFLGHSDJLQLFD]vQFDUHGHYLQHHYLGHQWQHFHVLWDWHDGHFODUULLvQFHSXWXOXLúLVIkUúLWXOXL de program. ÌQXUPWRUXOSDVVHGHFODUYDULDELOHOH2YDULDELOHVWHXQLGHQWLILFDWRUSURSULXDO SURJUDPDWRUXOXL FDUH vQ FD]XO RSHUD LXQLL GH GHFODUDUH VH DWDúHD] OD JHQHUDUHD SURJUDPXOXL XQHL ]RQH GH PHPRULH D FUHL GLPHQVLXQH HVWH vQ GLUHFW FRQFRUGDQ  FX WLSXOGHGDWVWRFDWGHDFHDVWD Se trece apoi la citirea datelor de intrare. În acest caz este vorba de trei note ceea FH SUHVXSXQH F YDORULOH GH LQWUDUH SRW DYHD úL FX ]HFLPDOH 0DL WkU]LX VH YD GLVFXWD GHVSUHDOHJHUHDWLSXOXLGHYDULDELOIXQF LHGHVSHFLILFD LLOHXWLOL]DWRUXOXL 6HH[HFXWFDOFXOXOSURSULX]LVGXSFDUHVHDILúHD]UH]XOWDWXOFX]HFLPDOH$ PDL UPDV GRDU PDUFDUHD VIkUúLWXO GH SURJUDP &KLDU GDF PHWRGD DUH R LPSUHVLH ³DUWLVWLF´VSRULWFkWHRGDWVHSLHUGHSUHDPXOWWLPSúLKkUWLHvQFD]XOIRORVLULLHLúLGH DFHHDGLQFHvQFHPDLPXO LSUHIHUFDPHWRGGHGHVFULHUHpseudocodul.

7

Introducere in programare 6LPERO GH WHUPLQDUH VDX vQFHSHUH SURJUDP &XWLH GH FDOFXO &XWLH GH FRPHQWDULX &XWLH GH ,QWUDUH VDX ,HúLUH 'DWH

)LU GH H[HFX LH D SURJUDPXOXL  XQXL

)LJ  6LPEROXUL VWDQGDUG SHQWUX

)LJ  6FKHPD ORJLF

PHWRGD VFKHPHL ORJLFH

SURJUDP GH FDOFXO D PHGLHL SHQWUX WUHL QRWH

0HWRGDSVHXGRFRGXOXL )D GHVFKHPDORJLFDUHGH]DYDQWDMXOFQXvQWRWGHDXQDUHGDEVROXWWR LSDúLLGH FDOFXO 7RWXúL HVWH PDL FRPRG GH IRORVLW vQ FD]XO vQ FDUH VH GHVFULX DOJRULWPL SHQWUX OLPEDMHOHGHSURJUDPDUHGHQLYHOPHGLXúLvQDOW 6FKHPD ORJLF HVWH FHD PDL LQGLFDW FD PHWRG GH GHVFULHUH vQ VSHFLDO vQ FD]XO LPSOHPHQWULLXQXLDOJRULWPIRORVLQGOLPEDMGHDVDPEODUHXQGHGHVFULHUHDDPQXQ LWD ILHFUXL SDV HVWH QHFHVDU  SHQWUX SXWHD PLQLPL]D úDQVHOH DSDUL LHL XQRU HURUL GH implementare. DescrierHDHIHFWLYDSDúLORUFHWUHEXLHHIHFWXD LIRORVLQGFXYLQWHOHOLPELLURPkQH vPSUHXQ FX FXYLQWH FKHLH DOH OLPEDMXOXL GH SURJUDPDUH vQ FDUH VH YD LPSOHPHQWD DOJRULWPXO VH QXPHúWH SVHXGRFRG 6H REVHUY F vQ DFHVW FD]  FULWHULXO LQGHSHQGHQ HL WRWDOHDGHVFULHULLID GHOLPEDMXOGHLPSOHPHQWDUHQXHVWHvQWUXWRWXOUHVSHFWDW 3HQWUX FRPSDUD LH YRP GHVFULH PDL MRV vQ SVHXGRFRG SUREOHPD SUH]HQWDW vQ figura 1.2. YDULDELOHPDQQQ ^ FLWHúWHQQQ PD QQQ  DILúHD]PDFX]HFLPDOH `

8

CAPITOLUL 2

Introducere in programare

2. Limbajul C Limbajele de programare de nivel mediu au fost serios dezvoltate pe la mijlocul anilor ¶ ,GHLOH GH ED] IRORVLWH SHQWUX SURLHFWDUHD ORU GHULY GLQ IRUPXOHOH IXQF LRQDOH λ&KXUFKFHIXVHVHUSURSXVHSULQDQLL¶/DRUDDFWXDOVHHVWLPHD]FH[LVWSHVWH GH OLPEDMH GH SURJUDPDUH GLIHUHQ HOH vQWUH HOH ILLQG OHJDWH vQ SULQFLSDO GH VWLOXO GH programare. Limbajul FORTRAN (FORmula TRANslator) a fost unul dintre primele limbaje GH SURJUDPDUH (O HVWH IRORVLW úL DFXP vQ LQGXVWULH VDX FHUFHWDUH SHQWUX D LPSOHPHQWD DSOLFD LLVSHFLILFHFXYROXPHPDULGHFDOFXOHPDWHPDWLFHFRPSOH[H 3H OkQJ OLPEDMH GH SURJUDPDUH SHQWUX PDúLQL VHFYHQ LDOH VDX GH]YROWDW úL OLPEDMHFDUHVXSRUWSURFHVDUHSDUDOHO'LQQHIHULFLUHPDMRULWDWHDQXVXQWSRUWDELOHILLQG RULHQWDWH VWULFW SH DUKLWHFWXUD PDúLQLL SHQWUX FDUH D IRVW GH]YROWDW OLPEDMXO 'H DELD vQ XOWLPLL]HFHDQLGH]YROWDUHDUDSLGDUH HOHORUGHFDOFXODWRDUHDFRQGXVúLODRvQFHUFDUHGH standardizare a unor limbaje ce pot crea cod executabil simultan pe mai multe sisteme de calcul. $YDQWDMHOHSURJUDPULLODQLYHOinalt sunt: − ascund GLIHUHQ HOHGHDUKLWHFWXULQWHUQ − sunt XúRUGHXUPULWúLPHQ LQXW modificare úi depanare XúRDU − sunt portabile . De exemplu un cod scris în C poate fi executat úi sub UNIX úLVXE DOS − nu au cel mai eficient FRGvQFRPSDUD LHFXFHOVFULVLQ$60GLUHFW De obicei sistemele de operare erau dezvoltate in limbaj de ansamblare pentru a fi mai rapide . Limbajul C, dezvoltat in 1972 este Dennis M.Retchie la Laboratoarele AT&T Bell, este primul limbaj pentru crearea sisteme de operare. Numele limbajului provine din faptul c este rezultatul îPEXQW LULLlimbajului B, folosit în scrierea UNIX pentru DEC PDP7. Prima GRFXPHQWD LH despre acest limbaj a fost “The C Programing Language”, scrisGH5HWFKLHúLBrian Kernighan în 1977. Înaintea ei exista doar “The C Reference Manual”, scris de Retchie. 2 FDUDFWHULVWLF LPSRUWDQW D DFHVWXL OLPEDM HVWH IDSWXO F SRDWHILFRQVLGHUDWVLPXOWDQúLXQOLPEDMGHQLYHOPHGLXúLXQOLPEDMGHQLYHOVF]XW 2 GDW FX UVSkQGLUHD OXL SULQWUH SURJUDPDWRULL SURIHVLRQLúWL VD WUHFXW úL OD DGDSWDUHDFRPSLODWRUXOXLSHQWUXVLVWHPXOGHRSHUDUH06'26'H DVHPHQHDD DSUXW úL DOWSUREOHPúLDQXPHIDSWXOFVWDQGDUGXO.&R nu mai era satisfFWRU'HDVHPHQHD GDWRULWYDULDQWHORUGHFRPSLODUHSHQWUX3&-uri C începuse VúLpiardGLQportabilitate. În acel moment Institutul 1D LRQDOpentru Standarde al Americii (ANSI), a creat un subcomitet pt. a defini o versiune RILFLDOSWlimbajul C, rezultând astfel ANSI C. /LPEDMXO & úL YHUVLXQLOH VDOH 223 Object Oriented 3URJUDPPLQJ  & úL PDL QRXO 9LVXDO & VXQW SULQWUH FHOH PDL IRORVLWH OLPEDMH GH SURJUDPDUH OD RUD DFWXDO $ IRVW SURLHFWDW SRUQLQG GH OD GRX OLPEDMH GH]YROWDWH VSUH VIkUúLWXO DQLORU ¶ %&3/ úL prima sa versiune B. 8Q OLPEDM GH QLYHO VF]XW HVWH RULHQWDW SH DUKLWHFWXU úL SRDWH IL GHILQLW FD DYkQG IDFLOLWDWHDGHDVFULHLQVWUXF LXQLFHVHUHIHUGLUHFWODHOHPHQWHDOHUHVSHFWLYHLDUKLWHFWXUL interne (ca în cazul limbajului de asamblare).

9

Introducere in programare

8Q OLPEDM GH QLYHO vQDOW VDX PHGLX HVWH RULHQWDW SH SUREOHP  SHUPL kQG SURJUDPDWRUXOXL VúL VWUXFWXUH]H SURJUDPXO FkW PDL DSURSLDW SRVLELO GH SUREOHPD FH WUHEXLHLPSOHPHQWDW$FHVWOXFUXVFDGHúDQVHOHXQHLHURULGHSURLHFWDUHODQLYHOORJLFDO DSOLFD LHL&KLDUGDFSURJUDPXOYDILPDLLQHILFLHQWGLQSXQFWGHYHGHUHDOYLWH]HLúLDO RFXSULL UHVXUVHORU SULQ FRPSDUD LH FX XQ SURJUDP VFULV vQ OLPEDM GH DVDPEODUH  HO DUH DYDQWDMXOFSRDWHILVFULVUHSHGHúLH[WLQVFXXúXULQ  Limbajul C SHUPLWH IRORVLUHD DPEHORU WHKQLFL SURJUDPDUH VWUXFWXUDW úL DFFHV GLUHFWODPDúLQIDSWFDUHOIDFHVILHIRDUWHIOH[LELO 8OWLPXOúLSRDWHFHOPDLLPSRUWDQWPRWLYSHQWUXvQY DUHDOLPEDMXOXL&HVWHIDSWXO FSHUPLWHWUHFHUHDFXXúXULQ OD&VDX-DYD 'HúLlimbajul C are o libertate foarte mare in scrierea codului, el acceptând multe forme de scriere care în alte limbaje nu sunt premise, acest lucru ascunde vQVúLpericole, în special pentru programatorii IUH[SHULHQ  6WUXFWXUDJHQHULFDXQXLSURJUDPVFULVvQ& 'HODSULPHOHSURJUDPHVFULVHHVWHELQHVVH LQFRQWGHRVHULHGHUHJXOLSULYLQG RUJDQL]DUHDFRGXOXLVXUV6WUXFWXUDJHQHUDODXQXLFRGYDIL Apeluri ale directivelor speciale de compilare; 'HFODUD LLGHELEOLRWHFLIRORVLWH 'HFODUD LLIXQF LLLQOLQH 'HFODUD LLDOHSURWRWLSXULORUIXQF LLORUSHUVRQDOH 'HFODUD LLYDULDELOHJOREDOH Corpul programului principal { GHFODUD LLYDULDELOH DSHOXULGHIXQF LL } &RUSXULOHIXQF LLORUGH]YROWDWHGHSURJUDPDWRU ([LVW FkWHYD REVHUYD LL VXSOLPHQWDUH SULYLQG WHKQRUHGDFWDUHD FRGXOXL VXUV GH FDUHDUILELQHVVH LQVHDPD 1. 6QXVHVFULHLQVWUXF LXQLOHXQDGXSDOWDFLXQDVXEDOWD 2. 7RDWHLQVWUXF LXQLOHFDUHIRUPHD]XQEORFSHQWUXRDOWLQVWUXF LXQHVILHGHSODVDWH ID GHvQFHSXWXOUHVSHFWLYHLLQVWUXF LXQL (WDSHOHJHQHUULLXQXLSURJUDPH[HFXWDELOSRUQLQGGHODRSUREOHPUHDO 8QD GLQ JUHúHOLOH vQFHSWRULORU vQ SURJUDPDUH FRQVW vQ IDSWXO F SXQ SUHD PXOW DFFHQW SH LQWURGXFHUHD XQRU SURJUDPH JDWD VFULVH IU FD vQ SUHDODELO V VWXGLH]H SUREOHPDGHSRUQLUHSUHFXPúLDOJRULWPXOJHQHUDWvQXUPDDQDOL]HLDFHVWHLSUREOHPH ÌQPRPHQWXOJkQGLULLXQXLSURJUDPSHOkQJDOWHFRQVLGHUHQWHWUHEXLH LQXWFRQWúLGH IDSWXOFHVWHRPDUHGLIHUHQ vQWUHSURJUDPHOHbune si cele care merg. Un program bun nu numai cPHUJHGDUHVWHúLXúRUGHvQ HOHVúLPHQ LQXW0XO LGLQWUHvQFHSWRULLvQ

10

Introducere in programare

programarea C-XOXLDXWHQGLQ DGHD seOLPLWDODSURJUDPHFDUHVPHDUJúLDFHVWIDSW conduce la GHSULQGHULQHVQWRDVH.

'H DFHHD PDL MRV YRP SUH]HQWD SDúLL QHFHVDUL D IL XUPD L vQ HODERUDUHD XQHL DSOLFD LL SRUQLQGGHODRSUREOHPUHDO 1. ÌQ HOHJHUHDSUREOHPHL 2. 5HDOL]DUHDPRGHOXOXLPDWHPDWLFGDFHVWHFD]XO 3. 9HULILFDUHDPRGHOXOXLPDWHPDWLFFXXQVHWGHGDWHUHDOVDXFDOFXODWHPDQXDO'DFVH REVHUY QHFRQFRUGDQ H VH YD UHOXD YHULILFDUHD  SXQFWHORU DQWHULRDUH GDF QX VH FRQWLQX 4. ,GHQWLILFDUHD GDWHORU GH LQWUDUH D GDWHORU GH LHúLUH SUHFXP úL D YDULDELOHORU intermediare. 5. $OHJHUHDWLSXULORUGHGDWHIRORVLWHSHQWUXUH LQHUHDvQFXUVXOSURFHVULLDUHVSHFWLYHORU date. 6. Specificarea modului de LQWHUID DUHFXXWLOL]DWRUXOODQLYHOGHLQWUDUHVDXLHúLUH 7. Generarea schemei logice sau a pseudocodului ce descrie algoritmul propus pentru rezolvarea problemei. 8. Verificarea modelului creat la punctul 7 cu un set date reale sau calculate manual. În caz de QHFRQFRUGDQ HVHUHLDYHULILFDUHDSXQFWHORUDQWHULRDUHGDFQXVHFRQWLQX 9. 6FULHUHDFRGXOXLVXUV WUDQVSXQHUHDvQWUXQOLPEDMGHSURJUDPDUHRDUHFDUH  10.(OLPLQDUHDHURULORUGHVLQWD[ 3HQWUXDH[HPSOLILFDSDúLLPHQ LRQD LDQWHULRUYRPOXDXQH[HPSOXH[WUHPGHVLPSOX “6VHUHDOL]H]Hun program care UH]RYRHFXD LHRDUHFDUHGHJUDGXO,,” Pasul 1 În acest caz este simplu, e clar Fne referim la o HFXD LHGHfoma ax+bx+c=0; Pasul 2 Modelul matematic este cel studiat în liceu: Fie ∆ = b −  ⋅ a ⋅ c atunci : 

−E ± E − ⋅D⋅F . ⋅D −E ± L⋅ −E + ⋅D⋅F . 'DF∆0 atunci: [

 

=





 

 

Pasul 4 6 YHGHP GHFL FDUH DU IL GDWHOH FH WUHEXLHVF IXUQL]DWH GH XWLOL]DWRU $YkQG vQ YHGHUHFVHGRUHúWHUH]ROYDUHDXQHLHFXD LLJHQHULFHGHRUGLQXO,,HVWHFODUF - a,b,c date de intrare

11

Introducere in programare

- x GDWHGHLHúLUH - ∆GDWLQWHUPHGLDU Analizând modHOXO PDWHPDWLF REVHUYP F D WUHEXLW V IRORVLP XQ VLPERO VXSOLPHQWDU IXQF LH GH FDUH VH IDFH vQWUHDJD GLVFX LH $FHVW VLPERO QX HVWH QLFL GDW GH XWLOL]DWRUúLQLFLQXLQWHUHVHD]SHQWUXUH]XOWDWXOILQDOGHFL∆HVWHRGDWLQWHUPHGLDUGH calcul. 

Pasul 5 $FXP WUHEXLH V VSHFLILFP WLSXO GH GDW IRORVLW SHQWUX UHSUH]HQWDUHD LQWHUQ vQ PHPRULDFDOFXODWRUXOXL DYDULDELOHORU'HFLDYHPFkWHYDGDWHVXSOLPHQWDUHODGLVSR]L LH pentru a vedea tipul de reprezentare care trebuie ales: - VSHFLILFD LLOHXWLOL]DWRUXOXL - modelul matematic - H[SHULHQ DvQSURJUDPDUH ÌQ DFHVW FD] PRGHOXO PDWHPDWLF QH VSXQH F DEF VXQW QXPHUH UHDOH )U R VSHFLILFDUHFODUDXWLOL]DWRUXOXLFDUHVvQGLFHFHOHDSDU LQDOWXLLQWHUYDOHVWHREOLJDWRULX FDVOXPvQFRQVLGHUDUHPRGHOXOFHOPDLH[WLQVGHFLFHOPDLDGDSWDELO'HVLJXU FQX YRP DOHJH FHO PDL FXSULQ]WRU WLS GH GDWH SXV OD GLVSR]L LH GH FWUH FRPSLODWRU vQ OLSVD XQRUVSHFLILFD LLH[WHUQH'HFLa,b,c vor fi de tipul float. 9DULDELOD LQWHUPHGLDU ∆ HVWH UH]XOWDW DO DSOLFULL XQHL IXQF LL OLQHDUH DVXSUD XQRU YDULDELOHGHWLSUHDOGHFLúLGHOWDYDWUHEXLVILHfloat. 'DWHOH GH LHúLUH [  GXS FXP VH REVHUY VXQW UH]XOWDWXO XQHL vQSU LUL úL GHFL REOLJDWRULXVXQWUHDOHLQGLIHUHQWGHWLSXOGHGDWDOHVSHQWUXGDWHOHGHLQWUDUH 

Pasul 6 ÌQOLSVDXQRUVSHFLILFD LLGHODXWLOL]DWRUYRPDOHJHSHQWUXFLWLUHDGDWHORUFHDPDL VLPSOPHWRGFLWLUHDGLUHFWGXSFXPDPIFXWúLSkQDFXP3HQWUXDILúDUHvQVDYHP GRXPHWRGHDILúDUHDGHWLSXO5H [ úL,P [ VDXGLUHFWUH]XOWDWXOFDvQFDOFXOXOPDQXDO 9RPDOHJHFHDGHDGRXDPHWRG Pasul 7 3VHXGRFRGXOYDDUWDFDPDLMRV FLWHúWHD FLWHúWHE FLWHúWHF FDOFXOHD]GHOWDGXSIRUPXOGHOWD E E D F GDFGHOWD>=0 atunci { x=(-b+sqrt(delta))/(2*a); x=(-b-sqrt(delta))/(2*a); afiDILúHD][[ } altfel { delta=-delta; delta=sqrt(delta)/(2*a)

12

Introducere in programare

afiúHD]x1 de forma re+i*im afiúHD]x2 de forma re-i*im }

CâWHYDREVHUYD LLUHODWLYHODFRQVWUXF ia pseudocodului - VH REVHUY F QX DP WUDWDW VHSDUDW VLWXD LD GHOWD  SHQWUX F ]HUR OD DGXQDUH QX PRGLILFUH]XOWDWXO - vQDGRXDSDUWHDPIRORVLWXQDUWLILFLXGHFDOFXOvQVHQVXOFDPSVWUDWWRWvQYDULDELOD GHOWD UH]XOWDWH SDU LDOH GH FDOFXO $OWIHO DU IL WUHEXLW V LQWURGXFHP YDULDELOH VXSOLPHQWDUHSHQWUXSVWUDUHDS LLvQWUHJLúLDSU LLUHDOH&RGXODUILIRVWPDLFODUGDU vQDFHODúLWLPSDPILIRORVLWPDLPXOWPHPRULH'DFvQFD]XODFHVWXLSURJUDPFkWHYD YDULDELOH VXSOLPHQWDUH QX QH GHUDQMHD] vQ FD]XO XQRU SURJUDPH IRDUWH PDUL DFHVW OXFUX SRDWH ULGLFD JUHXW L FH QX SRW IL HOLPLQDWH GHFkW SULQ WUHFHUHD OD DORFDUHD GLQDPLFDPHPRULHL$FHDVWPHWRGYDILSUH]HQWDWXOWHULRU - VH REVHUY F DP VFULV PXOW FRG VXSOLPHQWDU FDUH GLQ SXQFW GH YHGHUH DO FDOFXOXOXL brut nu ne trebuie, dar din punct de vedere al modului în care îi prezint rezultatul uni XWLOL]DWRUHVWHHVHQ LDOSHQWUXFHVWHH[DFWvQIRUPDPDWHPDWLFFXQRVFXW Pasul 8 Va fi evitat pentru acest exemplu deoarece este prea simplu. Pasul 9 Codul în cazul limbajului C va DUDWDFDPDLMRV #include * #inlude // aici eroare de sintaxGHWHFWDELOGHinterpretor void main(void) { float a,b,c,delta,x1,x2;

**

***

clrscr() printf(“Pentru calculul ecuatiei a*x*x+b*x*c=0 dati coeficientii”); printf(“\na=”); scanf(“%f”,a); //aici eroare de VLQWD[QHGHWHFWDELOGHinterpretor printf(“\nb=”); scanf(“%f”,&b); printf(“\nb=”); scanf(“%f”,&b); delta=b*b+4*a*c; // aici eroare de calcul if( delta >=0) { x=(-b+sqrt(delta))/(2*a); x=(-b-sqrt(delta))/(2*a); printf(“\nx1=%f”,x1) printf(“\nx2=%f”,x2) }

13

else {

Introducere in programare

delta=-delta; delta=sqrt(delta)/(2*a) printf(“x1=%f+i*%f”,-b/(2*a),delta); printf(“x2=%f-i*%f”,-b/(2*a),delta); } } Pasul 10 'XSFXPVHREVHUY DPLQWURGXVLQWHQ LRQDWWUHLWLSXULGHJUHúHOL 3ULPD PDUFDW FX R VWHDHVWH JUHúHDO GH VLQWD[ FH YD IL GHWHFWDW GH FRPSLODWRU úL GHFL R SXWHP FRUHFWD vQ DFHDVWID] Pasul 11 ÌQ FDGUXO UXOULL SURJUDPXOXL UH]XOWDW VH REVHUY F DFHVWD QX IXQF LRQHD] FRUHFW /D H[HFX LDSDVFXSDVVHYDREVHUYDFvQYDULDELODDQXVHGHSXQHFHHDFHVHFLWHúWHGHOD WDVWDWXU (VWH R JUHúHDO GH ORJLF GH SURJUDPDUH SHQWUX F scanf  DúWHDSW XQ pointer pentru a returna corect rezultatul, iar a nu este declarat SRLQWHU WUHEXLH WUDQVPLV DGUHVD OXLD$FHDVWHURDUHQXSRDWHILGHWHFWDWGHinterpretor. 'HDVHPHQHD FX WUHL VWHOH DP PDUFDW R JUHúHDO GH WUDQVSXQHUH D DOJRULWPXOXL R JUHúHDOVLPSOGHWUDQVFULHUHD XQHL IRUPXOH GH FDOFXO 'HDELD GXS HOLPLQDUHD DFHVWRU erori se poate continua testarea programului. (VWHELQHFDVH[LVWHXQ comentariu la vQFHSXWXORULFUHLVXUVHL&DYkQGXUPWRUXO FRQ LQXW /*----autor: GDWDFUHULL/modificrii ------copyright */

14

CAPITOLUL 3

Introducere in programare

1R LXQHDGHYDULDELOúLWLSXULGHYDULDELOH 2YDULDELO HVWHXQLGHQWLILFDWRU QXPH GDWGXSGRULQ GHFWUHXWLOL]DWRUXQHL]RQH din memorie cu care se va lucra (stoca sau modifica datele utile programului) pe SDUFXUVXOVFULHULLFRGXOXLVXUV ÌQ OLPEDMXOXL & SRW IDFH DVHPHQHD UHIHULUL GLUHFWH OD R ]RQ GH PHPRULH SULQ intermediul SRLQWHULORU  DYkQG WRWRGDW DYDQWDMXO VLQWD[HL IDFLOH D XQXL OLPEDM GH QLYHO mediu. 3URJUDPXO VDX FRGXO VXUV HVWH WUDGXV SULQ LQWHUPHGLXO FRPSLODWRUXOXL & vQWUXQ program executabil. În cadrul acestui proces se face identificarea dintre numele variabilei úL XQ DQXPLW QXPU GH ORFD LL GH PHPRULH 7RW vQ VDUFLQD FRPSLODWRUXOXL UPkQH úL JHQHUDUHD GH LQVWUXF LXQL FDUH V VH RFXSH GH VFULHUHD VDX FLWLUHD vQ EORF D PDL PXOWRU ORFD LLGHRGDW2YDULDELOSRDWHRFXSDPDLPXOWGHRORFD LHGHPHPRULH Caracteristicile variabilelor sunt : 1. )LHFDUHYDULDELODUHXQQXPH 2. )LHFDUHYDULDELODSDU LQHXQXLWLSGHGDW 3. )LHFDUH YDULDELO UH LQH R YDORDUH VDX XQ VHW GH YDORUL XWLOH SHQWUX SURJUDP $FHVWH valori pot fi: - GHSXVHvQPHPRULHSULQLQL LDOL]DUHvQSURJUDP - SRWILFLWLWHGHODWDVWDWXUVDXGHODDOWGLVSR]LWLYGHLQWUDUH /HJDWGHQXPHOHXQHLYDULDELOHVHSRWIDFHFkWHYDREVHUYD LL 1. 1XPHOH XQHL YDULDELOH VH DOHJH GH RELFHL DVWIHO vQFkW V GHVFULH FH vQVHDPQ SHQWUX programator, din punct de vedere al SVHXGRFRGXOXL vQWUR IRUP FDUH SRDWH IL SUHVFXUWDW VDX QX GXS SUHIHULQ  'H H[HPSOX vQ FD]XO SUREOHPHL GLQ ILJXUD  QXPHOH XQHL YDULDELOH FH UH LQH R QRW SXWHD IL  QRWDB VDX Q VDX 1RWDB &D REVHUYD LH OLPEDMXO & HVWH ³FDVH VHQ]LWLY´ DGLF IDFH GLVWLQF LH vQWUH OLWHUHOH PLFL úL PDUL IRORVLWH vQ VFULHUHD FRGXOXL VXUV  GHFL 18 6( &216,'(5 $ ),,1' $&(/$ù, 180( '( 9$5,$%,/ Ì1 &$=8/ Ì1 &$5( (67( 6&5,6 &8 LITERE MARI SAU CU LITERE MICI. Mai concret nota_1 ≠ Nota_1≠NOTA_1. 2. &kQGVHGRUHúWHFDXQQXPHGHYDULDELOVILHFRPSXVGLQGRXFXYLQWH186(9$ /6$ 63$,8 Ì175( (/( FFL YRU IL FRQVLGHUDWH GRX FXYLQWH VHSDUDWH HOH WUHEXLHVFXQLWHFXOLQLHLQIHULRDU underscore). 3. 1XPHOHGHYDULDELOHVXIHUúLGHXUPWRDUHOHUHVWULF LL − QXSRWvQFHSHFXXQQXPU M − nu pot începe cu $ ( $ abc ) − nu pot fi cuvinte rezervate ( int ) − nu pot FRQ LQHcaractere speciale ( bab*#*@l ) excep LHIFQG“underscore” ex. bad_babe

15

Introducere in programare

,QL LDOL]DUHDYDULDELOHORU

ÌQOLSVDXQHLLQL LDOL]ULH[SOLFLWHRYDULDELOORFDOYDFRQ LQHRYDORDUHRDUHFDUH DOHDWRDUH  QXPLWvQPRGFXUHQW ³JDUEDJH´ $FHDVW YDORDUH VH JVHD vQ PHPRULD DORFDW UHVSHFWLYHL YDULDELOHODODQVDUHDvQH[HFX LDDSURJUDPXOXL ,QL LDOL]DWRULLH[SOLFL LVHSODVHD]GXSGHFODUDWRUXOODFDUHVHUHIHUVHSDUD LGH acesta prin semnul egal (de exemplu nr1=234). H H OYDOXH

UYDOXH

'DFRELHFWXOLQL LDOL]DWHVWHXQDJUHJDW XQFRQJORPHUDWGHGDWHUHFXQRVFXWVXEXQ QXPHFRPXQ SHQWUXLQL LDOL]DUHVHIRORVHúWHROLVWGHH[SUHVLLvQFKLVvQDFRODGHXQGHOD ILHFDUHFRPSRQHQWFRUHVSXQGHFkWHRH[SUHVLH 7UHEXLHUHVSHFWDWHXUPWRDUHOHUHJXOL 1. QXPUXO GH LQL LDOL]DWRUL QX SRDWH IL PDL PDUH GHFkW QXPUXO GH FRPSRQHQWH GH LQL LDOL]DW 2. QXVHSRWLQL LDOL]DGHFkWRELHFWHVDXWDEORXULFXGLPHQVLXQHGHILQLW DGLFVHFXQRDúWH QXPUXOPD[LPGHYDORULGHLQWUDUHFHSRWILGDWHGHXWLOL]DWRUSHQWUXDILSURFHVDWH  3. H[SUHVLLOHIRORVLWHSHQWUXLQL LDOL]DUHWUHEXLHVILHFRQVWDQWHvQXUPWRDUHOHVLWXD LL ODLQL LDOL]DUHDXQXLRELHFWGHWLSVWDWLF vQ&QHVHPDLDSOLF  ODLQL LDOL]DUHDXQXLWDEORXXQHLVWUXFWXUL sau unei uniuni. 4. QX VH SRW LQL LDOL]D LGHQWLILFDWRUL FX YDODELOLWDWH vQ LQWHULRUXO XQXL EORF GDU FX OHJDUH H[WHUQVDXLQWHUQ 5. GDF R OLVW vQFKLV vQWUH DFRODGH DUH PDL SX LQH HOHPHQWH GHFkW FRPSRQHQWH DUH DJUHJDWXOLQL LDOL]DWUHVWXOFRPSRQHQWHORUVHYRULQL LDOL]DDXWRPDW 2ELHFWHOHGHWLSVFDODU RVHULHGHGDWHGHDFHODúLWLSDFURUGHILQL LHSRDWHILGDWFD R vQúLUXLUH GH GDWH FH SRW IL LGHQWLILFDWH SULQ SR]L LD ORU vQWUR vQúLUXLUH  VH LQL LDOL]HD] IRORVLQGRVLQJXUH[SUHVLHFDUHSRDWHILHYHQWXDOvQFKLVvQDFRODGH8QLXQLOH JUXSULGH PDL PXO L EL L GH GLPHQVLXQH GLYL]LELO FX GRL  VH LQL LDOL]HD] FX R VLQJXU H[SUHVLH corespunzând ca tip primului membru al uniunii. 6WUXFWXULOH JUXSULGHGLYHUVHGDWHGHWLSXULGLIHULWHVXEXQQXPHFRPXQ úLXQLXQLOH VHSRWLQL LDOL]DFXRH[SUHVLHGHWLSVWUXFWXUVDXXQLXQHFRUHVSXQ]WRDUH9DORDUHDLQL LDOD structurii sau uniunii va fi valoarea obiectului citat. 3UH]HQ DXQHLLQL LDOL]ULvQWURGHFODUD LHLQGLFRGHFODUD LHGHILQLWRULH FHVSHFLILF FXFHYDILXPSOXWUHVSHFWLYXOVSD LXGHPHPRULH 0DLMRVHVWHSUH]HQWDWXQH[HPSOX int zile [7] = { 1, 1, 1, 1, 1, 1, 1 } ; char name1 [] = { "Costica" } ; char name2 [] = "Dragan" ; struct datep { int i ; // nr. ani char str [21] ; //nume double d ; //salar } vas = { 28, "Vasile", 1500000.0 } ;

16

Introducere in programare

$FHHDúL YDULDELO QX VH SRDWH LQL LDOL]D FX GRX YDORUL GHFkW vQ FD]XO vQ FDUH VH UHQXQ ODYDORDUHDDQWHULRDUFXFDUHDIRVWLQL LDOL]DW 1XSRWH[LVWDGRXGHFODUD LLGHILQLWRULL FDUHvLVSHFLILFFRQ LQXWXO vQWU-un program. 3.2.Tipuri de variabile 8QD GLQ FHOH PDL GLILFLOH SUREOHPH FDUH DSDU vQ FDGUXO vQY ULL XQXL OLPEDM GH SURJUDPDUHHVWHGHVFULHUHDXQHLVLWXD LLGLQOXPHDUHDOIRORVLQGHOHPHQWHOHUHVSHFWLYXOXL limbaj. ÌQ DIDU GH SURSXQHUHD XQXL DOJRULWP SHQWUX D UH]ROYD R SUREOHP UHDO SURJUDPDWRUXO PDL HVWH FRQIUXQWDW úL FX XQ DOW DVSHFW GLILFLO DOHJHUHD WLSXOXL GH GDW SHQWUXRYDULDELOWUHEXLHIFXWvQFRQFRUGDQ FXYDORULOHFDUHOHSRDWHOXDDFHDVWD 'H DFHHD SULPXO SDV HVWH V YHGHP FH WLSXUL IXQGDPHQWDOH GH GDWH QH SXQH OD GLVSR]L LHOLPEDMXO& SUHFXP úL JDPD GH YDORUL vQ FDUH HYROXHD] DFHVWHD 2 GDW úWLXWH DFHVWHOXFUXULSXWHPvQFHSHVYHGHPFDUHHVWHOHJWXUDFXH[HPSOHOHGLQYLD DUHDO 'LQDQDOL]DLQIRUPD LHLFDUHFLUFXOFXUHQWvQWUHRDPHQLUH]XOWFH[LVWGLQSXQFW GHYHGHUHDOSURFHVULLGRXWLSXULGHLQIRUPD LH - LQIRUPD LH RE LQXW SULQ PVXUWRUL DVXSUD IHQRPHQHORU UHDOH FDUH VXQW H[DFWH úL DVXSUDFURUDVHIDFSUHOXFUULPDWHPDWLFHGHRELFHL - LQIRUPD LH VXE IRUP FRQGHQVDW FDUH GH RELFHL HVWH UHFRPSXV DVRFLDWLY vQ PLQWHD XPDQFXPDUILOLPEDMXOVLLQIRUPD LDVFULV 'HDLFLUH]XOWFvQWUXQOLPEDMGHSURJUDPDUHDYHPQHYRLHGHGRXWLSXULGHYDULDELOH FDUHVSRDWILIRORVLWHSHQWUX -

stocarea unor valori numerice. VWRFDUHDXQRUFDUDFWHUHLQIRUPD LHVFULV

&RQIRUP DFHVWRU QHFHVLW L OLPEDMXO & D IRVW SUHY]XW FX XUPWRDUHOH WLSXUL fundamentale de date: -

intVWRFKHD]QXPDLQXPHUHvQWUHJL float, doubleSHQWUXQXPHUH]HFLPDOHFDOFXOvQYLUJXOPRELO charSHQWUXDVWRFDFRGXOXQXLFDUDFWHUVDXXQQXPUvQWUHJUHSUH]HQWDWSHPD[LPXP RSWEL LLQFOX]kQGúLVHPQXO 2EVHUYD LHchar[QU@YDUH LQHXQúLUGHnr caractere sau întregi. 8QDGLQWUHXWLOL]ULOHúLUXULORUGHFDUDFWHUHDUILPHVDMHOHGHGLDORJFXXWLOL]DWRUXOXQXL SURJUDPVDXPHVDMHOHGH HURDUH ÌQ DFHVWFD]QXQHLQWHUHVHD] FRQ LQXWXO GLQ SXQFW GH vedere al valorii lor numerice ca atare. )XQF LH GH QHFHVLW LOH SURJUDPDWRUXOXL SXWHP VSXQH F H[LVW GRX FODVH GH WLS GH date care pot fi folosite în cazul unui limbaj de nivel mediu sau înalt: 1. tipuri de date predefinite tipuri de date definite de utilizator.



17

CAPITOLUL 4

Introducere in programare

4. Tipuri de date predefinite 4.1. Date numerice /LPEDMXO & HVWH SUHY]XW FX XQ VHW GH GDWH predefinite. Aceste tipuri de date sunt FRQFUHWL]DWH SULQ IRORVLUHD XQXL QXPU GH ORFD LL GH PHPRULH SHQWUX VWRFDUHD FRQIRUP XQXLDOJRULWPELQHGHILQLWIXQF LHGHWLSXOGHGDWDXQXLWLSGHGDWHH[LVWHQWHÌQFD]XO tipului de date FKDU GHúL D IRVW LQWURGXV SHQWUX VWRFDUHD GDWHORU GH WLS DOIDQXPHULF HO SRDWHILIRORVLWvQFDOFXOHPDWHPDWLFHúLORJLFHvQLQWHUYDOXOGHYDORULQXPHULFHSHFDUHOH poate stoca. 3HQWUXWLSXULOHGHGDWHFHVWRFKHD]YDORULQXPHULFHvQWUHJL SUHVFXUWDWLQW VDXGXS cum am spus FKDUQXPUXOHVWHVWRFDWvQPHPRULHGLUHFWVXEIRUPDUH]XOWDWODFRQYHUVLD în binar. În cazul datelor de tip real, float, sau GRXEOHODFRQYHUVLDGLUHFWDQXPUXOXLvQED]D GRLVDUILSLHUGXWSUHDPXOWHORFD LLGHPHPRULHúLGHDFHHDHOHVH SVWUHD] VXE IRUPD úWLLQ LILF$FHDVWIRUPVHUHIHUODIDSWXOFH[LVWR]RQGHPHPRULHFDUH LQHPDQWLVD úL R ]RQ GH PHPRULH FDUH LQH H[SRQHQWXO 8Q H[HPSOX GH UHSUH]HQWDUH úWLLQ LILF GLQ punct de vedere matematic ar fi: 123344445455454=1.23344445455454 * 1014 =1.23344445455454E+14 unde mantisa=1,23344445455454 iar exponentul = 14. 0DLMRVSUH]HQWPRVHULHGHWLSXULGHGDWHSUHGHILQLWHGLPHQVLXQLOHORUúLGRPHQLXO YDORULORU FDUH SRW IL VWRFDWH 6H REVHUY F VDX IRORVLW PRGLILFDWRUL GH WLS 3ULP PRGLILFDWRULGHWLSVHvQ HOHJFXYLQWHFKHLHFDUHDXFDHIHFWODFRPSLODUHFDGLPHQVLXQHD vQRFWH L SHFDUHHVWHUHSUH]HQWDWXQWLSGHGDWHVFUHDVF FXXQIDFWRUFDUHHVWHVDXR putere a lui doi)). char ∈{–128, 127} unsigned char ∈{0, 255} IUVHPQ signed char ∈{–128, 127} semn int ∈{–32768, 32767 } cuvânt (2 octeti) unsigned int ∈{0, 65535} semn signed int ∈{–32768, 32767} semn short int ∈{–32768, 32767} semn unsigned short int ∈{0, 65535} semn

1 octet 1 octet 1

octet

cu

1  FXYkQW IU 1 cuvânt cu 1 cuvânt cu  FXYkQW IU

18

Introducere in programare

signed short int –32768 to 32767 semn long int ∈{–2147483648, 2147483647} signed long int ∈{–2147483648, 2147483647} float ∈{–3.4E–38, 3.4E+38} double ∈{–1.7E–308, 1.7E+308} long double ∈{–3.4E–4932, 1.1E+4932}

1 cuvânt cu

2 cuvinte 2 cuvinte cu semn 2 cuvinte 4 cuvinte 5 cuvinte

2EVHUYD LH $FHVWH LQWHUYDOH VXQW GH RELFHL VSHFLILFH VLVWHPXOXL GH RSHUDUH VXE FDUH OXFUHD]FRPSLODWRUXOúLPDúLQLLSHFDUHDFHVWDHVWHH[HFXWDW'RPHQLLOHGHPDLVXVVXQW valabile pentru compilatorul de C++ realizat de Borland. 2SHUDWRUXOYLUJXO a,b ÙHYDOXHD]DHYDOXHD]E $FHVWRSHUDWRUSHUPLWHHYDOXDUHDDGRXVDXPDLPXOWHH[SUHVLLGLVWLQFWHLQORFXULOHLQ FDUHRVLQJXUH[SUHVLHHVWHDGPLVDILIRORVLW DVWDHUD LXQHDLQWURGXFHULLOXL De ex: for ( j=0,k=100 ; k-j>0 ; j++,k-- ) este chivalent cu j=0 ; k=100; j=0 , k=100 { { … … j++; sau j++; k--; k--; } } 8QDOWH[HPSOXIXQF LDbreak_line: break_line (int interval) { int c,j; for (c=getchar(),j=0 ; c!=EOF ; c=getchar (),putchar (c),j++) if (j % interval = = 0 ) printf( “\n” ) ; } 4.2. Date alfanumerice ÌQ FDGUXO SURLHFWULL XQHL DSOLFD LL SRW DSDUH SH OkQJ FHULQ H OHJDWH GH FDOFXOH QXPHULFHFRPSOH[HúLFHULQ HSHQWUXSURFHVDUHDGHWH[WHVDXDXQRUED]HGHGDWH ToWDOLWDWHDFDUDFWHUHORUFHSRWILDILúDWHVDXOLVWDWHvQFD]XOOXFUXOXLVXEXQVLVWHP GH RSHUDUH FODVLF 81,; VDX '26  VH QXPHVF FDUDFWHUH DOIDQXPHULFH DOIDEHWLFH úL QXPHULFH  )LHFDUH FDUDFWHU DUH R LPDJLQH SH HFUDQ $FHDVW LPDJLQH HVWH VWRFDW vQ memoria QHYRODWLODFDOFXODWRUXOXLúLDUHDWDúDWXQFRGXQLFODFDUHVHIDFHDSHOFkQGVH GRUHúWHDILúDUHDVDXOLVWDUHDHL 'DWRULW QHFHVLW LL FD XQ WH[W HGLWDW  SH XQ VLVWHP IDEULFDW GH R DQXPH ILUP VúL SVWUH]H vQ HOHVXO VD WUHFXW OD VWDQGDUGL]DUHD FRGULL LPDJLQLORU FDUDFWHUHORU $VWIHO D UH]XOWDWVWDQGDUGXO$6&,,IRORVLWODRUDDFWXDOGHWRDWHFDOFXODWRDUHOHGLQVHULD; ([LVWGHFDUDFWHUHvQDFHVWVWDQGDUG1XYRPIDFHUHIHULULODVHWXULOH H[WLQVHGH caractere specifice editoarelor de teste sau sistemelor de operare de tip Windows sau XWindows.

19

Introducere in programare

3HQWUXVWRFDUHDXQXLúLUGHFDUDFWHUHOLPEDMXO&IRORVHúWHXQWDEORXmonodimensional GH FDUDFWHUH FDUH SRDWH VWRFD FRGXULOH D PD[LPXP  GH FDUDFWHUH R GDW vQ FD]XO GHFODUULLVWDWLFH 2EVHUYD LD  'DF VD GHILQLW YDULDELOD V FD DYkQG FDSDFLWDWHD GH VWRFDUH GH  GH caractere iar la citirea ei sunt introduse mai mult de 25, atunci numai pentru primele 25 QXH[LVWULVFXOSLHUGHULLORUSHSDUFXUVXOH[HFX LHLSURJUDPXOXL ÌQ DFHVWFD] SRW DSUHD erori mascate în cod. 2EVHUYD LDÌQFD]XOvQFDUHQXDPGHILQLWQXPUXOGHFDUDFWHUHFDUHSRDWHILVWRFDW vQ UHVSHFWLYD YDULDELO IXQF LH GH PRGXO GH FRQVWUXF LH DO FRPSLODWRUXOXL ILH VH DORF GLPHQVLXQHDPD[LPSRVLELOILHODSULPDLQL LDOL]DUHVHDORFH[DFWFkWHVWHQHFHVDUGDU nu peste maximul definit. 2EVHUYD LD 1XH[LVWQLFLROHJWXUvQWUHYDORDUHDQXPHULF[úLFDUDFWHUXO[FDUH apare pe ecran. De exemplu 2 ≠ ‘2’. ,QL LDOL]DUHDXQHLGDWHFXRYDORDUHXWLOSRDWHDYHDORFvQXUPWRDUHOHPRGXUL - la declararea ei; - la citirea datelor de intrare; - oriunde în program . 4.2.1. Caractere speciale de control 3HOkQJFDUDFWHUHOHGLUHFWDILúDELOHPDLH[LVWvQOLPEDMXO&RVHULHGHFDUDFWHUHGH FRQWURO$FHVWHDSURYLQGLQQHFHVLWDWHDGHFRQWURODXQHLLPSULPDQWHúLVLPXOWDQDXIRVW IRORVLWHúLODDILúDUHDSHWHUPLQDOHOHDOIDQXPHULFH \a \b \f

Cod 07h 08h 0Ch

\n \r

0Ah 0Dh

\t \v \\ \’ \” \? \ooo \xhh

09h 0Bh 5Ch 27h 22h 3Fh ooo hh

6HFYHQ D

Caracter BEL (alert produce un semnal sonor) BS (backspace) FF (form feed PXW FXUVRU OD XUPWRDUHD SDJLQ

LF CR (carriage return, salt la inceput de linie QRX HT (horizontal tab) VT (vertical tab) \ (backslash) ’ (apostrof) ” (ghilimele) ? (semnul vQWUHEULL) Caracterul cu codul ooo în octal Caracterul cu codul hh în hexa

3HQWUX MXVWLILFDUHD LQWURGXFHULL DFHVWRU FDUDFWHUH GH FRQWURO VH YD SUH]HQWD XUPWRUXO FD]HUDLQXWLOWULPLWHUHDXQLQXPUIL[GHFDUDFWHUHLGHQWLFHGHILHFDUHGDWFkQGVHGRUHD XQ WDEXODWRU XQ DQXPLW QXPU GH VSD LL JRDOH  OD vQFHSXWXO XQXL SDUDJUDI úL DWXQFL VD FRQYHQLW V VH IRORVHDVF XQ FDUDFWHU GH FRQWURO XUPkQG FD LPSULPDQWD VO UHFRQYHUWHDVF LQWHUQ vQ VSD LL JRDOH $QWHULRU VD SUH]HQWDW XQ WDEHO FH FRQ LQH DFHVWH caractere. 2SHUD LXQLVLPSOHGHFLWLUHVDXDILúDUHDGDWHORU)

20

Introducere in programare

/LPEDMXO&DUHODGLVSR]L LHRVHULHGHIXQF LLSHQWUXFLWLUHDGDWHORUGHODWDVWDWXU VDX SHQWUX DILúDUHD ORU SH HFUDQ &HOH PDL IRORVLWH GLQWUH HOH VXQW JUXSDWH vQ GRX biblioteci conio.h (&21VROH,QSXW2XWSXW+HDGHU  úL StandardInputOutput.Header) stdio.h. )XQF LLGHLQWUDUHVDXLHúLUHFXXWLOL]DWRUXO)

Pentru a putea discuta primele programe este necesar studierea modului în care un SURJUDP SRDWH VFKLPED GDWH GLVSR]LWLYHOH VWDQGDUG GH LQWUDUH VDX LHúLUH PRQLWRU WDVWDWXU 'LQDFHVWSXQFWGHYHGHUHH[LVWGRXFODVHGHIXQF LL -

-

XQF LL GH LQWUDUH FX DMXWRUXO FURUD VLVWHPXO GH FDOFXO SULPHúWH GH OD WDVWDWXU YDORUL QXPHULFH FRPHQ]L úL RULFDUH DOW WLS GH LQIRUPD LH FH SRDWH IL IXUQL]DW SULQ intermediul acelui dispozitiv. XQF LLGHLHúLUHFXDMXWRUXOFURUDVLVWHPXOGHFDOFXOOLYUHD]UH]XOWDWHOH DILúHD] IRORVLQGXQGLVSR]LWLYVWDQGDUGGHLHúLUH PRQLWRUVDXLPSULPDQW 

3HQWUXDFLWLRGDWVDXXQúLUGHGDWHGHODWDVWDWXUDYHPRIXQF LHVSHFLDOL]DWFDUH poate citi orice tip SUHGHILQLWGHGDWH)XQF LDDUHSURWRWLSXOSUH]HQWDWPDLMRV int scanf (const char *format [,address, ...]); 7LSXOGHGDWHHVWHVSHFLILFDWGHFWUHSURJUDPDWRUSULQPRGLILFDUHDXQRUSDUDPHWULDL IXQF LHL0DLMRVHVWHGDWXQVFXUWH[HPSOX #include #include void main (void) { int a; char c; char b[20]; float d; FOUVFU úWHUJHHFUDQXO VFDQI ³G´ D FLWHúWHXQvQWUHJúLOGHSR]LWHD]vQ // variabila a VFDQI ³F´ F FLWHúWHXQFDUDFWHU VFDQI ³V´E FLWHúWHXQúLUGHFDUDFWHUH VFDQI ³I´ G FLWHúWHXQQXPU]HFLPDO getch(); } $FHDVW IXQF LHOD DSHODUHSUHLDLQIRUPD LDLQWURGXV GH OD WDVWDWXU  GXS DSVDUHD WDVWHL (17(5 &D HIHFW XWLOL]DWRUXO YHGH GRDU F SURJUDPXO vúL RSUHúWH GHUXODUHD úL

21

Introducere in programare

DúWHDSW FHYD GDU IU D SULPL XQ PHVDM FDUH V vL FRPXQLFH FH WUHEXLH V IDF VDX LQIRUPD LLGHVSUHQDWXUDGDWHORUFDUHWUHEXLHVFOLYUDWH 0DLMRVHVWHSUH]HQWDWSURWRWLSXOXQHLIXQF LLGHVIRORVLWvQDILúDUHDGLYHUVHORUWLSXUL de date. int printf (const char *format [, argument, ...]); Ex: SULQWI ³$ILúHD]FHOHQXPHUHGGG´QUQUQU 

Vom prezenta un prim exemplu despre unele din SRVLELOLW LHGHDILúDUHDOHIXQF LHLprintf . #include main() { int a; /*întreg simplu */ long int b; /* întreg lung */ short int c; /* întreg scurt */ unsigned LQWG vQWUHJIUVHPQ  char e; /* caracter simplu */ IORDWI QXPU]HFLPDOvQVLPSOSUHFL]LH  GRXEOHJ QXPU]HFLPDOvQGXESUHFL]LH  a = 1023; b = 2222; c = 123; d = 1234; e = 'X'; f = 3.14159; g = 3.1415926535898; printf("a = %G?QD  DILúDUHIRORVLQGED]DGHQXPHUD LH  printf("a = %R?QD  DILúDUHIRORVLQGED]DGHQXPHUD LH  printf("a = %[?QD  DILúDUHIRORVLQGED]DGHQXPHUD LH  printf("b = %OG?QE  DILúDUHVSHFLILFSHQWUXvQWUHJOXQJ  printf("c = %G?QF  DILúDUHVSHFLILFSHQWUXvQWUHJVFXUW  printf("d = %X?QG  DILúDUHVSHFLILFSHQWUXvQWUHJIUVHPQ  printf("e = %F?QH  DILúDUHVSHFLILFSHQWUXFDUDFWHU  printf("f = %I?QI  DILúDUHVSHFLILFSHQWUXQXPUvQVLPSOSUHFL]LH  printf("g = %I?QJ  DILúDUHVSHFLILFSHQWUXQXPUvQGXEOSUHFL]LH  printf("\n"); /*salt la line QRX  printf("a = %G?QD  DILúDUHVSHFLILFSHQWUXvQWUHJ  SULQWI D G?QD  DILúDUHVSHFLILFSHQWUXXQvQWUHJGDUDORFkQG caractere în dreapta */

22

Introducere in programare

SULQWI D G?QD  DILúDUHVSHFLILFSHQWUXXQvQWUHJGDU alocând 7 caractere în stânga */ c = 5; d = 8; printf("a = %*d\n",c,a); /* folosim un câmp de 5 caractere */ printf("a = %*d\n",d,a); /* folosim un câmp de 8 caractere */ printf("\n"); printf("f = %I?QI  DILúDUHSHQWUXQXPUvQVLPSOSUHFL]LH  printf("f = %12f\n",f); /* folosim un câmp de 12 caractere */ SULQWI I I?QI  IRORVLPXQFkPSGHFDUDFWHUHGXS YLUJXO  SULQWI I I?QI  IRORVLPXQFkPSGHFDUDFWHUHGXS YLUJXO  SULQWI I I?QI  DILúDUHVSHFLILFSHQWUXXQQXPUvQ VLPSOSUHFL]LHGDUDORFkQGFDUDFWHUHvQVWkQJD  } 6UHOXPH[HPSOXOSUH]HQWDWODFLWLUHDGDWHORULQWURGXFkQGGHDFHDVWGDWúL mesajele pentru utilizator. #include #include void main (void) { int a; char c; char b[20]; float d; FOUVFU úWHUJHHFUDQXO printf(“Introduceti o valoare intreaga”) VFDQI ³G´ D FLWHúWHXQvQWUHJúLOGHSR]LWHD]vQ variabila a printf(“\nValoarea citita este %d”, a); printf(“\nDati un caracter ”) VFDQI ³F´ F FLWHúWHXQFDUDFWHU printf(“\nCaracterul citit este %c”,c); prinf(“\nDati un sir de caractere ”); VFDQI ³V´E FLWHúWHXQúLUGHFDUDFWHUH printf(“\nS-a citit urmatoarea propozitie %s”,b); printf(“\nDati un numar zecimal”); VFDQI ³I´ G FLWHúWHXQQXPU]HFLPDO printf(“\n Sa citi numarul %f”,d) printf(“\nApasa orice tasta pentru a continua”) getch(); }

23

CAPITOLUL 5

Introducere in programare

5. Operatori ai limbajului C 8QRSHUDWRUUHSUH]LQWGLQSXQFWGHYHGHUHDOSURJUDPULLDFHOVLPEROFDUHDOWXUDWOD XQDVDXGRXQXPHGHYDULDELOHVSHFLILFRSHUD LDFHWUHEXLHUHDOL]DWDVXSUDORU)XQF LH GHQXPUXOGHYDULDELOH GHFLGHGDWH DVXSUDFUXLDVHDSOLFRSHUDWRULLSRWILFODVLILFD L vQGRXPDULFDWHJRULL -

operatori XQDULDFURUIRORVLUHSRDWHILFDPDLMRV - nume_var_i oper_unar nume_var_j; - oper_unar nume_var_i, unde i, j ∈N;

-

RSHUDWRULELQDULDFURUIRORVLUHHVWHFDPDLMRV - nume_var_i=nume_var_j oper_binar nume_var_k, unde i, j, k ∈N.

Limbajul C are mai multe tipuri de operatori: -

RSHUDWRULDULWPHWLFLFDUHGDXSRVLELOLWDWHDUHDOL]ULLRULFURUFDOFXOHDULWPHWLFH RSHUDWRUL UHOD LRQDOL FH VXQW IRORVL L SHQWUX WHVWDUHD UHOD LLORU FH SRW H[LVWD vQWUH FRQ LQXWXODGRXYDULDELOH RSHUDWRULORJLFLIRORVL LSHQWUX - DSXWHDUHDOL]DH[SUHVLLFRPSOH[HvQFDGUXOWHVWULLUHOD LLORUGLQWUHYDULDELOH - a procesa la nivel de bit variabilele.

5.1. Operatori aritmetici $FHVW WLS GH RSHUDWRUL UHDOL]HD] FDOFXOH PDWHPDWLFH VLPSOH 'HVLJXU F SUHFL]LD vQ FDUH YD IDFH FDOFXOXO UHVSHFWLYD DSOLFD LH LQH GH WLSXO FRQW GH GDW DOHV 2SHUDWRULL VXQW SUH]HQWD LvQOLVWDGHPDLMRV6FRQVLGHUPGRXYDULDELOHDúLEFDUHODXQPRPHQWGDW FRQ LQYDORULOHD úLE DWXQFL - ‘+’ adunare y=a+bÆy=8 - ‘-‘ VFGHUH y=a-bÆy=-2 - ‘*’ vQPXO LUH y=a*bÆy=15 - ‘/’ vPSU LUH y=a/bÆy=0.6000000…0 - ‘%’ modulo y=a%bÆ\  UHVWXOvPSU LULLOXLDODE 5.2 Expresiile 2H[SUHVLHFRQVWGLQWUXQFRQJORPHUDWUHDOL]DWGLQ Æ operanzi Æ operatori vQVFRSXOFDOFXOULLXQHLYDORUL %ORFXULOHGHED]FRQVWUXFWLYHDOHH[SUHVLLORUSRWIL − variabile − constante

24

− DSHOXULIXQF LH

Introducere in programare

([LVWSDWUXPDULWLSXULLPSRUWDQWHGHexpresii:. 1. Expresii constanteFDUHUH LQQXPDLYDORULFRQVWDQWH De exemplu 5 5+6*13/30 ‘a’ 2. Expresii întregi care VXQWH[SUHVLLFDUHGXSUHDOL]DUHDWXWXURUFRQYHUVLLORUDXWRPDWH sau explicite de tip, produc un rezultat care este de tip între. Presupunând j,k întregi DWXQFLXUPWRDUHOHH[SUHVLLvQWUHJL j j*k j/k+3 k-‘a’ 3+(int)5.0 3. ([SUHVLLvQYLUJXOPRELOFDUHVXQWH[SUHVLLFDUHGXSWRDWHFRQYHUVLLOHDXWRPDWHVDX H[SOLYLWHGHWLSSURGXFXQUH]XOWDWFDUHHVWHvQYLUJXOPRELO'DF[HVWHfloat sau GRXEOHDWXQFLXUPWRDUHOHH[SUHVLLVXQWGHDFHVWWLS x x+3 x/y*5 3.0 3.0-2 3+(float) 4 4. Expresii de tip pointer FDUHVXQWH[SUHVLLFDUHvQXUPDHYDOXULLGDXRDGUHV'H H[HPSOXGDFSHVWHpointer, iar j este întreg: p, p+1, (char* ) 0x00ffffff, &j, “abc” sunt expresii de tip pointer. 2UGLQHDGHHYDOXDUHDXQHLH[SUHVLLIXQF LHGHSUHFHGHQ DRSHUDWRULORUG 8QXOGLQSULPHOHOXFUXULGHFDUHWUHEXLH LQXWVHDPDFkQGVHVFULXH[SUHVLLDULWPHWLFH FRPSOH[H HVWH IDSWXO F VSD LLOH DOEH VSD LX WDEXODWRU VDOW OD OLQLH QRX  QX DX vQ HOHV QXVXQWOXDWHvQFRQVLGHUDUH 'HH[HPSOXFHOHGRXH[SUHVLLGHPDLMRVVXQWHFKLYDOHQWH y=x*x+2*x-5*x/y; y=x * x + 2 * x – 5 * x / y; 2DPHQLL IRORVHVF FkWHRGDW VSD LX vQ ORF GH SDUDQWH]H SHQWUX D VSHFLILFD PRGXO GH HYDOXDUHDXQHLH[SUHVLL1R LXQHDGHHYDOXDUHVHUHIHUODRUGLQHDvQFDUHVHYRUUHDOL]D FDOFXOHOH GLQWUR H[SUHVLH PDWHPDWLF  ÌQ FDGUXO XQXL OLPEDM GH SURJUDPDUH QXPDL

25

Introducere in programare

SDUDQWH]HOHMRDFDFHVWUROÌQOLSVDSDUDQWH]HORUGLQWURH[SUHVLHVHYRUUHVSHFWDUHJXOLOH GHSUHFHGHQ LPSOLFLW &DXQH[HPSOXVGLVFXWPPRGXOGHHYDOXDUHDH[SUHVLHGHPDLVXVGDFVHYD LQH VHDPD QXPDL GH SUHFHGHQ HOH LPSOLFLWH 'HRDUHFH RSHUDWRULL ^   ` DX DFHHDúL SUHFHGHQ FDUHvQVHVWHPDLPDUHFDDRSHUDWRULORU^`HYDOXDUHDH[SUHVLHLVHYDIDFH GHODVWkQJDODGUHDSWDGXSFXPXUPHD] 1. 2. 3. 4. 5. 6.

VHFDOFXOHD]YDORDUHDOXLx*x; VHFDOFXOHD]YDORDUHDOXL [ VHFDOFXOHD]YDORDUHDOXL [ VHFDOFXOHD]YDORDUHDOXL  [ \ se face suma (x*x)+(2*x); VHIDFHVFGHUHD x*x)+(2*x) - (5*x)/y.

1R LXQHD GH SUHFHGHQ  VH UHIHU OD PRGXO vQ FDUH LDX GHFL]LL vQ HYDOXDUHD XQHL H[SUHVLLGDFQXDPSXVHSDUDQWH]H0DLMRVHVWHSUH]HQWDWWDEHOXOFXWRDWHSUHFHGHQ HOH implicite: Operatori () [] Æ ! ~ ++ -- + - (unary) & (type) sizeof * / % + > < >= == != & ^ | && || ?: = += -= *= /= %= &= ^= |= = ,

2UGLQHDGHSUHFHGHQ  de la stânga la dreapta de la dreapta la stânga de la stânga la dreapta de la stânga la dreapta de la stânga la dreapta de la stânga la dreapta de la stânga la dreapta de la stânga la dreapta de la stânga la dreapta de la stânga la dreapta de la stânga la dreapta de la stânga la dreapta de la dreapta la stânga de la dreapta la stânga de la stânga la dreapta

5.3. Tipuri aritmetice de date 1XPHUHOHvQWUHJLVXQWUHSUH]HQWDWHGLIHULWGH FHOHvQYLUJXO IORWDQW'H DFHHDDSDUH XUPWRDUHDSUREOHPFRQYHUVLDQXPHUHORUdintr − un format într-altul. 'DF VH GRUHúWH FD UH]XOWDWXO V ILH VWRFDW vQWUXQ DOW IRUPDW PDL PXOW VDX PDL SX LQ FXSULQ]WRUDWXQFLDFHVWDWUHEXLHGHSXVîntr−RYDULDELOGHUHVSHFWLYXOWLSúLFRQYHUVLDVH YDIDFHDXWRPDW([LVWFD]XULvQFDUHFRPSLODWRUXOGHúLDFFHSWFRQYHUVLDGXQPHVDM 26

Introducere in programare

GH DWHQ LRQDUH $FHDVW VLWXD LH DSDUH DWXQFL FkQG VH SRDWH DOWHUD YDORDUHD XQRU GDWH deoarece formatul în care fac conversia este mai mic. 'DF SURJUDPDWRUXO HVWH VLJXU F GRUHúWH UHVSHFWLYD FRQYHUVLH DWXQFL WUHEXLH V UHDOL]H]H R FRQYHUVLH H[SOLFLW SHQWUX FD UHVSHFWLYXO PHVDM GH DWHQ LRQDUH V GLVSDU 'HRDUHFHODFRQYHUVLLOHLPSOLFLWHVHSRDWHDOWHUDYDORDUHDFDOFXODWSRDWHDSUHDRHURDUH JUHXGHWHFWDELO S1= (int)((double)z/x+0.5); ÌQH[HPSOXOGHPDLVXVVHIRU HD]WUXQFKLHUHDGHODRUHSUH]HQWDUHGHWLSdouble la o reprezentare în numere întregi. 'DWHOHQXSRWILDOWHUDWHGDFVHUHDOL]HD]RFRQYHUVLHGHWLSvQWUHXQWLSGHGDWFX GRPHQLXGHYDORULPDLPLFúLXQWLSGHGDWDOFUXLGRPHQLXHVWHPDLPDUH 5.4. Operatorii unari ++úL- 'XS FXP VD PHQ LRQDW DFHúWL RSHUDWRUL VH QXPHVF XQDUL GHRDUHFH VH DSOLF DVXSUDXQHLVLQJXUHYDULDELOH H[SUHVLL ODXQPRPHQWGDW(LUHDOL]HD]LQFUHPHQWDUHDVDX decrementarea valorii respective cu o unitate. /LPEDMXO & PDL DUH XQ DYDQWDM DFHúWL RSHUDWRUL SRW IL IRORVL L SHQWUX SRVW VDX preincrementare. Acest lucru este prezentat în exemplu de mai jos: 'DF[ DWXQFL Preincrementare Predecrementare Postincrementare Postdecrementare

y=++x y=--x y=x++ y=x--

ÅÆ x=x+1=5 úL\ [  ÅÆ x=x-1=3 úL\ [  ÅÆ y=x=4 úL[ [  ÅÆ y=x=4 úL[ [ 

5.5. Operatorii op= $X IRW LQWURGXúL SHQWUX VLPSOLILFDUHD VFULHULL FRGXOXL 2 LQVWUXF LXQH JHQHULF GH tipul rez = rez op opd1 ÅÆ UH]RS RSG$FHúWLRSHUDWRULDSDU LQXUPWRDUHLFODVH^ += -= = /= %= &= ^= |=} de exemplu: x=x*7 ÅÆx*=7; 2SHUDWRULUHOD LRQDOLúLORJLFLG Pentru a se putea lua decizii într-un program, deci pentru a realiza ramificarea IOX[XOXL GH SUHOXFUDUH D GDWHORU WUHEXLH V H[LVWH R PRGDOLWDWH GH FRPSDUDUH D LQIRUPD LLORU úL GH DVHPHQL GH FRPELQDUH  D H[SUHVLLORU ORJLFH SULPLWLY vQ H[SUHVLL PDL complexe. 'HH[HPSOXGDFvQYDULDELOHOH[úL\DPVWRFDWYDORDUHDDWXQFLH[SUHVLDx==y va fi $'(95$7úLYDDYHDODHYDOXDUHDH[SUHVLHLYDORDUHDQXPHULFGDF[ úL\  atunci expresia [ \YDIL)$/6úLGHFLvQXUPDHYDOXULLYDILvQORFXLWFXYDORDUHD

27

Operatori UHOD LRQDOL == != > < >= 5) && (n2>5) && (n3>5)) { printf(“\nDati nota de la stat:”); scanf(“%f”,&ns); m1=(n1+n2+n3)/3; m2=(m3+ns)/2; printf(“ media de licenta %f”, m1); printf(“ media generala %f”,m2); } else printf(“Candidat respins”); getch(); } 2EVHUYD LL6 1. ÌQ DFHDVW ID] IDSWXO F VD IRORVLW R UHIHULQ  SHQWUX FLWLUHD XQHL YDULDELOH  YH]L Q QXSRDWHILH[SOLFDWVXILFLHQWúLYDWUHEXLOXDWFDDWDUHvQFD]XOFLWLULLYDULDELOHORU simple. 2. Operatorul ‘?Q¶UHDOL]HD]XQVDOWODOLQLHQRX

33

Introducere in programare

3. 6H REVHUY F SH UDPXUD GH else nu s-au introdus delimitatorii de bloc (acoladele) SHQWUX F GDF DFHúWLD QX VXQW SUHFL]D L SULPD LQVWUXF LXQH HVWH DXWRPDW FRQVLGHUDW DSDU LQkQGUDPXULLUHVSHFWLYH 4. 3HQWUX SURJUDPDWRULL PDL DYDQVD L vQ PRPHQWXO vQ FDUH EORFXO GH LQVWUXF LXQL HVWH IRUPDWGLQWURVLQJXULQVWUXF LXQHVHSRDWHIRORVLRSHUDWRUXO"FDvQH[HPSOXOGHPDL jos, unde : if(a>b) x=25; else yx=34; poate fi echivalat prin: a>b (x=25) : (y=34); 8Q DOW H[HPSOX GH IRORVLUH D RSHUDWRUXOXL " HVWH R OLQLH GH FRG FDUH FDOFXOHD] PD[LPXOGLQWUHYDUúLYDUúLOGHSXQHvQYDULDELODPD[ max=(var1>var2) ? var1 : var2; Mai jos vom prezenta un program simplu cu exemple despre evaluarea unor expresii compuse într-un program: void main(void) { int x = 11,y = 11,z = 11; char a = 40,b = 40,c = 40; float r = 12.987,s = 12.987,t = 12.987; LI [ \ ]  H[HFX LDLQVWUXF LXQLLYDDYHDFDHIHFW]   LI [!] D  $  H[HFX LDLQVWUXF LXQLLYDDYHDFDHIHFWD   LI  [!] D  %  H[HFX LDLQVWUXF LXQLLQXYDDYHDQLFLXQHIHFW  LI E F U  H[HFX LDLQVWUXF LXQLLYDDYHDFDHIHFWU   LI U V W F H[HFX LDLQVWUXF LXQLLYDDYHDFDHIHFWW   LI [  U V ]  H[HFX LDLQVWUXF LXQLLYDDYHDFDHIHFW IDSWXOF[YDOXDYDORULSR]LWLYHLDU]   LI [ \ ]  H[HFX LDLQVWUXF LXQLLYDDYHDFDHIHFW [ \úL]   LI [  ]  H[HFX LDLQVWUXF LXQLLYDDYHDFDHIHFW]   LI [ ]  H[HFX LDLQVWUXF LXQLLYDDYHDFDHIHFW]   x = y = z = 77; LI [ \   [

 ]  H[HFX LDLQVWUXF LXQLLYDDYHD ca efect z = 33 */ LI [!\ __ ]! ]  H[HFX LDLQVWUXF LXQLLYDDYHD6 ca efect z = 22 */ LI [ \ ] ]  H[HFX LDLQVWUXF LXQLLYDDYHD6 ca efect z = 11 */ LI [    \    ]  U  H[HFX LDLQVWUXF LXQLL6

34

LI [

Introducere in programare

va avea ca efect x = 1, y = 2, z = 3, r = 12.00 */    \    ]  U  H[HFX LDLQVWUXF LXQLLQX6 va avea nici un efect */

if (x == x); z = 27.345; /* z se va modifica întotdeauna */ LI [ [ ]  \QXVHYDPRGLILFDQLFLRGDW  LI [  ]  [YDOXDYDORDUHD]YDUPkQHQHVFKLPEDW  } ,QVWUXF LXQHGHGHFL]LHPXOWLSO VHOHF LH 6 ([LVW VLWXD LL vQ FDUH UH]ROYDUHD XQHL SUREOHPH LPSXQH FD R GHFL]LH V FRQGXF OD H[HFX LDDPDLPXOWGHGRXUDPXULGHSURJUDP&DH[HPSOXVFRQVLGHUPFD]XO FHOHL PDLVLPSOHIRUPHGHPHQLXFDUHSRDWHILRIHULWXQXLXWLOL]DWRU 6HFLWHúWHXQQXPUGHODWDVWDWXU )XQF LHGHYDORDUHDGDWVHSRDWHDOHJHH[HFX LD XQHLDGLQWUHRS LXQLOHSUH]HQWDWHXWLOL]DWRUXOXL0DLMRVHVWHSUH]HQWDWXQPHQLXVLPSOX folosind metoda pseudocodului. úWHUJHHFUDQ6 DILúHD]PHVDM³$SDVXQDGLQWDVWHSHQWUXDDOHJHRSHUD LXQHDGRULW´6 DILúHD]PHVDM³&LWLUHGLQILúLHU´6 DILúHD]PHVDM³6FULHUHLQILúLHU´6 DILúHD]PHVDM³3URFHVDUHGDWH´6 DILúHD]PHVDM³DILúDUHJUDILFUH]XOWDW´6 FLWHúWHRWDVW IXQF LHGHWDVWFLWLW GDFHDSHOHD]IXQF LDGHFLWLUHGLQILúLHUDSRLVWRS6 GDFHDSHOHD]IXQF LDGHVFULHUHLQILúLHUDSRLVWRS6 GDFHDSHOHD]IXQF LDGHSURFHVDUHGDWHDSRLVWRS6 GDFHDSHOHD]IXQF LDGHDILúDUHJUDILFDUH]XOWDWHDSRLVWRS6 GDFQXHQLFLXQXOGLQQXPHUHOHGHPDLVXV6 DILúHD]PHVDM³2S LXQHLQYDOLG´6 6H REVHUY F VH SRDWH UHDOL]D LPSOHPHQWDUHD úL FX LQVWUXF LXQL if… dar, acest OXFUXQXHVWHMXVWLILFDWDWkWWLPSFkW DYHPRLQVWUXF LXQHVSHFLDOL]DWSHQWUXDFHVWWLS GHVLWXD LL$FHDVWDHVWHLQVWUXF LXQHDFDVH«FXXUPWRDUHDVLQWD[ sZLWFK RSHUDQG IXQF LHGHRSHUDQG6 { FDVHYDOGDFRSHUDQGXOLDYDORDUHD EORFGHLQVWUXF LXQL break; // stop case vDOGDFRSHUDQGXOLDYDORDUHD EORFGHLQVWUXF LXQL break; // stop

35

Introducere in programare

... case YDOQGDFRSHUDQGXOLDYDORDUHDQ EORFGHLQVWUXF LXQLQ break; // stop GHIDXOWSHQWUXRULFHDOWYDORDUH EORFGHLQVWUXF LXQLFHWUDWHD]UHVWXOYDORULORU ce le poate avea operandul } // stop

2IRUPGHUHSUH]HQWDUHODQLYHOGHVFKHPDORJLFDUILFHDSUH]HQWDWvQILJXUD

)LJ6FKHPDORJLFSHQWUXUHSUH]HQWDUHDXQHLVWUXFWXUL6 GHVHOHF LHPXOWLSO 0DL MRV HVWH SUH]HQWDW XQ SURJUDP FDUH FLWHúWH GRL RSHUDQ]L GH OD WDVWDWXU DSRL QH SHUPLWHVHOHF LDRSHUD LHLPDWHPDWLFHFHWUHEXLHUHDOL]DWFDvQILQDOVDILúH]HUH]XOWDWXO #include #include void main(void) { int op1, op2; float rez; char oper; clrscr(); printf(“Dati primul operand:”); scanf(“%d”,&op1); printf(“\nDati al doilea operand:”); scanf(“%d”,&op2); printf(“\nSelectionati operatia dorita”); oper=getch(); printf(“/n1- Adunare”); printf(“/n2- Scadere”); printf(“/n3- Inmultire”); printf(“/n4-Impartire ”); switch(oper) 36

Introducere in programare

{ case ’ 1’:rez=op1+op2;break; case ’ 2’:rez=op1-op2; break; case ’ 3’:rez=op1*op2; break; case ’ 4’:rez=op1/op2; break; default: clrscr(); printf(“Operatie nepermisa”); } printf(“\nRezultatul este: %d”, rez); }

37

CAPITOLUL 7

Introducere in programare

,QVWUXF LXQLGHFLFODUH,QWURGXFHUH 6DGLVFXWDWSkQ DFXP GHVSUH VWUXFWXUL GH FRQWURO FDUH SHUPLW DOHJHUHD FRQGL LRQDW vQWUH H[HFX LD PDL PXOWRU VHWXUL GH LQVWUXF LXQL 6LVWHPHOH GH FDOFXO DX DYDQWDMXO F SRW UHSHWDRGDW³LQVWUXLWHFHúLFkW´ SURJUDPDWH XQQXPUGHRSHUD LXQLGH FkWHRUL HVWH QHYRLH 2ULFH OLPEDM GH SURJUDPDUH HVWH DUH LPSOHPHQWDW DFHDVW SRVLELOLWDWH ([LVW GRXFODVHGHLQVWUXF LXQLGHFLFODUH UHSHWDUH  2SULPFDWHJRULHVH UHIHUODLQVWUXF LXQLOH FDUH UHSHW XQ EORF GH LQVWUXF LXQL SkQ FkQGHVWHvQGHSOLQLWRFRQGL LH SULQFRQGL LHSXWHPvQ HOHJHRH[SUHVLHPXOWLSOFHYDIL HYDOXDW GH FWUH FRPSLODWRU  'H RELFHL HVWH IRORVLW SHQWUX LQWHUDF LXQL UHSHWLWLYH FX XWLOL]DWRUXOVDXvQFDOFXOXOQXPHULFSULQDSUR[LPD LLúLGHDFHHDLQVWUXF LXQLOHUHVSHFWLYH VHQXPHVFLQVWUXF LXQLFXQXPUQHFXQRVFXWGHSDúL 2 D GRXD FDWHJRULH GH LQVWUXF LXQL UHSHWLWLYH HVWH DFHHD D LQVWUXF LXQLORU FX QXPU FXQRVFXWGHSDúL'LQSXQFWGHYHGHUHDOOLPEDMXOXLQXDUILVWULFWQHYRLHGHDFHVWWLSGH LQVWUXF LXQL SHQWUX F VH SRDWH UHDOL]D DFHVW OXFUX FX LQVWUXF LXQLOH GLQ SULPD FODV 7RWXúL GXS FXP VH YD REVHUYD PDL MRV LPSOHPHQWDUHD FX LQVWUXF LXQL FX QXPU QHFXQRVFXWGHSDúL  SHQWUX DFHDVW D GRXD FODV SUHVXSXQH XQ FRG FDUH YD IL LGHQWLF OD DEVROXW WRDWH LQWHUSUHWULOH 3HQWUX D XúXUD VFULHUHD FRGXOXL úL DO IDFH PDL FODU VD LPSOHPHQWDWRLQVWUXF LXQHQRXIRU... . ,QVWUXF LXQLFXQXPUQHFXQRVFXWGHSDúL6 ,QVWUXF LXQHDwhile (VWHRLQVWUXF LXQHFDUHSHUPLWHUHSHWDUHDVDXQXDH[HFX LHLXQHLEXF LGHFRGIXQF LH GHYDORDUHDGHDGHYUDXQHLH[SUHVLL 8QH[HPSOXvQFDUHDUILQHFHVDUDFHVWWLSGHLQVWUXF LXQLDUILUHVWULF LDGRPHQLXOXL de valori în cazul datelor care le poate introduce un utilizator. Acest lucru este necesar SHQWUXFGHRELFHLXWLOL]DWRUXOQX LQHFRQWGHWRDWHUHVWULF LLOHUHODWLYODLQWHUYDOXOvQFDUH poate da o valoare de LQWUDUHVDX SRDWH GD GLQ JUHúHDO R YDORDUH LQFRUHFW 7RWXúL PRGHOXOPDWHPDWLFVSHFLILFFODUFDOJRULWPXOOXFUHD]FRUHFWQXPDLvQLQWHUYDOXO>a,b]. 3HQWUX XWLOL]DWRU IDSWXO F SURJUDPXO G XQ UH]XOWDW HURQDW GDWRULW XQHL YDORUL GH LQWUDUH LQWURGXV JUHúLW vQVHDPQ F SURJUDPXO QX IXQF LRQHD] FRUHFW (VWH QHFHVDU FD SURJUDPDWRUXO V QX SHUPLW LQWURGXFHUHD DOWRU GDWH GHFkW FHOH VSHFLILFDWH GH PRGHOXO matematic. 2EVHUYD LH OLPEDMXO & VSUH GHRVHELUH GH OLPEDMXO 3DVFDO QX JHQHUHD] XQ PHVDM GH HURDUH GDF WLSXO GH GDW LQWURGXV QX FRLQFLGH FX VSHFLILFDWRUXO GDW IXQF LHL scanf. Din DFHVWPRWLYvQPRPHQWXOvQFDUHVHSUHJWHúWHRYHUVLXQHEHWD SULPDYHUVLXQHDDSOLFD LHL FDUH YD IL IRORVLW GH FWUH XWLOL]DWRU  WUHEXLHVF LQWURGXVH WRDWH UHVWULF LLOH GH WLSXO PHQ LRQDWPDLVXV/DQLYHOGHSVHXGRFRGPHWRGDSRDWHILGHVFULVFDPDLMRV FLWHúWHYDORDUHDGHLQWUDUH atâtaWLPSFkWYDORDUHDGHLQWUDUHQXVHDIOvQLQWHUYDOXO>a,b] HPLWHXQPHVDMGHDWHQ LRQDUHFWUHXWLOL]DWRU6

38

UHFLWHúWHYDORDUHD6

Introducere in programare

3HQWUXDFHDVWDVHSRDWHIRORVLLQVWUXF LXQHDZKLOH«DFUHLVLQWD[HVWHSUH]HQWDW mai jos: while(FRQGLWLH DWkWDWLPSFkWFRQGL LDHVWHDGHYUDWH[HFXW { EORFGHLQVWUXF LXQL6 } ÌQILJXUDHVWHSUH]HQWDWVFKHPDORJLFFRUHVSXQ]WRDUHLQVWUXF LXQLLwhile.

LQVWUXF LXQLLwhile

)LJ6FKHPDORJLFD6

ÌQH[HPSOXOGHPDLMRVHVWHYRUEDGHFLWLUHDXQHLYDORULvQWUHJLFDUHWUHEXLHVDSDU LQ intervalului [0,255]. #include #include void main(void) { unsigned char value; clrscr(); printf(“Nr1:”); scanf(“%d”,&op1); while((value>255)&&(value=MIN)AND(x@ Y HVWH SRLQWHU FWUH SULPXO

70

Introducere in programare

HOHPHQWDOWDEORXOXL$WXQFLFkQGVLPEROXOHVWHXUPDWGHXQQXPHQXPUvQWUHSDUDQWH]H SRLQWHUXO HVWH LQGH[DW FX DFHO QXPU DSRL UHIHULW 8Q SURFHV VLPLODU DSDUH úL vQ FD]XO IXQF LLORU )LHGHFODUD LDLQWI  vQDFHVWFD]IHVWHXQSRLQWHUODIXQF LH&kQGHOHVWHXUPDW GHROLVWGHDUJXPHQWHLQFOXVvQWUHSDUDQWH]HHO HVWHUHIHULW  DOWPRGGHDVSXQH FR IXQF LHHVWHDSHODW 'HDVHPHQHDGDFLQWY>@VHUHIHUODXQSRLQWHUFRQVWDQWODIHOúL vQFD]XOLQWI  IHVWHWRWXQSRLQWHUFRQVWDQWvQVHVWHLOHJDOVVHDVLJQH]HRYDORDUHOXL I 3HQWUX D GHFODUD R YDULDELO SRLQWHU FWUH R IXQF LH QXPHOH SRLQWHUXOXL WUHEXLH SUHFHGDWGH GHH[HPSOXLQW SI  HVWHXQSRLQWHUFWUHRIXQF LHFHvQWRDUFHXQvQWUHJ 'HIDSWVHGHFODURYDULDELOGHWLSSRLQWHUFDUHHVWHFDSDELOVUH LQXQSRLQWHUFWUHR IXQF LHFHvQWRDUFHXQvQWUHJ 3DUDQWH]HOHVXQWQHFHVDUHGHRDUHFHvQOLSVDORUSIDUILFRQVLGHUDWRIXQF LHFDUH vQWRDUFHXQSRLQWHUODvQWUHJ $VLJQDUHDXQHLYDORULSHQWUXSRLQWHULLODIXQF LLVHUHDOL]HD]DVWIHOILHIXQF LDLQW IDWBER\   úL SRLQWHUXO OD R IXQF LH FH vQWRDUFH XQ vQWUHJ LQW SI    $VLJQDUHD VH UHOL]HD]GLUHFWSI IDWBER\'HYLQDVWIHOFODUHXUPWRDUHOHHURUL  SI I  XQGHSIHVWHSRLQWHUODIXQF LHLDUI  HVWHXQvQWUHJ  SI I   QX VH SRDWH RE LQH DGUHVD UH]XOWDWXOXL XQHL IXQF LL GHRDUHFHWUDQVIHUXOVHIDFHSULQVWLY  SI  IXQGHSIHVWHSRLQWHUODLQWLDU IHVWHSRLQWHUODSRLQWHU &RQYHQ LLGHWLSvQFD]XOGHvQWRDUFHUHSDUDPHWULL6 1XWUHEXLHXLWDWFWLSXOGHGDWHvQWRUVGHIXQF LHWUHEXLHVILHvQFRLQFLGHQ FX WLSXOGHSRLQWHUODIXQF LHGHFODUDW 'HH[ILHGHFODUD LLOH LQWLI  LI   SLI   IORDWII   SII   FKDUFI   SFI   úLVHFYHQ DGHDVLJQUL SLI LIOHJDOWLSXULOHVXQWLGHQWLFH SFI FILOHJDOQHSRWULYLUHGHWLS SII LILOHJDOQHSRWULYLUHGHWLS SFI FIOHJDO LI LILOHJDOVHvQFHDUFDVLJQDUHDXQHLQRLYDORULODRFRQVWDQW $SHOXOXQHLIXQF LLIRORVLQGpointeri ([ LQWI   LQW SI   LQWUH] « SI IDPDVLJQDWSIODIXQF LH  UH]  SI D DPDSHODWIXQF LDIFXDFDSDUDPHWUX

71

Introducere in programare

Obs: SI D HVWH(&+,9$/(17FX

SI 6LQWD[D$16,SHUPLWHFDvQORFGH SI D VIRORVHVFSI D 3HQWUXSRUWDELOLWDWHDXQXLSURJUDPHVWHLQGLFDWVVHIRORVHDVF SULPDIRUP Întoarcerea ca rezultat de SRLQWHUODIXQF LL6 2 IXQF LH SRDWH vQWRDUFH XQ SRLQWHU OD DOW IXQF LH GDU WUHEXLH DYXW JULM GHVSUH PRGXOvQFDUHVHYDIDFHGHFODUDUHDDFHVWHLIXQF LL'HH[HPSOX ,QW I IORDW[IORDW\  sau LQW I [\  IORDW[\ ^ « ` GHFODURIXQF LHFHDUHYDULDELOHGHLQWUDUH[\úLFDUHvQWRDUFHXQSRLQWHUFWUHRIXQF LH FHvQWRDUFHXQvQWUHJ 6OXPXQH[HPSOXPDLFRQFUHWGHIRORVLUHDDFHVWRUIDFLOLW LúLDQXPHRIXQF LH GHVRUWDUHRSWLPDOGLQSXQFWGHYHGHUHDOYLWH]HL 6 DQDOL]P SX LQ SUREOHPD ([LVW PDL PXO L DOJRULWPL GH VRUWDUH ILHFDUH FX DYDQWDMHúLGH]DYDQWDMH 4XLFNVRUW : IRDUWHUDSLGSHQWUXGDWHDOHDWRUDUDQMDWH : LQHILFLHQWGDFGDWHOHVXQWSDU LDOVRUWDWHSHJUXSXUL 0HUJHVRUW : XQXOGLQWUHFHLPDLHILFLHQ LGDUFHUHPHPRULH +HDSVRUW : FHO PDL LQGLFDW SHQWUX DULL PDVLYH GH GDWH GHRDUHFH QHFHVLW FHD PDL SX LQ PHPRULH 3S F vQ XUPD XQRU DQDOL]H SXWHP GHFLGH FDUH GLQWUH FHL WUHL DOJRULWPL YRU IL XWLOL]D L 3RDWHILVFULVXUPWRDUHDIXQF LH 9RLG P\BVRUW IORDWLQBGDWD  ^ H[WHUQYRLGTXLFNBVRUW  PHUJHBVRUW  KHDSBVRUW   KHDSBVRUWSRDWHOLSVL  VH UHDOL]HD] DQDOL]D GDWHORU  6 SUHVXSXQHP F GHFL]LD YD IL GHSXVvQWUXQIODJ VZLWFK IODJ FDVHUHWXUQTXLFNBVRUW FDVHUHWXUQPHUJHBVRUW FDVHUHWXUQKHDSBVRUW GHIDXOWSXWV ´(UURUXQNQRZQ´  H[LW  EUHDN ` ODDSHO P\BVRUW OLVW  OLVW 

72

Introducere in programare

Recursivitatea 2IXQF LHUHFXUVLYHVWHXQDFDUHVHDXWRDSHOHD]'HH[ YRLGUHFXUV YRLG ^ VWDWLFFRQW  SULQWI ³G?Q³FRQW  FRQW UHFXU   ` YRLGPDLQ YRLG ^ UHFXU  `

YRLGUHFXU YRLG ^ VWDWLFFRQW  LI FRQW! UHWXUQ HOVH ^ SULQWI ³G?Q³FRQW  FRQW UHFXU   ` `

/D ILHFDUH DSHO GH IXQF LH vQ VWLY VXQW VDOYD L R VHULH GH SDUDPHWULL 3URJUDPXOGH PDL VXV YD DXWRDSHOD IXQF LD OD ∞   GDU VWLYD 3& HVWH ILQLW DYkQG FD UH]XOWDW R EORFDUH JHQHUDO'HDFHHDRULFHIXQF LHUHFXUVLYWUHEXLHVDLERFRQGL LHQXPLWFD]GHED] FDUHVSHUPLWVWRSDUHDDFHVWXLSURFHV8QH[HPSOXVLPSOXDUILvQFD]XOQRVWUXOLPLWDUHD FRQWRUXOXL'HFL ÌQWUHEUL &HVHvQWPSOGDFúWHUJHPHOVHúLFHOHGRXDFRODGHGHGXSHO" &HVHvQWPSOGDFFRQWQXHGHFODUDWVWDWLF" )RORVLUHD YDULDELOHORU IL[H HVWH R FDOH GH D FRQWUROD UHFXUVLYLWDWHD  GXS FXP DP Y]XW DQWHULRU ÌQ H[HPSOXO GH PDL MRV VH FDOFXOHD]

Q

∑L  L

=

L∈1UHFXUVLY ,QWVXP LQWQ ^ LI Q  UHWXUQQ HOVHUHWXUQ QVXP Q  ` 3W Q  V YHGHP FXP VH H[HFXWSDVFXSDV

73

Introducere in programare

(Clase de stocare) Storage classes

0DMRULWDWHD DSOLFD LLORU PDUL VXQW VFULVH GH HFKLSH GH SURJUDPDWRUL 'XS SURLHFWDUHD VFKL DUHD  DSOLFD LHL vQ FRPXQ ILHFDUH SURJUDPDWRU SOHDF úL UHDOL]HD] R EXFDWL]RODWGHSURJUDP,]RODUHDVHUHIHUODIDSWXOFODUHDOL]DUHDDFHOXLSURJUDPQX VH LQH FRQW GH FHLODO L FL OD  IXQF LLOH FDUH WUHEXLH V OH vQGHSOLQHDVF SURJUDPXO /D VIkUúLWDFHVWHSURJUDPHVXQWXQLWH OLQNHG vPSUHXQSHQWUXDIRUPDDSOLFD LDGRULW 3HQWUX FD vQ DFHDVW ID] V QX DSDU SUREOHPH PDMRUH WUHEXLH V H[LVWH XQ PHFDQLVPFHDVLJXUFDYDULDELOHOHGHFODUDWHGHXQSURJUDPDWRUVQXLQWUHvQFRQIOLFWFX YDULDELOHOHFX DFHODúLQXPHIRORVLWHGHXQ DOW SURJUDPDWRU GH H[ YDULDELOHOH GH FRQWRU DOHXQHLEXFOHLMN 3HGHDOWSDUWHHVWHQHFHVDUFDDQXPLWHGDWHVILHFRPXQHYL]LELOH úLVDXPRGLILFDELOHGHFWUHPDLPXOWHVXUVHFHSURYLQGHODDXWRULGLIHUL L'HFLWUHEXLHV H[LVWH XQ PHFDQLVP FDUH V DVLJXUH F QXPHOH YDULDELOHL GHFODUDWH vQ GLYHUVH ILúLHUH VH UHIHUODDFHOHDúLORFD LLPHPRULH ÌQ&VHGHILQHúWH : &DQGWUHEXLHVILHRYDULDELOFRPXQVDXvPSDU LW VKDUHG : ÌQ FHSDUWHGH FRGHVWH YDODELO DFHVW OXFUX SULQ DWULEXLUHD XQXL VFRS VFRSH  XQHL GHFODUD LL ³6FRSH´ HVWH XQ WHUPHQ WHKQLF FDUH GHQRW UHJLXQHD WH[WXOXL VXUVHL & vQ FDUH QXPHOH GHFODUDW DOXQHLYDULDELOHHVWHDFWLY H[LVW  $OW SURSULHWDWH D YDULDELOHORU HVWH GXUDWD FDUH VH UHIHU OD GHVFULH  GXUDWD GH YLD  vQ PHPRULHDXQHLYDULDELOH 9DULDELOHOH FXGXUDW IL[VXQW JDUDQWDWH FúL UH LQ GDWHOH FKLDU GXS FH úLDX vQGHSOLQLW VFRSXO ÌQVFKLPEvQFD]XOYDULDELOHORUFXGXUDWDXWRPDWDFHVWOXFUXQXPDLSRDWHILJDUDQWDW 'HILQL LH3ULQ6 FODV6 GH6 VWRFDUH6 storage FODVV 6 VH6 vQ HOHJH6 VFRSXO6 úL6 GXUDWD6 XQHL6 variabile. )LHXUPWRUXOVHJPHQWGHSURJUDP YRLGI YRLG ^LQWM VWDWLFLQWYHFW>@ ^` « ` 6H REVHUY F H[LVW GRX YDULDELOH M úL YHFW (OH DX XQ VFRS GH EORF GHRDUHFH VXQW GHFODUDWH vQ LQWHULRUXO DFHVWXLD 9DULDELOHOH FX VFRS GH EORF VXQW GH RELFHL QXPLWH YDULDELOHORFDOH,PSOLFLWYDULDELOHOHORFDOHDXGXUDWDDXWRPDWÌQFD]XOOXLMHOYDDYHD DWULEXLWRQRXDGUHVGHPHPRULHODILHFDUHH[HFX LH D UHVSHFWLYXOXL EORF ÌQ FD]XO OXL YHFWGDWRULWIRORVLULLFXYkQWXOXLFKHLHVWDWLFDWULEXLUHDXQHLDGUHVHGHPHPRULHVHIDFHR VLQJXUGDWúLVHSVWUHD]SHWRDWGXUDWDH[HFX LHLSURJUDPXOXL

74

Introducere in programare

'XUDWDIL[ID GHFHDDXWRPDW 'XSFXPRSUHFL]HD]úLQXPHOHRYDULDELOIL[HVWHXQDVWD LRQDUvQWLPSFH SHQWUXRYDULDELODXWRPDWLF]RQDGHVWRFDUHvQPHPRULHHVWHDOHDVDXWRPDWvQWLPSXO H[HFX LHLSURJUDPXOXL'HFLRYDULDELOIL[ DUH PHPRULH DORFDW PHPRULD OD vQFHSHUHD H[HFX LHLSURJUDPXOXLúLúLSVWUHD]DFHDVWDORFDUHSHWRDWGXUDWDH[HFX LHLDFHVWXLD 9DULDELODDXWRPDWLFVHUHIHU OD ]RQD GH PHPRULH DWDúDW HL GRDU DWkWD WLPS FkW FRGXOvQFDUHúLDUHVFRSXO HVWH H[HFXWDW 2 GDW vQFKHLDW VFRSXO  ]RQD XQGH HUD IL[DW FRPSLODWRUXODVLJXUHOLEHUDUHD]RQHLGHPHPRULHRFXSDWGHDFHDVWD 9DULDELOHOH ORFDOH FX VFRSXO OLPLWDW OD QLYHO GH EORF  VXQW LPSOLFLW DXWRPDWLFH (OHSRWILIRU DWHVOXFUH]HVWDWLFSULQIRORVLUHDFXYkQWXOXLFKHLHVWDWLF ,QL LDOL]DUHDYDULDELOHORU6 'LIHUHQ DGLQWUHYDULDELOHOHIL[HúLFHOHDXWRPDWHHVWHLPSRUWDQWvQVSHFLDOSHQWUX YDULDELOHOHQHLQL LDOL]DWHÌQFD]XOFHORUDXWRPDWHHOHYRUILUHLQL LDOL]DWHODILHFDUHWUHFHUH SULQ]RQDORUGHH[LVWHQ  YRLGPF YRLG ^ LQWM  VWDWLFLQWN  MN SULQWI ³M G?WN G?Q´MN  ` YRLGPDLQ YRLG ^ PF  M  N  PF  M  N  PF  M  N  ` $OWGLIHUHQ DSDUHODLQL LDOL]DUHDLPSOLFLWDYDULDELOHORU : YDULDELOHOHDXWRPDWHQXVXQWLQL LDOL]DWH : YDULDELOHOHVWDWLFHVXQWLPSOLFLWLQL LDOL]DWHFX ([ YRLGPF YRLG YRLGPDLQ YRLG ^ ^ LQWM PF  VWDWLFLQWN PF  MN PF  SULQWI ³M G?WN G?Q´MN  ` ` &XUH]XOWDWXO M  N  M  N  M  N  $OW GLIHUHQ  vQWUH YDULDELOHOH FX GXUDW IL[ úL FHOH DXWRPDWH VH UHIHU OD WLSXULOH GH H[SUHVLLFHSRWILIRORVLWHvQXWLOL]DUH

75

Introducere in programare

'HH[XUPWRDUHOHGHFODUD LLVXQWOHJDOH LQWM N  LQWP MN IORDW[   vQWLPSFHXUPWRDUHOHQXGHRDUHFHMúLNDSDUvQH[SUHVLLvQDLQWHGHDILGHFODUDWH LQWP MN LQWM N  5HJXOLOH GH LQL LDOL]DUH D YDULDELOHORU FX GXUDW IL[ VXQW IRDUWH VWULFWH ,QL LDOL]DUHD VH SRDWHIDFHQXPDLFXRH[SUHVLHFRQVWDQW GHFL18SRDWHFRQ LQHQXPHGHYDULDELO  )RORVLUHDYDULDELOHORUFXGXUDWIL[ 8QH[HPSOXFODVLFGHIRORVLUHDDFHVWRUDHVWHFRQWRUL]DUHDQXPUXOXLGHH[HFX LL DOHXQHLIXQF LLSHQWUXDLSXWHDPRGLILFDH[HFX LDODLQWHUYDOHUHJXODWH 'HH[VSUHVXSXQHPFDYHPXQSURJUDPFDUHIRUPDWHD]XQWH[WFLWLWGLQWUXQ ILúLHU úL VFULH UH]XOWDWXO vQ DOW ILúLHU 8QD GLQ IXQF LL HVWH HVWH SULQWBKHDGHU  DSHODW OD vQFHSXWXO ILHFUXL SURJUDP QRX (YHQWXDO DFHDVWD SRDWH IL GLIHULW IXQF LH GH SDULWDWHDLPSDULWDWHDQXPUXOXLGHSDJLQL GHILQH2'' GHILQH(9(1 SULQWBKHDGHU FKDU FKRSBWLWOH ^ VWDWLFFKDUSDJHBW\SH 2'' LI SDJHBW\SH 2'' ^ SULQWI ³?W?W?W?WV?Q?Q´FKRSBWLWOH  SDJHBW\SH (9(1 ` HOVH ^SULQWI ³V?Q?Q´FKRSBWLWOH  SDJHBW\SH 2'' ` ` “Scopul” unei variabile (Scope) ÌQFDGUXOSURLHFWULLXQXLSURJUDPWUHEXLH LQXWFRQWGHIDSWXOFH[LVWWLSXULGH UHJLXQLILHFDUH FXXQVFRSELQH GHILQLW vQ FDUH VH SRDWH DFFHVD R YDULDELO SULQ QXPH úL DQXPHSURJUDPIXQF LHEORFILúLHU

La nivel de program (program scope)vQVHDPQFYDULDELODHVWHDFWLYvQWUHGLIHULWHOH ILúLHUHVXUVFHFRUHVSXQGSURJUDPXOXLH[HFXWDELO9DULDELOHOHGHDFHVWWLSVXQWFXQRVFXWH GHRELFHLVXEQXPHOHGHYDULDELOHJOREDOH /DQLYHOGHILúLHU ILOHscope)VHUHIHUODIDSWXOFUHVSHFWLYDYDULDELOHVWHDFWLYGHOD SXQFWXOGHGHFODUD LLSkQODVIkUúLWXOILúLHUXOXLVXUVFHRFRQ LQH /DQLYHOGHIXQF LH function scope) YDULDELODHVWHDFWLYGRDUvQFDGUXOIXQF LHL

76

Introducere in programare

/D6 QLYHO6 GH6 EORF6 GH6 LQVWUXF LXQL6 block scope) YDULDELOD H DFWLY GH OD SXQFWXO GH GHFODUD LHSkQODGHOLPLWDWRUXOGHVIkUúLWGHEORF.

ÌQJHQHUDOVFRSXOXQHLYDULDELOHHVWHGHWHUPLQDWGHORFXOvQFDUHVHUHDOL]HD]GHFODUDUHD DFHVWHLD

3URJUDP 6FRSH )LOH 6FRSH )XQFWLRQ 6FRSH

([ LQW,  3URJUDP6FRSH  VWDWLFLQWM )LOH6FRSH  IXQF LQWN  3URJUDP6FRSH  ^LQWP  %ORFN6FRSH  VWDUW  )XQFWLRQ6FRSH  «

%ORFN 6FRSH

$FHDVWLHUDUKL]DUHSHUPLWHFDvQGRXIXQF LLGLIHULWHVDYHPYDULDELOHFXDFHODúLQXPH VDXGHH[ LQWM  PDLQ ^ LQWM IRU M MM SULQWI ³M G?Q´M  OXFUHD]QRUPDOGDUGSGYDODOWXL ` ILúLHUVXUVM  10.5. Variabile globale (program sau file scope) 3kQ DFXP VD GLVFXWDW QXPDL GHVSUH YDULDELOH ORFDOH ([LVW WRWXúL FD]XUL FkQG VH GRUHúWH FD R YDORDUH GHSR]LWDW vQWUR YDULDELO V ILH YL]LELO VDX PRGLILFDELO GLQ LQWHULRUXO RULFUHL IXQF LL 3HQWUX DFHDVWD HVWH VXILFLHQW FD UHVSHFWLYHOH YDULDELOH V ILH GHFODUDWHvQDIDUDFRUSXOXLRULFUHLIXQF LLúLHOHYRUFSWDDVWIHOXQFDUDFWHUJOREDO$FHVW WLSGHYDULDELOHVXQWDXWRPDWLQL LDOL]DWHFXYDORDUHD]HUR ÌQ JHQHUDO vQ SURJUDPDUHD VWUXFWXUDW VH UHFRPDQG HYLWDUHD H[FHVXOXL GH YDULDELOH JOREDOHvQWUXFkWQXVXQWQHDSUDWQHFHVDUHGHFkWHYHQWXDOFDVVFULHPPDLUHSHGHúLXúRU XQ FRG GDU DFHVW FRG QX HVWH QHDSUDW FHO PDL EXQ VDX FHO PDL VWDELO  0DL MRV YRP SUH]HQWDXQH[HPSOXVLPSOXUHODWLYODIRORVLUHDYDULDELOHORUJOREDOH

77

LQFOXGHVWGLRK! LQFOXGHFRQLRK!

Introducere in programare

LQWJOREDOBY LQWRULBGRL LQW[  YRLGPDLQ YRLG ^ LQWORFDOBY FOUVFU  SULQWI ³9DULDELODJOREDODDUHYDORDUHDG?Q´JOREDOBY  SULQWI ³9DULDELODORFDODDUHYDORDUHDG?Q´JOREDOBY  ORFDOBY RULBGRL ORFDOBY  SULQWI ³9DULDELODJOREDODDUHYDORDUHDG?Q´JOREDOBY  SULQWI ³9DULDELODORFDODDUHYDORDUHDG?Q´JOREDOBY  ` LQWRULBGRL LQW[ ^ LQWUHWYDO UHWYDO [  JOREDOBY UHWXUQUHWYDO ` Tematica claselor de stocare ANSI ORFXO XQGH



VH GHFODU

ÌQ DIDUD

vQ LQWHULRUXO

DUJXPHQWH

IXQF LHL

IXQF LHL

IXQF LH

6FRSEORFN

6FRS EORF

6SHFLILFDWRU



GH FODV DXWR

1(3(50,6

VDX UHJLVWHU 6WDWLF

6FRSILúLHU



([WHUQ

'XUDWD DXWRPDWLF

'XUDWDDXWRPDWLF

6FRS EORF

1(3(50,6



'XUDWDIL[

'XUDWD IL[

6FRS SURJUDP

6FRS EORF



1(3(50,6



'XUDWD IL[

'XUDWD IL[

1LFL XQ

6FRS SURJUDP

6FRS EORF

VSHFLILFDWRU

'XUDWD IL[



6FRS EORF



'XUDWD GLQDPLF



'XUDWD DXWRPDWLF

SUH]HQW

10.6. Macrouri ÌQPRGQRUPDOFkQGRIXQF LHHVWH DSHODW VH FUHHD] VHWXO GH YDULDELOH ORFDOH DSRL DFHVWHD VH LQL LDOL]HD] $FHVW OXFUX GXUHD] vQ XQHOH FD]XUL PDL PXOW GHFkW H[HFX LD FRUSXOXLIXQF LHL$SDUHvQWUHEDUHDFXPSRDWHHYLWDSLHUGHUHDGHYLWH]úLWRWXúLVUH]XOWH XQSURJUDPVWUXFWXUDW

78

Introducere in programare

/LPEDMXO & HVWH SUHY]XW FX PDFURXUL PDFURGHILQL LL  FDUH SHUPLW LPSOHPHQWDUHD UDSLGGHRSHUD LLVLPSOHIUGH]DYDQWDMHOHGHWLPSGLQFD]XOIXQF LLORU 'DF VH GRUHúWH GHFODUDUHD XQHL YDORUL FRQVWDQWH VH SRDWH IRORVL GLUHFWLYD SUHSURFHVRUGHILQHFDPDLMRV GHILQHSL

/DvQWkOQLUHDUHVSHFWLYHLGLUHFWLYHSUHSURFHVRUXOYDvQORFXLILHFDUHPHQ LRQDUHvQFRGD OXLSLFXvQVúLYDORDUHD6LPLODUVHYDvQWkPSODúLFXFRUSXOXQXLPDFUR 2EVHUYD LH R YDULDELO SRDWH IL GHFODUDW IL GHFODUDW FD ILLQG VWDWLF DGLF QXúL YD PRGLILFD YDORDUHD SH SDUFXUVXO H[HFX LH FX DMXWRUXO FXYkQWXOXL FKHLH VWDWLF SXV vQDLQWHD VSHFLILFDWRUXOXLGHWLS )LHH[HPSOHOHGHPDLMRVXQGHVXQWSUH]HQWDWHGRXPDFURXULXQXOFDOFXOHD][LDU DOWXOUHDOL]HD]PD[LPXPGLQWUHGRXQXPHUH GHILQHP\BPD[ [\  [ ! \ " [  \  GHILQHP\BVTU [  [ [ 'DFVHYRUIRORVLDFHVWHPDFURXULvQORFXODSHOXOXLXQHLIXQF LLVHYDLQVHUDGLUHFWFRGXO FRUHVSXQ]WRULPSOHPHQWULLGHILQL LLORUGLQGUHDSWD 7RWXúL IRORVLUHD PDFURXULORU DVFXQGH XQ PDUH SHULFRO SHQWUX FLQHYD FDUH QX DUH VXILFLHQWH[SHULHQ 'DFvQFD]XOXQHLIXQF LLVHUHDOL]HD]vQWkLHYDOXDUHDSDUDPHWULORU OD DSHOXO XQXL PDFUR DFHVW OXFUX QX VH PDL IDFH $SDU SUREOHPH GH RUGLQH D H[HFX LHL RSHUD LLORUFDvQH[HPSOHOHGHPDLMRV UH] P\BVTU [ HYDOXDUHDHVWHUH] [ [vQORFGH  [ [ VDX UH] ]P\BVTU [ HYDOXDUHDHVWHUH]  ][ [vQORFGH] [ [ 'LQDFHVWPRWLYODFRPSLODWRDUHOHGH223VDLQWURGXVQR LXQHDGH IXQF LH³LQOLQH´ FDUHHOLPLQGH]DYDQWDMHOHPDFURXULORUGDUVHFRPSRUWFDDFHVWHD 7UHEXLHPHQ LRQDWFODGHSDQDUHDSDVFXSDVVHSRDWHLQWUDvQLQWHULRUXOXQXLDSHOGH PDFURFHHDFHIDFHFDHURULOHGHWLSXOSUH]HQWDWPDLVXVVILHJUHXGHSLVWDELOH 10.7 Macrouri predefinite 10.7.1. ASSERT )RORVLUHDDFHVWHLPDFURGHILQL LLHVWHLQGLFDWGLQXUPWRDUHOHPRWLYH  

FUHúWHIRDUWHPXOWYLWH]DGHGHSDQDUHDXQXLSURJUDP SURJUDPDUHDvQ&ODRUDDFWXDOHVWHUHDOL]DWVXEFRPSLODWRDUHGH&FDUHDFFHSWúL FRG&FODVLFFRPSLODWRDUHFDUHRDXSUHGHILQLW

79

Introducere in programare

(VWHXQPDFURFDUHIXQF LRQHD]H[DFWFDRLQVWUXF LXQHLIGDUVSUHGHRVHELUHDGH DFHDVWD vQ PRPHQWXO vQ FDUH FRQGL LD GH HYDOXDW LD YDORDUHD ]HUR EORFKHD] H[HFX LD SURJUDPXOXL DSHOkQG IXQF LD DERUW /D VWRSDUHD H[HFX LHL VH WULPLWH FWUH GLVSR]LWLYXO VWDQGDUG GH LHúLUH XQ PHVDM VSHFLILF FDUH SUHFL]HD] QXPHOH ILúLHUXOXL VXUV úL OLQLD GLQ FDGUXODFHVWXLDFDUHDJHQHUDWHURDUHD 'DF YDORDUHD HYDOXDW HVWH GLIHULW GH ]HUR DVVHUW QX DUH QLFL R LQIOXHQ  DVXSUD H[HFX LHLSURJUDPXOXL3URWRWLSXOHVWHGHILQLWvQELEOLRWHFD$66(57+úLDUDWFDPDLMRV YRLGDVVHUW LQWWHVW 

'HRELFHLHVWH IRORVLWSHQWUXDWHVWDGDFRvQFHUFDUHGHDORFDUHGLQDPLF DXQHLQRL ]RQH GH PHPRULH D UHXúLW VDX QX 'XS FXP DP VSXV HO HVWH IRORVLW vQ FDGUXO GHSDQULL XQHL DSOLFD LL 2 GDW WHUPLQDW DFHDVW ID] VH SRDWH IDFH FD SUHSURFHVRUXO & V LJQRUH OLQLLOH GLQ FRGXO VXUV FH FRQ LQ DSHOXUL GH DFHVW WLS SULQ LQFOXGHUHD vQ FRGXO VXUV D GLUHFWLYHL GHILQH1'(%8* vQDLQWHD GLUHFWLYHL FH LQFOXGH ELEOLRWHFD $66(57+ 8Q H[HPSOX VFXUW GH IRORVLUH HVWH SUH]HQWDWPDLMRV DLFLVHYDLQFOXGHGHILQH1'(%8* LQFOXGHDVVHUWK! LQFOXGHDOORFK! YRLGPDLQ YRLG ^ FKDU V V FKDU PDOORF  VL]HRI FKDU  DVVHUW V  V 18// DVVHUW V  ` /D H[HFX LD DFHVWXL SURJUDP VH YD RE LQH DFWLYDUHD DVVHUW GHDELD vQ FHD GHD GRXD VLWXD LH 10.7.2. Macrouri specializate în clasificarea caracterelor. $XIRVWLQWURGXVHSHQWUXDXúXUDJkQGLUHDúLVFULHUHDFRGXOXLvQFD]XOvQ FDUHVHIDFSUHOXFUUL SH úLUXUL GH FDUDFWHUH $FHVWH SUHOXFUUL VXQW GHVHRUL vQWkOQLWH 6D SUHIHUDW LPSOHPHQWDUHD FD PDFURXUL SHQWUX D RE LQH R YLWH] PD[LP GH H[HFX LH 9RP SUH]HQWD PDL MRV FHOH PDL IRORVLWH PDFURXUL SXVH OD GLVSR]L LH GH ELEOLRWHFD &7D«]@ LQWLVDOSKD LQWF  7HVWHD]GDFFDUDFWHUXOFHVWHOLWHUF∈>D«]@VDXF∈>$«=@ LQWLVXSSHU LQWF  7HVWHD]GDFFDUDFWHUXOFHVWHOLWHUPDUHF∈>$«=@ LQWLVSULQW LQWF  7HVWHD]GDFFDUDFWHUXOFHVWHWLSULELOF∈>[«[H@ LQWLVDVFLL LQWF  7HVWHD]GDFFDUDFWHUXORFWHWXOORZDOOXLFH[WHvQLQWHUYDOXO>«@ LQWLVSXQFW LQWF  7HVWHD]GDFFDUDFWHUXOFHVWHXQFDUDFWHUGHSXQFWXD LH LQWLVVSDFH LQWF  7HVWHD]GDFFDUDFWHUXOFHVWHVSD LXWDE&5VDOWODOLQLHQRXWDEYHUWLFDOVDX IRUPIHHGDGLFF∈>[«[G[@ LQWLVGLJLW LQWF  7HVWHD]GDFFDUDFWHUXOFHVWHFLIUF∈>«@ LQWLVJUDSK LQWF  6LPLODUFXLVSULQWQXPDLFVHHOLPLQVSD LLOH LQWLV[GLJLW LQWF  7HVWHD]GDFFDUDFWHUXOFDSDU LQHED]HLF∈>«@VDXF∈>D«I@VDXF∈>$«)@ 10.7. 3. 0DFURGHILQL LLpredefinite 8QXO GLQ XUPWRDUHOH VLPEROXUL HVWH SUHGHILQLW vQ IXQF LH GH PRGHOXO GH PHPRULH DOHVSHQWUXFRPSLODUH BB&203$&7BBBB0(',80BBBB+8*(BB 81

Introducere in programare

BB/$5*(BBBB60$//BBBB7,1L@  `FLWHVFYHFWRUXO S YGHSXQDGUHVDGHvQFHSXWDPDVLYXOXLYvQYDULDELODS IRU L LQL  ^ SULQWI ?Q&RQWLQXWXOOXL YG GL YL  SULQWI ?Q$GUHVDOXL9>G@HVWHSLYL  ` IRU L LQL  ^

84

Introducere in programare

SULQWI ?Q&RQWLQXWXOOXL SG GL YL  SULQWI ?Q$GUHVDOXLSGHVWHSLSL  ` JHWFK  ` 



VIkUúLW]RQDSURJUDPSULQFLSDO











 QHDYkQGIXQF LLSURSULLQXDPDLFLQLPLF

,HúLUHD DFHVWXLSURJUDPvQFD]XOH[HFX LHL SHQWUX XQ YHFWRU GH WUHL HOHPHQWH DUDW FD mai jos: GDWLGLPHQVLXQHD1  9>@  9>@  9>@  &RQWLQXWXOOXL Y  $GUHVDOXL9>@HVWH&()' &RQWLQXWXOOXL Y  $GUHVDOXL9>@HVWH&()' &RQWLQXWXOOXL Y  $GUHVDOXL9>@HVWH&()' &RQWLQXWXOOXL S  $GUHVDOXLSHVWH&()' &RQWLQXWXOOXL S  $GUHVDOXLSHVWH&()' &RQWLQXWXOOXL S  $GUHVDOXLSHVWH&()' 2SHUD LLDULWPHWLFHFXpointeri 2SHUD LLOHDULWPHWLFHSHUPLVHVXQW -

adunarea unui pointer cu un întreg VFGHUHDXQXLvQWUHJGLQWU-un pointer VFGHUHDDGRLpointeri compararea unui SRLQWHUFXFRQVWDQW18// YDORDUHDvQWUHDJD compararea a doi pointeri.

6LQJXUDRSHUD LHDULWPHWLFSHUPLVDVXSUDSRLQWHULORUFWUHIXQF LLHVWHFRPSDUDUHDFX constanta NULL.

85

Introducere in programare

Adunarea unui pointer cu un întreg are ca rezultat un SRLQWHUGHDFHODúLWLSÌQFD]XO în care SRLQWHUXODUHFDYDORDUHDGUHVDXQXLHOHPHQWGHWDEORXUH]XOWDWXODGXQULLHVWHDGUHVD HOHPHQWXOXL DO FUXLLQGLFH HVWH HJDO FXVXPDGLQWUH LQGLFHOH HOHPHQWXOXL FWUH FDUH LQGLF pointerul, plus valoarea întregului. 'LQ PRWLYH OHJDWH GH PRGXO GH JHQHUDUH D DGUHVHORU IL]LFH GH FWUH SURFHVRU UH]XOWDWXOQXHVWHYDOLGGHFkWGDFLQGLFHOHUH]XOWDWGLQFDOFXOHVWHPDLPDUHVDXHJDOFX]HUR úLPDLPLFVDXHJDOFXQXPUXOGHHOHPHQWHGLQWDEORX

6FGHUHD6unui întreg dintr-un SRLQWHU 6H IDFH FD úL FXP V-ar aduna la pointer YDORDUHDvQWUHDJUHVSHFWLYFXVHPQVFKLPEDW 6FGHUHD a doi pointeri. Cei doi SRLQWHULWUHEXLH VLQGLFH FWUH GRX HOHPHQWH GLQ DFHODúLWDEORXUH]XOWDWXOHVWHXQvQWUHJHJDOFXGLIHUHQ DLQGLFLORUFHORUGRXDHOHPHQWH Compararea a doi pointeri. Cei doi SRLQWHULWUHEXLH VLQGLFH FWUH GRXD HOHPHQWH GLQDFHODúLWDEORXUH]XOWDWXOFRPSDUD LHLHVWHHJDOFXUH]XOWDWXOFRPSDUD LHLLQGLFLORUFHORU doua elemente de tablou. 9DORULOH DSDU LQkQGXQXL WLS SRLQWHU SRW IL FRQYHUWLWH FWUH RULFH DOW WLS pointer prin folosirea unei conversii explicite. 11.1.3 Modele de memorie Structura procesoarelor 80x86 a determinat maniere diferite de generare a codului de FWUHFRPSLODWRDUHLQIXQF LHGHPRGXULOHGHDGUHVDUHXWLOL]DWH SHQWUXDFFHVXOODGDWHVDXGHPRGXOGHUHDOL]DUHDDSHOXULORUGHIXQF LL 'DFSURJUDPDWRUXOFXQRDúWHFRPSOH[LWDWHDaplicatiei si volumul de date manipulat, el poate impune o anumita modalitate de generare a codului, astfel incit el sa fie optim. $úDDDSUXWQR LXQHDGHPRGHOGHPHPRULHVSHFLILFPDMRULWDULLFRPSLODWRDUHORUGHSHR PDúLQFRPSDWLELO,%0-PC. Pentru manipularea datelor se folosesc, adesea, SRLQWHUL ÌQ IXQF LH GH PRGXULOH GH adresare utilizate, ei pot avea atributele: - near pointerSHEL LUHSUH]HQWkQGGHIDSWXQoffset in interiorul unui segment; - far pointerSHEL LUHSUH]HQWkQGRFRPELQD LHVHJPHQWRIIVHW DGLFRDGUHVUHDO FRPSOHW XQpointer "far" poate avea orice valoare (in limita a 1 MB de memorie), dar în calcule, segmentul nu poate fi modificat; - huge pointer este similar pointerului "far", dar în calcule segmentul poate fi modificat, astfel LQFkW V SRDW IL DGUHVDW WRDW PHPRULD IU VFKLPEDUHD H[SOLFLW D VHJPHQWXOXL $FHDVW FDUDFWHULVWLF HVWH GDW GH RSHUD LD GH QRUPDOL]DUH OD FDUH VXQW VXSXúL pointerii "KXJHvQRULFHRSHUD LLGHFDOFXO 2EVHUYD LH ÌQFOFDUHD UHJXOLORU GH PDL VXV QX HVWH VHPQDODW vQWRWGHDXQD SURPSW GH compilator. Rezultatele pot fi incerte. Modelele de memorie, utilizate de Turbo C, sunt: 7,1@vQGUHDSWD 'HVFLIUDUHDGHFODUD LLORUFRPSOH[HvQ&6 &HDPDLEXQVWUDWHJLHvQGHVFLIUDUHDGHFODUD LLORUFRPSOH[HHVWHVSRUQLPGHOD QXPHOHYDULDELOHLúLDSRLVDGXJP V LQHPFRQWGHHIHFWXO ILHFDUHSDUWH RSHUDWRU DL H[SUHVLHSRUQLQGFXRSHUDWRULLFHLPDLDSURSLD LGHQXPHOHYDULDELOHL În liSVDSDUDQWH]HORUVHYD LQH FRQW vQWL GH RSHUDWRULL GH WLS IXQF LH VDX WDEORX GLQ GUHDSWD YDULDELOHL GHRDUHFH DX SULRULWDWH PDL PDUH úL GHDELD OD VIUúLW VH YD LQH cont de efectul operatorilor de tip prioritar) De exemplu: FKDU

>@YDILGHVFLIUDWvQXUPWRULLSDúL 1. x[ ] este un tablou 2. **[ ] este un tablou de pointeri 3. char *x[ ] este un tablou de SRLQWHULFWUHFDUDFWHUH 3DUDQWH]HOH SRW IL IRORVLWH ILH SHQWUX FODULWDWH ILH SHQWUX VFKLPEDUH D SUHFHGHQ HL 'H exemplu: LQW

>@   YDILGHVFRPSXVGXSFXPXUPHD] 1. x[ ] este un tablou 2. ( **[ ] ) este un tablou de pointeri 3. ( **[ ] ) ( ) este un tablou de SRLQWHULFWUHIXQF LL 4. int ( (*x [ ] ) ( ) este un tablou de SRLQWHULFWUHIXQF LLFHUHWXUQHD]XQvQWUHJ &RPSXQHUHDGHFODUD LLFRPSOH[H 3HQWUXDFRPSXQHGHFODUD LLFRPSOH[HSURFHVXOHVWHLGHQWLF FDODGHVFRPSXQHUH 'H H[HPSOX GDF VH GRUHúWH GHFODUDUHD XQXL SRLQWHU FWUH XQ WDEORX GH SRLQWHUL FWUH IXQF LL FDUH vQWRUF SRLQWHUL OD WDEORXUL GH VWUXFWXUL FX QXPHOH 6 VH YRU IRORVL XUPWRULL SDúL 1. ( *x) este un pointer 2. ( *x)[ ] este un pointer la un tablou

96

Introducere in programare

3. ( *(*x[ ])) este un pointer la un tablou de pointeri 4. ( *(*x[ ])) ( )este un pointer la un tablou de SRLQWHULODIXQF LL 5. ( *( *(*x[ ])) ( ) )este un pointer la un tablou de SRLQWHUL OD IXQF LL FH vQWRUF pointeri 6. ( *( *(*x[ ])) ( ) ) [ ] este un pointer la un tablou de SRLQWHULODIXQF LLFHvQWRUF pointeri catre tablouri 7. struct S ( *( *(*x[ ])) ( ) ) [ ] este un pointer la un tablou de SRLQWHULODIXQF LLFH întorc pointeri catre tablouri de structuri cu numele S

ÌQ VFRSXO XúXUULL vQ HOHJHULL VH YD SUH]HQWD XQ WDEORX FX diverese expresii complexe X]XDOHvQFRGXULOH&úLDQXPLWHJUHúHOLFRPXQH • • • • • • • • • • • • • • • • • • • • • • • • • • • •

int i; un întreg int* p; pointer la întreg int a[ ]; tablou de întregi LQWI  IXQF LHFHvQWRDUFHXQvQWUHJ int **p; pointer la SRLQWHUFWUHvQWUHJ int ( *pa ) [ ]; pointer la tabloul de întregi int ( *pf ) ( ); SRLQWHUODRIXQF LHFHvQWRDUFHXQvQWUHJ int *ap [ ]; un tablou de SRLQWHULFWUHvQWUHJL int aa [ ] [ ] un tablou de tablou de întregi int DI>@  XQWDEORXGHIXQF LLFHvQWRUFvQWUHJ NEPERMIS int *IS  RIXQF LHFHvQWRDUFHXQpointer la întreg LQWID  >@RIXQF LHFHvQWRDUFHXQWDEORXGHvQWUHJL NEPERMIS LQWI    RIXQF LHFHvQWRDUFHRIXQF LHFHvQWRDUFHXQint NEPERMIS int ***p; pointer la pointer la pointer la int int ( **ppa) [ ]; pointer la SRLQWHUFWUHXQWDEORXGHint int ( **ppf) [ ]; pointer la SRLQWHUFWUHRIXQF LHFHvQWRDUFHint int * ( *pap) [ ]; SRLQWHUFWUHXQWDEORXGHpointeri la întregi int (* paa) [ ] [ ]; pointer la un tablou de SRLQWHULFHUH LQvQWUHJL int (* paf) [ ] ( ); SRLQWHUODXQWDEORXGHIXQF LLFHvQWRUFvQWUHJL NEPERMIS int *( *pfp) ( ); un SRLQWHUODRIXQF LHFHvQWRDUFHvQWUHJ int (* pfa ) ( ) [ ]; SRLQWHUODRIXQF LHFHvQWRDUFHXQWDEORXGHvQWUHJL NEPERMIS int IDI  >@  IXQF LHFHvQWRDUFHXQWDEORXGHIXQF LLFHvQWRUFvQWUHJL NEPERMIS int *IIS    IXQF LHFHvQWRDUFHRIXQF LHFHvQWRDUFHXQpointer la int NEPERMIS int (* pff) ( ) ( ); un SRLQWHUODRIXQF LHFHvQWRDUFHRIXQF LHFHvQWRDUFHXQvQWUHJ NEPERMIS int **app[ ]; un tablou de pointeri la SRSLQWHULFWUHvQWUHJL int ( *apa[ ] ) [ ]; un tablou de SRLQWHULFWUHXQWDEORXGHvQWUHJL int (*apf[ ] ) ( );un tablou de SRLQWHULFWUHIXQF LLFHvQWRUFvQWUHJL int *aap[ ] [ ];un tablou de tablouri de pointeri la întregi 97

• • • • • • • • • •

Introducere in programare

int aaa[ ] [ ] [ ]; un tablou de tablouri de tablouri de întregi int DDI>@>@  XQWDEORXGHWDEORXULGHIXQF LLFHvQWRUFvQWUHJL NEPERMIS int *DIS>@  XQWDEORXGHIXQF LLFHvQWRUFpointeri la întregi int DID>@  >@XQWDEORXGHIXQF LLFHvQWRUFWDEORXULGHvQWUHJL NEPERMIS int DII>@    XQWDEORXGHIXQF LLFHvQWRUFIXQF LLFDUHvQWRUFvQWUHJL NEPERMIS int **ISS  RIXQF LHFHvQWRDUFHXQpointer la pointer de întregi int ( *ISD   >@RIXQF LHFHvQWRDUFHXQSRLQWHUFWUHWDEORXULGHvQWUHJL int ( * ISI     IXQF LHFHvQWRDUFHXQSRLQWHUFWUHRIXF LHFHvQWRDUFHXQvQWUHJ int IDD  >@>@IXQF LHFHvQWRDUFHXQWDEORXGHWDEORXULGHvQWUHJL NEPERMIS int *IDS  >@IXQF LHFHvQWRDUFHXQWDEORXGHSRLQWHULFWUHvQWUHJL NEPERMIS

Câteva tehnici de FUHúWHUHDvitezei de H[HFX LHDunui cod Propagarea copiei (se pune la asignare) Fie urmWRDUHDVHFYHQ GHFRG: x=y z=1.+x corect este: x=y z=1.+y (eliminLQWHUGHSHQGHQ HOHGLQWUHFHOHGRXUHOD LL Reducerea puterii Ex: y = pow (x,2) -> ia foarte mult timp ÌQORFXL LFXy=x*x sau j=k*2 -> ia mult timp vQFRPSDUD LHFXDGXQDUHDM=k+k sau cu deplasarea la stQJDj=kh.ah). Structura outregs este DFWXDOL]DWsetându-se in caz de eroare indicatorul carry. int intdosx(union REGS *inregs, union REGS *outregs, struct SREGS *segregs); Este VLPLODU IXQF LHL intdos, SHUPL kQG în plus úL transmiterea parametrilor prin registrele de segment (DS,ES). Aceste registre sunt restaurate la terminarea apelului. Exemplu: #include #include

109

Introducere in programare

int delete_file(char far *filename);

main() { int err; err=delete_file("Temp1.$$$"); printf("S-a sters fisierul Temp1.$$$:%s\n",(!err)?"DA":"NU"); } int delete_file(char far *filename) { union REGS regs; struct SREGS sregs; int ret; regs.h.ah=0x41; /*delete file*/ regs.x.dx=FP_OFF(filename); sregs.ds=FP_SEG(filename); ret=intdos(®s,®s,&sregs); return(regs.x.cflag?ret:0); } )XQF LLSHQWUXWHUPLQDUHDVDXODQVDUHDSURJUDPHORU void exec(int code); )XQF LD GHWHUPLQ terminarea QRUPDO D programului úi furnizarea unui cod de retur (code) la LHúLUH Acest cod poate fi interpretat ulterior în ILúLHUHOH de comenzi. Este HFKLYDOHQWFXIXQF ia DOS 0x4C. void abort(void); 3URYRDFterminarea DQRUPDODprogramului, cu DILúarea unui mesaj FRUHVSXQ]WRUpe consola sistemului. void keep(unsigned char status,unsigned size); Apelul acestei IXQF LL permite terminarea programului curent cu transmiterea VWULL procesului SULQWHîn variabila status, precum úLsetarea lui ca program TSR (Terminate and Stay Resident) de dimensiune size paragrafe. Restul memoriei este eliberat. )XQF ia este VLPLODUapelului DOS 0x31. int system(const char *cmd); /DQVHD] &200$1'&20 úL H[HFXW R FRPDQG LQWHUQ sau o comand H[WHUQ sau un ILúLHUGHcomenzi. ùirul de caractere, folosit ca parametru, FRQ LQHnumele complet al comenzii úLtoate argumentele necesare H[HFX LHL

110

unsigned getpsp(void);

Introducere in programare

)XQF LDUHWXUQHD]VHJPHQWXOSUHIL[ 3URJUDPSegment Prefix) al programului curent. (D UHDOL]HD] IXQFWLD DOS 0x62. ÌQ  ORFXO DFHVWHL IXQF LL vQV VH SRDWH IRORVL  GLUHFW valoarea variabilei globale _psp. int bioskey(int cmd); Pot fi executate serviciile specifice INT 16h. &X  DMXWRUXO DFHVWHL IXQF LL VH SRW FLWL FRGXULOHGHVFDQDUHFRGXULOHH[WLQVHDOHWDVWHORUVHSRWFLWLFDUDFWHUHIUH[WUDJHUHGLQ bufferul tastaturii, sau se poate afla starea tastelor speciale (SHIFT, CTRL, ALT): -

FPG FLWHúWHFRGXOGHVFDQDUHVLVFRDWHFDUDFWHUXOGLQEXIIHUXOWDVWDWXULLGDFQXPDL VXQWFDUDFWHUHVHDúWHDSWDSVDUHDXQHLQRLWDVWH FPG FLWHúWHFRGXOGHVFDQDUHIUDVFRDWHFDUDFWHUXOGLQEXIIHUXOWDVWDWXULLGDFQX PDLVXQWFDUDFWHUHIXQF LDUHWXUQHD] FPG FLWHúWH%,266KLIW6WDWH VWDUHDWDVWHORUVSHFLDOH6+,)7&75/$/7  int biosprint(int cmd, int abyte, int lpt_port);

5HXQHúWH WRDWH IXQF LLOH VSHFLILFH ,17 K DFFHVXO OD SRUWXO SDUDOHO /37[[  )XQF LD permite FLWLUHDVWULLWULPLWHUHDXQXLFDUDFWHU DE\WH VDXLQL LDOL]DUHDLPSULPDQWHL - FPG  WULPLWH FDUDFWHUXO DE\WH OD SRUWXO SDUDOHO FX QXPUXO GDW GH OSWBSRUW  /37 1=LPT2, etc). - FPG LQL LDOL]HD]LPSULPDQWDFRQHFWDWSHOSWBSRUWFXYDORULOHGLQDE\WH - FPG FLWHúWHVWDUHDLPSULPDQWHLFRQHFWDWHSHOSWBSRUW int bioscom(int cmd, int abyte, int com_port); 5HXQHúte toate IXQF LLOH specifice INT 14h (accesul la portul serial COMxx). )XQF LD permite citirea VWULLtrimiterea unui caracter (abyte) pe FRPXQLFD LHcitirea unui caracter de pe FRPXQLFD LHsau setarea unor controale úLparametri de IXQF LRQDUH -

cmd=0 LQL LDOL]DUHD portului de FRPXQLFD LH com_port (0=COM1, 1=COM2) cu parametrii GD LGHabyte. cmd=1 trimite caracterul abyte pe linia de FRPXQLFD LHGDWDGHcom_port. cmd=2 FLWHúWHcaracterul UHFHS LRQDWpe linia de FRPXQLFD LHGDWGHcom_port. cmd=3 citeste starea portului de FRPXQLFD LHcom_port. long biostime(int cmd, long newtime);

)XQF LDpermite citirea (cmd=0), sau modificarea (cmd=1) timpului sistem, exprimat în incrementi de 55ms, de la pornirea sistemului.

111

Introducere in programare

'H]YROWDUHDGHFRGvQWUXQOLPEDMPL[W &úL$60

(VWH VSHFLILF PHGLXOXL GH GH]YROWDUH %RUODQG & FDUH RIHU SRVLELOLWDWHD LQVHUULL GH FRG$60vQSURJUDPHVXUV&)LHFDUHLQVWUXF LXQH$60WUHEXLHSUHFHGDWGHFXYkQWXO cheie DVPVDXWUHEXLHLQFOXVvQWUXQEORFGHWLS$60GHIRUPD asm { LQVWUXF LXQL$60 } Acest model de dezvoltare este foarte comod, deoarece vizibilitatea obiectelor definite în &VHH[WLQGHúLDVXSUDEORFXULORU$60$VWIHOSXWHPIRORVLQXPHGHSDUDPHWULIRUPDOLDL IXQF LLORUHWF IU D PDL VFULH FDUDFWHUXO ³B´ vQ ID D QXPHORU UHVSHFWLYH 6H HYLW DVWIHO VHFYHQ HOHGHLQWUDUHúLUHYHQLUHGLQIXQF LLFDUHVXQWUHDOL]DWHDXWRPDWGHFRPSLODWRUXO& ([LVWUHVWULF LLGHXWLOL]DUHDHWLFKHWHORU0DLSUHFLVHWLFKHWHOHWUHEXLHGHILQLWHFD etichete C, deci în afara blocurilor ASM. &D úL OD GH]YROWDUHD SH PRGXOH VHSDUDWH SURJUDPDWRUXO WUHEXLH V JHVWLRQH]H explicit modelele de memorie, în sesnsul definirii precise a adreselor far sau near. Pentru DFHDVWDVHXWLOL]HD]PRGHOHOHGHPHPRULH&úLVDXFXYLQWHOHFKHLHQHDUúLIDU 3HQWUX H[HPSOLILFDUH V GLVFXWP LPSOHPHQWDUHD XQHL IXQF LL GH FXWDUH IRORVLQG DWkWPHWRGDFODVLFFkWúLPHWRGDFXFRGGHDVDPEODUH )XQF LDUHVSHFWLYVFULVvQ&HVWHSUH]HQWDWPDLMRV int my_search(int *x, size_t n, int y) { int i; for(i=0;i= NDEVS ) return (0xffff) QXH[LVWXQDVHPHQHDGLVSR]LWLYvQORW while (( dvp -> csr& (RDY | ER )) == 0); // EXFODYHFWRUFDUHDúWHDSWSULPDXQDGLQFRQGL LLHVWHYDOLGDW if dvp -> csr & ER // a fot eroare { dvp -> csr= RES // reset return 0xffff; } return (dvp-> data) & 0xffff; // nu DIRVWHURDUHúLGLVSR]LWLYXOHJDWDVHPLWRFWHWXO }

114

CAPITOLUL 13

Introducere in programare

13. Preprocesorul 2ULFHSURJUDP&vQID]DGHFRPSLODUHWUHFHvQWkLSULQWURSUHSURFHVDUHúLDELDDSRL VH YD JHQHUD FRGXO HFKLYDOHQW vQ DVDPEODUH 3UHSURFHVRUXO GXS FXP vL VSXQH úL QXPHOH IDFHSULPDSURFHVDUHDVXSUDVXUVHL&FRQIRUPGLUHFWLYHORULQFOXVHGLUHFWVDXLQGLUHFWSULQ LQFOXGHUHGHELOLRWHFLGHFWUHSURJUDPDWRU 'LUHFWLYHOHSUHSURFHVRUXOXLVXQWOLQLLVXUVDOFURUSULPFDUDFWHUGLIHULWGHVSD LLOH DOEHHVWH GLH] /LQLLOHFDUHFRQ LQGLUHFWLYHDOHSUHSURFHVRUXOXLVXQWHOLPLQDWHGLQWH[WXO VXUVvQDLQWHFDDFHVWDVILHFLWLWGHFRPSLODWRU3UHSURFHVRUXOvQORFXLHúWHRULFHVHFYHQ GH VSD LLDOEH LQFOXVLYFRPHQWDULL FXXQVLQJXUVSD LX 'LUHFWLYDQXO 2 OLQLH FDUH FRQ LQH QXPDL FDUDFWHUXO  vQ DIDU GH HYHQWXDOHOH VSD LL DOEH  HVWH LJQRUDWGHSUHSURFHVRU 13.2. Directivele #GHILQHúLundef GHILQHLGHQWLILFDWRU>> OLVWDBDUJXPHQWH @FRUS@ XQGHILGHQWLILFDWRU 'LUHFWLYD GHILQH GHILQHúWH R PDFURLQVWUXF LXQH 'DF PDFURLQVWUXF LXQHD DUH DUJXPHQWH SDUDQWH]D VWkQJ WUHEXLH V DSDU vQ GHILQL LH OLSLW GH QXPHOH GHILQLW $UJXPHQWHOH VH VHSDU SULQ YLUJXO &RUSXO PDFURGHILQL LHL QX SRDWH DYHD PDL PXOW GH R OLQLHVXUV VHSRDWHFRQWLQXDOLQLDFX?  ÌQID]DGHSUHSURFHVDUHDSDUL LDQXPHOXLGHPDFURvQWH[WXOVXUV HYHQWXDOXUPDWGH R OLVW GH DUJXPHQWH DFWXDOH LQ SDUDQWH]H  HVWH vQORFXLW FX FRUSXO GH PDFUR vQ FDUH SDUDPHWULLIRUPDOLDXIRVWvQORFXL LFXWH[WXOSDUDPHWULORUDFWXDOL 'XS VXEVWLWX LH WH[WXO RE LQXW HVWH FLWLW GLQ QRX SkQ FkQG QX PDL VXQW QHFHVDUH VXEVWLWX LL GLUHFWLYHOHSUHSURFHVRUXOXLQXVXQWUHFXQRVFXWHvQWH[WXOSURGXVSULQH[SDQGDUHD XQHL PDFURLQVWUXF LXQL  1XPHOH GH PDFUR QX VXQW UHFXQRVFXWH vQ úLUXUL GH FDUDFWHUH VDX FRPHQWDULL2PDFURLQVWUXF LXQHQXVHSRDWHDSHODUHFXUVLY /DDSHOXOXQHLPDFURFXDUJXPHQWHQXPDLYLUJXOHOHGHSHSULPXOQLYHOVXQWOXDWHFD VHSDUDWRDUH GH DUJXPHQWH QX úL FHOH FDUH DSDU vQ SDUDQWH]H VDX vQWUH DSRVWURIH VDX JKLOLPHOH  ÌQ FRUSXO XQXL PDFUR VH SRW IRORVL XUPWRULL RSHUDWRUL FDUH QX DF LRQHD] GHFkW vQ ID]DGHSUHSURFHVDUH  

FDUHGLVSDUHWRWDOQHUPkQvQGQLFLPFDUXQVSD LXúL   FDUH SODVDW LQ ID D XQXL DUJXPHQW IRUPDO vO vQORFXLHúWH FX DUJXPHQWXO DFWXDO 3/$6$7Ì1*+,/,0(/(

'LUHFWLYDXQGHIúWHUJHRPDFURGHILQL LHGLQWDEHODGHPDFURGHILQL LL

115

13.3. Directiva #include

Introducere in programare

#include #include "nume_fisier" #include nume_macro 1XPHOH GH PDFUR SkQ OD XUP WUHEXLH V VH H[SDQGH]H vQ FHYD GH IRUPD QXPHBILVLHU! VDX QXPHBILVLHU (IHFWXO GLUHFWLYHL FRQVW GLQ LQVHUDUHD vQ XQLWDWHD GH FRPSLODUHvQORFXOGLUHFWLYHLLQFOXGHDWH[WXOXLGLQILúLHUXOUHVSHFWLY7H[WXOLQVHUDWSRDWH FRQ LQHúLHOGLUHFWLYHGHSUHSURFHVDUHLQFOXVLYGLUHFWLYDLQFOXGH 'DFvQQXPHOHGHILúLHUDSDUHúLRFDOHGHDFFHVVHYDFXWDQXPDLDFROR$OWIHO GDFVDIRORVLWIRUPDFXJKLOLPHOHVHFDXWvQGLUHFWRUXOFXUHQW8UPHD]GDFWRWQXVD ORFDOL]DWILúLHUXOVVHFDXWHSHUkQGvQGLUHFWRDUHOHGLQOLVWDGDWODLQVWDODUHVDXSHOLQLDGH FRPDQGVDXvQPHGLXOLQWHJUDW 'LUHFWLYHGHFRPSLODUHFRQGL LRQDW "#" "LIH[SUHVLHBFRQVWDQWB [ text_1 ] [ "#" "HOLIH[SUHVLHBFRQVWDQWB text_2 ]... [ "#" "else" text_else ] "#" "endif" 'DF H[SUHVLDBQXHVWHQXO DWXQFLVHFRPSLOHD]WH[WBDOWIHO GDF H[SUHVLDB QXHVWHQXODWXQFLVHFRPSLOHD]WH[WBHWFDOWIHOGDFHVWHSUH]HQWGLUHFWLYDHOVHVH FRPSLOHD]WH[WBHOVH'LUHFWLYHOHGHFRPSLODUHFRQGL LRQDWSRWILvPEULFDWH ([SUHVLDFRQGL LRQDOSRDWHFRQ LQHRSHUDWRUXOGHSUHSURFHVDUHGHILQHG$FHVWDDUH XQDUJXPHQWXQQXPHGHPDFURHYHQWXDOvQSDUDQWH]H9DORDUHDH[SUHVLHLGHILQHG QXPH HVWHGDFDQXPHOHHVWHGHILQLWFXGHILQHGVDXGDFQXH[LVWRPDFURFXDFHOQXPH8Q LGHQWLILFDWRUGHILQLWFXXQFRUSGHPDFURYLGVHFRQVLGHUGHILQLW #LIGHIQXPHHFKLYDOHQWFXif defined (nume) #LIQGHIQXPHHFKLYDOHQWFXif !defined (nume) 13.5. Directiva #line #line QXPUBOLQLH>nume_fisier"] (IHFWXOGLUHFWLYHLFRQVWvQDFHHDFvQILúLHUXOSURGXVGH& SUHSURFHVRUXO&RIHULW FDXWLOLWDU VDXLQPHVDMHOHGHHURDUHHWFOLQLLOHFDUHXUPHD]GXSOLQHYRUILUHIHULWHFDúL FXPDUvQFHSHFXOLQLDQXPUXOQXPUBOLQLHúLDUYHQLGLQILúLHUXOQXPHBILúLHU

116

Introducere in programare

'H RELFHL GLUHFWLYD OLQH QX DSDUH vQ SURJUDPHOH VFULVH FX PkQD FL PDL DOHV vQ SURJUDPHOHJHQHUDWHDXWRPDW'DFQXPHOHGHILúLHUOLSVHúWHHOUPkQHFHOYDODELOvQDFHO PRPHQW ÌQDUJXPHQWHOHGLUHFWLYHLOLQHPDFURLQVWUXF LXQLOHVXQWH[SDQGDWHFDúLODGLUHFWLYD LQFOXGH 13.6. Directiva #error #error mesaj (IHFWXOHLFRQVWvQJHQHUDUHDXQXLPHVDMGHHURDUHGHIRUPD (UURUQXPHBILúLHUOLQHQXPUBOLQLH(UURUGLUHFWLYHPHVDM

&RPSLODUHD XQHL GLUHFWLYH HUURU RSUHúWH FRPSLODUHD 'H RELFHL DSDUH vQ ILúLHUHOH DQWHW LQFOXVHFXGLUHFWLYDLQFOXGH vQFDGUXOXQHLVHFYHQ HFRPSLODWHFRQGL LRQDW'HH[HPSOX #if !defined ( __cplusplus ) #error Nu se poate compila decit in C++ #endif 13.7. Directivele #pragma #pragma argsused 3RDWH DSDUH QXPDL vQ DIDUD XQHL IXQF LL $UH FD HIHFW VXSULPDUHD PHVDMXOXL GH DYHUWLVPHQW UHIHULWRU OD QHXWLOL]DUHD XQXL SDUDPHWUX IRUPDO GDU QXPDL vQ SULPD IXQF LH FRPSLODWGXSDSDUL LDGLUHFWLYHL #pragma exit nume_functie [prioritate] #pragma startup nume_functie [prioritate] ,QVHUHD] IXQF LLOH FLWDWH GHILQLWH FD YRLG QXPHBIXQFWLH YRLG  SHQWUX DSHO vQDLQWH GH PDLQ UHVSHFWLY GXS WHUPLQDUHD IXQF LHL PDLQ  3ULRULWDWHD HVWH XQ vQWUHJ GH OD  OD  )XQF LLOH FX SULRULW L PDL PLFL YRU IL DSHODWH PDL GHYUHPH OD ODQVDUH úL PDL WkU]LX OD WHUPLQDUHDH[HFX LHL3ULRULW LOHGHODODVXQWUH]HUYDWHSHQWUXUXWLQHOHGLQELEOLRWHFLOH 7XUER 'DF SULRULWDWHD OLSVHúWH VH LD  )XQF LLOH FLWDWH WUHEXLH GHFODUDWH vQDLQWHD DSDUL LHLGLUHFWLYHL SUDJPDLQOLQH $QXQ  FRPSLODWRUXO F vQ SURJUDP H[LVW FRG LQOLQH vQ OLPEDM GH DVDPEODUH (VWH HFKLYDOHQW FX RS LXQHD GH FRPSLODUH % ÌQWkOQLUHD GLUHFWLYHL SUDJPD LQOLQH GDF RS LXQHD%QXHVWHDFWLYDUHFDHIHFWUHODQVDUHDFRPSLOULLFXRS LXQHD%DFWLYDW #pragma option

117

Introducere in programare

#pragma option optiune [,optiune]...

2S LXQL GH FRPSLODUH FDUH SRW DSDUH vQ SUDJPD RSWLRQ 180$, Ì1$,17( '( )2/26,5($ 818, 180( '( 0$&52 &$5( Ì1&(3( &8 '28 /,1,8( '( 68%/,1,(5(6$8Ì1$,17('($3$5,,$35,08/8,$720/(;,&$/& (QXPHBDVDPEORU IRS LXQHBIORWDQW LQXPUBFDUDFWHUHBVHPQLILFDWLYH PPRGHOBPHPRULH QGLUHFWRUBLHúLUH RQXPHBILVLHUBLHúLUH X JHQHUDUHGHOLQLX HGHVXEOLQLHUHSHQWUXJOREDOL ]QXPHBVHJPHQW 2S LXQLFDUHSRWDSDUHQXPDLGDFDSDUvQDIDUDRULFURUGHFODUD LLGHRELHFWHVDXIXQF LL  LQVWUXF LXQL  LQVWUXF LXQL D FRQWUROXODOLQLHULL II FRQWURO³UDSLG´DORSHUD LLORUvQYLUJXODPRELO * RSWLPL]DUHSHQWUXYLWH] N FRQWUROQRUPDODOVWLYHL 1 FRQWUROXOVWLYHL 2 FRQWUROXORSWLPL]ULL S VHFYHQ GHDSHO3DVFDO U DORFDUHUHJLVWUH Y FRQWUROSHQWUXGHSDQDUH \ FRQWURODVXSUDQXPHUHORUGHOLQLLvQFRGXORELHFW 2S LXQLFDUHSRWILGDWHRULXQGHVLDXHIHFWLPHGLDW $ VHWXOGHFXYLQWHFKHLH & FRPHQWDULLvPEULFDWH G FRQWRSLUHDúLUXULORUGXSOLFDWH JQXPU RSULUHGXSQXPUDYHUWLVPHQWH MQXPU RSULUHGXSQXPUHURUL . WLSXOFKDUHVWHIUVHPQ #pragma warn #pragma warn +xxx $YHUWLVPHQWHOH[[[VXQWDFWLYDWH #pragma warn -xxx $YHUWLVPHQWHOH[[[VXQWLQDFWLYDWH 'XSFXPDPY]XWSUHSURFHVRUXOSHUPLWHúLGHFODUDUHDDQXPLWRU]RQHGHFRGDVWIHOvQFkW HOHVDILHFRPSLODWHvQDQXPLWHFRQGL LLFXPDUIL Î QXVXQWGHILQLWHDQXPLWHFRQVWDQWHVDXYDULDELOHORFDOH Î FRGXOHVWHXWLOGDUSHQWUXGHSDQDUH

118

Introducere in programare

Î GRUHVFVLPSLHGLFIRORVLUHDXQRUIXQF LLGLQELEOLRWHFvQWUXFkWVXQWUHVFULVHGH RULFLQH VXSUDvQFUFDUHDIXQF LLORU 6LQWD[DJHQHUDOD

([HPSOX SHQWUXKHDGHUHSHUVRQDOHV]LFHPILúLHUXOWHVWK #ifndef __TEST #define __TEST ....... corpul ....... #endif Sau pentru depanare #if DEBUG printf(“.......”); #endif Sau daca nu am definite ni;te valori speciale #ifndef M_PI #define M_PI 3.1415.... #endif.

119

Introducere in programare

 SUH]HQWDUH D UHJXOLORU GH ED]

6FXUW

GH FDUH WUHEXLH LQXW FRQW OD SURLHFWDUHD XQHL DSSOLFD LL

6WLO GH SURJUDPDUH QHUHFRPDQGDW

6WLO UHFRPDQGDW

3XQHUHD GHFODUD LLORU FX H[WHUQ vQ ILúLHUXOF

 H[WHUQ

5HIHULULOH OD IXQF LHYDULDELO 6H SXQ vQ ILúLHUHOH KHDGHUK

$FFHVXO FRPXQ OD GDWH vQWUH IXQF LL UHDOL]DW SULQ

$FFHVXO FRPXQ VH IDFH SULQ WUDQVIHU GH DUJXPHQW

YDULDELOH JOREDOH



 SULQ GHFODUDUH GH WLS VWDWLF

)RORVLUHD GH GDWH JOREDOH F QG QX H FD]XO

6H UH]ROY

&UHDUHD D QXPHURDVH IXQF LL FX VFRSXUL VSHFLDOH

&UHHDUHD XQRU SULPLWLYH JHQHUDOH

 IU

8WLOL]DUHD QXPHORU GH ILúLHU VDX YDULDELO



 FX FRQWH[WXO

)RORVLUHD GH QXPH FDUH VH DSURSLH GH SVHXGRFRG

OHJ WXU

)RORVLUHD FRQVWDQWH QXPHULFH

6H GHILQHVF QLúWH QXPH SW DFHOH YDORUL

)RORVLUHD JRWR

)RORVLUHD VWUXFWXULORU GH FRQWURO D IOX[XULORU



6FULUHD GH FRG UHGXQGDQW

6H IRORVHVF IXQF LL vQ FD]XO vQ FDUH VH REVHUY DFHODúL OXFUX

120

Introducere in programare

// calculul randamentului si puterii pentru un fir conectat la un generator de cc #include #include #include void main(void) { // incepe zona declarare variabile int e,ri,l,s,imax; float r,pext,eta,i,g; //sfirsit zona declarare variabile // incepe zona citire date de intrare clrscr(); printf("\nTensiunea gen. E="); scanf("%d",&e); printf("\nRez. interna gen. ri="); scanf("%d",&ri); printf("\nLungimea fir L="); scanf("%d",&l); printf("\nSectiunea fir S="); scanf("%d",&s); printf("\nCurentul maxim admis Imax="); scanf("%d",&imax); printf("\nConductivitatea gama="); scanf("%f",&g); // sfirsit zona citire date de intrare //incepe zona de calcul conform algoritmului r=l/(g*s); i=e/(r+ri); pext=r*sqrt(i); eta=pext/(e*i); // sfirsit zona de calcul conform algoritmului //incepe zona afisarii rezultatelor printf("\nPext=%3.8f",pext); printf("\nRandament=%3.8f",eta); if(i
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF