17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ts[nd]=strdup(s2); // pune s2 in vectorul “ts”<br />

nd++; // dimensiune vectori tid si ts<br />

}<br />

else { // daca nu e directiva define<br />

p=lin; // “lin” nu poate apare in stanga unei atribuiri<br />

while (p=nxtid(p,id)) { // extrage urmatorul identificator de la<br />

adresa p<br />

i=get(tid,nd,id); // cauta identificator in vectorul “tid”<br />

if (i>=0) { // daca este identificator define<br />

strcpy(s2,ts[i]); // s2 este sirul inlocuitor<br />

q=p-strlen(id); // q este adresa de inceput identificator<br />

subst(q,strlen(id),s2,strlen(s2)); // efectuare substitutie<br />

}<br />

}<br />

printf("%s\n",lin); // afisare linie dupa efectuare inlocuiri<br />

}<br />

}<br />

}<br />

Dintre avantajele utilizãrii functiilor pentru operatii distincte din acest program vom<br />

mentiona posibilitatea modificãrii definitiei unui identificator fãrã a afecta alte functii<br />

decât “nxtid”. O directivã “define” poate contine ca identificatori si nume de functii cu<br />

argumente si care includ spatii dupã parantezã, ca <strong>în</strong> exemplul urmãtor:<br />

#define max( a,b ) (a > b ? a : b )<br />

Un al doilea exemplu este un program care afiseazã functiile apelate dar nedefinite<br />

<strong>în</strong>tr-un fisier sursã C. Aici trebuie sã gãsim apelurile si respectiv definitiile de functii<br />

dintr-un fisier sursã, memorând numele functiilor definite. Algoritmul este urmãtorul:<br />

repeta pentru fiecare linie din fisier<br />

daca este definitie de functie atunci retine nume functie intr-un vector<br />

daca este apel de functie atunci<br />

cauta nume functie in vector de functii definite<br />

daca nu este in vector atunci<br />

afisare nume functie (apelata dar nedefinita anterior)<br />

Definitiile si apelurile de functii C au <strong>în</strong> comun <strong>în</strong>ceputul - un identificator urmat de<br />

o parantezã deschisã ‘(‘ – dar diferã prin ceea ce urmeazã dupã paranteza <strong>în</strong>chisã:<br />

dacã urmeazã o acoladã este o definitie, altfel considerãm cã este un apel. Presupunem<br />

cã nu existã si declaratii de functii, care ar complica logica programului pentru a<br />

separa declaratiile de apeluri.<br />

De observat cã trebuie eliminate cuvintele cheie C ce pot fi urmate de paranteze din<br />

lista posibilelor nume de functii (“if”, “for”, “while”, “switch”,...).<br />

Functiile care ar fi utile <strong>în</strong> acest program sunt:<br />

- introducere si respectiv cãutare <strong>în</strong> vectorul cu nume de functii (pointeri la nume);<br />

- cãutarea urmãtorului identificator <strong>în</strong>cepând de la o adresã datã;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!