Sunteți pe pagina 1din 15

DATA (DATE)= ?

INFORMATIE

Data= caracter amorf (nu imi spune neaparat ceva). Exp: a, b, c

x, am nota 10, 23, 55 –opt, -> sir de date

Inf: acea data care are un sens (inteles)

Program informatic -> traducerea intr-un limbaj de programare (sau echivalent) a unui algoritm

Algoritm-> sir finit si logic de pasi,cu scopul rezolvarii unei clase de probleme pornind de la o suma de
date de intrare pt a obtine o suma de date de iesire (cu ajut unui sist de calcul)

2x+3=0 ? algoritm

ax+b=0 clasa de pb: ec de grad I, a=2, b=3

Proprietati:

1. generalitatea: se rez o clasa de pbe


2. finitudinea: alg stopeaza dupa un nr finit de pasi
3. corectitudinea: pb tb rez sub toate aspectele sale (nu las vreun caz part nerez)
4. coerenta:
5. robustetea:
6. claritatea:

Obs. In cadrul alg deterministi: intoarce acelasi rezultat pt aceleasi date de intrare
2x+3=0, x=-3/2

Modalitati de descriere a alg:

1. scheme logice
2. l pseudocod
3. l de programare

Rez ec de grad I

F canonica: ax+b=0, a, b E R, a<>0 (dpdv matem)


1. a<>0?
DA, -> ax=-b -> R: x=-b/a
NU, (a=0) -> 0x+b=0-> b=0
2. b<>0? DA, R: ec nu are sol
NU, (b=0)-> 0=0, R: identitate-> ec are o inf de sol
Schema logica pt rez ec de grad I

L pseudocod: modalitate de a descrie un alg, bazat pe formalizarea unor actiuni prin cuvinte cheie:
daca, atunci, start, stop, citeste, scrie etc.
Nu este limbaj natural dar nici de programare-> formalism
1. start
2. citeste a, b // var de intrare
3. Daca a=0 atunci
4. Daca b=0 atunci
a. 5. scrie “x oarecare”
b. altfel 6. scrie “x nu exista”
SF DACA

altfel 7. x=-b/a // var de iesire

7. 8. Afiseaza x
8. 9. STOP

Limbaj de programare (C)

#include <iostream>

using namespace std;

int main()

int a, b;

double x;

cout<<"dati a:";

cin>>a;
cout<<"dati b:";

cin>>b;

if (a==0)

if (b==0)

cout<<" x oarecare";

else

cout<<" x nu exista";

else /// stiu ca a <> 0

{x=(double)-b/a;

cout<<"sol ec este: "<<x;

return 0;

Elemente de limbaj C

limbaj de progr (specificatii) # mediu de programare (soft)

Vocabular: contine lit mici, lit mari, cifre, operatori :, , +, %, ||, &&, car speciale #, cuv rezervate: if,
while etc (EN, 26 caractere)

Tastatura: max 256 simboluri (standard) ASCII -> coduri ASCII (2^8=256)

asciitable.com

Identificatori: nume valide pt entitati din program (cum denumesc constante, variabile, functii etc)

Reg de constr pt identificatori valizi: pot contine lit mari, lit mici, cifre, “_”. Nu pot incepe cu o cifra.

1. o litera NU
2. o_litera DA
3. o_literă NU
4. 0litera NU
5. _litera0 DA
6. _alta_litera DA
7. literaturĂ NU
8. literaMICA DA
9. litera1silitera2 DA
10. litera1+2 NU
Separatori si comentarii
Separa 2 entitati: …. spatiul (int x), ; (separa 2 instr) , (un sir de var/cte de acelasi tip=enumerare)
() (separa o fct de arg sale: calcul(a, 5-b) ), [] (vectori, matrici: v[3]= al 4-lea elem al vect v[])
Comentarii: pt a creste lizibilitate codului (explicarea lui)
- pe o linie: // <comm>
- pe mai multe linii:
/* <>
<>
<> */

Expresii: constr sintactice valida ce contin operatori, operanzi, paranteze, fctii etc

e: x*7*(a-PI)&&((b^3) – arcsin(x+2)) -> double

Eval unei expr (stg la dreapta, respectand reg de calcul din matem + folosirea parantezelor)

Ordinea eval operatiilor:


a. op de rang 3 (grad 3): ^, log, etc
b. op de rang 2: * /
c. op de rang 1: + -

int x= e; // se trunchiaza la int e=3,56, x->3

a=b=c=90; // c->90, b=c (90), a=b (90)

a=56;

Constante. Variabile

Tipuri de date elementare.

DEfinitie: tip de date?

O mt marginita de valori [mica, mare] impreuna cu op permise pe acea mt de val

Matematica:

N (op permise: +, *, ?- D>=S -> D-S, daca nu, nu) 7>5-> 7-5=2, NU 5-7=-2 (nu e din N)

Z (nr intregi: op permise: +, *, - ? /) 7/5 NU e din Z

Q (nr rationale: op permise: +, *, -, / ? /0). extrag rad patrate rad(2)~=1.4143… NU e din Q

rad(2)=14143…/10000…0

I (nr irat: care nu se pot scrie ca fractii)

R= QUI (Q inters I = mt vida)


Declarare

signed int x, y, z=90, y1=7; // fara semn

short, long

long long double

Tabela cu tipurile de date

https://www.pbinfo.ro/articole/58/tipuri-de-date-c-cpp

(Out topic: Emanuela Cerchez, Doina Logofatu, Tudor Sorin)

1. Tipuri simple
o Tipuri întregi
o Tipuri reale
o Tipul pointer
o Tipul bool (logic C++)
2. Tipuri derivate
o Tipul tablou
o Tipul structură
o Tipul enumerare

Reluare. Cte si variabile

Metalimbaj: BNF (Bachus Naur Formalism)

Ct= nu isi schimba valoarea pe parcursul executiei programului

const <tip> <id_ct> = <val>;

const float pi=3.14; float const pi=3.14;

- pot fi definite de utilizator (v mai sus)


- pot fi predefinite: INT_MAX (c mai mare nr intreg). In bib=header <limits.h>

Variabile: isi pot schimba val pe parcursul exec unui program

<tip> <lista_var>;

exp:

double x1, x2, delta;

char c=’a’;

bool adev, neadev; // orice val diferita de zero in C/C++ -> adev
if (c) // c=’a’ -> true

O var poate lua:

1. val unei cte y=pi; // predefinita sau nu, y=FLOAT_MIN


2. o val cta x=2;
3. val altei var x=y;
4. val unei fctii x= sqrt(y);
5. concluzie : val unei expresii

Obs. Tabelul cu operatori si prioritatile lor se poate gasi la

https://en.cppreference.com/w/c/language/operator_precedence

++ --

int x=9;

int y=x++; // y=x+1 , y=x, x=x+1 y->10, postincrementare

int y=++x; // x=x+1, y=x, y->10, preincrementare

Analog pt - -

x=x+5; x+=5;

e=(b--)+(++a);//?

Exemplu:

metoda paharelor: interschimb (a 2 valori intre ele)

int a, b, aux;

a=7; b=5; aux=a; // metoda 1

a=b;

b=aux;

// metoda 2: bazata pe suma sau diferenta celor 2 nre


STRUCTURI DE CONTROL IN PROGRAMARE

Clasificare:

1. str de control fundamentale (de baza)


2. str de control derivate (auxiliare)

1. Trei:
a. str. secventiala : am doar instr de atribuire, citiri, afisari, Nu am de evaluat conditii, nu
am repetitii.

a1 , b. str. decizionala (alternativa binara)


a2 ,

an

cond
B A

Instr if (sintaxa, sematica, pragmatica)

sintaxa: if (<cond>)

<A> // {instr 1; instr 2 …}

[else] <B> // { … }

semantica: se eval <cond>, daca este adev se exec <A>, eventual, in caz contrar se exec <B>

pragmatica: exp: det max intre 2 nr.e (x si y). Maxim -> depun rez

if (a<b)

Maxim=b;

else

Maxim=a;

Obs. Alternativ (folosirea op ternar: (<expr1-tip cond>)?<expr2-cond true>:<expr3-cond false>)

Maxim= (a<b)?b:a ;
3. rep. test initial

Condiţia de
repetiţie

Secvenţa
de acţiuni
de repetat

Instr while

sintaxa: while (<cond>)

<A> // { }

sematica: se eval <cond>. Cat timp ramane adev <cond> se exec <A>

pragmatica: while (<foame>)

mananc un biscuit;

instr succesiva;

S= 1 + 2 + 3 + … +n = progr aritm de ratie = Sn = (a1+an)n/2= (1+n)n/2=(101)100/2=101*50=5050

S= 0; // 1 , consider i elem care se adauga la fiecare pas in suma

i=1; // S=S+i=0+1;

while (i<=n)

S=S+i; //

i++; // S+=i++;

cout<<”suma primelor”<< n<<” nr nat”<<S;


Pas 1: (1<=100), da, S=0+1, i=2

Pas 2: (2<=100), da, S=1+2, i=3

Pas 3: (3<=100), da, S=3+3, i=4 s a m

Pas 4: (4<=100), da, S=6+4, i=5 …. Pas 99: i=100

Pas 100: (100<=100), da, S= ? +100, i=101

Pas 101: (101<=100), nu, parasesc while

S= n+ …. + 6+4+2; // n –par

S=0; i=n;

while (i>=2)

S=S+i;

i=i-2;

S=suma(i=2,342) [5*i/(i+2)]

S=S+5*i/(i+2), i=2, 342;

S=0; i=2;

while (i<=342)

S=S+5*i/(i+2);

i=i+1;

S=1/(2*3)+1/(3*4)+1/(4*5)+ …+1/(n*(n+1))

S=0; i=2;

while (i<=n) {

S=S+1/(i*(i+1));

i=i+1;

P=n!=1*2*3*4*5*….*n

P=1; i=1;
while (i<=n) { P=P*I; i=i+1;}

S= 1/1-1/2+1/3-1/4+…..+(-1)^(n+1)*(1/n)

S=0; i=1;

while (i<=n)

{ if (i%2==0)

S=S-1/i;

else // i=impar

S=S+1/i;

i++;

Obs: str de control= fundam (Bohm &Jacopinni au dem ca orice algoritm poate fi descris cu ajutorul
acestor 3 structuri)

2. str de control derivate (auxiliare)

Trei:

a. decizia generalizata (decizie asupra mai multor cazuri)


b. str. rep cu test final
c. str. rep cu contor – str rep cu nr cunoscut de pasi
Obs. while + do…while = str rep cu nr necunoscut de pasi

a.

selector
secv 1 secv n+1

secv 2 secv n

Instr switch.

sintaxa: switch (<expr>)

{ case <v1>: {<I1>; break;}

case <v2>: {<I2>; break;}

….

case <vn>: {<In>; break;}


default: <B>;

Semantica: se eval <expr> si functie de rezultat se exec cazul coresp. In caz contrar (optional) se exec
<B>

exemplu

int nrzi; cin>>nrzi;

switch (nrzi)

{ case 1: {cout<<”luni”; break;}

case 2: {cout<<”marti”; break;}

….

case 7: {cout<<”duminica”; break;}

default: cout<<”nr zi incorect!”;

instr_urm;

Obs. <expr> tb sa fie evaluata la o val ce apartine unei mt discrete

- pot exista maxim 256 ramuri


- nu pot exista 2 cazuri comune (oricare 2 cazuri sunt disjuncte)

b. str. rep cu test final

instr do…while

Secvenţa
de acţiuni
de repeta t

Condiţia de
ieşire
repetiţie

Sintaxa: do <A> while (<cond>)


Sematica: se exec <A> o data, apoi se eval <cond>. Se reia exec <A> cat timp <cond> ramane true.

Obs. Str repetitive tb sa contina minim o instr care sa permita parasirea buclei

S=1+2+3+…+n

S=0, i=1;

do

S=S+i;

i++;

} while (i<=n) ; // Pascal REPEAT <A> UNTIL <cond>

c. rep cu contor

in crestere/ descrestere

contor := vi

v < = vf

Secventa
de actiuni
de repetat

v := v + pas

Instr for

Sintaxa: for (<expr1>;<expr2>;<expr3>)

<A>;

unde

<expr1>: initializ contor

<expr2>: cond de continuare

<expr3>: modul de evolutie al contorului (cresc sau descresc)


semantica: s eval <expr1>, apoi <expr2> si se exec <A> apoi <expr3>. Cat timp <expr2>=true se reia

exp

S=1^2+2^3+ …+ n^(n+1)

S=0;

i=1;

while (i<=n)

{ S=S+i*(i+1); i++;} cout<<S;

for (i=1, S=0;i<=n; i++)

S=S+i;

for (i=n, S=0; i>=1; i--) // for cu contor in descrestere

S=S+i;

Afisati acest triunghi de numere

12

123

1 234

….

1 2 3 4 …. n

i- contor pt linii

j- contor (scop de afisare) pe coloane

for (i=1; i<=n; i++) // i=1, trecere la linii noi

{for (j=1; j<=I; j++)

cout<<j<< “ “; // afisarea pe o linie, cate 1 elem pe coloana

cout<<endl; }

Pas 1: 1<=10

1<=1 -> 1” “

i=2

Pas 2: 2<=10
1““2

i=3

Pas 3: 3<=10,

1 2 3

21

321

4321

….

n 3 2 1

for (i=1; i<=n; i++)

for(j =i; j>=1; j-- )

cout<<j<<” “;

cout<<endl;}

123 n // i=n

… // I =n-1

1 2 3 // i=3

1 2 // i=2

1 // i=1

for (i=n; i>=1; i--)

{for (j=1; j<=i; j++)

cout<<j<< “ “;

cout<<endl;}

Obs: pt exam: fisierul Discutii completat eventual cu Fundam programarii.


Test de autoevaluare

(se putea si mai bine, e facut in viteza, dar descrie dificultatea medie a exam)

1. finititudinea priveste: a. alg, b. programele c. codul


2. identificatorul ala_bala1 este a. corect b. incorect
3. str repetitive sunt
a. while, do … while, for
b. while, do..while, for cu contor in descrestere
c. niciuna de mai sus

4. + este

a. operator
b. operand

5. constantele, la declarare au

a. tip si valoare
b. doar tip
c. doar valoare

6. variabilele pot suprascrie, si de regula

a. o bucata de cod
b. o constanta
c. o variabila (x=y)
d. nu pot suprascrie ceva
7. / este
a. separator
b. operator
8. str de control fundam sunt
a. if, switch, while
b. if , while, secv //
c. if, do..while, for
d. niciuna de mai sus
9. S=2*6+3*7+….+ are termenul general
a. i*(2*i+2), daca I pleaca de la 2, din 1 in 1
b. i(i+4), daca I pleaca de la 2
c. i*j, daca I pleaca de la 2 si j de la 6 si sunt din 1 in 1

S-ar putea să vă placă și