Sunteți pe pagina 1din 14

PRELEGEREA III

PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE

Iniţiere în gîndirea algoritmică


I. Clasificarea schemelor logice - continuare
c) După gradul de complexitate, schemele logice se clasifică în:
c1) scheme logice fără proceduri;
c2) scheme logice cu proceduri.
c1) Schemele logice fără proceduri sînt scheme logice de program care nu conţin structuri de tip
procedură. Acestea se referă la probleme simple sau sînt întocmite de programatori cu o
experienţă redusă în acest domeniu.
Exemplu 5. Fie u şi v doi vectori cu aceeaşi dimensiune. Să se determine:
a) produsul scalar al celor doi vectori;
b) norma vectorului u ;
c) norma vectorului v .
Deocamdată pentru problemă se reprezintă două rezolvări, urmînd ca, ulterior, să se indice şi
altele.
Fie notaţiile PS, NU şi NV pentru produsul scalar şi respectiv normele celor doi vectori. Cu I se
notează variabila care va marca poziţia unei componente, fie în vectorul u , fie în vectorul v .
Deci, I va lua pe rînd valorile 1, 2, …, n.
n n n
Se ştie că: PS = ∑u
I =1
I v I ; NU = ∑u 2
I ; NV = ∑v 2
I .
I =1 I =1

Componenţa formulelor implică, într-o tratare pe puncte a problemei, construirea a trei structuri
repetitive cu un număr cunoscut de paşi sau într-o tratare cumulată a punctelor a) - c) a uneia
singure.

Citeşte

PS= 0

NU =
0
NV =
0

I =1
2
PS=PS+uI vI
NU = NU + uI2

NV = NV + vI2

I=I+1
NV = NV NU = NU I≤
n 2

Scrie
PS,Nu,NV

Stop
Figura 3.1.1

c2) Schemele logice cu proceduri sînt schemele logice care conţin, pe lîngă structurile de bază
discutate pînă în prezent, una sau mai multe structuri de tip procedură şi operaţii de intrare/ieşire.
Cu toate că întocmirea lor cere din partea programatorului experienţă, totuşi ele se recomandă
chiar şi în rezolvarea unor probleme simple sau în cazul programatorilor începători. Cu atît mai
mult, acestea se impun în cazul problemelor dificile pentru că, pe de o parte evidenţiază
componentele mari ce intervin în analiza acestora şi fixează părţile complexe ale lor prin apeluri
de procedură iar, pe de alta facilitează lucru în echipă.
Schema logică cu proceduri se defineşte printr-un ansamblu format dintr-o schemă logică
de program şi una sau mai multe structuri de tip procedură. Schema logică care apelează una sau
mai multe proceduri se numeşte schema logică principală sau apelantă, iar structura de tip
procedură apare sub denumirea de schemă logică apelată.
Cu alte cuvinte, schema logică cu proceduri se defineşte printr-un ansamblu format dintr-o
schemă logică apelantă şi una sau mai multe scheme logice apelate.
Deci, tratarea unei proceduri se realizează din două unghiuri:
- la nivel funcţional, ca o componentă a unei scheme logice principale, prin care se descrie un
apel de procedură, apel simbolizat grafic printr-un bloc de tipul 7 (vezi, secţiunea 1.2).
- la nivel structural, ca o structură de bază de tip procedură (descrisă în secţiunea 1.4.3).
La apelul unei proceduri se realizează următoarele operatii:
- parametri actuali vor înlocui parametri formali;
- procedura preia datele furnizate de schema logică apelantă. Nu toţi parametrilor actuali sînt
furnizori de date pentru procedură;
- se execută procedura în totalitate. Datelor de intrare primite din schema logică principală li se
adaugă şi cele declarate în procedura activată, atunci cînd este cazul;
- se dezactivează procedura;
- se revine în schema logică principală, la blocul care urmează imediat apelul de procedură.
Rezultatele caculate de procedură se transmit prin intermediul variabililor, din lista parametrilor

2
actuali, pregătite în acest scop. Între cele două categorii de parametri trebuie să existe o
corespondenţă de număr, tip, loc şi dimensiune. Orice tip de neconcordanţă declanşează eroare în
execuţia programului corespunzător, indiferent de limbajul de programare utilizat în codificarea
acestuia. Datele furnizate de procedură pot deveni, în continuare, date de ieşire, date intermediare
sau chiar date de intrare pentru aceeaşi procedură sau nu.
Grafic, legătura dintre schema logică apelantă şi o procedură se prezintă în figura 3.1.2. În prima
apelare a procedurii P intervin parametri actuali PA1, PA2, …, PAn, iar în a doua PB1, PB2, …,
PBn. Parametrii formali sînt desemnaţi prin PF1, PF2, …, PFn.
Linia punctată marchează “legătura” subînţeleasă între cele două tipuri de schemă logică.

P(PF1, ...,

P(PA1,...,P
Stop

Figura 3.1.2 P(PB1,...,P

Observaţie. În descrierea unei proceduri se poate face apel la alte proceduri. Numele procedurii
face legătura între o schemă logică apelantă şi una apelată sau între două scheme logice apelate.
Acesta este fixat de către programator, după regulile furnizate de limbajul de programare utilizat
în codificarea variabililor (vezi, secţiunea 1.1). Contextul în care se impune utilizarea
procedurilor în rezolvarea unei probleme precum şi o serie de reguli strict necesare în utilizarea
procedurilor au fost făcute deja în secţiunea 1.2, punctul 7).
Exemplu 6. Fie u şi v doi vectori cu aceeaşi dimensiune n. Construind o procedură care
determină produsul scalar pentru doi vectori formali x şi y de dimensiune m, să se
determine:
a) produsul scalar al celor doi vectori;
b) norma vectorului u ;
c) norma vectorului v .
Procedura cerută în problemă se desemnează simbolic cu numele PRODS şi are ca
parametri formali următoarele entităţi: dimensiunea vectorilor x şi y , vectorul x , vectorul y
şi produsul scalar al celor doi vectori, cu notaţia PS.
În procedura PRODS apare succesiunea logică a operaţiilor de aflare a produsului scalar
pentru vectorii fictivi x şi y , a căror componente sînt stocate într-o zonă specială din memoria
calculatorului, desemnată prin stivă. Cum problema se rezolvă în această fază doar formal, din
procedură lipsesc blocurile de intrare /ieşire, fapt care poate fi evidenţiat în majoritatea
procedurilor.
m
Pentru aflarea valorii lui PS avem : PS = ∑x
I =1
I yI .

3
Simbolizarea grafică a acestei formule se face printr-o structură repetitivă cu m paşi.
Procedura PRODS este chemată în schema logică principală de 3 ori, cu următoarele liste
de parametri actuali:
- n, u , v , PS pentru aflarea produsului scalar al vectorilor u şi v ;
- n, u , u , NU pentru aflarea normei vectorului u ;
- n, v , v , NV pentru aflarea normei vectorului v .
Notaţiile PS, NU şi NV au aceeaşi semnificaţie ca în exemplul de mai sus.
Indifernt de conţinutul listei parametrilor actuali, un apel al procedurii PRODS determină
realizarea unui număr fix de tipuri de operaţii, iar valorile parametrilor actuali concretizează
operaţiile de executat.
Deci, în cadrul unui apel al procedurii PRODS se execută următoarele operaţii:
- parametrii actuali iau locul parametrilor formali;
- cu datele primite se execută în totalitate procedura şi se determină o valoare adecvată
pentru produsul scalar;
- dezactivarea procedurii la atingerea lui Stop;
- revenirea în schema logică principală imediat după blocul care a generat apelul, cu
returnarea rezultatului calculat în procedură.
Schema logică principală şi procedura PRODS se prezintă mai jos:

Start
PRODUS(m,
,,PS)
Citeşte(n,,)
PS = 0

I=1 PRODUS(n,,PS)

PS=PS+xI .
yI PRODUS(n,,,NU)

4
I=I+1
NU=
NU
Im
PRODUS(n,,

Stop
NV= NV
Figura 3.1.3

ScriePS,NU,N

Stop
Figura 3.1.4

5
Utilizarea procedurilor în rezolvarea problemelor oferă multe facilităţi în programare şi,
în mod special, la lucru în echipă. În cele ce urmează, se enumeră cîteva dintre acestea :
- descrierea unei proceduri se face o singură dată, iar apelarea ei, în aceeaşi schemă logică
sau în scheme logice diferite, poate să apară, ori de cîte ori este nevoie, cu valori diferite pentru
parametri actuali;
- procedurile se elaborează independent de schemele logice care le apelează, iar
elaborarea lor poate fi făcută de către diverşi programatori;
- utilizarea procedurilor constituie un mijloc de liniarizare şi de simplificare a schemei
logice apelante, fapt care pe de o parte, uşurează citirea schemei logice apelante, iar pe de alta,
marchează părţile dificile şi punctele cheie în rezolvarea unei probleme;
- codificarea procedurilor poate fi făcută în acelaşi limbaj de programare sau sau în
limbaje de programare diferite.
Observaţie. Majoritatea limbajelor de programare permit organizarea a două tipuri de
subprograme pentru codificarea unei structuri de tip procedură:
- subprograme de tip procedură (procedure), utilizate în orice situaţie (indiferent de
numărul valorilor returnate programului principal);
- subprograme de tip funcţie (function), care pot întoarce programului apelant cel mult o
valoare. Vom vedea în capitolul următor că funcţia este singurul tip de subprogram utilizat în
construcţia programelor C++ .

II. Procedee specifice schemelor logice


Activitatea de întocmire a unei scheme logice sau a unei simbolizări în limbajul pseudocod este
partea cea mai dificilă în metodologia de realizare a unui program şi calificativul de bun
programator este atribuit nu celui care are însuşite mai multe limbaje de programare, ci celui care
are atît pregătirea de a indica pentru o problemă metoda de rezolvare adecvată, cît şi capacitatea
de a analiza şi descompune algoritmul respectiv în acele operaţii care, executate de calculator, să
conducă, după un număr finit de paşi, la obţinerea rezultatului scontat.
În general, scrierea programului în orice limbaj de programare devine o muncă de rutină.
Pe lîngă regulile menţionate pînă în prezent, activitatea de elaborare a unei scheme logice sau a
unei simbolizări în limbajul pseudocod beneficiază de trei procedee specifice de a căror mînuire
depinde corectitudinea acestora, şi anume:
- utilizarea contorului;
- iniţializarea variabililor;
- folosirea basculelor sau a comutatoarelor.
Deja, primele două procedee specifice au fost utilizate în explicarea şi exemplificarea noţiunei de
structură repetitivă.
1. Contorul se găseşte în literatura de specialitate sub multe denumiri, cum ar fi: variabilă de
control, variabilă de ciclare, numărător de paşi sau numărător de operaţii.
Acesta face parte din lista variabililor intermediare şi este unul din elemntele necesare întocmirii
unei structuri repetitive cu un număr cunoscut de paşi. Rolul unui contor este de a număra
de cîte ori se trece printr-un grup de blocuri sau de cîte ori se execută un grup de operaţii.
Valoarea contorului, la un moment dat, este un indicator cu care se stabileşte de cîte ori a fost
executat un anumit grup de operaţii sau de cîte ori urmează să se execute, cu valori diverse pentru
variabilile cu care se lucrează.
De regulă, valorile pe care le primeşte contorul sînt crescătoare sau descrescătoare şi foarte rare
sînt situaţiile cînd acestea alternează. Elementele definitorii ale contorului (valoare iniţială,
valoare finală, raţia sau valoarea pasului de variaţie) se stabilesc în funcţie de contextul de
rezolvare al problemei şi determină complet lista de valori parcursă de contor.
Utilizarea corectă a unui contor depinde de modul cum se răspunde la următoarele întrebări:
- care este numele contorului?
- care sînt valoare iniţială, valoare finală şi raţia de variaţie?
- ce rol are în schema logică sau în simbolizarea cu formulări standard?
- care este grupul de operaţii sau de blocuri prin care se trece de un număr cunoscut de ori,
cu valori diferite pentru variabilele care se lucrează?
Primele trei întrebări au răspunsuri simple şi care nu diferă prea mult de la o problemă la alta. De
obicei pentru numele simbolic al contorului se foloseşte o notaţie de genul: i, j, k, l, i1, j1, etc.
La ultima întrebare, răspunsul depinde de metoda de rezolvare a problemei.
În situaţia cînd se manevrează mai mulţi contori, numele de indentificare a acestora poate
fi sau nu acelaşi. De asemenea, pot fi coincidenţe şi pentru listele de valori corespunzătoare, însă,
gestiuneaa elementelor definitorii ale unui contor trebuie făcută cu multă grijă, deoarece există
cazuri cînd calculele se fac eronat sau cînd calculatorul este pus în situaţii nedeterminate.
Grupul de operaţii, care se repetă de mai multe ori, trebuie să fie format, doar, din operaţii
elementare şi anume, din cele specificate în paragraful 1.2. Adesea, pentru a ajunge la astfel de
operaţii, programatorul trebuie să recurgă la diferite artificii de calcul, la soluţii întilnite în
rezolvarea unor probleme de către alţi programatori şi, nu în ultimul rînd la proceduri rezolvate
cu alte ocazii.
În concluzie, răspunsurile la ultimile trei întrebări sînt esenţiale în mînuirea corectă a unui contor.
Corectitudinea şi siguranţa utilizării unui contor fac posibilă elaborarea unei scheme logice sau a
unei simbolizări în limbajul pseudocod, cu structuri repetitive cu un număr fix de paşi, fac
posibilă reluarea de un număr cunoscut de ori a unei secvenţe de operaţii elementare, cu diverse
valori pentru variabilele componente.
2) Iniţializarea variabilelor este un alt procedeu specific activităţii de întocmire a schemelor
logice şi este obligatoriu atunci cînd se operează, în cadrul unor structuri repetitive, cu formule
prin care se evaluează expresii matematice, unde variabila din stânga semnului egal devine
operand în dreapta semnului egal.
Deci, acest procedeu este indispensabil în situaţiile în care se încearcă folosirea unei variabile în
repetiţie, în interaţie, în dinamica sau în sensul de evoluţie. Iniţializarea
variabililor se simbolizează prin blocuri de calcul al căror conţinut fixează valoarea iniţială a
acestora.
De exemplu, dacă într-o structură repetitivă s-ar opera cu S = S + x2 sau P = P . x, fără să
se cunoască valorile iniţiale ale lui S sau P din membrul al doilea, pentru un x dat, calculatorul ar
fi pus într-o situaţie nedeterminată şi ar furniza rezultate imposibil de verificat. Deci, anterior
structurii repetitive se impun blocuri de iniţializare de genul S=0 sau P=1. Acum la fiecare
execuţie a celor două expresii din membrul al doilea se obţin valori concrete, valori care se
atribuie variabililor din stînga semnului egal, adică lui S şi P. După cum se observă, noile valori
se păstrează în locaţiile afectate operaţiilor de iniţializare, pierzîndu-se valorile memorate
anterior.
Semnul = (atribuie, asignează) utilizat în contextul schemelor logice, are o interpretare
mai largă decît cea dată semnului = (egal) în matematică. Această interpretare este legată de
principiile de funcţionare ale unui computer, în sensul că semnificaţiei dată semnului egal în
matematică i se adaugă aceea de a depozita valoarea obţinută, în locaţia de memorie afectată
variabilei din stînga semnului egal. Notaţiile pentru semnul de atribuire diferă de la un limbaj de

2
programare la altul. De exemplu, în limbajul Pascal atribuirea se notează cu :=, iar egalitatea cu
=, pe cînd în limbajele de tip C atribuirea se notează cu =, iar egalitatea cu ==.
Pentru variabila x există mai multe alternative de a i se afecta o valoare, şi anume: prin operaţia
de citire sau operaţia de iniţializare, prin execuţia unui procedură sau prin evaluarea unei expresii
matematice.
De asemenea, prin procedeul de iniţializare se fixează prima valoare a oricărui contor. Partea de
început a unei structuri repetitive cu un număr cunoscut de paşi se rezumă la un bloc de
iniţializare, unde contorului i se atribuie valoarea iniţială.
3) Ultimul procedeu nu este specificat în literatura de specialitate şi foarte puţini programatori
reuşesc să-l stăpînească şi să-l folosească corect în activitatea de rezolvare a unei probleme cu
ajutorul calculatorului electonic. Un interes deosebit se acordă acestui procedeu în activitatea de
programare structurată.
Comutatorul sau bascula este o variabilă de lucru care poate primi două sau mai multe valori şi
are rolul de a comuta sau de a bascula pe o valoare dinainte fixată atunci când se parcurge o
anumită secvenţă de schemă logică sau de formulări în limbajul pseudocod.
În funcţie de numărul valorilor primite, comutatorii se clasifică în două categorii:
- comutatori simpli sau bivalenţi;
- comutatori multipli sau multivalenţi.
Unui comutator simplu i se atribuie numai două valori care reprezintă o logică bivalentă în
rezolvarea unei probleme. Poziţionarea lui pe o valoare marchează parcurgerea de mai multe ori a
unei anumite secvenţă de schemă logică sau de formulări în limbajul pseudocod. Poziţionarea
este acceptată doar la început şi întrebarea “comutatorul are valoarea dată anterior?” pare în plus
pînă când în anumite condiţii acesta comută pe altă valoare.
Această comutare barează trecerea spre secvenţa de schemă logică sau de formulări în limbajul
pseudocod executată anterior şi deschide o nouă trecere spre altă parte din reprezentarea
respectivă.
Un comutator multiplu are acelaşi efect ca un comutator simplu, numai că acesta poate comuta pe
mai multe valori anterior precizate. Sigur că, fiecare comutare este precedată de întrebarea
specificată între ghilimele în descrierea comutatorului simplu. În orice moment trebuie să existe
un control riguros asupra valorilor afectate comutatorilor, în caz contrar utizarea lor constituie o
sursă importantă de erori în rezolvarea unei probleme.
Exemplu 7. Fie trei numere naturale N1, N2 şi N3. Să se specifice pentru fiecare număr
calificativul de “admis” sau de “respins”, după cum numărul este sau nu un număr prim.
Fie K variabila care contorizează numărul de divizori a unui număr natural oarecare N, care va
fi înlocuit pe rând cu numerele N1, N2 sau N3 după cum bascula multiplă T va comuta pe 1, 2
sau 3.
Cînd K are valoarea 2, numărul se consideră prim şi se afişează “admis “, în caz contrar
se afişează “respins”.

3
Figura 3.2.1

4
III. Analiza corectitudinii schemelor logice
Construcţiile făcute cu simboluri sau cu formulări standard în limbajul pseudocod nu oferă
întodeauna certitudinea că o problemă este rezolvată corect.
Pentru analiza corectitudinii unei scheme logice, ultimele cercetări evidenţiază instrumente
matematice adecvate de formalizare, pentru care se poate utiliza calculatorul în aplicarea lor.
De fapt, se poate discuta numai de o corectitudine parţială a rezolvării problemei, deoarece
analiza corectitudinii unei scheme logice se referă doar la situaţia cînd acestea îşi încetează
activitatea.
Metoda utilizată în analiza corectitudinii unei scheme logice este una intuitivă şi constă în
completarea unui tabel care conţine atît variabilile cu care se lucrează în problemă, precum şi
istoricul valorilor fiecărei variabile.
Completarea tabelului se realizează pentru un caz paricular al problemei care include toate
posibilitaţile şi pentru care se ştie soluţia corectă. Prin parcurgerea sistematică a schemei logice
de la început spre sfîrşit, urmînd săgeţile de la sursa către ţintă, în tabel se înscriu valorile ce se
atribuie variabilelor cu care se lucrează. În finalul tabelului trebuie să apară soluţia cunoscută a
problemei.
În cazul cînd soluţia nu este corectă, rezultă că logica de rezolvare a problemei este eronată şi se
impune refacerea schemei logice.
În mod similar se procedează atunci cînd algoritmul de rezolvare al problemei se reprezintă prin
formulări standard în limbajul pseudocod.
Forma şi structura unui astfel de tabel se prezintă în figura 3.3.1.

Număr pas V1 V2 ... Vn


execuţie

Tabelul 3.3.1
Cel de al doilea procedeu are ca obiectiv nu verificarea corectitudinii schemei logice, ci cea a
programului scris într-un anumit limbaj după această schemă logică. Însă, acest procedeu nu se
recomandă începătorilor deoarece, în situaţia în care logica programului este greşită, traseul de
reparare al erorii este mai lung, în sensul că trebuie să se refacă atît schema logică cît şi
programul.
Abordarea altor metode pentru analiza corectitudinii schemelor logice, care au la bază un suport
matematic solid, nu poate fi făcută decât într-un cadru teoretic adecvat. Din acelaşi motiv, nici
abordarea problemei corectitudinii totale nu este posibilă
Exemplu 8. Fie succesiunea de k numere reale: Z =( z1, z2, ..., zk). Să se afle valoarea şi
poziţia elementului maxim.
Elementul maxim se notează cu Max, iar poziţia acestuia cu p.

5
Figura 3.3.2

Citeşte k, Z
Scrie Max,

Max=z
1
Stop

p=1

i=2

Max<
zzi
Max=z
i

p=i

i=i+1

1 ik
Tabelul este completat cu date ce se referă la şirul de numere: (-4, 0, 5, 7, 2). Soluţia corectă a
problemei este: Max = 7 şi p = 4.

Număr pas k z1 z2 z3 z4 z5 Max p i


execuţie
0 5 -4
0 5 7 2 -4 1 2
1 5 -4
0 5 7 2 0 2 3
2 5 -4
0 5 7 2 5 3 4
3 5 -4
0 5 7 2 7 4 5
4 5 -4
0 5 7 2 7 4 6
Tabelul 3.3.2
Ultimile valori înscrise pentru Max şi p în tabel sînt chiar 7 şi respectiv 4. Deci, problema
este rezolvată corect.

6
IV. Reprezentarea algoritmilor în limbajul pseudocod

Formulări de bază în limbajul pseudocod


Urmărirea unei scheme logice, precum şi delimitarea structurilor de bază dintr-o schemă
logică, nu se face destul de uşor pentru o schema logică vastă care se întinde pe mai
multe pagini de hârtie.
Programatorii cu experienţă au renunţat la maniera grafică de realizare a unei scheme
logice, înlocuind structurile de bază, prezentate în paragraful anterior, în construcţii
sintactice standard sau, pe scurt, formulări standard.
Scheletul formulărilor standard este concentrat pe cîteva cuvinte din limba engleză care, în
această lucrare, au fost înlocuite prin texte adecvate din limba română.
Formatul general de reprezentare a algoritmului de rezolvare al unei probleme în limbajul
pseudocod este următorul:
(1) Start F1; F2; …; Fn stop., unde cu formulările standard Fi, i = 1, ... , n, se
descriu operaţiile de intare/ieşire, apelurile de procedură şi structurile de bază prezentate
anterior.
Unei structuri liniare formată dintr-un bloc de calcul i se asociază o formulare standard
de tipul: (2) variabila = expresie_matematică;.
Dacă structura liniară conţine n blocuri de calcul, atunci formularea standard are următorul
conţinut : (3) variabila_1 = expresie_ matematică_1;
...................................................................
variabila_n = expresie_matematică_n;
Pentru cele două forme ale unei structuri alternative se utilizează formulările standard:
(4) dacă expresie_logică atunci F1 altfel F2;
şi respectiv (5) dacă expresie_logică atunci F1; unde F1 şi F2 sînt formulări de bază
de tipul (2) – (5).
În general, o structură alternativă completă imbricată se reprezintă astfel:
(6) dacă expresie_logică_1 atunci F1 altfel dacă expresie_logică_2 atunci
F2 altfel …altfel dacă expresie_logică_n atunci Fn altfel Fn+1; unde F1, F2, …, Fn+1
sînt formulări de bază de tipul (2) sau (3).
Structura repetitivă cu un număr fix de paşi se codifică prin:
(7) pentru c := vi cu pasul vr pînă_la vf repetă F;
unde c, vi, vr şi vf reprezintă notaţiile pentru contor şi elementele specifice contorului: valoare
iniţială, raţia şi respectiv valoarea finală, iar F este o formulare de tipul celor descrise anterior.
Dacă raţia de variaţie a contorului este 1, atunci pasul se poate omite.
Formatul general al unei structuri repetitive cu precondiţie este următorul:
(8) în_timp_ce expresie_logică repetă F; unde F are aceeaşi semnificaţie ca în
(7). F se reia în contexte de rezolvare diferite atîta timp cît expresia logică este adevărată.
În situaţia cînd expresia logică este falsă se continuă cu formularea standard imediat
următoare.
Structura repetitivă cu postcondiţie se poate înlocui prin:
(9) repetă F pînă_cînd expresie_logică;
unde F are aceaşi semnificaţie ca în (7). Acum, repetarea formulării de bază F se produce pînă
cînd valoarea expresiei logice devine adevărată. Cu alte cuvinte, falsitatea expresiei logice
permite să se intre în repetare, în caz contrar se continuă cu succesoarea formulării de tipul (9).
Structura repetitivă cu condiţie internă nu are echivalent în mulţimea formulărilor standard,
urmînd ca aceasta să fie transformată într-una cu precondiţie sau cu postcondiţie.

7
(10) nume_ procedură(listă_parametri actuali);
rezolvă un apel de procedură, iar (11) Citeşte (listă_variabile_intrare); şi
(12) Scrie(listă_variabile-ieşire); descriu operaţiile de intrare/ieşire.
Se observă că descrierea operaţiilor dintr-un algoritm de rezolvare al unei probleme trece
de la lucru pe verticală, în cazul schemelor logice, la lucru pe orizontală, în cazul construcţiilor
sintactice utilizate în limbajul pseudocod. Pe lîngă faptul că o construcţie sintactică cu formulări
standard nu ocupă mult loc, aceasta oferă şi alte avantaje, şi anume:
- lucrează cu un numar de formulări standard dinainte fixat;
- formulările standard pot fi cuprinse una în alta fără ca vreuna să-şi piardă indentitatea;
- permite rezolvarea problemei pe etape;
- sintaxa formulărilor standard este mult mai apropiată de cea a instrucţiunilor
componente limbajelor de programare evoluate (PASCAL, C, C++, etc.);
erorile de programare apar mai rar.
Exemplu 1. Fie expresiile: E1 = a2 + (b + c)i
E2 = (a + b + c3)5 – 5abc
E3 = (E1 –E2)j - a2i + b/5.
Să se determine E1, E2 şi E3, ştiind că a, b, c, i şi j primesc ca valori numere reale.
Modul de reprezentare al algoritmului de rezolvare a acestei probleme este următorul:
Start
Citeşte(a, b, c, i, j);
E1 = a2 + (b + c)i; Scrie(E1);
E2 = (a + b + c3)5 – 5abc; Scrie( E2);
E3 = (E1 –E2)j - a2i + b/5; Scrie(E3);
Stop.
Spre deosebire de schema logică prezentată în cursul anterior, aici se adaugă după
evaluarea unei expresii aritmetice comanda de scriere a valorii obţinute.
Exemplu 2. Să se determine:
 ( x 3 − 5 y) /( x + y), dacă x + y > 0 şi y > 0;
 3
F=  ( x + 5 y) /( x + y) dacă x + y > 0 şi y ≤ 0;
 7 xy 3 , dacă x + y ≤ 0.

Etapele care se parcurg în aflarea valorii lui F sînt:
- citirea valorilor variabililor x şi y;
- determinarea lui F în funcţie de condiţiile impuse în enunţul problemei;
- scrierea valorii lui F.
Algoritmului de rezolvare a acestei probleme se reprezintî astfel:
Start
Citeşte(x, y);
Dacă x + y > 0 atunci
Dacă y > 0 atunci F = (x3 – 5y)/(x + y)
altfel F = (x3 + 5y)/(x + y)
altfel F = 7xy3;
Scrie(F);
Stop.

8
Pentru indentificarea corectă a celor două condiţii se recomandă ca scrierea lor să se facă pe mai
multe rînduri, astfel ca alinierea cuvintelor “atunci” şi “altfel” să se producă din aceeaşi coloană
după principiul de grupare “ultimul atunci - cu primul altfel”. O remarcă similară a fost făcută la
sfîrşitul exemplului anterior pentru perechea de paranteze Start - Stop.

S-ar putea să vă placă și