Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Programare modulara in limbajul C

c



+ Font mai mare | - Font mai mic



Programare modulara in limbajul C
Scopul lucrarii
: Programarea modulara in limbajul C, vizibilitatea variabilelor. 
Desfasurarea lucrarii: Se va proiecta si implementa un modul pentru gestionarea unor operatii specifice unui anumit domeniu. Se va utiliza acest modul pentru rezolvarea unei aplicatii. Se vor crea cel putin trei fisiere:

  • un fisier header pentru interfata modulului ;
  • un fisier sursa pentru implementarea modulului ;
  • un fisier sursa pentru aplicatia care utilizeaza modulul.  

Notiuni teoretice



Un modul sursa este o parte a codului sursa al programului, care se poate compila independent de restul programului. In urma compilarii rezulta modulul obiect. In cadrul unui modul sursa exista seturi de date si functii inrudite, care rezolva o subproblema. Prin functii inrudite putem intelege functii care utilizeaza in coumun un set de date. Modulele unui program se obtin in urma procesului de descompunere a unei probleme in subprobleme mai simple.

Programarea modulara  este paradigma de programare care are la baza utilizarea de module. Prin acest mod de programare se pun in valoare posibilitatile de "ascundere" a datelor si functiilor impotriva unor accese neautorizate din alte module. Astfel, datele statice declarate in afara functiilor modulului, pot fi utilizate in comun de acestea, dar nu pot fi accesate de catre functiile din alte module. Modularizarea unui program complex permite lucrul in echipa, permitand astfel o implementare si testare mai rapida. Modulele implementate pot fi utilizate ulterior pentru rezolvarea altor probleme.

In limbajul C, modulele sunt fisiere text (cu extensia .h sau .c) ce pot fi compilate separat. In mod uzual interfata modulului este plasata intr-un fisier header (extensii uzuale sunt: '.h' , '.hh'), in timp ce implementarea acestuia se va regasi intr-un fisier sursa (extensii uzuale sunt: '.cc', '.c'). Dependentele intre module sunt exprimate prin folosirerea directivelor de preprocesare '#include'.
Variabilele globale se definesc fie la inceputul unui fisier sursa (.c), inaintea primei functii, fie intr-un fisier header (.h). In primul caz, variabilele sunt vizibile din locul in care au fost declarate pana la sfarsitul fisierului sursa respectiv. Daca programul are mai multe fisiere sursa, o variabila globala astfel definita intr-un fisier sursa poate fi utilizata in celelalte, daca este declarata ca externa. In cazul declararii intr-un fisier header a unei variabile, aceasta este vizibila in toate fisierele care includ fisierul header.

Variabilele declarate in cadrul corpului unei functii sunt vizibile numai in cadrul functiei. Ele pot fi:

- automatice alocate pe stiva in momentul executiei. Ele isi pierd valabilitatea la revenirea din functie. Declararea acestora este cea uzuala (char a; int x;);

- statice alocate la compilare intr-o zona speciala. Se declara cu ajutorul cuvantului cheie static inaintea tipului variabilei (static int x;);

- variabile registru, alocate in registrele procesorului. Ele pot fi numai variabile int, char si pointer. Pentru declararea variabilelor registru se foloseste ajutorul cuvantului cheie register(register int x).

Reguli de modularizare:
1. Structura fiecarui modul trebuie sa fie suficient de simpla pentru a putea fi complet inteleasa.
2. Implementarea unui modul trebuie sa depinda doar de interfetele altor module, existand posibilitatea modificarii implementarii unui modul fara a avea cunostinte despre implementarea celorlalte module si fara a afecta comportarea acestora.
3. Detaliile sistemului care se presupune ca se vor modifica independent vor fi plasate in module diferite.
4. Singurele legaturi intre module vor fi acelea a caror modificare este improbabila.
5. Orice structura de date este incapsulata intr-un modul; ea poate fi accesata direct din interiorul modulului, dar nu poate fi accesata din afara modulului decat prin intermediul variabilelor globale continute in acel modul.

 Exemplu de programare modulara:

Sa se dezvolte un modul pentru operatii cu numere rationale. Sa se utilizeze acest modul pentru determinarea valorii expresii:

,

 unde qi, qj sunt numere rationale; i este contorul pentru indicii pari, iar j este pentru cei impari.

Fisierul header - rational.h:

#include <stdio.h>

#include <malloc.h>

//declararea structurii pentru tipul de date

typedef struct rationalnr_rational;

 //declararea functiei ce implementeaza operatia de adunare a doua numere rationale

nr_rational adunare(nr_rational q1, nr_rational q2);

//declararea functiei ce implementeaza operatia de scadere a doua numere rationale

nr_rational scadere(nr_rational q1, nr_rational q2);

//declararea functiei ce implementeaza operatia de inmultire a doua numere rationale

nr_rational inmultire(nr_rational q1, nr_rational q2);

//declararea functiei ce implementeaza operatia de impartire a doua numere rationale

nr_rational impartire(nr_rational q1, nr_rational q2);

 Fisierul sursa - rational.c:

#include 'rational.h'

 // functie recursiva de determinare a cmmdc

int cmmdc(int a, int b)

//implementarea operatiei de adunare a doua numere rationale

nr_rational adunare(nr_rational q1,nr_rational q2)

 //implementarea operatiei de scadere a doua numere rationale

nr_rational scadere(nr_rational q1,nr_rational q2)

 //implementarea operatiei de inmultire a doua numere rationale

nr_rational inmultire(nr_rational q1,nr_rational q2)

 //implementarea operatiei de impartire a doua numere rationale

nr_rational impartire(nr_rational q1,nr_rational q2)

 Fisierul sursa - main.c:

#include 'rational.h'

 int main()

//secventa de instructiuni pentru calculul expresiei

suma.p = 0;

suma.q = 0;

i = 0;

while(i < n)

produs.p = 0;

produs.q = 0;

i = 1;

while(i < n)

expresie = impartire(suma,produs);

printf('Valoarea expresiei este : %d/%d',expresie.p,expresie.q);

return 0;

Teme propuse

  • Sa se dezvolte un modul pentru operatii cu matrici cu coeficienti reali. Sa se utilizeze acest modul pentru determinarea matricii A la puterea n.
  • Sa se realizeze un program care permite introducerea unui sir de caractere si furnizeaza un meniu pentru a realiza urmatoarele operatii:
    • conversia sirului la litere mari
    • conversia la litere mici
    • adaugarea unui subsir la sirul dat.
  • Sa se dezvolte un modul pentru operatii cu polinoame. Sa se utilizeze acest modul pentru determinarea celui mai mic divizor comun a doua polinoame
  • Sa se dezvolte un modul pentru operatii cu numere complexe. Sa se utilizeze acest modul pentru efectuarea operatiei de impartire a doua numere complexe.
  • Sa se dezvolte un modul pentru operatii cu matrici rare. Sa se utilizeze acest modul pentru determinarea matricii A la puterea n.
  • Sa se dezvolte un modul pentru operatii cu liste. Sa se utilizeze acest modul pentru rezolvarea urmatoarei aplicatii:

Pentru concurentii unui concurs de admitere se cunosc urmatoarele informatii: nume, nota obtinuta. Sa se scrie un program care sa permita urmatoarele operatii:

    • creare listei cu concurenti;
    • sortarea listei dupa nota;
    • cautare in lista dupa nume;
    • separarea in doua liste (concurenti admisi si respinsi);
    • afisarea listelor.


Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1381
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved