CATEGORII DOCUMENTE |
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:
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
Pentru concurentii unui concurs de admitere se cunosc urmatoarele informatii: nume, nota obtinuta. Sa se scrie un program care sa permita urmatoarele operatii:
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1473
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2025 . All rights reserved