informatica pentru bac

Embed Size (px)

Citation preview

  • 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