Documente Academic
Documente Profesional
Documente Cultură
Proiect cofinanţat din Fondul Social European în cadrul POS DRU 2007-2013
Beneficiar – Centrul Naţional de Dezvoltare a Învăţământului Profesional şi Tehnic
str. Spiru Haret nr. 10-12, sector 1, Bucureşti-010176, tel. 021-3111162, fax. 021-
3125498, vet@tvet.ro
Limbaje de programare
Material de predare
Domeniul: Informatică
Calificarea: Analist programator
Nivel 3 avansat
2009
AUTOR:
CLAUDIA DANIELA MOLNAR – profesor, grad didactic II
COORDONATOR:
CONSULTANŢĂ:
2
Cuprins
I. Introducere ................................................................................................................................... 4
II. Documente necesare pentru activitatea de predare..................................................................... 5
III. Resurse ...................................................................................................................................... 6
Tema 1. Elemente de interfaţă ale unui mediu de dezvoltare integrat ........................................ 6
Fişa suport 1 Meniuri, bare de instrumente, ferestre, bare de navigare ...................................... 6
Tema 2. Tipuri de fişiere cu care lucrează mediul de dezvoltare integrat utilizat ...................... 7
Fişa suport 2 - Tipuri de fişiere ................................................................................................... 7
Tema 3. Opţiuni de instalare ale mediului de dezvoltare integrat utilizat ................................... 9
Fişa suport 3 - Inserare/eliminare biblioteci de clase/componente ............................................. 9
Tema 4. Limbaje de programare ............................................................................................... 11
Fişa suport 3 – Limbaje de programare ..................................................................................... 11
Tema 5: Noţiuni de bază ale limbajului de programare studiat ................................................ 12
Fişa suport 5.1 - Vocabularul limbajului de programare .......................................................... 12
Fişa suport 5.2 - Tipuri simple de date ...................................................................................... 14
Tema 5: Noţiuni de bază ale limbajului de programare studiat ................................................ 16
Fişa suport 5.3 – Variabile ........................................................................................................ 16
Tema 6: Operatori, Expresii ...................................................................................................... 19
Fişa suport 6 - Operatori, Expresii ............................................................................................ 19
Tema 7: Programarea structurata. Structuri fundamentale de control ...................................... 20
Fişa suport - Programarea structurata. Structuri fundamentale de control ................................ 20
Tema 8: Programarea structurata. Structuri fundamentale de control ...................................... 23
Fişa suport 8 - Corectitudinea programelor............................................................................... 23
Tema 9: Tablouri unidimensionale (Vectori) ............................................................................ 26
Fişa suport 9 - Tablouri unidimensionale .................................................................................. 26
Tema 10: Tablou bidimensional (Matrice) ................................................................................ 33
Fişa suport 10 - Tablou bidimensional ...................................................................................... 33
Tema 11: Şiruri de caractere .................................................................................................... 37
Fişa suport 11 - Şiruri de caractere........................................................................................... 37
Tema 12: Tipul înregistrare (articol) ......................................................................................... 39
Fişa suport 12 - Tipul înregistrare ............................................................................................. 39
Tema 13: Fişiere ........................................................................................................................ 42
Fişa suport 13 – Fișiere ............................................................................................................. 42
Tema 14: Utilizarea tipurilor structurate de date în aplicaţii practice ....................................... 44
Fişa suport 14 – Tipuri structurate de date. Aplicatii ................................................................ 44
IV. Fişa rezumat ............................................................................................................................ 45
V. Bibliografie ............................................................................................................................... 46
I. Introducere
5
III. Resurse
Sugestii metodologice
UNDE PREDĂM?
Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă care are video-proiector
CUM PREDĂM?
Metode:
- Expunere
- Conversaţie
Profesorul prezintă meniurile principale şi fereastra principală a aplicaţiei. Elevii
urmăresc activitatea profesorului şi primesc explicaţii.
- Practic: se creează comanda rapidă a aplicaţiei pe ecran
Se recomandă utilizarea calculatoarelor pentru activităţile de fixare a noilor cunoştinţe.
Tipuri de fişiere cu care lucrează mediului de dezvoltare integrat utilizat: pentru cod
sursa, obiect, executabile, pentru descrierea datelor, pentru descrierea formularelor,
pentru module de cod, rapoarte, pentru memorarea proiectelor
II. Compilarea
Procesul de compilare este realizat cu ajutorul compilatorului, care translatează codul
sursă în cod obiect (cod maşină), pentru ca programul să poată fi înţeles de calculator.
Apoi codul sursă este translatat în cod de asamblare, iar în final, în cod maşină, binar,
propriu calculatorului. Acest cod binar este numit cod obiect şi de obicei este memorat
într-un alt fişier, numit fişier obiect.
IV. Execuţia
Lansarea în execuţie constă în încărcarea programului executabil în memorie şi
începerea execuţiei sale.
Formulare
Obiecte proiectate pentru introducerea datelor în tabele sau pentru afişarea
personalizată a datelor din tabele
Rapoarte
Obiecte proiectate pentru a extrage datele din tabele şi a le afişa în vederea tipăririi.
Proiecte
Pentru memorarea proiectelor se folosesc fişierele cu extensia .prg şi conţin informaţii
despre date, formulare, rapoarte
7
Proiectele mediului de dezvoltare integrat constau din diferite tipuri de fişiere. Mediul
de dezvoltare integrat creează automat anumite fişiere; când se începe un nou proiect
sau când noii itemi sunt adăugaţi la un proiect existent.
Există fişiere care sunt create când aplicaţia este compilată. Fişierele proiectului pot fi:
fişiere principale şi fişierele formularului.
Fişierele principale: la crearea unui proiect, trei fişiere principale sunt automat create –
fişierul proiectului, fişierul sursă şi fişierul resursă. Fişierul proiectului este un fişier text
care conţine setările şi regulile de construire a proiectului. Fişierul sursă conţine codul
sursă. Fişierul resursă conţine pictograma aplicaţiei, numărul versiunii aplicaţiei şi alte
informaţii. Nu toate tipurile de aplicaţii au un fişier resursă.
Sugestii metodologice
UNDE PREDĂM?
Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă
CUM PREDĂM?
Metode:
- Expunere
- Conversaţia
Profesorul discută cu elevii şi le prezintă principalele tipuri de fişiere pe care le vor
întâlni în utilizarea mediu de dezvoltare integrat.
8
Tema 3. Opţiuni de instalare ale mediului de dezvoltare integrat utilizat
Fişa suport 3 - Inserare/eliminare biblioteci de clase/componente
Software suplimentar
Un mediu de dezvoltare integrat combină toţi paşii necesari creării unui program (ex.:
editarea codului sursă, compilarea, depanarea, testarea, generarea de documentaţie)
într-un singur soft, care, de regulă, oferă o interfaţă cu utilizatorul grafică, prietenoasă.
Mediile de dezvoltare integrate apelează compilatoare, sau interpretoare, care pot veni
în acelaşi pachet cu mediul însuşi, sau pot fi instalate separat de către programator.
9
secvenţe SQL bazei de date dorite. Bineînţeles, scriind codul sursa în Java, ne este
asigurată portabilitatea programului.
Sugestii metodologice
UNDE PREDĂM?
Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
- Expunere
- Exemplificare
Profesorul defineşte noţiuni legate de biblioteci de date şi apoi exemplifică o interfaţă
pentru acces la bazele de date.
- Învăţare prin descoperire
- Practic: profesorul propune elevilor instalarea unui compilator.
10
Tema 4. Limbaje de programare
Fişa suport 3 – Limbaje de programare
Sugestii metodologice
UNDE PREDĂM?
Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă
CUM PREDĂM?
Metode:
- Expunere
- Comunicare
- Conversaţie
Profesorul discută cu elevii şi definesc noţiunile teoretice ale limbajelor de programare.
11
Tema 5: Noţiuni de bază ale limbajului de programare studiat
Fişa suport 5.1 - Vocabularul limbajului de programare
Separatori şi comentarii:
Separatorul este un caracter care delimitează formele sintactice sau le separa între ele.
Comentariile sunt texte care pot fi introduse în programul sursă, dar nu sunt luate în
consideraţie de compilator şi deci nu au efect în timpul executării programului.
Comentariile sunt utile pentru o mai bună înţelegere a programului.
Caractere speciale
Vocabularul limbajului reprezintă totalitatea cuvintelor care pot apărea în cadrul unui
program. Aceste cuvinte sunt entităţi formate din caractere.
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
12
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
- Conversaţia
- Expunerea
Profesorul discută cu elevii şi identifică principalele elemente ale unui limbaj. Profesorul
defineşte, apoi, elementele de bază ale limbajului: identificatori, separatori, comentarii,
cuvinte rezervate
Se recomandă utilizarea calculatoarelor pentru activităţile de fixare a noilor cunoştinţe.
13
Tema 5: Noţiuni de bază ale limbajului de programare studiat
Fişa suport 5.2 - Tipuri simple de date
Tipul întreg: există mai multe tipuri întregi predefinite, iar fiecare tip desemnează o
submulţime a mulţimii numerelor întregi.
- Exemple în Turbo Pascal: - Exemple in Java
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
14
Metode:
- Expunere
- Conversaţie
După prezentarea tipurile de date şi înţelegerea noţiunilor, elevii utilizează noţiunile în
exemple concrete.
Se recomandă utilizarea calculatoarelor pentru activităţile de fixare a noilor cunoştinţe.
15
Tema 5: Noţiuni de bază ale limbajului de programare studiat
Fişa suport 5.3 – Variabile
Constante
16
Structura generala a unui program
Includeri de fişiere
Toate funcţiile folosite în program trebuie descrise în fişierele sursă (cele scrise de către
programator), în fişiere header (funcţiile predefinite, existente în limbaj), sau în biblioteci
de funcţii.
Un fişier header este un fişier aflat în sistem sau creat de către programator, care
conţine declaraţii şi definiţii de funcţii şi variabile.
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
Metode:
- Expunerea
- Conversaţie
- Învăţare prin descoperire
Profesorul discută cu elevii şi identifică principalele noţiuni de bază ale limbajului de
programare. Profesorul defineşte elementele limbajului: variabile, constante, operaţii de
citire/scriere şi propune ca exemplu un program care calculează aria.
17
Ca materiale de evaluare se pot folosi:
o Probe orale şi scrise
18
Tema 6: Operatori, Expresii
Fişa suport 6 - Operatori, Expresii
Operatori logici definesc o operaţie logică : negaţie logică, conjuncţie logică – şi;
disjuncţie logică – sau. Operatorii logici se pot aplica operanzilor logici. Valoarea unei
expresii logice este de tip logic.
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă
CUM PREDĂM?
Metode:
- Expunere
- Conversaţie
Profesorul defineşte operatorii aritmetici şi expresiile
Se recomandă utilizarea calculatoarelor pentru activităţile de fixare a noilor cunoştinţe.
19
Tema 7: Programarea structurata. Structuri fundamentale de control
Fişa suport - Programarea structurata. Structuri fundamentale de control
Definiţie:
Programarea reprezintă întreaga activitate depusă pentru obţinerea unui program, deci
atât proiectarea algoritmului cât şi traducerea acestuia în limbajul de programare ales.
Principiul programării structurate, formulat de Bohm şi Jacopini, afirmă că orice algoritm
poate fi compus din numai trei structuri de calcul:
- instrucţiuni simple;
- structură alternativă;
- structură repetitivă.
Instrucţiunea de apel specifică activarea (apelul) unei funcţii al cărei nume apare în
instrucţiune.
Structură alternativă
- cu o singură ramură
Sintaxa instrucţiunii este:
20
În Turbo Pascal: În C++ şi Java
if Condiţie then if Condiţie
instrucţiune 1 instrucţiune 1
Interpretare: După evaluarea expresiei booleene Condiţie, dacă valoarea rezultată este
adevărată atunci se execută instrucţiune 1, iar în caz contrar se trece direct la
următoarea structură.
- cu două ramuri
Interpretare: După evaluarea expresiei booleene Condiţie, dacă rezultatul evaluării este
fals, instrucţiune 1 este sărită şi va fi executată ramura else, adică se va executa
instrucţiune 2.
- selecţie multiplă (case / switch)
Sintaxa instrucţiunii
În Turbo Pascal: În C++ şi Java
case expresie of switch (expresie)
caz 1: instrucţiune 1; [case ValoareIndividuală: instrucţiuni]
………………… [default: InstrucţiuniImplicite]
caz n: instrucţiune n;
else instrucţiune n+1
end;
Interpretare: se evaluează expresie. Dacă valoarea ei este egală cu una din constantele
cazurilor, se alege secvenţa de prelucrare corespunzătoare, după care se continuă cu
secvenţele de prelucrare ale cazurilor următoare. Daca valoarea expresiei nu este
egală cu nici una din constantele cazurilor, se execută instrucţiunea situată după else /
se alege secvenţa corespunzătoare etichetei default.
Structuri repetitive
- cu test iniţial
Sintaxa instrucţiunii
În Turbo Pascal: În C++ şi Java
While expresie do While expresie
instrucţiune instrucţiune
Sintaxa instrucţiunii
21
În Turbo Pascal: În C++ şi Java
Repeat instrucţiune Do instrucţiune
Until expresie_logică while (expresie)
Sintaxa instrucţiunii
În Turbo Pascal: În C++ şi Java
For variabila:= For(exp1, exp2, exp3)
valoare_iniţială (to/downto) instrucţiune
valoare_finală do instrucţiune unde: exp1, exp2, exp3 sunt expresii
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
Metode:
- Expunere
- Conversaţie
Profesorul defineşte structurile fundamentale de control, prezintă interpretarea fiecărui
tip de structură.
- Exemplificare
- Practic
Propune rezolvarea unor programe astfel:
Pentru structura alternativa: să se scrie un program care citeşte valorile variabilelor
neîntregi a şi b, calculează rădăcina ecuaţiei ax+b=0 şi afişează rezultatul.
Pentru structura repetitivă cu test iniţial: să se scrie un program care citeşte un întreg n,
calculează şi afişează pe n!.
Pentru structura repetitivă cu test final: Să se calculeze suma: S=1+1/2+1/3+…+1/n
Pentru structura repetitivă cu număr cunoscut de paşi: Să se calculeze suma
S=1+3+5+…+(2n-1)
Se recomandă utilizarea calculatoarelor pentru activităţile de fixare a noilor cunoştinţe.
22
Tema 8: Programarea structurata. Structuri fundamentale de control
Fişa suport 8 - Corectitudinea programelor
23
Dacă o dată nu îndeplineşte toate condiţiile stabilite, se consideră eroare şi se solicită
reintroducerea ei. Introducerea se poate repeta, fie până se obţine o dată corectă, fie
până când se depăşeşte un număr prestabilit de reintroduceri.
Corectitudinea atribuirilor
Forma generală a unei atribuiri este
v = expresie
unde v este o variabilă simplă, referenţiază un element de tablou (variabila cu indici)
sau de structură, iar expresie este fie o expresie aritmetică, relaţională sau logică.
Atribuirea are ca efect atribuirea valorii expresiei aflată în dreapta semnului de atribuire,
variabilei v.
Dacă tipul identificatorului v nu este compatibil cu tipul expresiei, la compilare se
afişează o eroare de sintaxă.
Dacă valoarea expresiei din dreapta semnului de atribuire nu este de acelaşi tip sau un
tip compatibil cu tipul variabilei v, trebuie făcuta o conversie a rezultatului la care se
evaluează expresie spre tipul variabilei din stânga semnului de atribuire.
O construcţie de forma
v1 = (v = expresie) este corectă şi reprezintă tot o expresie de atribuire: lui v1 i se
atribuie valoarea atribuită în prealabil lui v, făcându-se şi conversie dacă e necesar.
24
- Se vor include cât mai multe comentarii. La întoarcerea în cod şi analiza
comportării aplicaţiei, comentariile privind scopul fiecărei rutine sunt de un real
ajutor.
- Se va dezvolta sau adapta o schemă consistentă de construcţie a denumirilor
pentru variabilele şi obiectele din aplicaţie.
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă
CUM PREDĂM?
Metode:
- Expunere
- Conversaţie
Profesorul defineşte noţiunile legate de corectitudinea programelor, corectarea erorilor.
- Exemplificare
25
Tema 9: Tablouri unidimensionale (Vectori)
Fişa suport 9 - Tablouri unidimensionale
Definiţie:
Un şir de elemente de acelaşi tip, în care contează ordinea elementelor, se numeşte
vector sau tablou unidimensional.
Un tablou (array) constă dintr-o succesiune de elemente, aflate într-o anumită ordine,
având toate acelaşi tip. Elementele pot fi identificate prin indici care sunt obligatoriu
tipuri ordinale.
Operaţii specifice
- citirea unui vector
Aceasta înseamnă citirea numărului n de componente, într-un ciclu for, de pildă. De
fapt avem de citit componenta numărului i, cu i de la 1 la n. Deci putem scrie:
- Exemplu în Turbo Pascal - Exemplu în C++
for i:= 1 to n do double a[5];
begin int i;
write('daţi x[',x,']='); for (i=0; i<5; i++)
readln(x[i]); { cout<<”a["<<i<<”]=”;
end; //afişarea unui mesaj prealabil citirii
fiecărui element
cin>>a[i];
//citirea valorii elementului de indice I }
26
- Scrierea unui vector
Când trebuie sa afişăm vectorul, adică toate componentele sale efective numărul
acestora este cunoscut. Afişarea se realizează ciclic şi poate fi astfel:
- fiecare element pe un rând (folosită mai ales când avem vectori şi şiruri de
caractere)
Exemplu în Turbo Pascal
for i:=1 to n do
writeln(x[i]);
- Parcurgerea unui vector presupune "vizualizarea" tuturor elementelor pe rând şi
prelucrare acestora. Parcurgerea într-un ciclu a poziţiilor elementelor din vector
i=1,2,3,...,n şi pentru fiecare valoare a lui i, "vizităm" şi prelucrăm elementul v[i], adică
elementul aflat pe poziţia i.
- Numărarea elementelor negative şi a celor pozitive dintr-un vector de numere.
Exemplu în Turbo Pascal
Fie NN Si NP cele două numere. Acestea se comportă ca două contoare, iniţial nule.
De fiecare dată când găsim în şirul de numere un element negativ se incrementează
NN.
NN:=NN+1,altfel NP
NN=0;NP=0;
for i:=1to n do
if x[i]<0 then inc(NN)
else inc(NP);
writeln('Exista',NN,'elemente negative');
writeln('Exista,'NP',elemente pozitive');
- afişarea elementelor pare dintr-un vector de numere întregi
- Exemplu în Turbo Pascal - Exemplu în C++
Se consideră var x: array [1..20] of integer Afişarea elementelor unui vector:
şi var n,i: integer. cout<<”Vectorul introdus este:\n”;
Vom parcurge vectorul şi vom afişa doar for (i=0; i<n i++)
numerele pare: cout<<a[i]<<’ ’;
for i:=1to n do if not odd (x[i]) then
WrileLn (x[i])
Utilitate
Sortare
- prin selecţie
Algoritmul presupune ca la fiecare pas “i “ să se găsească elementul minim dintre
a[i+1], a[i+2]…a[n] şi se interschimbă cu a[i].
Algoritmul este următorul:
Selecţie (a[nmax+1])
Pentru i 1 pana la n-1
{min a[i]
Pentru j i+1 pana la n
Daca (a[j] < min) min a[j]}
Daca (a[i]>min) interschimbă (a[i],a[j])
}
}
- prin inserţie
Algoritmul de sortare prin inserţie construieşte pas cu pas lista de elemente sortate,
adăugând la ea câte un element la un moment dat. La fiecare pas un element este
extras din lista iniţială şi este introdus în lista de elemente sortate. Elementul este
27
inserat în poziţia corectă în lista sortată, astfel încât ea să rămână sortată în continuare.
Algoritmul este următorul:
pentru i := 1 până la N-1
aux := a[i];
j := i-1;
cât timp (j>=0) si (a[j]>aux)
a[j+1] := a[j];
j := j-1;
sfârşit cât timp;
a[j+1] := aux;
sfârşit pentru;
- prin numărare :
Algoritmul sortează un vector A astfel: pentru fiecare element din vector se număra câte
elemente mai mici decât el exista în vector. Se va folosi un vector suplimentar K, iar
rezultatul se depune in vectorul B.
Algoritmul este următorul:
Pentru i:= 1 până la n
K[i]:=0;
Sfârşit pentru;
Pentru i:=1 până la n-1
Pentru j:= i+1 până la n
Daca a [i] < a[j]
atunci
K[j]:= k [j] +1;
Altfel
k[i]:= k[i] +1;
sfârşit pentru;
sfârşit pentru;
pentru i:=1 până la n
B [k [i] +1] := A[i]
sfârşit pentru;
- prin interschimbare
Acesta metoda se rezumă la a compara fiecare element cu celelalte, făcându-se
interschimbarea daca elementul mai mare are indexul mai mic. Este cea mai simplă
metode de sortare.
Algoritmul este următorul:
simple-sort (a[Nmax+ 1])
pentru i 1 până la n
pentru j i+1 până la n
dacă a[i]>a[j]
interschimbă (a[i], a[j])
}
Căutare
- secvenţială
Această operaţie necesită o parcurgere a vectorului, de la prima poziţie până la sfârşit
sau până s-a găsit elementul căutat. Găsirea elementului căutat este marcat de o
variabilă logică găsit, poziţionată iniţial pe fals. Fie x vectorul, iar a elementul căutat.
găsit:= fals;
i:= 1;
while (i<=n) and (not găsit) do
if x[i]=y then
28
găsit:=true
else
Inc(i)
- binară: se compară elementul căutat cu elementul din mijloc şi dacă ele nu coincide se
va trece la căutarea doar în acea jumătate a vectorului în care în mod logic elementul
căutat s-ar putea găsi: în stânga sau în dreapta, după cum elementul din mijloc este
mai mare sau mai mic decât elementul căutat, până când domeniul în care trebuie să
se mai caute s-a terminat.
s:=1; d:=N;
dacă (x<=a[d]) şi (x>=a[s]) atunci
repetă
m:=(s+d) div 2;
dacă x>a[m] atunci s:=m+1 altfel d:=m-1
sfârşit dacă;
până când (a[m]=x) sau (s>d);
sfârşit repetă;
sfârşit dacă;
dacă a[m]=x atunci { elementul căutat se află pe poziţia m }
altfel { nu exista elementul căutat }
sfârşit dacă;
29
sau 1). Deoarece B ≤ A, avem garanţia că pentru a scădea cifra cea mai semnificativă a
lui B din cifra cea mai semnificativă a lui A nu e nevoie de împrumut.
Exemplu în C++:
void Subtract(Huge A, Huge B)
A <- A-B */
{ int i, T=0;
for (i=B[0]+1;i<=A[0];) B[i++]=0;
for (i=1;i<=A[0];i++)
A[i]+= (T=(A[i]-=B[i]+T)<0) ? 10 : 0;
/* Adică A[i]=A[i]-(B[i]+T);
if (A[i]<0) T=1; else T=0;
if (T) A[i]+=10; */
while (!A[A[0]]) A[0]--;
}
30
/* C <- A x B */
{ int i,j,T=0;
C[0]=A[0]+B[0]-1;
for (i=1;i<=A[0]+B[0];) C[i++]=0;
for (i=1;i<=A[0];i++)
for (j=1;j<=B[0];j++)
C[i+j-1]+=A[i]*B[j];
for (i=1;i<=C[0];i++)
{ T=(C[i]+=T)/10;
C[i]%=10;
}
if (T) C[++C[0]]=T;
}
for (i=A[0];i;i--)
{ A[i]=(R=10*R+A[i])/X;
R%=X;
}
while (!A[A[0]] && A[0]>1) A[0]--;
return R;
}
Împărţirea a doi vectori
Dacă se dau doi vectori A si B şi se cere să se afle câtul C şi restul R. Etapele de
parcurs sunt aceleaşi ca la punctul precedent. Cu alte cuvinte, după ce "coborâm" la
fiecare pas următoarea cifră de la deîmpărţit, trebuie să aflăm cea mai mare cifră X
astfel încât împărţitorul să se cuprindă de X ori în restul de la momentul respectiv. Acest
lucru se face cel mai comod prin adunări repetate: pornim cu cifra X=0 şi o
incrementăm, micşorând concomitent restul, până când restul care rămâne este prea
mic.
Exemplu în C++:
void DivideHuge(Huge A, Huge B, Huge C, Huge R)
/* A/B = C rest R */
{ int i;
R[0]=0;C[0]=A[0];
for (i=A[0];i;i--)
{ Shl(R,1);R[1]=A[i];
C[i]=0;
while (Sgn(B,R)!=1)
{ C[i]++;
Subtract(R,B);
}
}
while (!C[C[0]] && C[0]>1) C[0]--;
31
}
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
Metode:
- Expunere
- Conversaţie
- Învăţare prin descoperire
Profesorul defineşte vectorii, prezintă operaţiile cu vectori, algoritmii de sortare şi
căutare şi operaţiile aritmetice.
Se recomandă utilizarea calculatoarelor pentru activităţile de fixare a noilor cunoştinţe.
32
Tema 10: Tablou bidimensional (Matrice)
Fişa suport 10 - Tablou bidimensional
Definiţie:
Tablou bidimensional (matrice) = succesiune de locaţii de memorie recunoscute prin
acelaşi identificator şi prin poziţia fiecăruia în cadrul şirului. Poziţia este dată printr-o
suită de două numere pozitive, care reprezintă cele două dimensiuni (linie şi coloană).
Valorile atribuite elementelor tabloului trebuie să fie de acelaşi tip.
Unde
- tip data este tipul elementelor matricei
- nume matrice este identificatorul matricei
- nr1 este numărul de linii
- nr2 este numărul de coloane
Exemplu:
100
356
201
100
356
201
33
- Exemplu în Turbo Pascal - Exemplu în C++
type id_tip_tablou_bidimensional =
array [id_tip_sc_1, id_tip_sc_2] double q[3][2];
unde: id_tip_tablou_bidimensional este un // declararea matricei q, cu maxim3 linii şi
tip de dată definit ca tablou bidimensional, 2 coloane, tip double
iar id_tip_sc_1 şi id_tip_sc_2 sunt indici în
domenii scalare
Operaţii specifice
- Citirea tablourilor bidimensionale (matricelor)
Citirea elementelor unui tablou nu este posibilă decât prin citirea fiecărui element. De
aceea, la fel ca şi în cazul vectorilor operaţia de citire a matricelor impune folosirea a
două secvenţe ciclice suprapuse. Acestea corespund indicilor liniei (i), respectiv
coloanei (j).
Pentru a citi elementele unei matrice avem nevoie de un indice pentru linii i şi unul
pentru coloane j. Trebuie specificat că m reprezintă numărul de linii al matricei, iar n
numărul de coloane.
Astfel citirea se realizează în trei etape:
a. se citeşte numărul de linii;
b. se citeşte numărul de coloane;
c. se citesc pe rând toate componentele.
Operaţii aritmetice
- Adunare, scădere
Pentru a aduna/ scădea două matrice condiţia care trebuie respectată este că
dimensiunea celor doua matrice să fie aceeaşi. Prin dimensiunea unei matrice
înţelegem numărul de linii şi de coloane pe care aceasta le are. În aceste condiţii
adunarea/scăderea matricelor se face termen cu termen.
34
Pentru i:=1 pana la n
Pentru j:= 1 pana la n
Sfârşit pentru
Sfârşit pentru
C[i,j]:= 0
Pentru i:=1 pana la n
Pentru j:= 1 pana la n
C[i,j]:= A[i,j] + B[i,j]
Sfârşit pentru
Sfârşit pentru
- înmulţire
Înmulţirea matricelor cu un scalar real se realizează pe acelaşi principiu de calcul ca şi
adunarea matricilor: Se înmulţeşte primul element al matricei cu scalarul real dorit.
Pentru i:=1 până la n
Pentru j:= 1 până la n
C[i,j]:= 0;
Sfârşit pentru
Sfârşit pentru
Pentru i:=1 până la n
Pentru j:= 1 până la n
C[i,j]:= nr*A[i,j]
Sfârşit pentru
Sfârşit pentru
Înmulţirea matricilor
După cum se cunoaşte din algebra elementară operaţia de înmulţire a doua matrice se
realizează prin procedeul “linii prin coloane”. Există o singură restricţie asupra celor
doua matrice ce se înmulţesc, legată de numărul de linii şi coloane pe care le au cele
două matrice: adică numărul de coloane a primei matrice să fie egal cu numărul de linii
a celei de a doua matrice.
- Calculul determinantului unei matrice pătratice
Determinantul unei matrice pătratice (matrice cu număr egal de linii şi coloane) este un
număr ce se asociază matricei A, de dimensiune n.
- Inversarea matricilor
Operaţiunea de inversare a matricilor se poate aplica doar matricilor pătratice
nesingulare, adică cu determinantul diferit de zero.
Utilitate
Cu ajutorul matricei (de adiacenţă) se pot reprezenta grafurile. Grafurile sunt
reprezentări sub forma unor scheme a unor obiecte abstracte cu ajutorul cărora se pot
modela diferite realităţi concrete.
Matricea de adiacenţă este o matrice pătratică, linia şi coloana i corespunzând vârfului i
al grafului.
Elementele matricei de adiacenţă se definesc astfel:
1 dacă există muchie între i şi j
a ij
0 în rest
2
3
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
Metode:
- Expunere
- Conversaţie
Profesorul defineşte noţiunile legate de tablou bidimensional: definirea, sintaxa,
operaţiile specifice.
- Exemplificare
Profesorul propune ca exemplu un program care citeşte elementele unei matrice.
Se recomandă utilizarea calculatoarelor pentru activităţile de fixare a noilor cunoştinţe.
36
Tema 11: Şiruri de caractere
Fişa suport 11 - Şiruri de caractere
Definire:
Şirul de caractere, după cum îi spune şi numele, reuneşte mai multe caractere sub "un
nume comun". Putem înţelege şirul de caractere ca fiind un cuvânt, o propoziţie sau o
frază, adică orice formulare scrisă ce conţine semne (litere, cifre, semne de punctuaţie,
semne speciale). Un şir de caractere se păstrează într-o zonă de memorie organizată
ca tablou unidimensional.
Declarare:
- Exemplu în Turbo Pascal - Exemplu în C++
Type char tab [ ] = „Acesta este un şir ”
SirMare = STRING; {implicit 255
poziţii}
SirMediu = STRING[120];{numai 120
poziţii}
37
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
Metode:
- Expunere
- Conversaţie
Profesorul prezintă noţiunile teoretice (definire, declarare), apoi funcţiile folosite de
şirurile de caractere.
38
Tema 12: Tipul înregistrare (articol)
Fişa suport 12 - Tipul înregistrare
Definire:
Tipul înregistrare permite gruparea datelor de tipuri diferite. O astfel de data numita
înregistrare putem spune că este alcătuita din mai multe câmpuri, nu neapărat de
acelaşi tip. Un câmp poate la rândul lui să fie alcătuit din mai multe câmpuri şi aşa mai
departe. Sunt şi situaţii în care nu toate înregistrările conţin aceleaşi informaţii, ceea ce
înseamnă că avem nevoie de o structură variabilă (diferite câmpuri) în funcţie de
anumite valori ale unor câmpuri fixe. În acest sens putem spune că o înregistrare are o
parte fixă formată din mai multe câmpuri de diverse tipuri, urmată eventual de o parte
variabilă.
Declarare:
- în Turbo Pascal - în C++
Record struct [nume structură]
type <identificator> = <tip record>; unde {
<tip record> ::= record <listă de câmpuri> [;] [<tip> <nume variabilă>];
end [<tip> <nume variabilă>];
<listă de câmpuri> ::= <parte fixă> [; <parte ...
variante>] | <parte variante> } [listă de variabile];
<parte fixă> ::= <secţiune record> {; Exemplu:
<secţiune record> } Este necesar să dăm un nume
<secţiune record> ::= <identificator>{, structurii. O să-i spunem: elev.
<identificator>}: <tip> struct elev
<parte variante> ::= case[ <identificator>:] {
<tip> of <variantă> {; <variantă>} char nume[200];
<variantă> ::= <constantă> {, <constantă>} float media;
:[<listă de câmpuri>] [;]) int absente;
adică un element de tip record este în };
general format dintr-o parte fixă şi una elev x[30];
variabilă, fiecare dintre acestea fiind alcătuită //am declarat un vector în care fiecare
din câmpuri. componentă este de tip elev.
Exemplu:
Type Data = record
ziua: 1..31;
luna: 1..12;
anul: 1..9999
end;
Exemplu:
Fie următoarea declaraţie de variabilă:
x:data; {declarat la exemplul de mai sus}
39
Accesul la câmpurile variabilei se face: x. ziua :=3; x. luna :=6; x. anul :=2009;
Operaţii specifice
Citirea unei variabile de tip înregistrare se face citind informaţiile corespunzătoare
fiecărui câmp al acesteia: readln (x. ziua); readln (x. luna); readln (x. anul);
Scrierea unei variabile de tip înregistrare se face scriind informaţiile corespunzătoare
fiecărui câmp al acesteia: writeln (x. ziua); writeln (x. luna); writeln (x. anul);
Utilitate
- Lista
Exemple de liste se întâlnesc destul de des în practica prelucrării datelor pe calculator.
Iată câteva: lista studenţilor dintr-o grupa şi a notelor primite la un examen, lista cărţilor
dintr-o biblioteca, lista clienţilor unei bănci, lista cadrelor didactice dintr-o catedra etc.
Putem defini lista ca o colecţie omogenă, secvenţială de date.
- Stiva
Stiva este un caz special de listă liniară în care intrările şi ieşirile se fac la un singur
capăt al ei.
Exemple de stive de obiecte sunt oarecum evidente: stive de lemne, de lăzi, de baloţi
de paie, de farfurii, de dosare etc. Structura de stivă presupune, conform definiţiei, o
anumită disciplină: totdeauna se adăugă un obiect "deasupra" ultimului depus si se
extrage totdeauna ultimul obiect adăugat. Se spune ca accesul la o stivă este de tip
LIFO (Last In - First Out). Două operaţii sunt esenţiale în lucrul cu stiva: adăugarea unui
element şi extragerea unui element din stiva.
- Cozi
Coada este lista liniară în care adăugarea de noi elemente se face la un capăt, iar
extragerea unui element se poate face numai prin celălalt capăt al listei.
Din definiţie 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).
Ca şi în cazul stivei, operaţiile de bază asupra unei cozi sunt două: adăugarea 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 modelăm ne arată însa legături între obiecte care
depăşesc modelul liniar. Grafurile şi ca un caz particular al acestora - arborii - reprezintă
structuri capabile să surprindă complexitatea legăturilor dintre obiecte.
Cu ajutorul arborilor se pot descrie foarte fidel structurile de tip ierarhic (piramidal). Iată
câteva exemple: structura de conducere a unei firme, organizarea administrativ
teritoriala dintr-o tara, organizarea unei armate, structura unei cărţi.
Sugestii metodologice
UNDE PREDĂM? ? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
40
Metode:
- Expunere
- Conversaţie
După prezentarea noţiunilor teoretice (definire, declarare, operaţii specifice) profesorul
propune exemple din viaţa cotidiană legate de utilitatea tipului înregistrare
41
Tema 13: Fişiere
Fişa suport 13 – Fișiere
Definire:
Fişierul este o colecţie organizată de informaţii (date, rezultate, programe sursă,
programe direct executabile etc.), dispuse pe unul sau mai multe suporturi externe.
Fişierul, în contextul limbajelor de programare, este o structură de date omogenă,
formată din componente de acelaşi tip.
Transferul informaţiilor între memoria internă şi cea externă se realizează la nivel de
articol. Pentru aceasta, în memoria internă va trebui să declarăm o variabilă având
acelaşi tip cu tipul înregistrărilor fişierului iar prin operaţiile de intrare / ieşire se va
realiza citirea, respective scrierea, în fişier.
Scrierea într-un fişier se face folosind funcţia write. Este asemănătoare cu funcţia read
şi are acelaşi prototip. Diferenţa constă în aceea că realizează transferul datelor în sens
invers, adică din zona de memorie, în fişier.
- Exemplu în Turbo Pascal - Exemplu în C++
Scrierea se face prin apelul procedurii Scrierea se face folosind funcţia write.
Write(f, x): adaugă în fişierul f o Utilizarea funcţiei implica includerea
componentă a cărei valoare este dată de fişierului io.h
expresia x şi deplasează poziţia de scriere
în dreptul noului sfârşit de fişier sau
Writeln(f): încheie linia curentă a fişierului
42
f.
Adăugarea se face prin apelul procedurii
Append(f): adăugă informaţii într-un fişier
deschis;
După terminarea prelucrări unui fişier acesta trebuie închis. Acest lucru se realizează
folosind funcţia close.
O funcţie utilă în programele care lucrează cu fişiere este funcţia Eof care spune dacă
s-a ajuns la sfârşitul fişierului.
Operaţii de intrare/ieşire
- Exemplu în Turbo Pascal - Exemplu în C++
Operaţiile de intrare / ieşire sunt Read (f, Intrări / ieşiri de şiruri de caractere:
art) respectiv Write (f, art) unde art este biblioteca standard a limbajului conţine
variabila din memoria internă (declarată în funcţiile fgets şi fputs care permit citirea,
program) în, sau din care se face respectiv scrierea înregistrărilor care sunt
transferul din / în fişier. şiruri de caractere.
Intrări / ieşiri cu format: biblioteca standard
a limbajului conţine funcţiile fscanf şi fprintf
care permit citirea datelor dintr-un fişier,
respectiv scrierea.
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
Metode:
- Expunere
- Conversaţie
Profesorul prezintă funcţiile/procedurile necesare lucrului cu fişiere.
Se recomandă utilizarea calculatoarelor pentru activităţile de fixare a noilor cunoştinţe.
43
Tema 14: Utilizarea tipurilor structurate de date în aplicaţii practice
Sugestii metodologice
UNDE PREDĂM? Conţinutul poate fi predat în:
- laboratorul de informatică
- sală de clasă dotată cu video-proiector
CUM PREDĂM?
Metode:
- Conversaţie
- Problematizare
Profesorul propune probleme pentru fiecare tip structurat de dată.
44
IV. Fişa rezumat
Fişa rezumat
1
zz.ll.aaaa – reprezintă data la care elevul a demonstrat că a dobândit cunoştinţele, abilităţile şi atitudinile vizate prin activitatea respectivă
V. Bibliografie