Post on 08-Feb-2018
7/22/2019 informatica pentru bac
1/78
1.1. Sub ro rameSub ro rame definite dedefinite de utilizatorutilizator
1.1. Subprograme.
ecan sme e trans er pr n nterme u parametr or
proceduri ProcedureProcedure,
functii [FunctionFunction].
Parametri (tipuri/clasificari),
, Parametri de tip Functie, Procedura,
A elul recursiv (sub r. recursive),
33/80/80
Definire simultana (Forward).
7/22/2019 informatica pentru bac
2/78
Subalgoritmi:Subalgoritmi: rezolvo anumitsubproblemrezolvo anumitsubproblem
SubalgoritmSubalgoritmParametri de IntrareParametri de iesire
Apel:
Cheam ume Subal oritm Lista arametri actuali
_ _ _
.
SubalgoritmulNume_Subalgoritm (Lista_parametri_formali)Este : {Antet}
. . . { Corp subalgoritm }
Sf_Subalgoritm. { sau Sf_Nume_Subalgoritm. }
44/80/80
Parametri de IntrareParametri de Intrare ExpresiiExpresii
Parametri de iesireParametri de iesire VariabileVariabile
7/22/2019 informatica pentru bac
3/78
Exemplu:Exemplu:pentru trei mulimi date A, B i C calculm AB, AC i BC
Algoritmul Reuniuni Este :
R:=XYX , Y R
Date A,B,C;CheamReuniune (A,B,R1);
Subalgoritmul Reuniune ( X,Y, R ) Este :R:=X;
, ,
CheamReuniune (B,C,R3);
Rezultate R1;
Pentru fiecare yY Execut
Dac yyXX Atunci R:=R{y}
Rezultate R2;
Rezultate R3;
S Al oritm.
_
Sf_Pentru
Sf_Reuniune._
Subalgoritmul Reuninune determinmulimea R = X Y astfel :
55/80/80
:= , a c epune n reun une ma n e emen e e n mu mea
X, la care apoi mai adaugacele elemente din Y care nu aparinaparin lui X.
7/22/2019 informatica pentru bac
4/78
Functii: ~Functii: ~ Subalgoritm + Val. functieiSubalgoritm + Val. functiei
Apelul unei funcii:
se face scriind ntr-o expresie numele funciei urmat de lista parametrilor actuali.
Nume_Funcie (List_parametri_actuali) {expr.instr.}
Def.:
Funcia Nume_Funcie (List_parametri_formali)Este : { Antetul funciei }
. . .
Nume_Funcie := Expresie;Nume_Funcie := Expresie; { Corpul funciei }
. . .Sf_Funcie. { sau Sf_Nume_funcie.}
66/80/80
Parametri de IntrareParametri de Intrare ExpresiiExpresii
Parametri de iesireParametri de iesire VariabileVariabile
7/22/2019 informatica pentru bac
5/78
Exemple:Exemple:Exist&Apart
, , ,p:=1;Ct_Timp (p
7/22/2019 informatica pentru bac
6/78
Exemplu:Exemplu: determinmaximul dintrdeterminmaximul dintr--unir X cu n componenteun ir X cu n componente ..
Funcia Max (X,k) Este :Dack=1Atunci Max:=x1 {Consistena}
Altfel Dac Max(X,k-1) < xk Atunci Max:= xkAltfel Max:= Max(X,k-1)
Sf_Dac
Sf_Dac
Sf_Max.
Apelul:
Max(X,n)
Exemplu:Exemplu: decide dacb aparine primelor k elemente din irul Adecide dacb aparine primelor k elemente din irul A ..
Funcia Apart (b,A,k) Este :
Apart := (k>0) i ( Apart(b,A,k-1) Sau (b=ak) )
Sf_Apart.
88/80/80
Apelul:
Apart(b,A,Card(A))
7/22/2019 informatica pentru bac
7/78
Subprograme Pascal : Procedure, FunctionSubprograme Pascal : Procedure, Function ::
::= |
::= ;
::= ;
n e _ unc e ::= unc on ume _p_ : p_
::=Procedure [(L_p_f ) ]
Real, Integer, Byte, Boolean, Char, StringReal, Integer, Byte, Boolean, Char, String, ,
pepe :P: [ (Lista_parametri_actuali)];
F: List arametri actuali ex rex r. instrinstr.
99/80/80
_ _
7/22/2019 informatica pentru bac
8/78
ParametriParametri ::
Date de iesire
Adr. (Var.)Adr. (Var.)
Date de intrare
Val. (Expr.)Val. (Expr.)
SubprogramSubprogram
::= {; }
::= | | |
sp_va ::= s a_ : _ p
::= VarVar:
ReuniuneAA
BB CC
1010/80/80
ProcedureReuniune (A,B:Multime; Var C:Multime);
7/22/2019 informatica pentru bac
9/78
VizibilitateVizibilitate ::
Domeniu de vizibilitate:
Var. locale
S2an3.
Proceduri, Functii,
SS1
S2n2 S2b
n23
P
n1
Function Apart(b:Integer; A:Multime) : Boolean; {Apartine b multimii A?}
n0 n ve u
Begin
i:=1; n:=A[0];
7/22/2019 informatica pentru bac
10/78
Program AuB_AuC_BuC;
= ..Procedure Citeste (Var A:Multime); { Citeste o multime de la tastatura }
Var c,p,n : Integer; s : String;
Write (' Dati elementele multimii : '); Readln (s); n:=0;While s'' Do Begin
= , ,
If p>0 Then Val(Copy(s,1,p-1),A[n],c) Else p:=Length(s); Delete (s,1,p)End;
0 :=n; n=Card A A 0
End;
Procedure Tipareste (A:Multime); { Tipareste pe ecran o multime A }
,
Begin
n:=A[0]; Write (' {');
For i:=1 To n Do Write A i ' '
1212/80/80
Writeln (Chr(8),'}') { Rescrie peste ultima virgula, acolada }
End;
7/22/2019 informatica pentru bac
11/78
Function Apart(b:Integer; A:Multime) : Boolean; {Apartine b multimii A?}
Var i,n : Integer;
Begin i:=1; n:=A[0];While (i
7/22/2019 informatica pentru bac
12/78
Parametri de tip Function,Parametri de tip Function, ProcedureProcedure ::
Ex.: Grafic (f,a,b); Grafic (g,c,d);
Integrala (f,a,b,SumeR); Integrala (g,c,s,Trapeze);
Radac (f,a,b,eps,Coardei); Radac (g,c,d,0.01,Tangentei);
Program pfp; {$F+}.
Type Functie = Function ( x : Real ) : Real ;
Procedura = Procedure ( . . . ) ;
Function ( ... f:Functie; ... p:Procedura; ... ) :
Procedure eg n p n ;
Function f1 (): Procedure metoda1();
Function f2 (): Procedure metoda2();
1414/80/80
. . . ( ... f1, ... ,metoda1, ... ) ...
. . . ( ... f2, ... ,metoda2, ... ) .... . .
7/22/2019 informatica pentru bac
13/78
Program Parametri_Functie_Procedura; {$F+}
Type Sir = Array [1..30] Of Integer;
unc e = unc on x: n eger : n eger;FctBool = Function (a,b:Integer) : Boolean;
Procedura = Procedure(Var Z:Sir; n:Integer);
= -
Function g (x:Integer) : Integer; Begin g:=Sqr(x-1)+x End;Function Cresc(a,b:Integer):Boolean; Begin Cresc:=a
7/22/2019 informatica pentru bac
14/78
Procedure OrdCresc (Var A:Sir; n:Integer);
Be in Ordonez A n Cresc End
Procedure OrdDesCresc (Var A:Sir; n:Integer);
Begin Ordonez ( A, n, DesCresc ) End;
Procedure Gen_Ord_TipProcedure Gen_Ord_Tip (Var A:Sir; n:Integer; r : Functie;
Ordonare : Procedura);
Var i:Integer;
Begin
For i:=1 To n Do A[i]:=r(i); {Generare}r onare ,n ; r onare
For i:=1 To n-1 Do Write (A[i],','); Writeln(A[n]) { Tiparire }
End;
Var X, Y : Sir;Begin
Gen Ord TiGen Ord Ti X,10, , OrdCresc ; Prel X
1616/80/80
_ __ _
Gen_Ord_TipGen_Ord_Tip (Y,11, g, OrdDesCresc); Readln { Prel Y }
End.
7/22/2019 informatica pentru bac
15/78
Apelul recursivApelul recursiv ::
Este permis apelul recursiv (un subprogram se autoapeleaza). Se ofera solutii simpleplecand de la (avand) definitii simple.
Ex.: Problema turnurior din Hanoi , n!=n*(n-1)!sau 1 (Consistenta!Consistenta!)
RecursivitateRecursivitate
IteratieIteratie !!. ,iruri de caractere, sse determine irul cifrelor sumei:
Formulrecursivpentru a aduna numrulA de ncifre cu numrulBde mcifre :
Ad(B,n,A,m,Tr) Dac m > n (1)
Ad(A,m,B,n,Tr) = m= , n= , ='1' m=0, n=0, t=1 (3)
Ad(A,m,B,n-1,Tr( '0'+B[n]))Cifra(0,B[n]) m=0, n>0 (4)
1717/80/80
Ad(A,m-1,B,n-1,Tr(a[m],B[n]))Cifra(a[m],b[n]) m>0, n>0 (5)
7/22/2019 informatica pentru bac
16/78
Program Adunare_Numere_siruri_cifre_baza_10; { Adun_Str[n], n9 Then Begin Tr:=1; s:=s-10 End;c:= Chr(s Or $30); { c=caracterul sumei resturilor }
End;
Begin
n= en t= en := azuElse Ad:='1' { (3) }
Else If m=0 Then Ad:=Ad(m ,n-1,Tr( '0'))+c { (4) }
1818/80/80
- , - ,
End;
7/22/2019 informatica pentru bac
17/78
Begin
If Length(a)>Length(b)
Then Adun := Adun (b,a) { Cazul (1), m>n }
Else Adun := Ad (Length(a),Length(b),0) { Initial Transportul = 0 }
End; {Adun }
unction Sp(a:Numar) : Numar; { Completeaza la stanga cu spatii }
Begin
If Length(a)
7/22/2019 informatica pentru bac
18/78
Definire simultan (Forward )Definire simultan (Forward ) ::
Function / Procedure S2 ( . . . ) ; { Subprogramul S 2 apeleaz S1}
FunctionFunction // ProcedureProcedure SS11 (( .. .. .. )) ;; ForwardForward;; {{ AntetulAntetul luilui S S11}}
eg n ... ... n ;
Function / Procedure S1 ( . . . ); { Subprogramul S 1 apeleazS2}
Begin ... S2... End;
Ce functie (procedur) se va scrie prima ??
ExEx.. PentruPentru aa comparacompara doudou numerenumere (ab, a=b)a=b) reprezentatereprezentate prinprin irulirul
(caracterelor)(caracterelor) cifrelor,cifrelor, vomvom utilizautiliza treitrei funciifuncii simultanesimultane (mutuale)(mutuale)::
,,
aa==bbNotNotab,
aa>>bbNrCif(NrCif(aa)) >> NrCif(NrCif(bb)) sausau
2020/80/80
NrCif(NrCif(aa)) == NrCif(NrCif(bb)) Cat(Cat(aa)>Cat()>Cat(bb)) sausau {/{/1010}}..
Cat(Cat(aa)=Cat()=Cat(bb))ii Rest(Rest(aa)>Rest()>Rest(bb))
7/22/2019 informatica pentru bac
19/78
Program Comparare_Numere_Str_cifre_baza_10; { < , > , = , nn) Or { |A| > |B| }
(m=n) And (m>0) And { = }, , - , , , -
(Egale (Copy(a,1,m-1),Copy(b,1,n-1)) And (a[m]>b[n]))) { Am > Bn }
End;
Var a,b : String;
BeginWrite (' Dati a : '); Readln (a) ; Write (' Dati b : '); Readln (b) ;
If MaiMic (a,b) Then Write (' a < b ') Else
2121/80/80
a are a, en r e a se
If Egale (a,b) Then Write (' a = b ') Else Write (' a ? b '); Readln
End.
7/22/2019 informatica pentru bac
20/78
1.2. Proceduri i func ii redefiniteCitirea i scrierea datelorCitirea i scrierea datelor ::
Nu exista instructiuniApel Proceduri
_
Readln(a,b,c); // 1 2 3 xxxReadln(v); // Simpla, Nu enumenum,
Write ( )
Writeln(a,b,c); // 1 2 3
Writeln (''); // Writeln (3.1415::55::22, 7.1::55::22, 9::33);// _3.14__7.10__9
2222/80/80
Readln(a::55::22, b::55::22, k::33); // _3.14__7.10__9
7/22/2019 informatica pentru bac
21/78
La definirea expresiilor se folosesci funcii.La definirea expresiilor se folosesci funcii.
Tabelul urmtor conine cteva funcii predefinite (Pascal).Tabelul urmtor conine cteva funcii predefinite (Pascal).
FunctiaFunctia S e m n i f i c a t i aS e m n i f i c a t i a
abs ( i )abs ( i ) valoarea (ntreag) absoluta ntregului iabs ( x )abs ( x ) valoarea (real) absoluta realului x
sqr ( i )sqr ( i ) ptratul ntregului i (daci*i < Maxint) (valoare ntreag)
sqr ( x )sqr ( x ) ptratul numrului real xsqrt ( x )sqrt ( x ) radical din x, x>=0
trunc (x)trunc (x) ntregul obinut din numrul real x prin eliminarea prii fracionareround ( x )round ( x ) cel mai apropiat ntreg de numrul real x
frac ( x )frac ( x ) valoarea x - int(x) , pentru x real ,
ln ( x )ln ( x ) logaritm natural din x, x ntreg sau real>0sin ( x )sin ( x ) sinusul lui x, x reprezintmsura n radiani a unui unghicos ( x )cos ( x ) cosinusul lui x,
arctan ( x )arctan ( x ) arctangenta din x,succ ( i )succ ( i ) succesorul valorii ordinale ipred ( i )pred ( i ) predecesorul valorii ordinale iord ( e )ord ( e ) numrul de ordine al valorii lui e n tipul expresiei ordinale e
2323/80/80
chr ( i )chr ( i ) caracterul de ordin i n tipul Charodd ( i )odd ( i ) funcie logiccu valoarea Truedacieste impar iFalsedaceste par
7/22/2019 informatica pentru bac
22/78
Tipul ir_caractereTipul ir_caractere (String )(String ) ::
Util.: ~~Array Of Char
Decl.: String [m] Lung. Max. = m
7/22/2019 informatica pentru bac
23/78
Faciliti (4F & 4P) ale tipuluiStringString( n plus fadeArray Of Char) :
Valorile variabilelor i ex resiilor de ti Strin ot fi citite res ectiv ti rite ex.:Mesaj:=Numele autorului; Write (Dati +Mesaj+ : ); Readln (s);
-LengthLength (S)(=Ord(S[0]) ) returneazlungimea irului S(Length(mare)=4),- , ,
( Copy(Marinescu,2,4)=arin ),- ConcatConcat (S1,S2,...,Sn)(=S1+S2+...+Sn) ( Concat(Con,Cat)=ConCat),-- , . .
(Pos(in,Marinescu)=4 iar Pos(pop,Popescu)=0 ),
-DeleteDelete (s,p,l) terge dins ncepnd din poz.p, l caractere, ex.secventa : , ,-InsertInsert (x,S,p) insereaz irulxnirul Sla poziiap. De ex.:
s:=Alg.Progr.;Insert( i ,s,5); Write (s); va tipari Alg. i Progr.;- , , . . ,
(:n:mca i Write). Ex. : v:=5/2; Str (v:5:2,S); va depune n S irul 2.50.- ValVal (S,v,Cr)examineaz irul S. Daceste corect atunci va depune n vvaloarea iar
n Cr val. 0. Dac irul Sconine caractere nepermise, atunci n vse depune
2525/80/80
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 , iarVal(19d7,v,Cr); are ca efect : v=0 i Cr=3 ( pe poziia 3 se afld).
7/22/2019 informatica pentru bac
24/78
Problema pe care o vom rezolva utiliznd tipul string este urmtoarea :Sse calculeze valoarea unei expresii aritmetice de forma : n1n2[=] unde :
n , sun ou numere rea e, es e un opera or ar me c , , , , sau : ar semnul egal la sfritul expresiei poate lipsi. Expresia (simpl, cu un singuroperatori frparanteze) este datsub forma unui ir de caractere, iar rezultatul se
.
De exemplu pentru 123+45 rezultatul este 168,00 , iar pentru 123.3:3=rezultatul este 41,10 .Problema o vom rezolva astfel :e - reprezint expresia sub forma unui ir de caractere, iar r este rezultatul
(valoarea expresiei) dattot sub forma unui ir de caractere n care se va nlocui
marca zecimal. cu , . Dacexpresia nu se termina cu caracterul =, acesta vafi adaugatirului introdus.
Se determinpoziia operatorului (p). Inseamnc o=e[p]va fi caracterul ce vadesemna operaia ce urmeaza fi facut. n1 este scris cu caracterele e1...ep-1 , deci
poate o t nut cu proce ura a, ar apo se sterg pr me e p caractere, ceea censeamncn expresia emai ramane n2=. n continuare, se procedeazanalog,extragnd pe n2, din irul rmas , mai puin ultimul caracter. Dup tiprirea
2626/80/80
expresia vid(irul vid) adicse tasteazdoarEntern momentul citirii expresiei.
7/22/2019 informatica pentru bac
25/78
Programul Pascal este urmtorul:
Program Valoarea_Expresiei; (* '123+22=' *) (* n1 o n2 = ? *) (* o {+,-,x,:,*,/} *)
Var e,r : String; o : Char;
n1, n2 : Real; p , er : Integer;
Begin
Repeat Write (' Dati expresia (n1 o n2 =) : '); Readln (e); If e>'' Then Begin
If Pos ('=',e)=0 Then e:=e+'=';
Val (e,n1,p); Val (Copy(e,1,p-1),n1,er); { p:=Poz(o) } {n1:=...}
= - , , , , , ,
Case o Of
'+' : Str (n1+n2:8:2,r); '-' : Str (n1-n2:8:2,r);
'x','*' : Str (n1*n2:8:2,r); ':','/' : Str (n1/n2:8:2,r)Else r:=' Operator necunoscut.'+o
End; p:=Pos('.',r); If p>0 Then r[p]:=','; Writeln (r) End
2727/80/80
Until e=''
End.
7/22/2019 informatica pentru bac
26/78
F i i e r eF i i e r e
3.3. FiiereFiiere texttext
Fiiere Pascal.Fiiere Pascal.
Utilizarea fiierelor text.Utilizarea fiierelor text.
Fi iere cu tiFi iere cu ti
OperaiiOperaii cucufiierefiiere
Fiiere fara tipFiiere fara tip binarebinare
2828/80/80
7/22/2019 informatica pentru bac
27/78
3.13.1 FiiereFiiere text ~text ~ TipuriTipuri dede accesacces
eru eru poate cons erat oo co ecieco ecie ee ateate stocatestocate pepe unun suportsuport externextern ngeneral magnetic) unde pot fi pstrate atta timp ct este necesar. Un fiier esteformat dintr-o succesiune de elemente (nregistrrisau articolenumerotate de la 0,alctuite la rndul lor din cmpuri) avnd toate acelai tip, care constituie tipul de
baz al fiierului. Transferul informaiilor ntre memoria intern i cea extern(fiier) se realizeazla nivel de articol. Pentru aceasta, n memoria internva trebuisdeclaram o variabilavnd acelai tip cu tipul nregistrrilor fiierului iar prinoperaiile de intrare/ieire (Read/WriteRead/Write) se va realiza ctitirea din, respectiv scrierea
n, fiier.
AccesulAccesul la componentele unuifiier poate fi secvenial sau emoria internemoria intern Art.:Art.:
direct. n acces secvenial,articolele sunt prelucrate(accesate) succesiv (unul dup
WriteWrite
ArticolArticol
0
1
2
Fis.Fis.
2929/80/80
a tu , ncep n cu pr mu pan aultimul (Art.0, Art.1,...,Art.n-1). ReadRead
7/22/2019 informatica pentru bac
28/78
Fiiere PascalFiiere Pascal
Dacn cazul accesului secvenial ordinea de transfer a nregistrrilor este datdeordinea acestora n fiier, acessul direct permite transferul n orice ordine (aleator)
prin precizarea numrului de ordine din cadrul fiierului (0,1,...,n-1 , dacfiierulare narticole).
n vederea prelucrrii, fiierul va trebui deschis iar la terminarea operaiilorfiierul va trebui nchis. La deschiderea fiierului, indicatorul (capul de citire-scr ere este pozonat pe pr ma component. In catoru se ep aseazautomat cuo poziie spre sfrit, la fiecare operaie de scriere sau citire din fiier.
- n primul rnd va trebui sprecizm ce fiier se deschide (se face asocierea ntrevariabila fiier i specificatorulde fiier, corespunzator fiierului dorit) utiliznd
_ ,_ , __ ..facut, de acum nainte vom utiliza doarVariabila_Fiierpentru a referi fiierul delucru (pe care o vom nota n continuare mai simplu cuF).
3030/80/80
- esc erea propr uz s se a e ec ua pr n ape u proce ur ewr eewr e sauReset(F)Reset(F) dup cum fiierul care va fi deschis urmeaz s se creeze sau s se
consulte .
7/22/2019 informatica pentru bac
29/78
Fiiere PascalFiiere Pascal
Operaiile de intrare / ieire sunt:
Read(F,Art)Read(F,Art) respectiv
Write(F,Art)Write(F,Art)
,
din care se face transferul din/n fiier.Dupterminarea operaiilor de transfer, fiierul poate fi nchis prin:
Close(F)Close(F)..
O functie utiln programele care lucreazcu fiiere este funcia booleanoo
care ne spune dacs-a ajuns la sfritul fiierului (daca fost detectatmarca desfrit de fiier).
n programele Pascal este posibil tergerea unui fiier apelnd procedura:Erase(F)Erase(F)..
De asemenea, este osibil schimbarea numelui unui fi ier n tim ul execu iei
3131/80/80
unui program. Aceastredenumire se poate realiza prin apelul:
Rename(F,Rename(F, Noul_Specificator_de_Fiier)Noul_Specificator_de_Fiier).
7/22/2019 informatica pentru bac
30/78
3.23.2..ProceduriProceduriii funciifuncii predefinitepredefinite pentrupentru fiierefiiere texttext
- ,numr de linii compuse din caractere (rnduri de tip string). ntr-un fiier textsfritul fiecrei linii este marcat prin doucaractere speciale CRCR(de la Carriage
e urn e a ne ee . van a u o os r aces or ere cons n ap u c
ele se pot vizualiza din Norton Commander sau Turbo Pascal i chiar pot ficorectate folosind funcia de editarea acestora.
Declararea unui fiier text se realizeazsimplu prin scrierea cuvntului cheie Text.
De exemplu :
Var f, g : Text Text;Citirea datelor dintr-un fiier text se poate efectua prin apelul procedurii :
ReadRead (F,(F, List_Var_IntrareList_Var_Intrare));; sauReadlnReadln F,F, List Var IntrareList Var Intrare ;;_ __ _
transferul fcndu-se din fiierulF, n aceeai maniercai de la tastaur.Scrierea datelor ntr-un fiier text se poate efectua prin apelul procedurii :
3232/80/80
, _ _, _ _
WritelnWriteln(F(F List_ExprList_Expr.._Ieire_Ieire));;
scrierea fcndu-se n fiierulF cai pe ecran.
7/22/2019 informatica pentru bac
31/78
Fiiere TextFiiere Text
Un rim exem lu l constituie o rocedurcare cite te o matrice dimensiunile ivalorile acesteia) dintr-un fiier text.
Considerm caceste date sunt organizate n fiierul Matrice.Txt astfel :
- primul rnd conine numrul de liniii numrul de coloane (mi n),
- urmtoarele mrnduri conin valorile corespunzatoare fiecrei linii ale matricei.
Procedure Cit_Mat (Var A :matrice; Var m,n : Integer);
Var i, j : Integer; F : Text;
Assign (F,Matrice.Txt); Reset (F);
Readln (F,m,n);3 4
For i:=1 To m DoFor j:=1 To n Do
Read (F,A[i,j]);
1 2 3 45 6 7 8
3333/80/80
Close (F)
End;
9 0 1 2
7/22/2019 informatica pentru bac
32/78
Fiiere TextFiiere Text
-conform unui dicionar (care se afl stocat ntr-un fiier text avnd numeleDictio.Txt).
- ,
construiete citind cte un rnd de forma Stnga=Dreaptadin fiierul text.Pro ram=Al oritmulDe exem lu con inutul fi ierului Dictio.Txt ti rit nReadln=Date
Read=Date
Writeln=Re ultate
continuare, poate traduce un Program Pascal inPseudocodPseudocod.
Write=Rezultate
For=Pentru
Do=Executa
entru a rea za o tra ucere, se c teste c te un r n nfiierul iniial, se traduce conform dicionarului, dupcarese depune (rndul tradus) n fiierul final (tradus).
Repeat=Repeta
Until=Pana_Cand
=
Traducerea unui rnd se execut astfel: se ia fiecarecuvnt din dicionar (aflat n partea stang) i se verificdacacesta se afln rndul curent. Dacda, atunci se va
3434/80/80
_
End.=Sfarsit.
. . .
nlocui n rnd cuvntul gsit cu perechea acestuia (partea
dreaptdin dictionar).
Fiiere TextFiiere Text
7/22/2019 informatica pentru bac
33/78
Fiiere TextFiiere Text
Programul Pascal este urmtorul :
ro ram Traducere Text_Const Mc = 100;
Type Sc = String[10]; Rd = Record St, Dr : Sc End; { (St,Dr) }
Var Fis, Tra, Dic : Text; Numei,Numef : String[20];
c : ecor rc : y e; umaru e cuv n e n c onar
Cuv : Array [1..Mc] Of RdEnd;
Rnd : Strin ; un rnd din dictionar de orma St = Dr
p,i : Integer; { p memoreaza pozitia semnului = n Rnd }
Begin { ( delimiteaza partea stanga de partea drepta) }
Assign (Dic,'Dictio.Txt'); Reset (Dic); { Deschide Dictionarul } . .
Nrc:=0;
While Not Eof(Dic) Do Begin
Readln (Dic,Rnd); p:=Pos('=',Rnd); { Cuv[Nrc]Dict }
Nrc:=Nrc+1;With Cuv[Nrc] Do BeginSt:=Copy(Rnd,1,p-1); { St := ... p }
= - =
3535/80/80
, , ...End
EndEnd;
Fiiere TextFiiere Text
7/22/2019 informatica pentru bac
34/78
Write (' Numele fiierului de tradus : '); Readln (Numei); { Fi. de tradus }
Fiiere TextFiiere Text
rite ume e iieru ui rezu tat : ; ea n ume ; i. tra us
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] DoRepeat
p := Pos (St,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;
3636/80/80
ose is ; ose ra nc i e iiere e
End.
7/22/2019 informatica pentru bac
35/78
3.33.3.. OperaiiOperaii cucufiierefiiere
Creere (generarea unui fiier, care se executo singurdat, cnd ia fiinfiierul),
c ua zare corec area eru u , punerea a punc n cazu n care a e e nu
sunt corecte sau nu mai sunt actuale), i Listare (etapa finalde obinere a rezulatatelor, a situaiilor finale).
Actualizarea fiierelor poate fi efectuatsecvenial(articol duparticol) sau direct(aleator, preciznd numrul de ordine al unui articol). n operaia de actualizare
Adugareade noi articole, Modificarea unor articole (prin modificri de cmpuri ale acestora), sau ergerea e ar co e.
Operaiile descrise anterior vor fi exemplificate n cele ce urmeazprin programe
3737/80/80
asca .
Operaii cuOperaii cufiierefiiere
7/22/2019 informatica pentru bac
36/78
Operaii cuOperaii cufiierefiiere
n exemp u urm or se oree creerea eru u rupa . a , cu ar co e eforma:
Nr_Leg Nume Medie
WordWord String[25]String[25] Real Real
Pentru a crea acest fiier, se citete de la tastaturcte un articol (care conineinformaiile despre un student) apoi acesta se scrie n fiier.
..................
.........
..................
......... CreereCreere
3838/80/80
.
Operaii cuOperaii cufiierefiiere
7/22/2019 informatica pentru bac
37/78
Operaii cuOperaii cufiierefiiere
Urmtorul program realizeaz listarea (tiprirea articolelor) fiieruluiGrupa111.Dat pe ecran. Pentru a tipri acest fiier, se citete din acestacte un articol, apoi acesta se afieazpe ecran :
... .......... ....
... .......... ....
... .......... ....
ListareListare
Grupa111.Dat
Urmtoarele exemple sunt dedicate actualizriifiierului Grupa111.Dat. Pentruaceasta, se citesc de la tastatur datele (care conin informaiile necesare
.
.............................................
............... Actuali are
3939/80/80
..................................
Grupa111.Dat
Operaii cuOperaii cufiierefiiere
7/22/2019 informatica pentru bac
38/78
p p f f
Att pentru tergerea de articole dintr-un fiier ct i pentru adugareade noi
,figura urmtoare:
...............................................
...............................................
Stergere /AdugareGrupa111.Dat Grupa111.Tmp
Dacse dorete tergerea aleatoare a unor articole din fiier, numrul curent alacestor articole va fi introdus de la tastatur. Aceste articole vor fi omise lacopierea articolelor din fiierul iniial (Grupa111.Dat) n fiierul temporarGru a111.Tm .
Pentru ca fiierul actualizat spoarte acelai nume iniial, se va proceda astfel:fiierul iniial se terge (Erase(Fis_Vechi)) iar fiierul final se va redenumi
4040/80/80
(Rename(Fis_Temporar,Nume_Fiier)) aa cum se poate vedea n exemplul
urmtor.
Operaii cuOperaii cufiierefiiere
7/22/2019 informatica pentru bac
39/78
p p f f
Programul pentru adugareade noi articole n fiier este prezentat n continuare
adaug naintea articolului cu numrul de ordine Nr_Crt (introdus tot de latastatur).
...............................................
...............................................
Grupa111.Dat Grupa111.Tmp
Toate articolele pnla cel precizat se copiazdin 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 pncnd nu mai sunt articole de adugat. Restularticolelor care au mai rmas n fiierul iniial se vor copiai ele n fiierul final.
4141/80/80
Aa cum s-a procedat i la Stergere, se vor depune datele obinute n fiierul
iniial (apelndEraseErase... i RenameRename...) .
7/22/2019 informatica pentru bac
40/78
11..33.. FunciiFuncii
O funciefuncie este formatdintr-un antetanteti un blocbloc(corpcorp). Ea poate fi
apelatdaca fost definitn ntregime sau doar antetul su.
AntetulAntetulunei funcii are urmtorul format:
TipTip NumeNume ((List_parametri_formaliList_parametri_formali))
un e: TipTipeste tipul valorilor funciei (codomeniul);
NumeNumeeste un identificator literurmateventualde litere sau cifre List_parametri_formaliList_parametri_formaliconineparametrii formaliseparai prin ,,.
Exem luExem lu::
int Min (int a, int b){ if (a
7/22/2019 informatica pentru bac
41/78
CorpulCorpulunei funcii are urmtoarea structur:{{
ec araInstruciuni
}}
ExempleExemple::int CmmdcCmmdc (int a, int b) // Cmmdc(a,b){
if (b= =0) return a;
else return Cmmdc(b,a % b); // Cmmdc(b,a Mod b);
int cmmdccmmdc (int a, int b) // cmmdc(a,b){ int rest;
do {rest=a%b;a=b;b=rest; }
4343/80/80
w e res = ; res ; sau w ew e resres ;;return a;
}
7/22/2019 informatica pentru bac
42/78
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire. . . unc a r n
2.3.2. Funcia Scanf2.3.3. Funcia PutChar2.3.2.3. Funcia GetChar2.3.5. Funcia GetChe
. . .2.3.7. Funcia KbHit2.3.8. Funciile PutS, GetS. . . ream-ur
4444/80/80
7/22/2019 informatica pentru bac
43/78
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
n limbajul C nunu existexist instruciuniinstruciuni de intrareintrare//ieireieire,
aceste operaii ralizndu-se prinfunciifunciiaflate n bibliotecile
standard.
Implicit, unui program i se ataeazfiierele: stdinstdin(intrare standard),
stdoutstdout(ieire standard),
stderrstderr(ieire standard pentru erori), stprnstprn(ieire pentru imprimant),
4545/80/80
.
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
44/78
p p
2.3.12.3.1.. FunciaFuncia PrintfPrintf
Aceastfuncie realizeazafiarea dupunablon, avnd urmtorul format:
int printf(Control[,List_Expresii]);
unde Controleste ablonul(formatul) scris sub forma unui ir de caracterecare conine mesajeispecificatori de formatcorespunztori valorile expresiilordin list. Un specificator de formatse descrie astfel :
%% mm..nn ll .unde:
[] - determinalinierea la stnga, implicitfiind la dreapta,
[mm] - precizeazlungimea cmpului, [..nn] - precizeazlungimea prii zecimale, respectiv numrul de caractere,
4646/80/80
- ,
[ff] - determintipul conversiei.
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
45/78
p p
2.3.12.3.1.. FunciaFuncia PrintfPrintf
TipulTipul conversieiconversiei [ff] este precizat prin unul din urmtoarele caractere:
- nt zec ma extern,
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),
- , s -string(sir de coduriASCIIterminat cu \0=NUL) sir de caractere,
f -floatsau double zecimal extern[m[.n] ], implicit n=6,
e - oa sau ou e zec ma ex ern orma exponen a a ,
E -floatsau double zecimal extern forma exponentiala (b*10E),
g - se alege dintre variantelefsau ereprezentarea minima,
4747/80/80
G - se alege dintre variantelefsauEreprezentarea minima.
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
46/78
2.3.12.3.1.. FunciaFuncia rintfrintf
Funcia printfprintf returneaznumrul de octei afiai dacoperaia a decurs
corect, iar n caz contrar -1 (EOF):
if (EOF ==printf (Control ,Lista_Expresii)) ... eroare... ;
Exemple:
short Zi=1; char Luna[]="Ianuarie"; unsigned An=2003;
float Ina=1.8;
rintf(" Zi:%%dd, Luna:%%33..33ss., An:%%uu\n",Zi,Luna,AnZi,Luna,An); // Zi:1, Luna:Ian., An:2003
printf(" Inaltime(m):%%22..33..22ff\n",InaIna); // Inaltime(m):1.80
4848/80/80
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
47/78
2.3.22.3.2.. FunciaFuncia ScanfScanf
Aceasta functie realizeaza citirea datelor dupa un sablon, avnd urmatorulorma :
intint scanfscanf ((ControlControl,,ListListaa__AdrAdreseese_de__de_VariabileVariabile));; ..
unde Controleste sablonul formatul scris sub forma unui sir de caracterecare contine eventual texte ( obligatorii la intrare) si specificatori de formatcorespunzatori tipurilor variabilelor din lista. Specificatorii de format sunt
asemanatori celor rezentati la functia rint realiznd nsa conversiile inverse:%[*] [m] [l] [f] ,
unde:
[*] -un caracter optional, [m] -precizeaza lungimea maxima a cmpului, l -conversia se a efectua din format intern lon
4949/80/80
[f] -determina tipul conversiei.
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
48/78
2.3.22.3.2.. FunciaFuncia ScanfScanf
TipulTipul conversieiconversiei [ff] este precizat prin unul din urmtoarele caractere:
d - int zecimal extern,
o - int octal extern,
x - int hexa extern (0...9,a...f),
- int Hexa extern 0...9 A...F u - unsigned zecimal extern (fara semn),
c - binar intern caracter(char),
s - s r ng s r e carac ere erm na a spa u sau mens unea m,
f - float flotant extern.
5050/80/80
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
49/78
2.3.22.3.2.. FunciaFuncia ScanfScanf
Adresele variabilelor de intrare sunt date prin operatorul de adrese& plasat
naintea identificatorului fiecarei variabile (simple!):
[&&] Variabila (nunu esteeste necesarnecesarpentru tablouri).
Exem lu:
short Zi; char Luna[13]; unsigned An; float Ina;
scanf("%d%s%u%f ", &Zi, Luna, &An, &Ina); // 1 Ianuarie 2003 1.80
Functia scanf returneaza numarul de cmpuri citite corect. Sfrsitul de fisier(Ctrl/Z) poate fi verificat prin valoarea returnata EOF:
if (EOF == scanf(Control,Lista_Expresii)) ... Sfrsit... ;
Exemplu:
5151/80/80
==scan s u , , una, n, na pr n r ;
else { printf(" Zi:%d, Luna:%3.3s., An:%u \n",Zi,Luna,An); printf(" Inaltime(m):%2.3.2f \n",Ina); }
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
50/78
2.3.32.3.3.. FunciaFuncia PutCharPutChar
Aceast funcie realizeaz tiprirea unui caracter al crui cod ASCII esteprecizat printr-o expresie :
pu c ar xpres e;
. . . .. . . .
Aceasta, returneazcodulASCIIal caracterului citit (pentruCtrl/Z EOF=-1):
Exemplu:
do putchar (((c=getchar())>'Z')? c^' ' : c); // Litere mici LITERE MARIwhile (c!='.');
LitereLitere micimici inin LitereLitere MARIMARI !! getchargetcharLITERELITERE MICIMICI ININ LITERELITERE MARIMARI !! utcharutchar
5252/80/80
SeSe terminatermina lala .. (Punct)(Punct) getchargetcharSESE TERMINATERMINA LALA .. putcharputchar
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
51/78
2.3.52.3.5.. FunciaFuncia GetCheGetChe
Funcia returneazcodul caracterului citit directi l afieaz(n ecou):
int getche ( );
Exemplu:
do putchar (((c=getche())>'Z')? c^' ' : c); while (c!='.'); // se termina cu .
....
2.3.62.3.6.. FunciaFuncia GetChGetChFuncia returneazcodul caracterului citit directfra mai fi afiat:
int getch ( );
Exemplu:int ReadKey(){ int car=getch();
5353/80/80
else return getch(); // a fost apsato tastfunctional(0,cod ASCII)}
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
52/78
2.3.72.3.7.. FunciaFuncia KbHitKbHit
Aceastfuncie returneazstarea tastaturii (a fost apsato tast?):
int kbhitkbhit
Exemplu:.
# include # include
# include void main (){ char c[8],i=-1;
cout
7/22/2019 informatica pentru bac
53/78
2.3.82.3.8.. FunciileFunciile PutSPutS,, GetSGetS
Acestea citesc (inclusiv spaiilei taburile pnlaEnterEnter), respectiv tipresc un
string:char *gets (char *s);
int puts (const char *s); .
Exemplu:#include
#include
DatiDati oo propozitiepropozitie ......
I/EI/E ptpt.. strstr..#include #include
void main ()
20204949 22ff 4545 997070 7474 22ee20207373 7474 7272 22ee
c rscr ;
puts(" Dati o propozitie ... ");char s[100]; gets(s);
=
5555/80/80
}
2.3.2.3. OperaiiOperaii dede intrareintrare//ieireieire
7/22/2019 informatica pentru bac
54/78
2.3.92.3.9.. StreamStream--uriuri
Dispozitivelor standard de intrare-iesire li s-au atasat streamurile (flux de
,
efectuarea operatiilor de intrare-iesire aplicnd operatorul >>>> streamului cin,respectiv
7/22/2019 informatica pentru bac
55/78
2.4.2.4. A elulA elul uneiunei func iifunc ii
ns ruc unea e ape a une unc es e un caz par cu ar a ns ruc un
expresie:
Nume_funcie (List_parametri_actuali);Nume_funcie (List_parametri_actuali);
O funcie poate fi apelat i n cadrul unei expresii dintr-o instruciune:
... Nume_funcie (List_parametri_ actuali) ... ;... Nume_funcie (List_parametri_ actuali) ... ;
5757/80/80
2.4.2.4. ApelulApelul uneiunei funciifuncii
7/22/2019 informatica pentru bac
56/78
2.4.2.4. ApelulApelul uneiunei funciifuncii
O funcie poate fi utilizat doar dac a fost definit, sau cel puin a fost
-
aa ip_ ip_ uncieuncie ume_ ume_ uncieuncie ista_parametri or_ orma iista_parametri or_ orma i ;;
b)b) Tip_funcieTip_funcie Nume_funcieNume_funcie (Lista_tipurilor_parametrilor_formali)(Lista_tipurilor_parametrilor_formali);;
cc p_p_ unc eunc e ume_ ume_ unc eunc e vovo ;; nunu sunsun parame rparame r ormaorma
d)d) Tip_ Tip_ funciefuncie Nume_Nume_ funciefuncie (( ));; //// nunu sese facfac verificrileverificrile dede tiptip
5858/80/80
2.4.2.4. ApelulApelul uneiunei funciifuncii
7/22/2019 informatica pentru bac
57/78
pp
ApelulApelul implicit pentru variabile simple(de baz) esteprinprin valoarevaloare, iar pentru
tablouri prinprin referinreferin. ApelulApelul prinprin referinreferin se obine prin intermediul
var a e or e t ppointerpointer sau a operatoru u e a res .
Parametri de intrare Parametri de iesireunc eunc e
Parametri de intrareExpresiiExpresii Parametri de iesire VariabileVariabile
s=a+bs=a+ba, ba, b ss
s=s=22+x+x**yy22, x, x**yy ss
voidvoidsumasuma(int(int a,a, intint b,b, int&int& s)s) {{
5959/80/80
s=a+bs=a+b;;}}
sumasuma ,, ,,
}}
2.4.2.4. ApelulApelul uneiunei funciifuncii
7/22/2019 informatica pentru bac
58/78
RevenireaRevenirea dintr-o funcie se poate realiza fie prin instruciunea returnreturn, fieautomat dupultima instruciune a funciei
returnreturn eexpxprreessiiee ;;
fiind returnatvaloarea expresieiexpresiei(dacdacexistexist).
CitesteCiteste aa TiparesteTiparestex+yx+y
voidvoid citesteciteste(int&(int& a)a){{cincin >>>> aa;;
intint citesteciteste((voidvoid)){{ intint aa;;cincin >>>> aa;; returnreturnaa;;
voidvoid tiparestetipareste((intint aa)){{coutcout
7/22/2019 informatica pentru bac
59/78
#include #include
int u1,v1, u2,v2; float a, b, c, d ;int u (float x) { return ((x-a)/(b-a)*(u2-u1)+u1); }
n v oa y re urn y- c- v -v +v ;
void InitGraf(void) { int Gd = DETECT, Gm; initgraph(&Gd, &Gm, "c:\\Bc\\Bgi"); }
void ViewPort(int x1,int y1,int x2,int y2) {u1=x1; v1=y1;
, , ,
void Window(float x1,float y1,float x2,float y2) { a=x1; d=y1; b=x2; c=y2; }
void Rectangle(float x1,float y1,float x2,float y2) { rectangle(u(x1),v(y1),u(x2),v(y2)); }
, , , , , ,void Linie(float x1,float y1,float x2,float y2) { line(u(x1),v(y1),u(x2),v(y2)); }
void Muta(float x,float y) { moveto(u(x),v(y)); }
void Tra float x float lineto u x v
void Rot(float &x,float &y, float x0, float y0, float Alfa) { float xp;xp=(x-x0)*cos(Alfa)-(y-y0)*sin(Alfa)+x0;
y =(x-x0)*sin(Alfa)+(y-y0)*cos(Alfa)+y0;
6161/80/80
x = xp;
}
2.4.2.4. ApelulApelul uneiunei funciifuncii
7/22/2019 informatica pentru bac
60/78
xemp u :#include ;#include ;
int Sf (int& f, int k)
{ int p=0;while (!(f%k)) { f/=k; p++; }
return p;
}
main () { clrscr();int n; int f2=0; int Uc=1;
cout > n;
for (int i=2; i
7/22/2019 informatica pentru bac
61/78
. ,#include ; #include ;
int Card(int A[]) { return A[0]; }
int Apart (int x, int A[])
or n = ; = ar ; x== re urn ; re urn ;
voidnn(int A[], int B[], int C[])
{C[0]=0; for (int i=1; i
7/22/2019 informatica pentru bac
62/78
2.4.12.4.1.. O eratorulO eratorul dede adresadres &&
Acest operator (&&) se poate utiliza i pentru a defini un tip referinprintr-o
,
pointer).Cu a utorul acestui o erator utem:
redenumi o variabil,
realizarealiza unun apelapel prinprin referin,referin,
s ec ar m o var a e re er n ast e :
tiptip&& parametru_ ormaparametru_ orma par. re . (a res)par. re . (a res)
6464/80/80
pp nume_var_re ;nume_var_re ; var. e p re er nvar. e p re er n
2.4.12.4.1.. OperatorulOperatorul dede adresadres((&&))
7/22/2019 informatica pentru bac
63/78
Exemplul 4: //Apel prin Referin
#include ;
vo suma nt x, nt y, nt z z = ++x ++y; x,y z
voidSuma(int x,i nt y, int&z) { z = ++x * ++y; } //x,y z
{
int x,y, z;
cout > x >> y;
suma(x,y,&z);
cout
7/22/2019 informatica pentru bac
64/78
2.5.2.5. FunctiiFunctii standardstandard
MacrouriMacrouri dede clasificareclasificare ((ctypectype..hh))::
intint isasciiisascii ((intint car)car);; car car [[00,,127127]] ??
intint isalphaisalpha (int(int car)car);; car car esteeste codulcodul unuiunui caractercaracter alfanumericalfanumeric ??
intint isalnumisalnum ((intint car)car);; car car esteeste codulcodul uneiunei literelitere ??
intint isupperisupper ((intint car)car);; car car esteeste codulcodul uneiunei literelitere marimari ??
intint isdigitisdigit ((intint car)car);; car car esteeste codulcodul uneiunei cifrecifre zecimalezecimale ??
intint isxdigitisxdigit (int(int car)car);; car car esteeste codulcodul uneiunei cifrecifre hexahexa ??
intint isgraphisgraph (int(int car)car);; car car esteeste codulcodul unuiunui caractercaracter afiafissabilabil ??
intint isprintisprint (int(int car)car);; car car esteeste codulcodul unuiunui caractercaracter imprimabilimprimabil ??
6666/80/80
,, ,, ,, ,,
MacrouriMacrouri dede transformaretransformare aa simbolurilorsimbolurilor ((ctypectype..hh))::
7/22/2019 informatica pentru bac
65/78
intint toasciitoascii((intintcar)car);; car car [[00,,127127]] (returneaz(returneaztt ultimiiultimii 77 bibitti)i)intint touppertoupper((intintcar)car);; car car literliteraa maremare ((transformatransforma dindin ll nn L)L)
nn o owero ower nn carcar ;; carcar er eraa m cam ca rans ormarans orma nn nn
..
FormatFormat internintern FormatFormat ((zecimalzecimal)) externextern
longlong atolatol((constconst charchar**ptrptr));; binarbinar (long)(long)zecimalzecimal externextern
doubledouble atofatof((constconst charchar*ptr)*ptr);; flotantflotant ((dubladubla precizieprecizie)) zecimalzecimal externextern
FormatFormat externextern
FormatFormat internintern
charchar**itoaitoa((intintv,v,charchar*s,*s, intintb)b);; ss vvbb (val(val.. vv dede tiptip intint,, scrisscrisaa nn bazabaza b)b)
6767/80/80
charchar**ltoaltoa((longlongv,v,charchar*s,*s, intintb)b);; ss vvbb (val(val.. vv dede tiptip longlongscrisscrisaa nn bazabaza b)b)
PrelucrareaPrelucrarea ssirurilorirurilor dede caracterecaractere ((StringString..hh))::
7/22/2019 informatica pentru bac
66/78
charchar ** strstr[[nn]]cpycpy ((charchar **destinatiedestinatie,, const charconst char **sursasursa[[,, unsignedunsigned nn]])) ;;
** ** ** ,, ,,
intint strstr[[nn][][ii]]cmpcmp ((charchar **ssirir1,1, const charconst char **ssirir22 [[,, unsignedunsigned nn]])) ;;
unsignedunsigned strlenstrlen ((charchar **ssirir)) ;;
** **
charchar** strstrstrstr ((const charconst char **sirsir,, const charconst char **subsirsubsir) ;) ;
charchar** strtokstrtok(char(char **ssirir,, const charconst char **subsubssirir));;charchar** strchrstrchr(const char(const char **ssirir,, intint carcar));;
6868/80/80
charchar** strsetstrset(char(char **ssirir,, intint carcar));;
FuncFuncttiiii dede calculcalcul ((mathmath..hh))::
7/22/2019 informatica pentru bac
67/78
PrototipPrototip Semnif.Semnif.
doubledouble sinsin((doubledouble xx));; sin(x)sin(x) doubledouble loglog((doubledouble xx));; ln(x)ln(x)
doubledouble coscos((doubledouble xx));; cos(x)cos(x)
doubledouble asinasin((doubledouble xx));; Arcsin(x)Arcsin(x)
doubledouble loglog1010((doubledouble xx));; lg(x)lg(x)
doubledouble ceilceil((doubledouble xx));; [[xx]]
doubledouble atanatan((doubledouble xx));; arctg(x)arctg(x)
doubledouble sinhsinh((doubledouble xx));; sh(x)sh(x)
doubledoublefloorfloor((doubledouble xx));; trunctrunc((xx))
doubledoublefabsfabs((doubledouble xx));; ||xx||
**doubledouble coshcosh((doubledouble xx));; ch(x)ch(x)
doubledouble tanhtanh((doubledouble xx));; thth(x)(x)
doubledouble sqrtsqrt((doubledouble xx));; xx
longlong labslabs ((longlong xx));; ** ||xx||
doubledouble atanatan22((doubledouble y,doubley,double xx));; arctg(y/x)arctg(y/x)
doubledouble expexp((doubledouble xx));; eexx doubledoublepowpow((doubledouble x,doublex,double yy));; xx yy
doubledouble cabscabs((structstruct complexcomplex zz));; ||zz||
6969/80/80
ou eou e ,, ,, ou eou e
FuncFuncttii pentru controlul proceselorii pentru controlul proceselor ((processprocess..hh))::
7/22/2019 informatica pentru bac
68/78
voidvoid abortabort((voidvoid));; terminterminaa unun programprogram lala eroareeroarevoidvoid exitexit((intint cod_returcod_retur));; terminterminaa unun programprogram cucu unun codcod dede returretur
** -- ==.. __ ..
..
structstruct datedate {{
intint da_yearda_year;;
structstruct timetime {{
unsignedunsigned charchar ti_minti_min;;
intint da_dayda_day;;
intint da_monda_mon;;
}}
unsignedunsigned charchar ti_hourti_hour;;
unsignedunsigned charchar ti_hundti_hund;;
unsignedunsigned charchar ti_secti_sec;; }}
CiteCitesstete DataData curentcurentaa :: void voidgetdategetdate((structstruct datedate *Data*Data));;ModificModificaa DataData curentcurentaa :: void void setdatesetdate((constconst structstruct datedate *Data*Data));;
7070/80/80
iteiteaatete rara xact xactaa :: voivoi gett megett me structstruct timetime ra xact ra xactaa;;
ModificModificaa OraOra ExactExactaa :: void void settimesettime((constconst structstruct timetime **OraExactOraExactaa));;
Ecranul n mod graficEcranul n mod grafic ((graphicsgraphics..hh))::
7/22/2019 informatica pentru bac
69/78
void farvoid far initgraphinitgraph (( int farint far *graphdriver,*graphdriver, int farint far *graphmode,*graphmode, char farchar far *path)*path) ;;
voidvoid closegraphclosegraph ((voidvoid)) ;;
void farvoid far setbkcolorsetbkcolor ((intintculfculf ) ;) ;
void farvoid far setcolorsetcolor ((intintculsculs ) ;) ;
int farint far getbkcolorgetbkcolor ((voidvoid )) ;;
int farint far getcolorgetcolor ((voidvoid )) ;;
NumNumaarr dede pixelipixeli (( OrizOriz../Vert/Vert..)) getmaxxgetmaxx()();; getmaxygetmaxy()();;
CoordonateleCoordonatele LPRLPR (Ult(Ult.. PctPct RefRef..)) getxgetx()();; getygety()();;
MutMutaa LPRLPR (Abs(Abs../Rel/Rel..)) movetomoveto((xx,,yy));; moverelmoverel((dxdx,,dydy));;
TraseazTraseazaa segmentsegment dindin LPRLPR linetolineto((xx,,yy));; linerellinerel((dxdx,,dydy));;
11,, 11,, 22,, 22
DeseneazaDeseneaza dreptunghidreptunghi rectanglerectangle((xx11,,yy11,,xx22,,yy22));;
DeseneazaDeseneaza cerccerc circlecircle((x,y,rx,y,r));;
7171/80/80
ScrieScrie mesajmesaj [[ dindin LPRLPR]] outtextouttext[[xyxy]] ([([xx,,yy,],] mesajmesaj));;
PaginaPagina activaactiva // PaginaPagina vizualavizuala setactivepagesetactivepage((pagpag));; setvisualpagesetvisualpage((pagpag));;
7/22/2019 informatica pentru bac
70/78
. .
Prelucrarea fisierelor se poate efectua la doua nivele:
ivelul in erior - face a el direct la sistemul de o erareNivelul superior - utilizeaza proceduri speciale
7272/80/80
i l li l l inf ri rinf ri r
7/22/2019 informatica pentru bac
71/78
i l li l l inf ri rinf ri r
Deschiderea unui fisier (Open/Creat) :
int open ( const char * calecale, int accesacces) ;unde:
calecale - este specificatorul de fisier,
-O_RDONLY, O_WRONLY sau O_CREAT (scriere - creare),O_RDWR (citire/scriere), O_APPEND, O_BINARY, O_TEXT .
...int Lun;
7373/80/80
Lun = open (Fisier.Dat,O_RDONLY);...
Citirea dintr-un fisier (Read) :
7/22/2019 informatica pentru bac
72/78
int readread ( int Lun, void *buffer, unsigned lung ) ;
Scrierea ntr-un fisier (Write) :int writewrite ( int Lun, void *buffer, unsigned lung ) ;
Pozitionarea ntr-un fisier (LSeek) :
long lseeklseek ( int Lun, long depl., int orig.) ; // o=0,1,2
nchiderea fis. (Close) : int closeclose ( int Lun) ;
7474/80/80
Stergerea fis. (UnLink) : int unlinkunlink (const char * cale);
// Creare \\#include
7/22/2019 informatica pentru bac
73/78
.#include #include #include void main (void)
{int Lun;clrscr();Lun=open("Fis.Txt",O_CREAT|O_TEXT);if (Lun!=-1)
{cout
7/22/2019 informatica pentru bac
74/78
#include #include
.#include
#include
{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
7/22/2019 informatica pentru bac
75/78
i l li l l ri rri r
Deschiderea unui fisier (FOpen ) :
FILE *fopenfopen ( const char * cale, const char * mod ) ;unde:
modmod -poate fi r pentru citire, w - scriere, a - adaugare,
- , - ,wb - scriere binara, sau r+b - citire/scriere binara .
...FILE * Pf;
7777/80/80
Pf = fopen (Fisier.Dat,w);...
Prelucrarea pe caractere:
7/22/2019 informatica pentru bac
76/78
int putcputc ( int c, FILE * Pf ) ;int getcgetc (FILE * Pf ) ;
nc u e void main (void){ int c;
int fclosefclose ( FILE * Pf ) ;
putc(c,stdout);
}
Citirea / scrierea cu format:
, , _ .int fprintffprintf ( FILE * Pf , control, lista_expr.) ;
Intrari / iesiri de siruri de caractere :* * *
7878/80/80
, ,
int fputsfputs ( char *s, FILE * Pf ) ;
7/22/2019 informatica pentru bac
77/78
// ScriereScriere cucu StreamStream--uriuri \\
nc u enc u e s ream.s ream.
void main (void)
{
cmp1, cmp2, ;
"" ""while (while (cincin >> cmp>> cmp11 >> cmp>> cmp22 ))
f
7/22/2019 informatica pentru bac
78/78
#include
void main (void){
cmp1, cmp2, ;ifstreamifstream ff("("Fiier.TxtFiier.Txt");"); //// sausau ::
>>>> >>>> ..//// if (if (f >>f >> cmpcmp11>>cmp>>cmp22))
coutcout