Documente Academic
Documente Profesional
Documente Cultură
An I - Modulul VI
An I - Modulul VI
Proiect cofinanat din Fondul Social European n cadrul POS DRU 2007-2013
Beneficiar Centrul Naional de Dezvoltare a nvmntului Profesional i Tehnic
str. Spiru Haret nr. 10-12, sector 1, Bucureti-010176, tel. 021-3111162, fax. 021-3125498, vet@tvet.ro
Proiectarea algoritmilor
Material de predare
Domeniul: informatic
Calificarea: Analist Programator
Nivel 3 avansat
2009
AUTOR:
MARIANA VIOLETA CIOBANU profesor grad didactic I
CLAUDIA DANIELA MOLNAR profesor, grad didactic II
COORDONATOR:
CONSULTAN:
IOANA CRSTEA expert CNDIPT
ZOICA VLDU expert CNDIPT
ANGELA POPESCU expert CNDIPT
DANA STROIE expert CNDIPT
Cuprins
I. Introducere...................................................................................................................................4
II. Documente necesare pentru activitatea de predare.....................................................................5
III. Resurse.......................................................................................................................................6
Tema 1. Medii de dezvoltare integrate........................................................................................6
Fia suport 1 Medii de dezvoltare integrate.............................................................................6
Tema 2. Limbaje de programare................................................................................................11
Fia suport 2.1. Noiuni de baz ale limbajelor de programare.............................................11
Fia suport 2.2. Date, variabile, constante.............................................................................14
Tema 3. Programarea structurat...............................................................................................19
Fia suport 3.1. Instruciuni...................................................................................................19
Fia suport 3.2. Echivalena structurilor repetitive................................................................34
Fia suport 3.3. Corectitudinea programelor.........................................................................35
Tema 4. Programarea structurat...............................................................................................41
Fia suport 4.1 Tablouri.........................................................................................................41
Fia suport 3.2. iruri de caractere........................................................................................43
Fia suport 4.3. Articolul.......................................................................................................44
Fia suport 4.3. Fiiere...........................................................................................................45
Fia suport 2.3. Programarea structurat: structuri liniare, structuri alternative, structuri
repetitive (cu test final, cu test iniial, cu numr cunoscut de pai), teorema de structur
Bohm-Jacopini.......................................................................Error! Bookmark not defined.
Fia suport 2.4. Proiectarea algoritmilor: top-down, bottom-up, modular, structurat Error!
Bookmark not defined.
Fia suport 2.5. Algoritmi elementari ce folosesc structuri fundamentale. Error! Bookmark
not defined.
Tema 3. Corectitudinea algoritmilor..........................................Error! Bookmark not defined.
Fia suport 3.1. Surse de erori n elaborarea algoritmilor (erori n datele iniiale, erori de
rotunjire, erori de metod, erori reziduale, erori de sintax). Error! Bookmark not defined.
Fia suport 3.2. Verificarea corectitudinii algoritmilor (numr finit de pai, definirea corect
a datelor, asigurarea valorilor pentru toate variabilele utilizate n operaii)Error! Bookmark
not defined.
Fia suport 3.3. Analiza algoritmilor. Complexitatea algoritmilor (necesar de memorie,
timpul de execuie al algoritmului, optimalitatea algoritmului, numr de operaii)......Error!
Bookmark not defined.
IV. Fia rezumat.............................................................................................................................46
V. Bibliografie................................................................................................................................47
I. Introducere
Materialele de predare reprezint o resurs suport pentru activitatea de predare,
instrumente auxiliare care includ un mesaj sau o informaie didactic.
Prezentul material de predare se adreseaz cadrelor didactice care predau n cadrul
colilor postliceale, domeniul Informatic, calificarea Analist - programator.
Modulul Limbaje de programare pentru care a fost elaborat materialul are alocate un
numr de 72 ore, din care laborator tehnologic 36 de ore.
Competena / Rezultatul
nvrii
1. Se familiarizeaz cu
elementele de interfa
ale unui mediu de
dezvoltare integrat.
2. Lucreaz cu elementele
de baz ale limbajului
de programare.
Teme
Fie suport
Tema 1. Medii de
dezvoltare integrate
Tema 2. Limbaje de
programare
3.Folosete structurile de
baz ale limbajului de
programare.
Tema 3. Programarea
structurat
4.Implementeaz tipurile
structurate de date n
rezolvarea problemelor.
Tema 4. Tipuri
structurate de date
III. Resurse
Tema 1. Medii de dezvoltare integrate
Fia suport 1 Mediu de dezvoltare integrat
Mediu de dezvoltare integrat (software development environment, sau integrated
development environment) reprezint un mediu de programare creat ca program de
aplicaie avnd ca scop scrierea programelor.
Un mediu de dezvoltare pune la dispoziia programatorilor, ntr-un singur software toi
paii necesari crerii unui program:
- editarea codului surs,
- compilarea,
- depanarea, testarea
- generarea de documentaie
Principalele componente ale unui mediu de dezvoltare sunt: editorul de cod surs i
depanatorul. Mediile de dezvoltare apeleaz compilatoare, sau interpretoare, care pot
veni n acelai pachet cu mediul nsui, sau pot fi instalate separat de ctre
programator. Printre facilitile prezente n mediile de dezvoltare mai sofisticate se
numr: exploratoare de cod surs, sisteme de control al versiunilor, designere de
interfee grafice, sau unelte de ingineria programrii (ex. generarea de diagrame UML).
Mediul de dezvoltare integrat poate fi o aplicaie de sine stttoare sau poate fi inclus
ca parte a uneia sau mai multor aplicaii compatibile. n acest sens putem exemplifica
limbajul de programare BASIC care poate fi utilizat n cadrul aplicaiilor Microsoft Office,
ceea ce face posibil s scrii un program WordBasic n cadrul Microsoft Word.
De obicei un mediu de dezvoltare integrat este specific unui anumit limbaj de
programare, ns exist i medii de dezvoltare care pot lucra cu mai multe limbaje
(Eclipse, Microsoft Visual Studio).
Exemple de MDI:
Elemente de interfa
fiierul proiect cu extensia .mak , creat automat de MDI, ce poate fi vizualizat prin
meniul View, comanda MakeFile; conine informaii despre fiierele care
alctuiesc proiectul, progrmatorul nu va modifica datele din acest fiier ele se
creeaz i se modific automat de ctre mediu.
fiierul surs cu extensia .cpp, conine secvena C++ care alctuiete programul;
pentru ca programul s fie rulat se utilizeaz alte fiiere; fiierul poate fi vizualizat
prin mediul View, comanda Project Source; programatorul nu lucreaz cu acest
fiier, el este gestionat automat de ctre mediu
module formular, fiier cu extensia .frm, care descrie pentru fiecare formular al
proiectului controalele sale (atribute i evenimente), precum i descrierea
formularului (atributele i evenimentele). Pot fi declarate constante, variabile,
proceduri externe, proceduri eveniment i proceduri generale, toate la nivelul
formularului pentru care au fost declarate.
modulele clas, extensia .cls, analoage modulelor formular, doar c ele sunt
folosite pentru a crea obiecte proprii cu proprieti i metode.
iar programul va ngloba n execuie toate instruciunile pe care le conine rutina prin
simpla apelare a numelui acesteia.
Principalele avantaje pe care le prezint un astfel de utilitar:
- sigurana n lucru, oferit prin gestionarea automat a tuturor modificrilor asupra
fiierelor pe care le conine o bibliotec;
- simplificarea activitii de programare, prin apelarea din biblioteca a rutinei de
care este nevoie;
- utilizare simpl, cu ajutorul unei linii de comanda, n mod conversaional sau
utiliznd un fiier de rspunsuri;
- creterea gradului de portabilitate.
Interfee pentru acces la baze de date. Baza de date reprezint o modalitate de
stocare a unor informaii (date) pe un suport extern, cu posibilitatea regsirii acestora.
Uzual, o baz de date este memorat ntr-unul sau mai multe fiiere. Modelul clasic de
baz de date este cel relaional, n care datele sunt memorate n tabele.
Crearea unei baze de date: se face cu aplicaii specializate oferite de productorul
tipului respectiv de baz de date.
Prelucrarea datelor din bazele de date prin intermediul limbajelor de programare
presupune accesul la baza de date care se face prin intermediul unui driver specific
tipului respectiv de baz de date. Acesta este responsabil cu accesul efectiv la datele
stocate, fiind legtura ntre aplicaie i baza de date.
ODBC, JDBC sunt interfae standard SQL de acces la baze de date. Cu alte cuvinte, nu
este necesar scrierea un program pentru a accesa o baz de date Oracle, alt program
pentru a accesa o baz de date Acces sau SQL Server. Este de ajuns scrierea un
singur program folosind JDBC i acesta va fi capabil s trimit secvene SQL bazei de
date dorite. Bineneles, scriind codul sursa n Java, ne este asigurat portabilitatea
programului.
O dat ncheiat etapa de instalare mediul poate fi lansat n execuie prin facilitile
sistemului de operare. Dac se utilizeaz un sistem de operare din generaia Windows
lansarea mediului de programare se face accesndu-l din Opiunea Programs a
butonului Start.
Pentru a utiliza ct mai uor mediile de programre (MDI) acestea sunt n general dotate
cu documentaie de tip Help. Majoritatea pun la dispoziia programatorului i
asisten online pe site-urile oficiale ale furnizorilor sau pe alte surse de informaii
din Web.
De obicei sistemele Help sunt structurate de aa natur nct s permit regsirea
rapid a informaiei (informaii despre depanarea programelor, structurile de control,
cuvinte cheie), subiecte generale (structurate pe capitole i domenii de interes), legturi
de tipul See also, exemple de utilizare.
Majoritatea mediilor de programare moderne pun la dispoziie i asisten contextual,
adic se pot obine informaii despre un anumit cuvnt cheie (funcii, proprieti,
metode, declaraii, metode etc.), comand din meniuri, instrumente, controale etc.
selectndu-l i invocand tasta F1, fr a mai trece prin mediul Help.
Sugestii metodologice
UNDE PREDM? Coninutul va fi predat n laboratorul de informatic dotat cu
videoproiector, fiecare elev va ocupa un loc la o sta ie de lucru.
CUM PREDM?
10
11
Proiect
Noiunea de proiect este strns legat de mediu de dezvolatare integrat. MDI-ul fiind un
set de aplicaii cu rol n realizarea aplicaiilor/programelor fi ierul surs nu mai este un
simplu fiier ci el este organizat sub forma unui proiect fiind alctuit din mai multe f iiere
fiecare avnd un rol bine definit n cadrul proiectului.
12
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic dotat cu
videoproiector.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.
14
Cuvinte cheie reperezint cuvinte n limba englez utilizate de ntr-un anumit context i
cu un neles bine definit. Ele nu pot fi utilizate n alt scop dect ce pentru care au fost
definite.
Exemple de cuvinte cheie:
Pascal
Visual Basic
16
Includeri de fiiere
Toate funciile folosite n program trebuie descrise n fiierele surs (cele scrise de ctre
programator), n fiiere header (funciile predefinite, existente n limbaj), sau n biblioteci
de funcii.
Un fiier header este un fiier aflat n sistem sau creat de ctre programator, care
conine declaraii i definiii de funcii i variabile.
Tipuri de date
Prin tip de date se intelege o mulime finit de valori mpreun cu o regul de codificare
n vederea memorrii datelor, precum i o mul ime de opera ii definite pe mul imea
valorilor.
Limbajele de programare utilizeaz tipuri de date numerice i alfanumerice. Tipurile
numerice sunt submulimi ale numerelor naturale, ntregi i reale. n func ie de tipul lor
mulimea de operaii definete operatorii cu care lucreaz datele precum i anumite
restricii.
Tipurile de date pot fi predefinite (tipuri fundamentale) i definite de programator.
n funcie de limbajul folosit, tipurile fundamentale de date au alte denumiri, ns
conceptual ele vizeaz aceleai domenii de valori.
Tipurile ntregi exist mai multe tipuri ntregi predefinite, iar fiecare tip desemneaz o
submulime a mulimii numerelor ntregi.
Exemple n Pascal:
Exemple in C/C++
Tip
Valoare
minim
Valoare
maxim
Tip
Valoare
minim
Valoare
maxim
Shortint
-128
127
unsigned
65535
Byte
255
unsigned long
4294967295
Integer
-32768
32767
int
-32768
32767
Word
65535
short
-32768
32767
Longint
-2147483648
2147483647
long
-2147483648 2147483647
Tipurile reale sunt reprezentate de o submulime a mulimii numerelor reale, care poate
fi reprezentat n calculator.
Exemple n Pascal:
Exemple n C/C++
Tip
float
17
Valoare
minima
maxima
Valoare
3.4E-38
3.4E38
double 1.7E-308
1.7E308
long
3,4E-4932
double
1,1E4932
Tip
Valoare
minima
Valoare
maxima
Single
1.5E-45
3.4E38
Real
2.9E-39
1.7E38
Double
5.0E-324
1.7E308
Extended
3.4E-4932
1.1E4932
Comp
-263+1
263-1
Exemple in C/C++
Tip
Valoare
minim
Valoare
maxim
Tip
Valoare
minim
char
#0
#255
unsigned char 0
255
char
127
-128
Valoare
maxim
Tipul logic cunoscut i sub denumirea de tip boolean este un tip enumerativ format din
dou valori: true i false. Exist limbaje precum C/C++ care nu au acest tip, pentru
reprezentarea celor dou valori se fac diverse articicii precum utilizarea valorii 0 i diferit
de 0.
Tipurile ntregi, caracter i tipul logic sunt tipuri ordinale, mulimi finite i ordonate
de valori discrete.n acest sens putem spune c unui element i se asociaz un numr
de ordine n cadrul mulimii, obinut implicit sau prin intermediul funciilor specifice
limbajelor de programare. Elementele unui astfel de tip pot fi puse n relaie (<, >, <=,
>=, diferit, egal).
n funcie de limbajul de programare studiat, profesorul va puncta toate tipurile existente
n limbajul respectiv: enumerativ, mulime, subdomeniul etc.
Date care intervin n prelucrri din cadrul unui program pot fi clasificate n constante i
variabile.
Variabilele sunt date care i modific valoarea pe parcursul execuiei programului.
O variabil este definit de patru entiti:
- nume (cu ajutorul cruia ne putem referi pe parcursul execuiei programului),
- valoare (care variaz la momente de timp diferite),
18
tip (care arat crei mulimi de valori apar ine variabila i specific ce operatori
pot fi utilizai)
- adresa (care specific locaia unde aceasta este stoca n memorie).
Pentru a utiliza variabile n cadrul unui program acestea vor fi declarate nainte de
utilizare. n acest fel li se atribuie un identificator, o adres de memorie, iar n tipul
execuiei programului la acea adres vor fi memorate diferite valori, toate avnd acela i
tip, cel specificat la declarare.
-
Exemplu: Se dau dou numere ntregi a i b mai mici dect 100. S se afi eze
media aritmetic.
Analiznd situaia problem se deduce c este nevoie de 3 variabile al cror tip este
diferit: cele dou numere vor fi declarate de tip ntreg, iar media aritmetic va fi de tip
real.
n funcie de limbajul de programare utilizat modalitatea de declarare este diferit:
Varianta C++
Varianta PASCAL
tip_de_date identificator_variabil;
Pot fi declarate i mai multe variabile de acela i tip n cadrul aceleia i declara ii: n
acest caz se va folosi virgula.
tip_de_date identificator_variabila_1,
var identificator_variabila_1,
identificator_variabila_2,
identificator_variabila_2,
identificator_variabil_n;
identificator_variabil_n: tip_de_date;
Pentru exemplul dat vom avea urmtoarele declara ii:
int a,b;
float medie;
Constantele sunt date care nu i modific valoarea. Aceste valori fixe reprezint
caractere, iruri de caractere, numere ntregi sau raionale.
Ca i n cazul variabilelor, constantele au un nume, o valoare (dar care nu se poate
modifica), un tip i o adres de memorie. Este necesar, ca i la variabile, o declarare
pentru a specifica tipul, numele i valoarea constantei.
Varianta C/C++
Varianta PASCAL
II.
Operatorii pot fi: unari, se aplic unui singur operand sau binari, situai n
care sunt implicai doi operanzi. n limbajele de programare operatorii sunt
grupai n clase de operatori: aritmetici, relaionali, logici, pe iruri de
caractere (limbajul C nu are operatori definii pe iruri de caractere).
Operatori aritmetici
Operator
Adunare
Scdere
nmulire
mprire ntreag
mprirea
numerelor reale
Pascal
+
*
Ctul mpririi: div
Restul mpririi: mod
/
C/C++
+
*
Ctul mpririi: /
Restul mpririi: %
/
Ei precizeaz o relaie de ordine sau de egalitate ntre date, care poate fi ndeplinit sau
nu. Expresiile construite cu operatorii relaionali pot fi evaluate la o valoare de adevar:
adevarat (diferit de zero dac se lucreaz cu C/C++) sau fals (egal cu 0 pentru
varianta C/C++), dup cum este ndeplinit relaia sau nu.
Operatorii relaionali sunt operatori binari i se pot aplica numai operanzilor numerici,
logici i doar pentru varianta Pascal i pe tipul caracter (ordinea caracterelor fiind cea
data de codul ASCII).
Nu exist o ordine specific a operaiilor atunci cnd folosim operatorii relaionali.
Operaiile se efectueaz n ordinea apariiei operatorilor, de la stanga la dreapta.
Operatori logici
Operatorii logici sunt folosii pentru determinarea valorii de adevr a propoziiilor logice
i anume adevarat sau fals, pentru varianta Pascal, respectiv 0 i orice valoare
diferit de zero pentru varianta C/C++.
20
q
0
1
0
1
not p / !p
1
1
0
0
p or q / pIIq
0
1
1
1
p and q / p &&q
0
0
0
1
O expresie este format dintr-unul sau mai muli operanzi asupra crora
acioneaz operatori. La scrierea unei expresii se folosesc operatori din
aceeai clas sau din clase diferite. La evaluarea unei expresii se va ine cont
de prioritatea operatorilor (care poate fi modificat prin utilizarea parantezelor
rotunde), de asociativitatea lor, precum i de regula conversiei implicite.
Asociativitate*
De la drepta la stanga
De la stanga la dreapta
De la stanga la dreapta
De la stanga la dreapta
De la stanga la dreapta
De la stanga la dreapta
21
write(ir_de_caractere);
write (ir_de_caractere,
identificator_variabila);
writeln(identificator_variabila);
Utilizarea lui writeln are ca efect dup scriere
trecerea cursorului la urmtorul rnd.
Se pot scrie mai multe variabile odat, acestea
sunt specificate n parantez, desprite prin
vigul.
Exemple:
var a,b: integer;
c:real;
......
write(a,b); {se va afia coninutul celor dou
variabile: a i b, dup scriere cursorul va rmne
pe aceeai linie};
writeln(c); {se va afia coninutul variabilei c, dup
scriere cursorul sare pe linia urmtoare};
cin>> identificator_variabil;
Exemplu:
int i;
.....
cin>>i; //are ca efect citirea variabilei i
Se pot citi mai multe variabile utiliznd formatul:
cin>>var1>>var2.....>>varn;
Ieirile standard se realizeaz cu obiectul cout i
operatorul <<. Pentru utilizarea acestora
este necesar includerea fiierului
iostream.h.
cout<< identificator_variabila;
cout<<Sir de caractere;
Exemplu:
int i;
.....
cout<<i; //are ca efect afiarea valorii lui i
cout<<\n; //afieaz newline
cout<<a=<<a; //are ca efect afisarea sirului
dintre ghilimele dup care se va afia valoarea
variabilei a.
Se pot afia mai multe variabile utiliznd
formatul:
cout<<var1<<var2.....<<varn;
Sugestii metodologice
22
UNDE PREDM?
videoproiector.
CUM PREDM?
23
comentarii
declararea variabilelor
operaii de intrare/ieire
instruciunea de atribuire
instruciunea compus (sau blocul de instruciuni)
C/C++
variabila=valoare;
variabila=expresie;
Exemplu:
a := 56;
b := a-2*a;
c := c+1;
b :=b-1;
Exemplu:
a = 56;
b = a-2*a;
c = c+1;
b =b-1;
C/C++
i++;
C/C++
i--;
24
Instruciunea compus
Este folosit pentru a grupa mai multe instruciuni ce urmeaz a fi efectuate n ordinea
n care sunt scrise.
Parianta Pascal
Begin
Instructiune1;
Instructiune2;
..............
Instructiunen;
End
Varianta C/C++
Instructiune1;
Instructiune2;
..............
Instructiunen;
Varianta C/C++
main()
{
int a,b,aux;
cout<<a=;cin>>a;
cout<<b=;cin>>b;
aux=a;
a=b;
b=aux;
cout<<a<<endl<<b<<endl;
}
Varianta C/C++
main()
{
int c1,c2,x;
cout<<x=;cin>>x;
c1= x%10;
x=x/100
c2= x%10;
cout<<c1<<endl;
cout<<c2<<endl;
}
25
Structura alternativ
Structura alternativ permite rezolvarea situaiilor n care trebuie s executm o
anumit secven de instruciuni care depinde de o condiie. n acest sens putem avea
una sau dou alternative:
I.
II.
Varianta Pascal
Situaia I
if exp_logic then secve1
else secven2;
Situaia II
if exp_logic then secve;
Varianta C/C++
Situaia I
if (exp_logic) secve1;
else secven2;
Situaia II
if (exp_logic) secve;
Observaii
1. Exist cazuri n care expresia logic poate fi mai complex, s lum cazul cnd
aceasta este alctuit din dou condiii. Notnd prima condiie cu c1 i pe a doua
cu c2 Dac secvaa1 necesit ca ambele condiii s fie ndeplinite atunci se va
folosi operatorul logic i iar condiia va fi compus:
o Varianta Pascal: c1 and c2
o Varianta C/C++: c1&&c2
Dac secva1 necesit ca cel puin una dintre condiii s fie ndeplinit atunci se va
folosi operatorul logic sau iar condiia va fi compus:
- Varianta Pascal: c1 or c2
- Varianta C/C++: c1||c2
2. Ambele variante (att pentru cazul ct exresia logic este ndeplinit ct i cea n
care nu este ndeplinit) permit executarea unei singure instruciuni. n cazul n
care este necesar efectuarea mai multor instruciuni, acestea se grupeaz ntr-o
singur instruciune compus: begin...end pentru varianta Pascal, respectiv ntre
acolade pentru varianta C/C++ .
3. Uneori avem o instruciune de decizie subordonat unei alte instruciuni de
decizie. Este important ca instruciunea subordonat s fie scris identat fa de
instruciunea care o subordoneaz. Acest mod de scriere nu este obligatoriu
pentru funcionarea programului ns l face mai uor de urmrit i de actualizat.
Paritatea unui numr
Se introduce de la tastatur un numr ntreg a, mai mic dect 100. S se testeze dac
numrul este par sau nu i s se afieze un mesaj corespunztor.
26
Varianta Pascal
Var a: integer;
Begin
Write(a=);
Readln(a);
If a mod 2 = 0 then
Writeln (Este par)
Else
Writeln (Nu este par);
End.
Varianta C/C++
#include <iostream.h>
main()
{
int a;
cout<<a=;cin>>a;
if(a%2==0)
cout<< Este par;
else
cout<< Nu este par;
}
Varianta C/C++
#include<iostream.h>
main()
{
int x,y;
cout<<x=;cin>>x;
cout<<y=;cin>>y;
if(x==y)
cout<<Numerele sunt egale;
else
if (x>y)
cout<<Maximul este<<x;
else
cout<<Maximul este<<y;
}
Structura repetitiv
O structur repetitiv se caracterizeaz prin posibilitatea efecturii repetitive a unei
secvene de instruciuni, ct timp este ndeplinit o anumit condiie sau pna cnd se
ndeplinete o anumit condiie. Repetiia secvenei de instruciuni se numete
iteraie.
Structurile repetitive se mai ntlnesc sub numele de structuri ciclice sau cicluri.
Exist trei tipuri de structuri repetitive:
- Structura cu numr necunoscut de repetiii cu test iniial.
- Structura cu numr necunoscut de repetiii cu test final
- Structura cu numr cunoscut de repetiii
27
Folosind notaiile fcute, structur repetitiv cu test iniial se poate scrie astfel:
Varianta Pascal
while C do S;
Varianta C/C++
while(C) do S;
Observaii:
1. Pentru ca structur repetitiv s nu intre ntr-un ciclu infinit, trebuie ca secvena
de instruciuni s modifice cel puin una din variabilele care intervin n condiie
astfel nct aceasta s poat deveni fals (Pascal), respectiv 0 (C/C++) la un
moment dat.
2. Dac de la bun nceput condiia are valoarea fals/0, secvena de instruciuni nu
se execut nici mcar o data.
Exemplu: numrul de numere pare Varianta I
S considerm urmatoarea problem: Se citesc numere ntregi mai mici dect
10000, pn la citirea lui zero. Se cere s se afi eze numrul de numere pare
citite.
Varianta Pascal
Var x, nr:integer;
Begin
Write(x=);readln(x);
While (x<>0)do
Begin
If x mod 2 = 0 then inc(nr);
Write(x=);readln(x);
End;
Write(Au fost citite , nr, numere pare);
End.
Varianta C/C++
#include<iostream.h>
main()
{
int x,nr=0;
cout<<"x="; cin>>x;
while (x!=0)
{if (x % 2 == 0) nr++;
cout<<"x="; cin>>x;}
cout<<"Au fost citite "<<nr<<"
numere pare";
}
28
n structur repetitiv cu test final mai nti se execut secvena de instruciuni S i apoi
se evalueaz condiia C. De aici i numele de structur cu test final.
Varianta Pascal
repeat S until C;
Varianta C/C++
do {S} while C;
1. Se
execut
secvena
de
instruciuni dup care se verific
condiia. Dac aceasta este
diferit de zero se reia execuia
secvenei.
2. Algoritmul se repet pn cnd
condiia devine zero.
Observaii:
1. Pentru ca structur repetitiv s nu intre ntr-un ciclu infinit, trebuie ca secvena
de instruciuni s modifice cel puin una din variabilele care intervin n condiie
astfel nct aceasta s poat deveni adevrat (Pascal), respectiv 0 (C/C++) la
un moment dat.
2. Spre deosebire de structur repetitiv cu test iniial, structur repetitiv cu test
final efectueaz o dat secvena de instruciuni nainte de a testa condiia.
Varianta C/C++
#include<iostream.h>
main()
{
int x,nr=0;
cout<<"x="; cin>>x;
do
{if (x % 2 == 0) nr++;
cout<<"x="; cin>>x;
29
End.
}
while (x);
cout<<"Au fost citite "<<nr<<"
numere pare";
}
exp_i i exp_f (am fcut presupunerea c exp_i <= exp_f) sunt expresii
ale cror valori sunt evaluate n cadrul repetiiilor;
Varianta C/C++
for (contor= exp_f; contor>=exp_i;
contor--) S;
30
Varianta C/C++
#include<iostream.h>
main()
{
int n, i, s=0;
cout<<"n="; cin>>n;
for(i=1; i<=n; i++)
s=s+i;// se mai poate scrie i s+=i;
cout<<Suma este: <<s;
}
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic dotat cu
videoproiector.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.
31
C/C++
while (c) do
S;
if c then
repeat
S;
until not c;
if (c)
do
{ S;}
While (c);
Simularea structurii repetitive cu test final prin cea cu test iniial se face astfel:
Pascal
repeat
S;
until c;
C/C++
do
{S }
While (c)
S;
while c do
S;
32
for contor:=vi
vf do S;
to
C/C++
for(contor=vi;contor
<=vf;contor++)
S;
Contor:=vi;
while contor<=vf do
begin
S;
contor:=contor + 1;
end;
contor=vi;
while (contor<=vf) do
{S;
contor=contor + 1;
}
Pascal
for contor:=vi
vf do S;
to
C/C++
for(contor=vi;contor
<=vf;contor++)
S;
Contor vi
Dac contor<=vf atunci
| execut
| |
a;
| |
contor contor + 1;
| ct timp contor<=vf
|
Contor:=vi;
if contor<=vf then
repeat
S;
contor:=contor + 1;
until contor>vf;
contor=vi;
if (contor<=vf)
do
{S;
contor=contor + 1;
}
while (contor<=vf);
Sugestii metodologice
UNDE PREDM?
videoproiector.
33
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.
Ca materiale suport se pot folosi:
34
Testarea programelor
Datele de test sunt date de intrare alese pentru variabilele de intrare pentru care se
cunosc rezultatele, sau avem unele informaii despre rezultate. Executnd programul cu
aceste date ar trebui s se ajung la rezultate cunoscute.
Corectitudinea rezultatelor n aceste execuii nu demonstreaz ns corectitudinea
programului n general. Testarea nsa pune adeseori n evidenta erori fcute n diferite
faze ale programrii. Scopul testrii programelor este depistarea i eliminarea erorilor.
Acest lucru este fcut prin execuia programului cu date de test pentru care se cunosc
dinainte rezultatele (sau cel putin se tie ceva despre ele) i se observ rezultatele
obinute n urma execuiei. n cazul n care rezultatele obinute n urma execuiei nu sunt
cele ateptate se vor cauta i elimina erorile.
Este foarte important problema alegerii datelor de test i a numrului de execuii ce
trebuie fcute pentru a putea considera c programul nu are erori. Numrul tuturor
seturilor de date de intrare posibile este teoretic infinit chiar i pentru probleme simple.
Stabilirea datelor de test se poate face:
-
Cea mai bun cale este ns una mixt, in care sunt combinate aceste dou posibiliti.
La testarea dup specificaia problemei, stabilirea datelor de test se face analiznd
specificaia problemei. Se recomand stabilirea datelor de test tinnd seama de
specificaia asupra datelor de intrare i de specificaia asupra datelor de ieire. Aceasta
metoda de testare este adecvat problemelor simple. n cazul unei probleme complexe
aplicarea ei este imposibil datorit numrului foarte mare de cazuri posibile, care ar
trebui testate. ns problema poate fi descompus n subprobleme mai mici, invizibile n
specificaie si a caror testare este mai simpl. Privind programul ca o cutie neagr nu se
va mai ine seama de aceste subprobleme. Totui, testarea dup specificaia problemei
ramane o metoda util n testarea modulelor.
Testarea dup textul programului ine seama, pentru a stabili datele de test, de
instruciunile care trebuie executate. Considernd ca algoritmul este descris printr-o
schema logic, o execuie a programului nseamn parcurgerea unui drum de la START
la STOP n aceast schem. Dac la aceast execuie rezultatele obinute sunt corecte
probabil c textul algoritmului pe acest drum este corect. Ar trebui s verificm toate
blocurile schemei logice i mai ales toate drumurile de la START la STOP posibile. Cu
observaia c n cazul a dou drumuri ce difer doar prin faptul c o anumit bucl se
execut de n1, respectiv n2 ori le vom considera echivalente ntre ele. Dintre toate
drumurile echivalente ntre ele vom testa un singur drum, altfel am avea o infinitate de
drumuri de testat.
n concluzie vom alege pentru fiecare drum un set de date de test, numrul execuiilor
fiind egal cu numrul acestor drumuri. Dac toate execuiile au dat rezultate corecte
programul se consider testat. Dac ns la o singur execuie am depistat erori,
36
37
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.
39
Declararea tablourilor
I.
Variana C/C++
a[0
]
a[1
]
----------------------------------------------------------------------------------------
a[98
]
a[99
]
--------- --------a[9]
[0]
a[9] [1]
-----------------------------------------------------------------------------------------------------------------------------------------
a[0][18]
a[0][19]
a[1] [18]
a[1] [19]
---------
----------
a[9] [18]
a[9] [19]
a[2
]
---------------------------------------------------------------------------------------41
a[99
]
a[100
]
Am declarat un nou tip structurat numit vector ale crui elemente sunt vectori cu 100 de
componente de tip ntreg i o variabil de tip vector cu numele a ce are 100 de
componente numere ntregi. Adresarea unei componente se face prin indice, specificat
ntre paranteze ptrate, aa cum este specificat n figur. Prima valoare este a[1], a
doua este a[2], a i-a valoarea este a[i], ultima este a[100].
Limbajul Pascal permite, cu excepia situaiei cnd o variabil de tip vector
face obiectul unui parametru al unei proceduri sau func ii, declararea direct a
variabilei fr a fi necesar declararea tipului vector.
Exemplu:
var v: array[1..100] of integer;
Am declarat o variabil de tip vector cu numele a ce are 100 de componente numere
ntregi.
Pentru a declara o matrice n Pascal se va utiliza urmatoarea defini ie:
type
nume_tip=array[numar_natural1..numar_natural2,
numar_natural3 .. numar_natural4] of tip_de_baza;
var nume_variabila_matrice:nume_tip;
Exemplu:
type matrice=array[1..10, 1..20] of integer;
var a:matrice;
a[1] [1]
a[1][2]
a[1][19]
a[1][20]
a[2] [1]
a[2] [2]
a[2] [19]
a[2] [20]
a[10]
[1]
a[10] [2]
a[10] [19]
a[10] [20]
Am declarat un nou tip de date structurat ale crui elemente sunt tablouri
bidimensionale cu 10 linii i 20 de coloane i o variabil de tip matrice cu numele a ce
are 10 linii i 20 de coloane n total 200 de componente numere ntregi. Adresarea unei
componente se face prin indici (primul reprezint numrul liniei, cel de-al doilea
numrul coloanei), specificate ntre paranteze ptrate, a a cum este specificat n figur.
Pentru a ne referi la componenta de pe linia 2 i coloana 3 vom folosi urmtoarea
specificaie: a[2][3].
42
Citirea tablourilor
Presupune introducerea de valori n componentele tabloului citirea sau atribuirea unei
valori fiecrei componente a tabloului. Pentru introducerea datelor se vor folosi
structurile repetitive. Deoarece se cunoate de regul numrul de componente
ale unui tablou se utilizeaz stuctura cu numr cunoscut de pai.
Exemplu:
Fie declaraiile:
Varianta Pascal
var a: array [1..10] of integer;
mat: array[1..10, 1..10] of integer;
i, j,col, lin,n:integer;
Varianta C/C++
int a[10];
int mat[10] [10];
i,n, col, lin:integer;
43
Afiarea tablourilor
Presupune tiprirea valorilor reinute n componentele tabloului Pentru afiarea datelor
se vor folosi structurile repetitive. Deoarece se cunoate de regul numrul de
componente ale unui tablou se utilizeaz stuctura cu numr cunoscut de pai.
Exemplu:
Fie declaraiile:
Varianta Pascal
var a: array [1..10] of integer;
mat: array[1..10, 1..10] of integer;
i, j,col, lin,n:integer;
Varianta C/C++
int a[10];
int mat[10] [10];
i,n, col, lin:integer;
Presupunnd c n vectorul a sunt memorate n valori, iar matricea mat are un numr
de lin linii, respectiv un numr de col coloane afiarea la monitor vectorului,
respectiv a matricei se realizeaz astfel:
Varianta Pascal
..................
writeln(Vectorul a conine:);
for i:=1 to n do
write(a[,i,]=, a[i]);
writeln();
writeln(Matricea mat contine:);
for i:=1 to lin do
begin
for j:=1 to col do write(a[i,j]);
writeln();
end;
Varianta C/C++
..................................
cout<<Vectorul a contine:<<endl;
for(i=0;i<n;i++)
cout<<a[<<i<< ]=<<a[i];
cout<<endl;
cout<< Matricei mat contine:<<endl;
for(i=0;i<lin;i++)
{
for(j=0;j<col;j++) cout<<a[i][j];
cout<<endl;
}
44
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
45
46
Varianta C/C++
char nume[constanta_intreaga];
Exemplu:
var ch:string[10]; {am declarat un ir de
caractere cu numele ch care poate
memora un ir de maxim 10 caractare}
Exemplu:
char ch[10]; /*am declarat un ir de
caractere cu numele ch care poate
memora un ir de maxim 9 caractare*/
Exemplu:
char ch[ ]=caractere;
Observaie:
n exemplul de mai sus nu s-a mai
specificat numrul maxim de caractere,
acesta este calculat automat de ctre
compilator. Primul element, ch[0] reine
codul ASCII al caracterului c, ch[1] reine
codul ASCII al lui a, ch[8] va reine codul
ASCII al ultimului caracter (e), ultimul
element al irului ch[9] reine 0 adic
codul ASCII
al
caracterului
nul.
ntotdeauna ultimul caracter va reine
0. Deci se va ine cont ca la declaraie s
se menioneze un caracter n plus fa de
lungimea dorit.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de maxim 2 elevi.
Ca materiale suport se pot folosi:
O prezentare multimedia care s cuprind noiunile de mai sus.
Aplicaii de prelucrare a elementelor unui ir de caractere, utiliznd func iile
specifice limbajului de programare.
49
In figura de mai sus avem un exemplu de articol cu trei campuri de tipuri diferite: nume
de tip ir de caractere, vrst de tip ntreg i medie de tip real. Adresarea cmpurilor
(prin numele lor) se face folosind operatorul . (punct). Dac se declar o variabil
e de tip ELEV, atunci un element ar putea fi accesat pe cmpuri astfel: e.nume,
e.varsta, e.medie
Datele de tip articol pot fi adresate n dou moduri: global sau pe cmpuri (cum am
vzut n exemplul anterior). Adresarea global este permis numai n operaia de
atribuire, cu condiia ca ambele variabile (surs i destinaie) s fie articole de acelai
tip.
Declarare:
Varianta Borland Pascal
Record
type <identificator> = <tip record>; unde
<tip record> ::= record <list de cmpuri> [;]
end
<list de cmpuri> ::= <parte fix> [; <parte
variante>] | <parte variante>
<parte fix> ::= <seciune record> {;
<seciune record> }
<seciune record> ::= <identificator>{,
<identificator>}: <tip>
<parte variante> ::= case[ <identificator>:]
<tip> of <variant> {; <variant>}
<variant> ::= <constant> {, <constant>} :
[<list de cmpuri>] [;])
adic un element de tip record este n
50
Varianta C/C++
struct [nume structur]
{
[<tip> <nume variabil>];
[<tip> <nume variabil>];
...
} [list de variabile];
Exemplu:
Este necesar s dm un
structurii. O vom denumi: elev.
struct elev
{
char nume[200];
float media;
int absente;
nume
Operaii specifice
Citirea unei variabile de tip nregistrare se face citind informaiile corespunztoare
fiecrui cmp al acesteia: readln (x. ziua); readln (x. luna); readln (x. anul);
Scrierea unei variabile de tip nregistrare se face scriind informaiile corespunztoare
fiecrui cmp al acesteia: writeln (x. ziua); writeln (x. luna); writeln (x. anul);
Utilitate
- Lista
Exemple de liste se ntlnesc destul de des n practica prelucrrii datelor pe calculator.
Iat cteva: lista studenilor dintr-o grupa i a notelor primite la un examen, lista crilor
dintr-o biblioteca, lista clienilor unei bnci, lista cadrelor didactice dintr-o catedra etc.
Putem defini lista ca o colecie omogen, secvenial de date.
- Stiva
Stiva este un caz special de list liniar n care intrrile i ieirile se fac la un singur
capt al ei.
Exemple de stive de obiecte sunt oarecum evidente: stive de lemne, de lzi, de baloi
de paie, de farfurii, de dosare etc. Structura de stiv presupune, conform definiiei, o
anumit disciplin: totdeauna se adug un obiect "deasupra" ultimului depus si se
extrage totdeauna ultimul obiect adugat. Se spune ca accesul la o stiv este de tip
LIFO (Last In - First Out). Dou operaii sunt eseniale n lucrul cu stiva: adugarea unui
element i extragerea unui element din stiva.
- Cozi
Coada este lista liniar n care adugarea de noi elemente se face la un capt, iar
extragerea unui element se poate face numai prin cellalt capt al listei.
Din definiie rezulta c, ntotdeauna, dintr-o coad se extrage elementul cel mai vechi.
Se spune ca accesul la o coad este de tip FIFO (First In First Out).
51
Ca i n cazul stivei, operaiile de baz asupra unei cozi sunt dou: adugarea unui
element n coada i extragerea unui element din coad.
- Arbori
Listele reprezint mijloace simple i practice de a reprezenta organizarea liniara a
obiectelor.
Realitatea complex pe care o modelm ne arat nsa legturi ntre obiecte care
depesc modelul liniar. Grafurile i ca un caz particular al acestora - arborii - reprezint
structuri capabile s surprind complexitatea legturilor dintre obiecte.
Cu ajutorul arborilor se pot descrie foarte fidel structurile de tip ierarhic (piramidal). Iat
cteva exemple: structura de conducere a unei firme, organizarea administrativ
teritoriala dintr-o tara, organizarea unei armate, structura unei cri.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 2-3 elevi.
52
Varianta C/C++
Deschiderea se realizeaz cu funcia open
care se apeleaz printr-o expresie de
forma df= open () unde df este o
variabil de tip int
Scrierea ntr-un fiier se face folosind funcia write. Este asemntoare cu funcia read
i are acelai prototip. Diferena const n aceea c realizeaz transferul datelor n sens
invers, adic din zona de memorie, n fiier.
Varianta Borland Pascal
Varianta C/C++
Scrierea se face prin apelul procedurii Scrierea se face folosind funcia write.
Write(f, x): adaug n fiierul f o Utilizarea funciei
implica includerea
component a crei valoare este dat de fiierului io.h
53
Operaii de intrare/ieire
Varianta Borland Pascal
Varianta C/C++
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic sau ntr-o
sal care are videoproiector sau flipchart.
CUM PREDM?
Se recomand utilizarea calculatoarelor pentru activitile de fixare a noilor
cunotine.
Clasa poate fi organizat frontal sau pe grupe de 3-4 elevi.
55
Fia rezumat
Clasa ________________
Nr.
Crt.
1
2
3
4
...
Y
Nume i
prenume
elev
Profesor______________________
Competena 1
A1
A2
Competena 2
AX
A1
A2
Competena 3
A3
A1
A2
A3
zz.ll.aaaa1
zz.ll.aaaa reprezint data la care elevul a demonstrat c a dobndit cunotinele, abilitile i atitudinile vizate prin activitatea respectiv
56
Observaii
V. Bibliografie
1. Cristian Georgescu, 1999. Analiza si proiectarea sistemelor informatice,
Editura Radial, Galai
2. Mihaela Georgescu, 2002, Structuri de date si baze de date, Editura Pax
Aura Mundi, Galai
3. Popescu T.& colectiv, 1999, Dictionar de informatica, Editura stiintifica si
enciclopedica, Bucureti
4. Maxim I., 1997, Metodica predrii informaticii, Universitatea tefan cel
Mare, Suceava, curs litografiat
5. Ionescu C., 1999, Metodica predrii informaticii, Universitatea BabeBolyai, Cluj, curs litografiat,
6. Wirth N., 1976, Algorithms+Data Structures=Programs, Prentice Hall, Inc
7. Sorin, T., Cerchez E., erban M., 1999, Informatica, Varianta C++, manual
pentru clasa a IX-a, Ed L&S Infomat, Bucureti
8. Sorin, T., Cerchez E., erban M., 1999, Informatica, Varianta Pascal,
manual pentru clasa a IX-a, Ed L&S Infomat, Bucureti
9. Sorin, T., 1997, Bazele programrii n C++, Ed. L&S Infomat, Bucureti
10. Sorin, T ., 1996, Tehnici de programare, Ed. L&S Infomat
11. Tomescu I., 1994, Bazele informaticii (Manual pentru clasa a X), Ed.
Didactic i Pedagogic
12. Stoilescu D., 1998, Manual de C/C++ pentru licee, Ed. Radial, Galai,
13. Ptru B., Miloescu M., 1999, Informatic - manual pentru clasa a IX-a,
Ed. Teora,
14. Lica D., Onea E., 1999, Informatica, manual pentru clasa a IX-a, Ed. L&S
Infomat,
15. Knuth D. E., 1973, Tratat de programarea calculatoarelor, vol. I, II, III, Ed.
Tehnic, Bucureti,
16. Ivac C., Prun M., Mateescu E., 1997, Bazele Informaticii (Grafuri i
elemente de combinatoric) - Caiet de laborator, Ed. Petrion
17. Ivac C., Prun M., 1995, Bazele informaticii, Ed. Petrion
57
18. Giumare C., Negreanu L., Clinoiu S., 1997, Proiectarea i analiza
algoritmilor. Algoritmi de sortare, Ed. All
19. Cormen T., Leiserson Ch., Rivest R., 1990, Introduction to Algorithms, MIT
Press,
20. Andonie R., Grbacea I., 1995, Algoritmi fundamentali, o perspectiv C++,
Ed. Libris,
21. ***.La http://www.allaboutcircuits.com/vol_4/chpt_2/3.html 08.05.2009
22. ***. La http://www.wikipedia.org/. 04-12.05.2009
23. ***.La http://www.ecvale.com/index.php?
main_page=pub_eind_info&pubs_id=290807217 . 08.05.2009
24. ***. La http://hal.archives-ouvertes.fr/docs/00/28/14/29/PDF/floating-pointarticle.pdf 28.04.2009
25. *** La http://profu.info/limbajul-c/ 05.05.2009
26. ***. La http://www.structuri.ase.ro/ 09.05.2009
27. ***. La http://corina.doit.ro/graf/ 02.05.2009
28. ***. La http://en.wikipedia.org/wiki/Big_O_notation 23.04.2009
29. ***.La http://www.stud.usv.ro 12.05.2009
58