atestat profesional ganea florin eduard

Upload: robertitb

Post on 01-Mar-2016

256 views

Category:

Documents


0 download

TRANSCRIPT

LICEUL TEORETIC CAROL I,, FETESTI

ATESTAT PROFESIONALTEMA DE PROIECTSUBPROGRAME:FUNCTII

NUME ELEV:GANEA FLORIN-EDUARD PROF:DOBRE SANDINA

PASCAL Pascal este un limbaj de programare numit dup secolul 17 de catre matematicianul Blaise Pascal. ofer o limb de predare, care scoate n eviden concepte comune pentru toate limbile de calculator standardizeaz limba ntr-un mod care face programe de uor de a scrieNorme stricte face dificil pentru programatorul s scrie cod ru!Un program este o secven de instruciuni care informeaz un computer de o sarcin necesar.Formatul de baz din fiecare program PascalFiecare program Pascal are acelai format esenial, care este ilustrat mai jos,

program TITLUL (Intrare, ieire); ncepe programului declaraii; Programul de declaraie capt.

Programuleste primul cuvnt din toate programele Pascal.Acesta este un cuvntcheie(Cuvintele cheie sunt rezervate, de exemplu, nu putei utiliza cuvinte cheie pentru a descrie variabile).Cuvintele cheie sunt utilizate pentru punerea n aplicare a limbii.Titluleste numele programatorului d program Pascal a fi scris.Acesta este unidentificator.Identificatorii nceap cu o liter, apoi urmat de orice scrisoare de cifre, sau caracterul de subliniere (_).Identificatorii sunt utilizate pentru a da nume de variabile definite de utilizator i metodele utilizate pentru a efectua operaiuni.(Intrare, iesire),statele care programul se va face, de exemplu, de intrare i / sau datele de ieire.Datele sunt introduse de la tastatur, i scoase la ecranul consolei.ncepedefinete punctul de plecare al programului, i ofer o modalitate de grupare a situaiilor mpreun (de exemplu, toate situaiile ntre unnceputifinalsunt considerate ca fcnd parte din acelai grup sau bloc).Programul de declaraii sunt comenzi sau instruciuni de la calculator, care efectua diferite sarcini.scop.Acest lucru trebuie s fie ntotdeauna declaraia final a unui program Pascal.Toate declaraiile PROGRAM SI LINII sunt oprite cu un colon SEMI-, cu excepia BEGIN i END CUVINTE CHEIE.DECLARAII PROGRAM preced O declaraie END nu necesit o virgula-.

Unele cuvinte cheie valide, care pun n aplicare sunt Pascal, ntreg Char nregistrare Cauza real n cazul n n timp ce cu Altele n plus, Pascal nu este sensibil la majuscule.Asta nseamn i altceva

Pascal (Limbaj de programare)Pascaleste unul dintrelimbajele de programarede referin n tiinacalculatoarelor, fiind cel care a definit programarea calculatoarelor. Pascal a fost dezvoltat de elveianulNiklaus Wirthn 1970 pentru a pune n practicprogramarea structurat, aceasta fiind mai uor decompiat. Unul din marile sale avantaje este asemnarea cu limbajul natural limba englez, ceea ce l face limbajul ideal pentru cei care sunt la primul contact cu programarea. Pascal este bazat pe limbajul Algol i a fost denumit astfel n onoarea matematicianului Blaise Pascal, creditat pentru construirea primelor maini de calcul numeric. Wirth a mai dezvoltat limbajele Modula-2 i Oberon, similare cu Pascal.Cele mai populare implementri a acestui limbaj au fost Turbo Pascal i Borland Pascal, ambele ale firmei Borland cu versiuni pentruMacintoshiDOS, care i-au adugat limbajului obiecte i au fost continuate cu versiuni destinate programrii vizuale pentru Microsoft Windows (utilizate de mediul de dezvoltareDelphi) i pentru Linux (Kylix).n prezent exist i alte implementri mai mult sau mai puin populare, dar gratuite, printre care se remarcFree PascaliGNU Pascal.Dei n prezent este relativ rar folosit n industriasoftware, el este nc util elevilor i studenilor care doresc s se iniieze n programare. Spre deosebire deBASIC, care a stat n trecut la baza nvrii programrii, Pascal este un limbaj structurat. De aceea, el formeaz un anumit tip de gndire, similar limbajelor moderne, precumC++, dar nu deine complexitatea i abstractizarea acestuia din urm, fiind mai uor de neles datorit sintaxei simple i apropiate depseudocod.Cuprins 1Tipuri de date de baz 2Operatori (clasificare dup tipul de date) 2.1Pentru datele numerice (integer, real, byte, word) 2.1.1Operatori relaionali 2.2Pentru datele de tip ir de caractere (string) 2.2.1Operatori relaionali 3Instruciuni de baz 3.1Instruciune multipl 3.2Condiie 3.3Cicluri 3.3.1Cu test iniial 3.3.2Cu test final 3.3.3Cu numr cunoscut de pai 4Structura unui program Pascal 5Cteva instruciuni 5.1WRITE 5.1.1Exemplu 5.2READ 5.2.1Exemple 5.3READKEY 5.3.1Exemplu 5.4STR 5.4.1Exemplu 5.5VAL 5.5.1Exemplu 5.6BREAK 5.7EXIT 5.8HALT 5.8.1Exemplu 5.9DELETE 5.9.1Exemplu 5.10INSERT 5.10.1Exemplu

Tipuri de date de baz Integer(numere ntregi) Real(numere reale) Char(caractere) String(iruri de caractere) Boolean(valori logice) Text(fiiere text) File(fiiere binare) Array(vectori)Operatori (clasificare dup tipul de date)Pentru datele numerice (integer, real, byte, word)( )grupeaz expresiile

+,-adunare i scdere

*,/nmulire i mprire (mprirea cu virgul se face n numere reale)

modreturneaz restul (doar n ntregi)

divreturneaz ctul (doar n ntregi)

Operatori relaionalimai mare

=egal

diferit

=mai mare sau egal

Pentru datele de tip ir de caractere (string)+concatenarea a dou iruri

Operatori relaionalimai mare sau mai mic, pe baza ordiniilexicograficen funcie de codurileASCII

=cele dou iruri sunt identice

Instruciuni de bazInstruciune multipl begin end.Condiie if then ;sau if then else ;CicluriCu test iniial while do ;Cu test final repeat until ;Cu numr cunoscut de pai for := to do ;sau for := downto do ;Structura unui program Pascalprogram ;uses type const var

begin end. Not: Dup fiecare comand se pune ";" cu urmtoarele excepii: nainte de "else" (pentru testul if then , dup "do" sau "then" pentru repetitive respectiv testul "if" ,care, n structura lor nu au dect o singur instruciune; nainte de "begin" (dac exist) al oricrei repetitive (for do , while do), dup testul " if then " , dup "repeat" ,sau nainte de "until" (condiia repetitivei cu test final - "repeat",aceasta fiind pusa pe post de "end;") .Cteva instruciuniWRITEEste o instruciune pentruafiarea pe ecrana unui text (ir de caractere) sau a valorii unor constante, unor variabile sau unor expresii, exceptnd date de tip vector sau fiier. Coninutul a ceea ce urmeaz s fie afiat pe ecran este ncadrat de dou paranteze rotunde. Lista a ceea ce urmeaz s fie afiat pe ecran este desprit prinvirgul. InstruciuneaWRITELNface aceeai aciune ca i WRITE dar dup afiare mut cursorul la nceputul rndului urmtor al ecranului.Exempluwrite ('a=', a);Descriere:afieaz pe ecran irula=dup care afieaz valoarea variabilei sau constanteia.READEste o instruciune care citete de la tastatur o variabil, cu excepia tipului boolean i a vectorilor. Variabilele se scriu ntre paranteze i, dac sunt mai multe variabile, se despart prinvirgul. Instruciunea READLN face acelai lucru ca READ dar ateapt un nainte de a prelucra datele primite. n caz c sunt citite mai multe variabile, introducerea acestora se va face prin separarea valorilor prin spaii albe (, sau ).Exemple write ('Dati x='); readln (x);Descriere:afieaz pe ecranDati x=dup care citete de la tastatur valoarea variabileix. readln;Descriere:ateapt apsarea tastei dup care continu cu restul de instruciuni din program.READKEYEste o instruciune de citire de la tastatur a caracterelor (valori de tip char) fr ca acestea s fie afiate pe ecran. Variabila caracter citit se scrie ntre paranteze.Exempluwrite ('Parasiti aplicatia? (d/n)'); readkey (x);Descriere:afieaz pe ecranParasiti aplicatia?apoi ateapt s fie introdus de la tastatur o liter.STRTransform un numr ntr-un string (ir de caractere). Odat transformat n string, numrului nu i se mai pot efectua operaii matematice deoarece acum este considerat un cuvnt.Exemplustr (x, s);Descriere:Creeaz un string din numrulxn iruls.VALTransform un string ntr-un numr att timp ct stringul conine o reprezentare valid.Exempluval (s, x, er);Descriere:creeaz un numr din stringulsn variabilax. Dac n timpul execuiei se ntlnete o eroare, variabila de tip integererva conine poziia caracterului de la care s-a constatat c nu se poate transforma stringul n numr. Spre exemplu, pentru irul de caractere '1234a6' variabilaerva conine5.BREAKOprete forat un ciclu (FOR, REPEAT sau WHILE), chiar dac acesta nu s-a ncheiat.EXITOprete automat programul.HALTOprete automat programul cu posibilitatea de transmite sistemului de operare un cod de eroare.Exempluhalt (5);Descriere:oprete programul i transmite codul de eroare 5.DELETEterge o poriune dintr-un string.Exempludelete (s, 8, 4);Descriere:terge4caractere din irulsncepnd cu poziia8.INSERTIntroduce un ir de caractere n altul.Exempluinsert ('abc',s, 8);Descriere:introduce n irulspe poziia8caractereleabc.Categorie: Limbaje de programare

Notiunea de subprogram. Structura unei functiiUnsubprogrameste un ansamblu alcatuit din tipuri de date, variabile si instructiuni care rezolva o anumita sarcina si care poate fi utilizat doar daca este apelat de un program sau de un alt subprogram.In limbajul C, subprogramele sunt de tip functie. Exista trei elemente implicate in utlizarea unui subprogram:-Prototipulsubprogramului-Definitiasubprogramului-ApelulsubprogramuluiSubprogramul nu este o entitate independenta. El trebuie "asamblat" in interiorul programului, trebuie stabilite legaturi intre modulul apelat si cel apelant. In procesul de prelucrare dintr-un subprogram, sunt necesare date care trebuie prelucrate (date de intrare) pentru obtinerea rezultatului dorit sau date care trebuie prelucrate in vederea modificarii valorilor acestora (date de iesire). In concluzie, functiilecomunica prin intermediul argumentelor (a parametrlor); ele primesc ca parametri (argumente) datele de intrare, efectueaza prelucrarile descrise in corpul functiei asupra acestora si pot returna o valoare (rezultatul, datele de iesire). Executia programului incepe cu functia principala, numitamain. Functiile pot fi descrise in cadrul aceluiasi fisier, sau in fisiere diferite, care sunt testate si compilate separat, asamblarea lor ralizandu-se cu ajutorul linkeditorului de lagaturi.

O functie este formata dinantetsicorp:

antet_functie{corp_functie}

Sau:

tip_valoare_returnata nume_functie(lista_daclaratii_parametri_formali){declaratii_variabile_localeinstructiunireturn expresie}

Prima linie reprezintaantetulfunctiei, in care se indica: tipul functiei, numele functiei si lista declaratiilor rparametrilor formali. Antetul specifica inceputul subprogramului. La fel ca un operand sau o expresie, o functie are untip,care precizeaza tipul valorii returnate de functie in functia apelanta. Daca functia nu intoarce nici o valoare, in locultip_valoare_returnatase specificavoid. Dacatip_valoare_returnatalipseste, se considera, implicit, ca acesta esteint.Nume_functieeste un identificator.Lista_declaratii_parametri_formaliconsta intr-o enumerare care contine tipul si identificatorul fiecarui parametru de intrare, despartite prin virgula. Tipul unui parametru poate fi oricare, chiar si tipul pointer. Daca lista parametrilor formali este vida, in antet, dupa numele functiei, apar doar parantezele(), sau(void).

Corpul functieieste un bloc, care implementeaza algoritmul de calcul folosit de catre functie. La fel ca orice bloc C, el este incapsulat intr-o instructiune compusa, delimitat de caracterele {......}, si este alcatuit din doua parti: partea declarativa si partea executabila, care contine instructiunile prin care sunt descrise actiunile realizate de functie. In corpul functiei apar (in orice ordine) declaratii pentru variabilele locale si instructiuni. Daca functia intoarce o valoare, se foloseste instructiuneareturnvaloare.In limbajul C, se utilizeazadeclaratiisidefinitiide functii.

Orice functie trebuie declarata si definitaDeclaratiacontine antetul functiei si informeaza compilatorul asupra tipului, numelui functiei si a listei parametrilor formali (in care se poate indica doar tipul parametrilor formali, nu si numele acestora). Declaratiile de functii se numescprototipuri, si sunt constituite din antetul functiei, din care pot lipsi numele parametrilor formali.

Definitiacontine antetul functiei si corpul acesteia. Nu este admisa definirea unei functii in corpul altei functii.

Apelul si prototipul functiilorO functie poate fiapelataprintr-o constructie urmata de punct si virgula, numitainstructiune de apel, de forma:nume_functie(lista_parametri_efectivi);

Parametrii efectivi trebuie sa corespunda cu cei formali ca ordine si tip. La apel, se atribuie parametrilor formali valorile parametrilor efectivi, dupa care se executa instructiunile din corpul functiei. La revenirea din functie, controlul este redat functiei apelante, si executia continua cu instructiunea urmatoare instructiunii de apel, dn functia apelanta. O alta posibilitate de a apela o functie este aceea in care apelul functiei constituie operandul unei expresii. Acest lucru este posibil doar in cazul in care functia returneaza o valoare, folosita in calculul expresiei.

Parametrii care se gasesc in antetul unei functii se numescparametri formali. Atunci cand scriem o functie nu se cunoaste valoarea propriu-zisa a parametrilor. Functia trebuie sa intoarca rezultatul corect, oricare ar fi valoarea lor. De aceea ei se numescformali. Parametrii formali se concretizeaza la executie prin apelurile functiei.

Parametrii folositi la apelul unei functii suntparametri efectivi, ale caror valori sunt cunoscute. Aceste valori vor fi atribuite parametrilor formali, la executie. Utilizarea parametrilor formali la implementarea functiilor si atribuirea de valori concrete pentru ei, la executie, reprezinta un prim nivel de abstractizare in programare.

Intre parametrii formali si cei efectivi trebuie sa existe a anumita concordanta, descrisa de urmatoarele reguli:

1. Numarul parametrilor formali trebuie sa coincida cu numarul parametrilor efectivi.2. Tipul parametrilor formali trebuie sa coincida cu tipul parametrilor efectivi sau tipul parametrilor efectivi sa poata fi convertit implicit catre tipul parametrilor formali (ca in cazul operatiei de atribuire).3. Nu este obligatoriu ca numele parametrilor formali sa coincida cu numele parametrilor efectivi.

Exemplu:Programul urmator contine o functie care returneaza maximul dintre doua numere intregi:

Dupa fiecare apel al functiei se tipareste maximul dintre valorile parametrilor efectivi.Variabilele declarate in interiorul unei functii, cat si parametrii formali ai acesteia nu pot fi accesati decat in interiorul acesteia. Aceste variabile sunt numitevariabile localesi nu pot fi accesate din alte functii. Domeniul de vizibilitate a unei variabile este portiunea de cod la a carei executie variabila respectiva este accesibila. Deci, domeniul de vizibilitate a unei variabile locale este functia in care ea a fost definita.Daca in interiorul unei functii exista instructiuni compuse (blocuri) care contin declaratii de variabile, aceste variabile nu sunt vizible in afara blocului.Prototipurile functiilor din biblioteci(predefinite) se gasesc in headere. Utilizarea unei astfel de functii impune doar includerea in program a headerului asociat, cu ajutorul directivei preprocesor#include.Programatorul isi poate crea propriile headere, care sa contina declaratii de functii, tipuri globale, macrodefinitii, etc.Similar cu declararea de variabile, domeniul de vizibilitate a unei functii este:- fisierul sursa, daca declaratia functiei apare in afara oricarei functii (la nivel global);- functia sau blocul in care apare declaratia.

Transferul parametrilor unei functiiFunctiile comunica intre ele prin intermediul parametrilor si a variabilelor globale. Exista urmatoarele moduri de transfer a parametrilor catre functiile apelate:- transfer prin valoare;- transfer prin pointeri- transfer prin referintaTransferul parametrilor prin valoareDe la modulul apelant catre modulul apelat, prin apel, se transmit valorile parametrilor efectivi. Aceste valori vor fi atribuite, la apel, parametrilor formali. Deci, procedeul da transmitere a parametrilor prin valoare consta inincarcarea valorii parametrilor efectivi in zona de memorie a parametrilor formali (n stiva).La apelul unei functii, parametrii reali trebuie sa corespunda - ca ordine si tip - cu cei formali.Fiecare argument efectiv utilizat la apelul functiei este evaluat, iar valoarea este atribuita parametrului formal corespunzator. In interiorul functiei, o copie locala a acestei valori va fi memorata in parametrul formal. O modificare a valorii paramaetrului formal in interiorul functiei (printr-o operatie din corpul functiei), nu va modifica valoarea parametrului efectiv, ci doar valoarea parametrului formal, deci a copiei locale a parametrului efectiv. Faptul ca variabila din modulul apelant (parametrul efectiv) si parametrul formal sunt obiecte distincte, poate constitui un mijloc util de protectie: valoarea parametrului formal poate fi modificata (alterata) prin prelucrarile din corpul functiei.

aloarea parametrului efectiv din functia apelanta, ramane nemodificata (la revenirea in modulul apelant, continutul variabilelor memorate in stiva se pierde).In cazul transmiterii parametrilor prin valoare, parametrii efectivi pot fi chiar expresii. Acestea sunt evaluate, iar valoarea lor va initializa, la apel, parametrii formali.Transferul valorii este insotit de eventuale conversii de tip. Aceste conversii sunt realizate automat de compilator, in urma verificarii apelului de functie, pe baza informatiilor despre functie, sau sunt conversii explcite, specificate de programator, prin operatorul "cast".De fiecare data cand o functie transmite argumente unei functii apelate, este transmisa, de fapt, o copie a parametrilor efectivi. In acest mod, daca valoarea parametrilor formali (initializati cu valorile parametrilor efectivi) se modifica in interiorul functiei apelate, valorile parametrilor efectivi din functia apelanta nu vor fi afectate.

Transferul parametrilor prin pointeriIn unele cazuri, parametrii transmisi unei functii pot fi pointeri (variabile care contin adrese). In aceste cazuri, parametrii formali ai functiei apelate vor fi initializati cu valorile parametrilor efectivi, deci cu valorile unor adrese. Astfel,functia apelatapoate modificacontinutul locatiilor spre care pointeaza argumentele (pointerii).

Transferul parametrilor prin referintaIn acest mod de transmitere a parametrilor, unui parametru formal i se poate asocia (atribui) chiar obiectul parametrului efectiv. Astfel, parametrul efectiv poate fi modificat direct prin operatiile din corpul functiei apelate.In cazul transmiterii prin referinta, parametrii efectivi trebuie sa fie referinte la variabile iar subprogramul retine in stiva, adresa variabilei.Comparand cele trei moduri de transmitere a parametrilor catre o functie, se poate observa:1. La apelulprin valoaretransferul datelor esteunidirectional, adica valorile se transfera numai de la functia apelanta catre cea apelata. La apelulprin referintatransferul datelor estebidirectional, deoarece o modificare a parametrilor formali determina modifiacarea parametrilor efectivi, care sunt sinonime (au nume diferite, dar refera aceeasi locatie de memrie).2. La transmiterea parametrilorprin valoare, ca parametrii efectivi pot apareexpresiisaunume de variabile. La transmiterea parametrilorprin referinta, ca parametri efectivi nu pot apare expresii, cidoar nume de variabile. La transmiterea parametrilorprin pointeri, ca parametri efectivi pot apare expresii de pointeri.3. Transmiterea paramtrilor unei functii prin referinta este specifica limbajului C++.4. Limbajul C este numit limbajului apelului prin valoare. Apelul poate deveni, insa,apel prin referintain cazul variabilelor simple, folosind pointeri, sau in cazul in care parametrul efectiv este un tablou.

Transferul parametrilor catre functia main

In situatiile in care se doreste transmiterea unor informatii (optiuni, date initiale, etc.) catre un program,la lansarea in executie a acestuia, este necesara definirea unor parametri catre functia main. Se utilizeaza trei parametri speciali: argc, argv si env. Trebuie inclus headerulstdarg.h.Prototipul functiei main cu parametri in linia de comanda este:main (int argc, char *argv[], char *env[])

Dacanuse lucreaza cu un mediu de programare integrat, argumentele transmise catre functia main trebuie editate (specificate) in linia de comanda prin care se lanseaza in executie programul respectiv. Linia de comanda tastata la lansarea in executie a programului este formata din grupuri de caractere delimitate de spatiu sau tab. Fiecare grup este memorat intr-un sir de caractere. Daca se lucreaza cu un mediu integrat (de exemplu, BorlandC), selectia comenzii Arguments... din meniul Run determina afisarea unei casete de dialog in care utilizatorul poate introduce argumentele functiei main.- Adresele de inceput ale acestor siruri sunt memorate in tabloul de pointeri argv[], in ordinea in care apar in linia de comanda (argv[0] memoreaza adresa sirului care constituie numele programului, argv[1] - adresa primului argument, etc.);- Parametrul intreg argc memoreaza numarul de elemente din tabloul argv(argc>=1);- Parametrul env este un tablou de pointeri catre siruri de caractere care pot specifica parametri ai sistemului de operare.

Functia main poate returna o valoare intreaga. In acest caz in antetul functiei se specifica la tipul valorii returnate int, sau nu se specifica nimic (implicit, tipul este int), iar in corpul functiei apare instructiuneareturn valoare_intreaga. Numarul returnat este transferat sistemului de operare (programul apelant) si poate fi tratat ca un cod de eroare sau de succes al incheierii executiei programului.

Functii cu numar variabil de parametriIn limbajul C se pot defini functii cu numar variabi de parametri. Parametrii care trebuie sa fie prezenti la orice apel al functiei se numescparametri ficsi, ceilalti se numescparametri variabili. Parametrii ficsi preced parametrii variabili. Prezenta parametrilor variabili se indica in antetul functiei printrei punctecare se scriu dupa ultimul parametru fix al functiei.

De exemplu, fie antetul functiei numite exemplu:

void exemplu (int n, double a, ...) Functia exemplu aredoi parametri fixati(n si a) siparametri variabili, pentru care nu se precizeaza in prealabil numarul si tipul; numarul si tipul parametrilor variabili difera de la un apel la altul.Functiile cu numar variabil de parametri sunt, de obicei, functiile de biblioteca (ex: printf, scanf) si se definesc folosind niste macrouri speciale care permit accesul la parametrii variabili si se gasesc in header.

Functii predefiniteOrice mediu de programare este prevazut cu una sau mai multe biblioteci de functii predefinite. Orice biblioteca este formata din:- fisierele header (contine prototipurile functiilor, declaratiile de variabile);- biblioteca (arhiva) propriu-zisa (contine definitii de functii).

Pentru ca functiile predefinite sa poata fi utilizate, fisierele header in care se gasesc prototipurile acestora trebuie incluse in functia (programul) apelant printr-o directiva preprocesor (exemplu #include ). Deasemenea, utilizatorul isi poate crea propriile headere. Pentru a putea utiliza functiile proprii, el trebuie sa includa aceste headere in programul apelant (exemplu #include "my_header.h").

Pentru functiile predefinite, au fost create fisiere header orientate pe anumite tipuri de aplicatii. De exemplu, functiile matematice se gasesc in headerul. Headerul contine functii standard. Headerul defineste o serie de constante simbolice (exemplu MAXINT, MAXLONG) care reprezinta, in principal, valorile maxime si minime ale diferitelor tipuri de date.

Functii matematice- Au prototipul in headerul

Functii aritmetice:

Valori absolute

int abs( int x);Returneaza un intreg care reprezinta valoarea absoluta a argumentului.

long int labs( long int x );Analog cu functia abs, cu deosebirea ca argumentul si valoarea returnata sunt de tip long int .

double fabs ( double x);Returneaza un real care reprezinta valoarea absoluta a argumentului real.

Functii de rotunjire

double floor( double x);Returneaza un real care reprezinta cel mai apropiat numar, fara zecimale, mai mic sau egal cu x (retunjire prin lipsa).

double ceil( double x);Returneaza un real care reprezinta cel mai apropiat numar, fara zecimale, mai mare sau egal cu x (rotunjire prin adaos).

Functii trigonometrice

double sin (double x)Returneaza valoarea lui sin(x), unde x este dat in radiani. Numarul real returnat se afla in intervalul [-1, 1].

double cos (double x)Returneaza valoarea lui cos(x), unde x este dat in radiani. Numarul real returnat se afla in intervalul [-1, 1].

double tan( double x)Returneaza valoarea lui tg(x), unde x este dat in radiani.

Functii trigonometrice inverese

double asinReturneaza valoarea lui arcsin(x), unde x se afla in intervalul [-1, 1]. Numarul real returnat (in radiani) se afla in intervalul [-pi/2, pi/2].

double acos( double x)Returneaza valoarea lui arccos(x), unde x se afla in intervalul [-1, 1]. Numarul real returnat se afla in intervalul [0, pi].

double atan(double x)Returneaza valoarea lui arctg(x), unde x este dat in radiani. Numarul real returnat se afla in intervalul [0, pi].

double atan2(double y, double x)Returneaza valoarea lui tg(y/x), cu exceptia faptului ca semnele argumentelor x si y permit stabilirea cadranului si x poate fi zero. Valoarea returnata se afla in intervalul [-pi, pi]. Daca x si y sunt coordonatele unui punct in plan, functia returneaza valoarea unghiului format de dreapta care uneste originea axelor carteziene cu punctul, fata de axa absciselor. Functia foloseste, deasemenea, la transformarea coordonatelor carteziene in coordonate polare.

Functii exponentiale logaritmice

double exp (double x)long double exp( long double x)Returneaza valoarea lui e la puterea x.

double ldexp(double a, int b); long double ldexpl(long double a, int b)Returneaza valoarea lui 2 la puterea (a*b).

double frexp(double x, int *y); long double frexp(long double x, int *y)Returneaza valoarea x*2y calculand deasemenea si valoara lui y.Exemplu: Daca x=8, operatia k=frexp(x, y), calculeaza numarul real k, care trebuie inmultit cu 2y pentru a primi rezultatul egal cu x=8, determinandu-l in acelasi timp si pe y (valoarea puterii la care va trebui ridicata cifra 2). Pentru x=8 si k=frexp(x, y) vom obtine urmatoarele rezultate: y=4, k=0,5; adica 0,5=8/(2 la puterea 4).

double log( double x)Returneaza logaritmul natural al argumentului (ln(x)).

double log10( double x)Returneaza logaritmul zecimal al argumentului (lg(x)).

double pow (double baza, double exponent);long double pow(long double baza, long double exponent)Returneaza un numar real care reprezinta rezultatul ridicarii bazei la exponent (baza la puterea exponent).

double pow10(int x); long double pow101(int x)Returneaza valoarea lui 10 la puterea x.

double fmod(double x, double y); long double fmod(long double x, long double y)Returneaza valoarea restului de la impartirea lui x la y.

double sqrt(double x)Returneaza radacina patrata a argumentului x.

Functii de generare a numerelor aleatoare

Functiarandomize. Initializator de generator al numerelor aleatoare.Prototip:void randomize( void );Initializeaza generatorul de numere aleatoare. Este necesara includerea bibliotecii; Se foloseste impreuna cu functiarandom().

int random(int x)Returneaza o valoare aleatoare in intervalul de la 0 la (x-1); Este necesara includerea bibliotecii int rand( void )Genereaza un numar aleator in intervalul [0, RAND_MAX]. Este necesara includerea bibliotecii ; Nu este necesara initializarea.

Functii de clasificare (testare) a caracterelorAu prototipul in headerul . Toate aceste functii primesc ca argument un caracter si returneaza un numar intreg care este pozitiv daca argumentul indeplindeste o anumita conditie, sau valoarea zero daca argumentul nu indeplineste conditia.

int isalnum(int c)Returneaza o valoare intreaga pozitiva daca argumentul este litera sau cifra. Echivalenta cu: isalpha(c) || isdigit(c).

int isalpha(int c)Testeaza daca argumentul este litera mare sau mica. Echivalenta cu isupper(c) || islower(c).

int iscntrl(int c)Testeaza daca argumentul este caracter de control (neimprimabl).

int isdigit(int c)Testeaza daca argumentul este cifra hexagesimala(0-9, a-f, A-F).

int islower(int c)Testeaza daca argumentul este litera mica.

int isupper(int c)Testeaza daca argumentul este litera mare.

int ispunct(int c)Testeaza daca argumentul este caracter de punctuatie (caracter imprimabil, dar nu litera sau spatiu).

int ispace(int c)Testeaza daca argumentul este spatiu alb (' ', '\n', '\t', '\v', '\r')

int isprint(int c)Testeaza daca argumentul este caracter imprimabil, inclusiv blancul.

Functii de conversie a caracterelor - au prototipul in headerul int tolower(int c)Functia schimba caracterul primit ca argument din litera mare, in litera mica si returneaza codul ASCII al literei mici. Daca argumentul nu este litera mare, codul returnat este chiar codul argumentului.

int toupper(int c)Functia schimba caracterul primit ca argument din litera mica, in litera mare si returneaza codul acesteia. Daca argumentul nu este litera mica, codul returnat este chiar codul argumentului.Functii de conversie din sir in numar ( de citire a unui numar dintr-un sir)- Au prototipul in headerul

long int atol(const char *npr)Funtia converteste sirul transmis ca argument (spre care pointeaza npr) intr-un numar cu semn, care este returnat ca o valoare de tipul long int. Sirul poate contine caracterele '+' sau '-'. Se considera ca numarul este in baza 10 si functia nu semnalizeaza eventualele erori de depasire care pot apare din conversia din sir in numar.

int atoi(const char *sir)Converteste sirul spre care pointeaza sir intr-un numar intreg.

double atof(const char *sir)Functia converteste sirul transmis ca argument intr-un numar real cu semn (returneaza valoare de tipul double). In secventa de cifre din sir poate apare litera 'e' sau 'E' (exponentul), urmata de caracterul '+' sau '-' si o alta secventa de cifre. Functia nu semnalizeaza eventualele erori de depasire ce pot sa apara.Functii folosite la prelucrarea sirurilor de caractere - au prototipul in headerul char *strcat(char *dest, const char *sursa)Functia adauga sirul sursa la sirul destinatie.

int strcmp(const char *S1, const char *S2)Compara doua siruri (S1 si S2). Returneaza valoare nula, daca sirurile sunt identice, sau o valoare diferita de zero, in caz ca sirurile nu coincid. Dupa executarea functiei strcmp(), va fi intoarsa o valoare intreaga care va fi: ma mica ca 0 daca S1 < S2; mai mare ca 0 daca S1 > S2; egala cu 0 daca S1==S2; (comparatia celor doua siruri se realizeaza in sens lexicographic).

int strcmp(const char *S1, const char *S2)Compara doua siruri fara a face diferenta intre litere mari si litere mici.

int strncmp(const char *S1, const char *S2, size_t k)Compara primele k caractere din cele doua siruri, furnizand un rezultat la fel ca si functiastrcmp().

int strncmpi(const char *S1, const char *S2, size_t k)Compara un numar de k caractere, incepand cu primul, din cele doua siruri de caractere fara a face diferenta intre caracterele minuscule si cele majuscule.

size_t strlen(const char *S)Determina lungimea sirului de caractere S si returneaza o valoare de tip intreg egala cu numarul de caractere ce se afla in sir.

char *strcpy(char *S1, const char *S2)Copie sirul S2 in sirul S1; sirul S1 isi va pierde valoarea initiala si va avea valoarea noua din S2 iar S2 va ramane neschimbat.

size_t strcspn(const char *S1, const char *S2)Determina pozitia caracterului din sirul S1 care a fost intalnit primul in sirul S2. Returneaza o valoare de tip intreg egala cu pozitia acestui caracter in sir.

size_t strspn(const char *S1, const char *S2)Determina pozitia caracterului din sirul S1 incepand cu care S1 difera de S2. Returneaza o valoare de tip intreg egala cu pozitia acestui caracter.

char *strdup(const char *S)Dubleaza sirul de caractere S. In caz de succes functiastrdup()returneaza ca valoare indicatorul adresei de memorie ce contine sirul dublat si returneaza valoare nula in caz de eroare. Functiastrdup(S)face o copie a sirului S, obtinand spatiu prin apelul functieimalloc. Dupa folosirea sirului dublat programatorul trebuie sa elibereze memoria alocata pentru el. Functiafree()elibereaza memoria ocupata de sirul dublat.

char *strlwr(char *S)Transforma toate caracterele din sirul S in echivalentul lor minuscule. Ca parametru functia foloseste o variabila de tip sir de caractere. Daca sirul contine caractere majuscule, ele se vor transforma in echivalentul lor minuscule.

char *strupr(char *S)Transforma toate caracterele litere mici din sir in majuscule.

char *strupr(char *S)Transforma toate caracterele litere mici din sir in majuscule.

char *strncat(char *dest, const char *sursa, size_t k)Adauga un numar de k caractere de la inceputul sirului sursa la sfarsitul sirului destinatie.

char *strncpy(char *dest, const char *sursa, size_t n)Copie un numar de n caractere din sirul sursa la inceputul sirului destinatie. Daca sirul destinatie va avea lungimea mai mare ca n, atunci rezultatul va avea inceputul egal cu caracterele copiate, iar sfarsitul initial.

char *strset(char *s, int ch, size_t n)Copie caracterulchpe primelenpozitii din sirul *s. Daca n>strlen(s), atunci n va deveni egal cu strlen(s). Functia returneaza o valoare de tip sir de caractere, care va fi retinuta in sirul destinatie.

char *strrev(char *s)Inverseaza sirul de caractere s, fara a lua in consideratie caracterulnull.

char *strstr(const char *s1, const char *s2)Determina daca siruls2este continut in siruls1. Functia returneaza un indicator la caracterul dins1incepand cu care a fost gasit in siruls2.Dacas2nu este subsir al luis1, functia returneaza valoareanull.

char *strchr(const char *S, int c)Cauta prima aparitie a caracteruluicin sirulS. In caz de succes functia returneaza un pointer catre acesta. In caz de eroare (daca asa caracter nu exista in sirul S) functia returneaza valoareaNULL.

char *strpbrk(const char *s1, const char *s2)Determina in siruls1primul caracter ce exista si in siruls2. In caz de succes functia returneaza un pointer catre primul caracter dins1ce se gaseste si ins2.

char *strrchr(const char *s, int c)Determina ultima aparitie a caracteruluicin siruls. In caz de succes functia returneaza un pointer catre ultimul caracter dinsidentic cu caracterulc.

char *strset(char *s, int ch)Schimba toate caracterele din sirulscu caracterulc. Rezultatul final se va pastra in siruls.Functii de terminare a unui proces (program) - au prototipul in headerul void exit(intstatus)Termina executia unui program. Codul returnat de terminarea corecta este memorat in constanta simbolica EXIT_SUCCES, iar codul de eroare in EXIT_FAILURE.

void abort()Termina fortat executia unui program.

int system(const char *comanda)Are prototipul in si permite executia unei comenzi DOS, specificate prin sirul de caractere transmis ca parametru.Functii de intrare/iesire (prototip in )Streamurile (fluxurle de date) implicite sunt: stdin(fisierul, dispozitivul standard de intrare), stdout(fisierul, dispozitivul standard de iesire), stderr(fisier standard pentru erori), stdprn(fisier standard pentru imprimanta) si stdaux(dispozitivul auxiliar standard). De cate ori este executat un program, streamurile implicite sunt deschise automat de catre sistem. In headerul sunt definite si constantele NULL (definita ca 0) si EOF(sfarsit de fisier, definita ca -1, CTRL/Z).

int getchar(void)Citeste un caracter (cu ecou) din fisierul standard de intrare (tastatura).

int putchar(int c)Afiseaza caracterul primit ca argument in fisierul standard de iesire (monitor).

char *gets(char *sir)Citeste un sir de caractere din fisierul standard de intrare (pana la primul blank sau linie noua). Returneaza pointerul catre sirul citit.

int puts (const char *sir)Afiseaza sirul argument in fisierul standard de iesire si adauga terminatorul de sir. Returneaza codul ultimului caracter al sirului (caracterul care precede NULL) sau -1 in caz de eroare.

int printf (const char *format, ...)Functia permite scrierea in fisierul standard de iesire a datelor, intr-un anumit format. Functia returneaza numarul de octeti (caractere) afisati, sau -1 in cazul unei erori.1.Parametrul fixal functiei contine:- Succesiuni de caractere afisate ca atare;-Specificatori de formatcare definesc conversiile ce vor fi realizate asupra datelor de iesire, din formatul intern, in cel extern (de afisare).2.Parametrii variabiliai functiei sunt expresii. Valorile obtinute in urma evaluarii acestora sunt afisate corespunzator specificatorilor de format care apar in parametrul fix. De obicei, parametrul fix contine atat specificatori de format, cat si alte caractere. Numarul si tipul parametrilor variabili trebuie sa corespunda specificatorului de format.

Un specificator de formatcare apare in parametrul fix poate avea urmatoarea forma:%[-|c|][sir_cifre_eventual_punct_zecimal] una_sau_doua_litere- Implicit, datele se cadreaza (aliniaza) la dreapta campului in care se scriu. Prezenta caracterului '-' determina cadrarea la stanga.Sirul de cifredefineste dimensiunea campului in care se scrie data. Daca scrierea datei necesita un camp de lungime mai mare, lungimea indicata in specificator este ignorata. Daca scrierea datei necesita un camp de lungime mai mica, data se va scrie in camp, cadrata la dreapta sau la stanga (daca apare semnul '-'), completandu-se restul campului cu caracterele nesemnificative implicite, adica spatii. Sirul de cifre aflate dupa punct definesc precizia (numarul de zecimale cu care este afisat un numar real - implicit sunt 6 zecimale).Litereledefinesc tipul conversiei aplicat datei afisate:c- Afiseaza un caracters- Afiseaza un sir de caractered- Afiseaza date intregi; cele negative sunt precedate de semnul '-'.o- Afiseaza date de tip int sau unsigned int in octalx sau X- Afiseaza date de tip int sau unsigned int in hexagesimalf- Afiseaza date de tip float sau double in forma:parte_intreaga.parte_fractionara exponentExponentul incepe cu e sau E si defineste o putere a lui zece care inmultita cu restul numarului da valoarea reala a acestuia.g sau G- Afiseaza o data reala fie ca in cazul specificatorului terminat cu f, fie ca in cazul specificatorului terminat cu e. Criteriul de afisare se alege automat, astfel incat afisarea sa ocupe un numar minim de pozitii in campul de afisare.l- Precede una din literele d, o, x, X, u. La afisare se fac conversii din tipullongsauunsigned long.L- precede una din literele f, e, E, g, G. La afisare se fac conversii din tipullong double.

int scanf(const char *format, ...)

Functia citeste din fisierul standard de intrare valorile unor variabile si le depune in memorie, la adresele specificate. Functia returneaza numarul campurilor citite corect.1.Parametrul fixal functiei contine:Specificatorii de format care definesc conversiile aplicate datelor de intrare, din formatul extern, in cel intern (in care sunt memorate). Specificatorii de format sunt asemanatori celor folositi de functiaprintf:c, s, d, o, xsauX, u, f, l, L.2.Parametrii variabilireprezinta o lista de adrese ale variabilelor care vor fi citite, deci in aceasta lista, numele unei variabile simple va fi precedat de operatorul de adresa &.

int sprintf(char *sir_cu_format, const char *format, ...)Functia permite scrierea unor date in sirul transmis ca prim argument, intr-un anumit format. Valoarea returnata reprezinta numarul de octeti (caractere) scrise in sir, sau -1 in cazul unei erori.

int sscanf(char *sir_cu_format, const char *format, ...)Functia citeste valorile unor variabile din sirul transmis ca prim argument si le depune in memorie, la adresele specificate. Returneaza numarul campurilor citite corect.

Exemplu de program:Programul cere utilizatorului sa introduca de la tastatura un sir de numere pana la intalnirea unei valori ce este ceruta la inceputul programului si apoi afiseaza numerele care sunt egale cu patratul sumei cifrelor.

Funcii - un tip special de procedur care returneaz o valoareProceduri accepta date sau variabile, atunci cnd sunt executate.Funcii accepta, de asemenea, de date, dar au capacitatea de a returna o valoare de procedura sau de programul pe care-l solicit.Funciile sunt utilizate pentru a efectua sarcini, cum ar fi calculele matematice factoriale.O funcie incepe cufuncie decuvinte cheie are o structur similar cu o procedur undeva n interiorul cod asociat cu funcia, se atribuie o valoare de numele funciei o funcie este folosit pe partea dreapt a unei expresii poate returna doar un tip de date simpluPoziia real a unei funcii difer puin dect cea a unei proceduri.Formatul su este, numele_functiei funcie (declaraii de variabile): return_data_type;

Dup paranteza care declara aceste variabile acceptate de funcia, retur tipul de date (precedat de dou puncte), este declarat. Funcia ADD_TWO (valoare1, valoare2: integer): integer; ncepe ADD_TWO: = valoare1 + valoare2 sfritul anului;

Urmtoarea linie demonstreaz cum pentru a apela funcia, Rezultatul: = ADD_TWO (10, 20); Astfel, atunci cnd este executat ADD_TWO, aceasta echivaleaz cu valoarea atribuit numelui su (n acest caz 30), care este apoi atribuit rezultat.EXEMPLE DE PROGRAME IN PASCAL DE SUB PROGRAMARE

Probleme rezolvatesubprograme5.Scriei definiia complet a subprogramuluif, care primete prin intermediul parametruluin un numr natural nenul (2n200), iar prin intermediul parametruluiaun tablou unidimensional care oninenvalori ntregi, fiecare dintre aceste valori ntregi avnd cel mult patru cifre. Subprogramul returneaz prin intermediul parametrului m aloarea1dac diferena dintre elementul maxim i elementul minim din tablou este mai mare dect1000, altfel valoarea returnat va fi0.type vector=array[1..200] of integer;procedure f(n:byte; a:vector; var m:byte);var max,min:integer; i:byte;beginmax:=a[1]; min:=a[1];for i:=2 to n dobeginif a[i]>max then max:=a[i];if a[i]1000 then m:=1else m:=0end;4.Subprogramulcif, cu doi parametri, primete prin intermediul parametruluiaun numr natural cu cel mult8cifre i prin intermediul parametruluibo cifr; subprogramul returneaz numrul de apariii ale cifreibn scrierea numruluia.Exemplu: pentrua=125854ib=5, subprogramul va returna valoarea2.a)Scriei definiia complet a subprogramuluicif.(4p.)b)Scriei declarrile de date i programul principalPascalcare citete de la tastatur un numr naturalncu cel mult8cifre, dintre care cel puin una impar, i care determin i afieaz pe ecran, folosind apeluri utile ale subprogramuluicif, cel mai mare numr natural care poate fi obinut utiliznd toate cifrele impare ale numruluin.Exemplu: dacn=2152331atunci se va afia pe ecran numrul53311.var n, numar:longint; i, cifra:byte;function cif(a:longint; b:byte):byte;var nr:byte;beginnr:=0;while a0 dobeginif a mod 10=b then nr:=nr+1;a:=a div 10end;cif:=nrend;beginwrite(n=); readln(n);cifra:=9; numar:=0;while cifra>0 dobeginfor i:=1 to cif(n,cifra) donumar:=numar*10+cifra;cifra:=cifra-2end;writeln(Numarul obtinut este:,numar)end.Problemefuncii3.Un numrnse numeteextraprimdac att el, ct i orice numr obinut prin permutarea circular a cifrelor luin, sunt numere prime. De exemplu, numrul197este un numrextraprimdeoarece197,971,719sunt numere prime. Numrul23nu este extraprim deoarece32nu este prim.a)Scriei definiia complet a unui subprogramf, cu un parametru, subprogram care:- primete prin intermediul parametruluiaun numr natural cu cel mult2cifre (a>1)- returneaz suma tuturor exponenilor din descompunerea n factori primi a valorii parametruluia.Exemplu:pentrua=90subprogramul va returna valoarea4, deoarecea=2*32*5i1+2+1=4.b)Scriei un programPascalcare citete de la tastatur un numr naturaln,2n99, i care, folosind apeluri utile ale subprogramuluif, verific dacneste un numrextraprimi afieaz pe ecran, n caz afirmativ mesajulDA,iar altfel mesajulNU.Modificm problema: citim i scriem n fiiervar h,g:text; n,on:byte;function f(a:byte):byte;var s,k,p:byte;begins:=0; k:=2;while a>1 dobeginp:=0;while a mod k=0 dobegina:=a div k;p:=p+1end;s:=s+p;k:=k+1end;f:=send;beginassign(h,date.in);reset(h);assign(g,date.out);rewrite(g);read(h,n);if n