Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
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ã;