Documente Academic
Documente Profesional
Documente Cultură
Subprograme
p g
definite de utilizator
1.1. Subprograme.
M
Mecanisme
i
d transfer
de
f prin
i intermediul
i
di l parametrilor
il
Subprograme (Pascal
Pascal) :
proceduri Procedure
Procedure,
functii
[Function
Function].
Parametri (tipuri/clasificari),
Vizibilitate,
Vizibilitate
Parametri de tip Functie, Procedura,
p
recursiv ((subpr.
p recursive),
),
Apelul
Definire simultana (Forward).
3/80
Parametri de iesire
Subalgoritm
Apel:
[Cheam] Nume_Subalgoritm
Nume Subalgoritm (Lista_parametri_actuali);
(Lista parametri actuali);
Def.::
Def
Subalgoritmul Nume_Subalgoritm (Lista_parametri_formali) Este : {Antet}
...
Sf_Subalgoritm.
{ Corp subalgoritm }
{ sau Sf_Nume_Subalgoritm. }
R:=XY
{ expr.instr.}
Def.:
f
Funcia Nume_Funcie (List_parametri_formali) Este : { Antetul funciei }
...
Nume_Funcie := Expresie;
{ Corpul funciei }
...
Sf_Funcie.
{ sau Sf_Nume_funcie.}
Parametri de Intrare Expresii
Parametri de iesire Variabile
6/80
7/80
Apel:
A l
Apel
P:
F:
<Nume> [ (Lista_parametri_actuali)];
<Nume>
[ ((List_pparametri_actuali))]
{ expr.
expr
p instr
instr. }
9/80
Parametri :
Date de intrare
Subprogram
Date de iesire
Adr. (Var.)
Val. (Expr.)
<
<sp_val>
l> ::= <lista_id>
<li t id> : <id_tip>
<id ti >
<sp_var> ::= Var <lista_id> : <id_tip>
A
B
Reuniune
Vizibilitate :
Domeniu de vizibilitate:
Var. locale
Var globale ( ! )
Var.
Proceduri,
Functii,
S2a
n3
S
n1
S1
n2
S2
n2
S2b
n23
P
n0 (nivelul
( i l l 0)
11/80
Program AuB_AuC_BuC;
Type Multime = Array[0..100]
Array[0 100] Of Integer;
Procedure Citeste (Var A:Multime);
{ Citeste o multime de la tastatura }
Var c,p,n : Integer;
s : String;
Begin
Write (' Dati elementele multimii : '); Readln (s); n:=0;
While s<>'' Do Begin
n:=n+1;
n:
n+1; Val(s
Val(s,A[n],p);
A[n] p);
If p>0 Then Val(Copy(s,1,p-1),A[n],c) Else p:=Length(s); Delete (s,1,p)
End;
A[0]:=n;
[ ]
;
{ n=Card(A)
( ) A[0]
[ ]}
End;
Procedure Tipareste (A:Multime);
Var n,i
n i : Integer;
Begin
n:=A[0]; Write (' {');
For i:=1 To n Do W
Write ((A[i],',');
[ ], , );
Writeln (Chr(8),'}')
End;
{ Modulul principal }
Readln
13/80
Program pfp;
{$F+}.
Type Functie
= Function ( x : Real ) : Real ;
Procedura = Procedure ( . . . ) ;
Function <nume_subpr> ( ... f:Functie; ... p:Procedura; ... ) :
Procedure
B i
Begin
f
p
E d
End;
Apelul:
Function f1 ():
Function f2 ():
Procedure metoda1();
Procedure metoda2();
14/80
Program Parametri_Functie_Procedura;
{$F+}
Type Sir
= Array [1..30] Of Integer;
F
Functie
ti = Function
F
ti (x:Integer)
( I t
) : Integer;
I t
FctBool = Function (a,b:Integer) : Boolean;
Procedura = Procedure(Var Z:Sir; n:Integer);
Function f (x:Integer) : Integer; Begin f:=Sqr(x+1)-x End;
Function g (x:Integer) : Integer; Begin g:=Sqr(x-1)+x End;
Function
Cresc(a,b:Integer):Boolean; Begin
Cresc:=a<b End;
Function DesCresc(a
DesCresc(a,b:Integer):Boolean;
b:Integer):Boolean; Begin DesCresc:=a>b End;
Procedure Ordonez (Var X:Sir; n:Integer; Relatie : FctBool );
Var
Ordonat : Boolean; k, i, v : Integer;
Begin
k:=1;
Repeat Ordonat:=True;
For i:=1 To n-k Do
If Not Relatie(X[i],X[i+1]) Then Begin
v:=X[i]; X[i]:=X[i+1]; X[i+1]:=v;
Ordonat:=False
End;
k:=k+1
Until Ordonat;
End;
15/80
Ordonez
( A, n, DesCresc ) End;
X, Y : Sir;
Begin
Gen_Ord_Tip
p ((X,10, f, OrdCresc ));
{ Prel X }
Gen_Ord_Tip (Y,11, g, OrdDesCresc ); Readln { Prel Y }
End.
16/80
Apelul recursiv :
Este permis apelul recursiv (un subprogram se autoapeleaza). Se ofera solutii simple
plecand de la (avand) definitii simple.
Ex.: Problema turnurior din Hanoi , n!=n*(n-1)! sau 1 (Consistenta!
Consistenta!)
Recursivitate
Recursivitate
Iteratie !
Ex : Fiind
Ex.:
Fiind date dou numere naturale de maxim 30 de cifre,
cifre sub forma a dou
iruri de caractere, s se determine irul cifrelor sumei :
Formul recursiv pentru a aduna numrul A de n cifre cu numrul B de m cifre :
Ad(B,n,A,m,Tr)
Ad(A,m,B,n,Tr) =
Dac
m>n
(1)
m 0 n=0,
m=0,
n 0 tt=00 (2)
'1'
Ad(A,m,B,n-1,Tr( '0'+B[n]))Cifra(0,B[n])
m=0, n>0
(4)
(5)
17/80
Begin
If Length(a)>Length(b)
Then Adun := Adun (b,a)
{ Cazul (1),
Else Adun := Ad (Length(a),Length(b),0)
End; {Adun }
m>n }
{ Initial Transportul = 0 }
{ Antetul lui S1 }
Function / Procedure S2 ( . . . ) ;
B i ... S1...
Begin
S1
E d
End;
{ Subprogramul S2 apeleaz S1 }
Function / Procedure S1 ( . . . );
Begin ... S2... End;
{ Subprogramul S1 apeleaz S2 }
{/10
{/
10}}.
Cat(a
Cat(
a)=Cat(
)=Cat(b
b) i Rest(a
Rest(a)>Rest(
)>Rest(b
b)
20/80
Program Comparare_Numere_Str_cifre_baza_10;
{ < , > , = , n<=10 }
Const n=10;
Type Numar = String[n];
Function MaiMare(a,b : Numar) : Boolean; Forward;
Function MaiMic (a,b : Numar) : Boolean;
Begin MaiMic:
MaiMic:=MaiMare(b
MaiMare(b,a)
a) End;
Function Egale (a,b : Numar) : Boolean;
Begin
Egale := Not MaiMic(a,b) And Not MaiMare(a,b) End;
Function MaiMare (a,b:Numar) : Boolean; Var m,n:Byte;
Begin
m:=Length(a); n:=Length(b);
MaiMare:=(m>n) Or
{ |A| > |B| }
(m=n) And (m>0) And
{ = }
(MaiMare(Copy(a 1 m 1) Copy(b 1 n 1)) Or
(MaiMare(Copy(a,1,m-1),Copy(b,1,n-1))
{ Cat(A) > Cat(B) }
(Egale (Copy(a,1,m-1),Copy(b,1,n-1)) And (a[m]>b[n])))
{ Am > Bn }
End;
Var
a,b : String;
Begin
Write (' Dati a : '); Readln (a) ;
Write (' Dati b : '); Readln (b) ;
If MaiMic (a,b) Then Write (' a < b ') Else
If MaiMare(a,b)
M iM ( b) Then
Th Write
W it (' a > b ') Else
El
If Egale (a,b) Then Write (' a = b ') Else
Write (' a ? b '); Readln
End.
21/80
// 1 2 3 xxx
// Simpla, Nu enum
enum,
Write ( <list_expresii> )
Writeln (a,b,c);
Writeln ('');
( )
// 1 2 3
//
// _3.14__7.10__9
22/80
Semnificatia
valoarea (ntreag) absolut a ntregului i
valoarea (real) absolut a realului x
ptratul ntregului i (dac i*i < Maxint) (valoare ntreag)
ptratul numrului real x
radical din x, x>=0
partea ntreag a numrului real x
ntregul obinut din numrul real x prin eliminarea prii fracionare
cel mai apropiat ntreg de numrul real x
valoarea x - int(x) , pentru x real
e la puterea x,
x x ntreg sau real
logaritm natural din x, x ntreg sau real>0
sinusul lui x, x reprezint msura n radiani a unui unghi
cosinusul lui x,
arctangenta din x,
succesorul valorii ordinale i
predecesorul valorii ordinale i
numrul de ordine al valorii lui e n tipul expresiei ordinale e
caracterul de ordin i n tipul Char
funcie logic cu valoarea True dac i este impar i False dac este par
23/80
Decl.: String
[ [m] ]
b)
cri
de telefon, etc.)) :
lexicografic
= i <> pentru egalitatea respectiv neegalitatea a dou iruri ,
<, >, <=, >= pentru compararea lexicografic.
Ex. :
Alb < Albastru;
Ionescu < Popescu ; 0... < 9... < A... < Z... < a... < z....
24/80
Faciliti (4F & 4P) ale tipului String ( n plus fa de Array Of Char ) :
Valorile variabilelor i expresiilor de tip String pot fi citite respectiv tiprite, ex.:
Mesaj:=Numele autorului; Write (Dati +Mesaj+ : ); Readln (s);
- Length (S) (=Ord(S[0]) ) returneaz lungimea irului S (Length(mare)=4),
- Copy (S,p,l)
(S p l) returneaz subirul (lui S) de lungime l ncepnd din pozitia p
( Copy(Marinescu,2,4)=arin ),
- Concat (S1,S2,...,Sn) (=S1+S2+...+Sn)
( Concat(Con,Cat)=ConCat),
- Pos (x,S)
(x S) det.
det poz.
poz subirului x n irul S sau 0 dac irul S nu conine ca subir pe x
( Pos(in,Marinescu)=4 iar Pos(pop,Popescu)=0 ),
- Delete (s,p,l) terge din s ncepnd din poz. p , l caractere, ex.secventa :
s:=Ionescu;
s:=
Ionescu ; Delete (s,4,4);
(s 4 4); Write (s); va tipari Ion;
Ion ;
- Insert (x,S,p) insereaz irul x n irul S la poziia p. De ex.:
s:=Alg.Progr.; Insert( i ,s,5); Write (s); va tipari Alg. i Progr.;
- Str (e,S)
(e S) depune n S,
S irul cifrelor val.
val Expr.e
Expr e , care poate avea ataat un format
(:n:m ca i Write). Ex. : v:=5/2; Str (v:5:2,S); va depune n S irul 2.50.
- Val (S,v,Cr) examineaz irul S. Dac este corect atunci va depune n v valoarea iar
n Cr val. 0. Dac irul S conine caractere nepermise, atunci n v se depune
valoarea 0 iar n variabila Cr (de tip ntreg) poziia primului caracter nepermis.
Val (1234,v,Cr); are ca efect : v=1234 i Cr=0 , iar
Val (19d7,v,Cr); are ca efect : v=0 i Cr=3 ( pe poziia 3 se afl d).
25/80
Fiiere
3. Fiiere text
Fiiere Pascal.
Utilizarea fiierelor text.
Fiiere
cu tipp
Operaii cu fiiere
Fiiere fara tip binare
28/80
d cu primul
i l pan la
l
ultimul (Art.0, Art.1,...,Art.n-1).
Art.:
Memoria intern
Write
Articol
0
1
2
3
Fis.
Read
29/80
Fiiere Pascal
Dac n cazul accesului secvenial ordinea de transfer a nregistrrilor este dat de
ordinea acestora n fiier, acessul direct permite transferul n orice ordine (aleator)
prin precizarea numrului de ordine din cadrul fiierului (0,1,...,n-1 , dac fiierul
are n articole).
n vederea prelucrrii, fiierul va trebui deschis iar la terminarea operaiilor
fiierul va trebui nchis. La deschiderea fiierului, indicatorul (capul de citirescriere)
i ) este poziionat
ii
pe prima
i
component.
Indicatorul
I di
l se deplaseaz
d l
automat cu
o poziie spre sfrit, la fiecare operaie de scriere sau citire din fiier.
Deschiderea unui fiier (pregatirea lui pentru lucru) se face n doua etape:
- n primul rnd va trebui s precizm ce fiier se deschide (se face asocierea ntre
variabila fiier i specificatorul de fiier, corespunzator fiierului dorit) utiliznd
procedura Assign (Variabila_Fiier,
(Variabila Fiier Specificator_Fiier)
Specificator
Specificator_Fiier).
Fiier). Acest asociere fiind
facut, de acum nainte vom utiliza doar Variabila_Fiier pentru a referi fiierul de
lucru (pe care o vom nota n continuare mai simplu cu F ).
- Deschiderea propriuzis se va efectua prin apelul procedurii Rewrite(F) sau
Reset(F) dup cum fiierul care va fi deschis urmeaz s se creeze sau s se
consulte .
30/80
Fiiere Pascal
Operaiile de intrare / ieire sunt:
Read(F,Art)
respectiv
Write(F,Art)
unde am notat prin Art variabila din memoria intern (declarat n program) n , sau
din care se face transferul din/n fiier.
Dup terminarea operaiilor de transfer, fiierul poate fi nchis prin:
Close(F)..
Close(F)
O functie util n programele care lucreaz cu fiiere este funcia boolean
Eof(F)
E
f(F)
care ne spune dac s-a ajuns la sfritul fiierului (dac a fost detectat marca de
sfrit de fiier).
n programele Pascal este posibil tergerea unui fiier apelnd procedura:
Erase(F).
Erase(F).
posibil schimbarea numelui unui fiier
n timpul
p execuiei
De asemenea,, este p
unui program. Aceast redenumire se poate realiza prin apelul:
Rename(F, Noul_Specificator_de_Fiier) .
31/80
32/80
Fiiere Text
Un prim exemplu l constituie o procedur care citete o matrice (dimensiunile i
valorile acesteia) dintr-un fiier text.
Considerm c aceste date sunt organizate n fiierul Matrice.Txt astfel :
- primul rnd conine numrul de linii i numrul de coloane (m i n),
- urmtoarele m rnduri conin valorile corespunzatoare fiecrei linii ale matricei.
Procedure Cit_Mat (Var A :matrice; Var m,n : Integer);
Var i, j : Integer; F : Text;
Begin
Assign (F,Matrice.Txt); Reset (F);
Readln (F,m,n);
For i:=1 To m Do
For j:= 1 To n Do
Read (F,A[i,j]);
Close (F)
End;
34
1234
5678
9012
33/80
Fiiere Text
Urmtorul exemplu este un program Pascal care traduce un text aflat ntr
ntr-un
un fiier
conform unui dicionar (care se afl stocat ntr-un fiier text avnd numele
Dictio.Txt).
Dicionarul este compus dintr-un ir de perechi de cuvinte de forma (St,Dr)
(St Dr) i se
construiete citind cte un rnd de forma Stnga=Dreapta din fiierul text.
De exemplu,
p , coninutul
fiierului
Dictio.Txt,, tiprit
p
n
continuare, poate traduce un Program Pascal in
Pseudocod.
Pseudocod
Pentru a realiza
P
li o traducere,
d
se citeste
i
cte
un rnd
d din
di
fiierul iniial, se traduce conform dicionarului, dup care
se depune (rndul tradus) n fiierul final (tradus).
Traducerea unui rnd se execut astfel: se ia fiecare
cuvnt din dicionar (aflat n partea stang) i se verific
dac acesta se afl n rndul curent. Dac da, atunci se va
nlocui n rnd cuvntul gsit cu perechea acestuia (partea
dreapt din dictionar).
Program=Algoritmul
og a
lgo it ul
Readln=Date
Read=Date
Writeln=Rezultate
Writeln
Rezultate
Write=Rezultate
For=Pentru
Do=Executa
Do
Executa
Repeat=Repeta
Until=Pana_Cand
While=Cat
While
Cat_Timp
Timp
End.=Sfarsit.
...
34/80
Fiiere Text
35/80
Fiiere Text
Write (' Numele fiierului de tradus : '); Readln (Numei);
{ Fi. de tradus }
W
Write
(' Numele
N
l fiierului
f
l rezultat
l
: ');
') Readln
R dl (Numef);
(N
f) { Fi.
F tradus
d }
Assign(Fis, Numei); Reset (Fis);
{ Deschide fiierele }
Assign(Tra, Numef); ReWrite(Tra);
While Not Eof(Fis) Do Begin
Readln (Fis,Rnd);
With Dict Do { Traduce Rnd }
For i:=1 To Nrc Do With Cuv[i] Do
Repeat
p := Pos (St,Rnd);
If p>0 Then Begin
{ Exista cuvantul St n Rnd ? }
Delete (Rnd,p,Length(St));
{ Inlocuieste St cu Dr }
Insert (Dr,Rnd,p)
End
Until p = 0;
Writeln(Tra,Rnd)
{ Scrie Rnd-ul tradus }
End;
Close (Fis);
Cl
(F ) Close
Cl
(Tra)
(T )
End.
{ Inchide
I h d fiierele
f
l }
36/80
Operaii cu fiiere
n exemplul
e empl l urmtor
rmtor se dorete creerea fiierului
fiier l i Grupa111.Dat,
Gr pa111 Dat cu
c articole de
forma:
Nr_Leg
Nume
Medie
Word
String[25]
Real
Pentru a crea acest fiier, se citete de la tastatur cte un articol (care conine
informaiile despre un student) apoi acesta se scrie n fiier.
.........
.........
.........
Creere
Grupa111 Dat
Grupa111.Dat
38/80
Operaii cu fiiere
Listare
Grupa111.Dat
Actualizare
ctualiza e
Grupa111.Dat
39/80
Operaii cu fiiere
Grupa111.Dat
Stergere /
Adugare
Grupa111.Tmp
Dac se dorete
tergerea
g
aleatoare a unor articole din fiier,
numrul curent al
acestor articole va fi introdus de la tastatur. Aceste articole vor fi omise la
copierea articolelor din fiierul iniial (Grupa111.Dat) n fiierul temporar
(
(Grupa111.Tmp).
p
p)
Pentru ca fiierul actualizat s poarte acelai nume iniial, se va proceda astfel:
fiierul iniial se terge (Erase(Fis_Vechi)) iar fiierul final se va redenumi
(Rename(Fis_Temporar,Nume_Fiier)) aa cum se poate vedea n exemplul
urmtor.
40/80
Operaii cu fiiere
Grupa111.Dat
Adugare
Grupa111.Tmp
Toate articolele pn la cel precizat se copiaz din fiierul iniial n cel temporar,
apoi se scrie noul articol (citit anterior). Se citete din nou alt articol care va fi
adugat i aa mai departe pn cnd nu mai sunt articole de adugat. Restul
articolelor care au mai rmas n fiierul iniial se vor copia i ele n fiierul final.
Aa cum s-a procedat i la Stergere, se vor depune datele obinute n fiierul
iniial (apelnd Erase
Erase... i Rename
Rename...) .
41/80
1.3. Funcii
O funcie este format dintr-un antet i un bloc (corp
corp). Ea poate fi
apelat dac a fost definit n ntregime sau doar antetul su.
Antetul unei funcii are urmtorul format:
Tip Nume (List_parametri_formali)
List_parametri_formali)
unde:
d
Tip este tipul valorilor funciei (codomeniul);
Nume este un identificator ((liter urmat eventual de litere sau cifre);
);
List_parametri_formali conine parametrii formali separai prin ,,.
Exemplu
Exemplu:
p :
int Min (int a, int b)
{
if (a<b) return a; else return b; }
Obs. Prototipul unei funcii este antetul acesteia urmat de ; .
42/80
Cmmdc(a,b)
Cmmdc(b,a Mod b);
cmmdc(a,b)
sau while
hil (rest)
( t) ;
43/80
Funcia
F
i Printf
P i tf
Funcia Scanf
Funcia PutChar
Funcia GetChar
Funcia GetChe
Funcia GetCh
Funcia KbHit
Funciile PutS, GetS
St
Stream-uri
i
44/80
[m
m] - precizeaz lungimea cmpului,
2.3.1
2.3.1.. Funcia Printf
Tipul conversiei [ff ] este precizat prin unul din urmtoarele caractere:
d - int
i zecimal
i l extern,
t
o - int octal extern,
x - int hexa extern (0...9,a...f),
X - int Hexa extern (0...9,A...F),
u - unsigned zecimal extern (fara semn),
c - binar intern caracter (char),
s - string (sir de coduri ASCII terminat cu \0=NUL) sir de caractere,
f - float sau double zecimal extern [m[.n] ], implicit n=6,
e - float
fl t sau double
d bl zecimal
i l extern
t
f
forma
exponentiala
ti l (b*10e),
)
E - float sau double zecimal extern forma exponentiala (b*10E),
g - se alege dintre variantele f sau e reprezentarea minima,
G - se alege dintre variantele f sau E reprezentarea minima.
47/80
2.3.1
2.3.1.. Funcia
Printff
Funcia
printf
Exemple:
short Zi=1; char Luna[]="Ianuarie"; unsigned An=2003;
float Ina=1.8;
pprintf("
( Zi:%
%d, Luna:%
%3.3s.,, An:%
%u \n",Zi,Luna,An
,Zi,Luna,An);
);
printf(" Inaltime(m):%
%2.3.2f \n",Ina
Ina);
48/80
unde Control este sablonul ((formatul)) scris sub forma unui sir de caractere
care contine eventual texte (obligatorii la intrare) si specificatori de format
corespunzatori tipurilor variabilelor din lista. Specificatorii de format sunt
asemanatori celor p
prezentati la functia p
printf,
f, realiznd nsa conversiile inverse:
%
unde:
2.3.2
2.3.2.. Funcia Scanf
Tipul conversiei [ff ] este precizat prin unul din urmtoarele caractere:
o
x
X
u
c
s
f
50/80
2.3.2
2.3.2.. Funcia Scanf
Adresele variabilelor de intrare sunt date prin operatorul de adrese
naintea identificatorului fiecarei variabile (simple!):
[&
&] Variabila
& plasat
(nu
nu este necesar pentru tablouri).
Exemplu:
p
short Zi; char Luna[13]; unsigned An; float Ina;
scanf(" %d %s %u %f ", &Zi, Luna, &An, &Ina);
}
51/80
2 3 2 3 Funcia GetChar
2.3.2.3.
Aceasta, returneaz codul ASCII al caracterului citit (pentru Ctrl/Z EOF=-1):
getchar ( );
Exemplu:
char c;
do putchar (((c=getchar())>'Z')? c^' ' : c);
// Litere mici LITERE MARI
while (c!='.');
Litere mici in Litere MARI !
getchar
LITERE MICI IN LITERE MARI !
putchar
p
Se termina la . (Punct)
SE TERMINA LA .
getchar
putchar
52/80
// se termina cu .
int ReadKey()
{
int car=getch();
if (car) return car;
else return getch(); // a fost apsat o tast functional (0,cod ASCII)
}
53/80
2.3.8..
2.3.8
Funciile PutS
PutS,, GetS
2.3.9..
2.3.9
Stream--uri
Stream
<<
<<
<<
<<
"
"
"
"
Dati
Val.
Dati
Sir.
i
i
s
s
:
=
:
=
";
; cin >> i;
" << i+1 << endl; // endl=<Cr>
"; cin >> s;
" << s << endl;
getch();
56/80
2.4. Apelul
p
unei funcii
IInstruciunea
t i
d apell a uneii funcii
de
f ii este
t un caz particular
ti l all instruciunii
i t i ii
expresie:
Nume_funcie (List_parametri_actuali);
O funcie poate fi apelat i n cadrul unei expresii dintr-o instruciune:
57/80
2.4.
O funcie poate fi utilizat doar dac a fost definit, sau cel puin a fost
declarat prototipul ( antet ; ) ei ntr-una
ntr una din urmtoarele moduri:
a)) Tip_
Ti funcie
f
i Nume_
N
f
funcie
i (Lista_parametrilor_formali)
(Li
(Lista_parametrilor_formali);
il f
li);
b) Tip_funcie Nume_funcie (Lista_tipurilor_parametrilor_formali)
(Lista_tipurilor_parametrilor_formali);;
c)) Tip_
Ti funcie
f i Nume_
N
f i (void)
funcie
((void);
id); // nu suntt parametri
t i formali
f
li
d) Tip_ funcie Nume_ funcie ( );
58/80
2.4.
Apelul implicit pentru variabile simple (de baz) este prin valoare
valoare, iar pentru
tablouri prin referin.
referin Apelul prin referin se obine prin intermediul
variabilelor
i bil l de
d tip
i pointer sau a operatorului
l i de
d adres
d &.
Parametri
a amet i de int
intrare
ae
Parametri de iesire
F ti
Functie
a, b
s=a+b
2, x*y
s=22+x*y
s=
{
}
59/80
2.4.
return [ exppresie ] ;
fiind returnat valoarea expresiei (dac
dac exist
exist).
Citeste
x+y
Tipareste
2.4.
Exemplul 1:
#include <graphics.h> #include <math.h>
2.4.
E
Exemplul
l l 2:
2
#include <iostream.h>;
#include <conio.h>;
int Sf (int& f, int k)
{ int p=0;
while (!(f%k)) { f/=k; p++; }
return p;
}
main () {
int n;
clrscr();
int f2=0; int Uc=1;
{ int f=i;
2.4.
Exemplul 3:
// Calc. AB, AB \\
#include <iostream.h>;
#include <conio.h>;
2.4.1..
2.4.1
Operatorul
p
de adres (&)
redenumi o variabil,
realiza un apel prin referin,
s declarm
d l o variabil
i bil de
d referin
f i astfel:
tf l
// par. ref.
f (adres)
( d )
// var. de
d tip
ti referin
f i
64/80
Exemplul 4:
#include <iostream.h>;
void
id suma (int
(i t x, int
i t y, int
i t * z)) { *z
* = ++x * ++y; }
// x,y z
// x,y z
// mai simplu!
65/80
car [0,127]
127] ?
66/80
car [0,127]
127] (returneaz
(returneaztt ultimii 7 bi
bitti)
car liter
literaa mare (transforma din l n L)
car liter
literaa mica (transforma din L n l)
Conversii (stdlib
stdlib..h):
Format intern Format (zecimal)
zecimal) extern
int
long atol
atol((const char *ptr
ptr));
double atof
atof((const char *ptr)
*ptr);;
s vb (val
(val.. v de tip int,
int, scris
scrisaa n baza b)
char * str
str[[n]cat (char *destina
destinattie, const char *sursa [, unsigned n]) ;
int
str[[n][
str
][ii]cmp (char *sir1, const char *sir2 [, unsigned n]) ;
unsigned
char**
char
char**
char
char**
char
char**
char
char**
char
Semnif.
sin(x)
ln(x)
( )
cos(x)
double log
log10
10 (double x);
lg(x)
Arcsin(x)
Arccos(x)
arctg(x)
sh(x)
ch(x)
th(x)
th
(x)
double atan
atan22 (double y,double x);
ex
xy
|z |
[x]
trunc((x)
trunc
|x|
int
|x|
|x|
arctg(y/x)
P(x)
69/80
termina
termin
a un program la eroare
termina
termin
a un program cu un cod de retur
executa
execut
a o c-da si ret
ret.. cod_retur
cod retur (0=Ok
=Ok)
Ok)).
Ok
{
da_year
da_year;
;
da_day
da_day;
;
da_mon
da_mon;
;
struct time {
unsigned
unsigned
unsigned
unsigned
char
char
char
char
ti_min
ti_min;
;
ti_hour;
ti_hour
;
ti_hund
ti_hund;
;
ti_sec
ti_sec;
;
Modifica
Modific
a Data curenta
curenta :
Ci ate Ora
Citea
Cite
O Exact
E
Exacta
a:
void
id gettime
i (struct time
i *OraExact
*O E
*OraExacta
a );
Modifica
Modific
a Ora Exacta
Exacta :
70/80
closegraph (void
void)) ;
Numa
Num
ar de pixeli ( Oriz
Oriz../Vert
/Vert..)
getmaxx ()
();; getmaxy ()
();;
getx ()
();; gety ()
();;
Traseaza segment
Deseneaza dreptunghi
Deseneaza cerc
circle (x,y,r
x,y,r));
outtext[[xy
outtext
xy]] ([
([x
x,y,] mesaj
mesaj));
setactivepage (pag
pag)); setvisualpage (pag
pag));
71/80
3 3 Utilizarea fisierelor
3.3.
N
Nivelul inferior
f
- face apel
p direct la sistemul de operare;
p
;
Nivelul superior - utilizeaza proceduri speciale
pentru operatii de intrare/iesire.
72/80
a) Nivelul inferior
Deschiderea unui fisier (Open/Creat) :
// Creare \\
#include <io.h>
#include <fcntl.h>
<fcntl h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
iostream.h
void main (void)
{
int Lun;
clrscr();
Lun=open("Fis.Txt",O_CREAT|O_TEXT);
if (Lun!=-1)
{
cout << "Open ..." << endl;
write(Lun,"Primul...\n",10);
write(Lun,"Al
rite(L n "Al Doilea\n",10);
Doilea\n" 10);
}
else cout << " Open Incorect ! ";
close(Lun);
getchar();
}
75/80
// Citire \\
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
<stdio h>
#include <conio.h>
#include <iostream.h>
void main (void)
{
int Lun;
char Rand[10];
textmode(1); textbackground(BLUE); textcolor(WHITE); clrscr();
Lun=open("Fis.Txt",O_TEXT);
if (Lun!=-1) { read(Lun,Rand,10); cout << Rand;
read(Lun,Rand,10); cout << Rand; }
else cout << " Open Incorect ! ";
close(Lun);
getchar();
t h ()
}
76/80
b) Nivelul superior
Deschiderea unui fisier (FOpen ) :
...
FILE * Pf;
Pf = fopen (Fisier.Dat,w);
...
77/80
Prelucrarea pe caractere:
#include
#i
l d <stdio.h>
di h
void main (void)
{ int c;
while ((c=getc(stdin))!=EOF)
putc(c,stdout);
}
// Scriere cu Stream
Stream--uri \\
#include
#i l d <fstream.h
<
<fffstream.h>
t
h>
h>
79/80
// Citire cu Stream
Stream--uri \\
#include <fstream.h
<fstream.h>
>
//
//
//
sau :
while ( !f.eof() )
if ( f >> cmp
cmp11>>cmp
>>cmp22)
80/80