Documente Academic
Documente Profesional
Documente Cultură
Notare:
50p – Laborator
50p – Examen
Principalele compomnente ale unui calculator
Avem doua componente distincte
Hardware Software
Limbaj
Compilator Cod masina
avansat
c=a+b
Istoric
C
1972 conceput Bell Labs (Dennis Ritchie)
1988 a fost standardizat, "ANSI C"
0 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 …
8 bits = 1 byte
Exemplu:
contor_i si Contor_i
0 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 …
C/C++:
•int (short / long / unsigned short / unsigned int / unsigned long)
•float/double
•char
•bool (true=1 / false=0 )
Tipuri implicite
In cazul limbajului fortran exista posibilitatea ca
variabilele sa nu trebuieasca sa fie declarate, astfel
daca varaibila incepe cu litera i,j,k,l sau m varaibila este
de tipul intreg, daca incepe cu orice alta litera variabila
este de tip real.
nume1 numel
Pentru a fi siguri ca nu utilizam tipurile implicite se
foloseste instructiunea:
implicit none
Constante literale
Date Date
Program
intrare iesire
Program
I. Declarare
II. Initializare
III. Calcul
IV. Afisare
Program
I. Declarare
II. Initializare
Date Date
Program
intrare iesire
III. Calcul
IV. Afisare
Date Date
Program
intrare iesire
Fortran 90:
C++:
Fortran 90
Programul principal este PROGRAM nume_program
delimitat de cuvantul rezervat implicit none
PROGRAM nume …
END
si instructiunea
C++
Programul principal este #include <iostream>
cuprins in functia main using namespace std;
delinitata de acolade {…} int main()
{
Specific C++ librariile in care ….
sunt definite functiile implicite return 0;
trebuiesc explicit declarate. }
Exemplu:
#include <iostream>
Exemplu
c=a+b
∈R
a,b∈ Program ∈R
c∈
Se citesc de la Se afiseaza pe
tastatura ecran
Instructiunea c=a+b
a
0 1 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 …
b c
…1 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 …
0 1 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 …
b c
…1 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 0 0 …
c=a+b
∈R
a,b∈ Program ∈R
c∈
Se citesc de la Se afiseaza pe
tastatura ecran
Introducerea datelor de la tastatura
Fortran:
read(*,*) a,b
C++:
cin>>a>>b;
Fortran:
write(*,*) c
C++:
cout<<c;
Fortran:
y=sin(x)+x*x
i=1
nume_oras="Constanta"
C++:
y=sin(x)+x*x;
i=1;
char nume_oras[] ="Constanta“;
Fortran
PROGRAM suma_a_doua_numere
implicit none
! I. Declarare
real a,b,c
! II. Initializare
write(*,*) "Introduceti numerele a si b"
read(*,*) a,b
! III. Calcul
c=a+b
! IV. Afisare
write(*,*) 'Suma numerelor a si b este: ',c
END PROGRAM
C++
#include <iostream>
using namespace std;
int main()
{
// I. Declarare
double a,b,c;
// II. Initializare
cout << "Introduceti numerele a si b: ";
cin >> a >> b;
// III. Calcul
c=a+b;
// IV. Afisare
cout << "Suma numerelor a si b este: " << c << endl;
return 0;
}
Instructiuni de control al executiei unui program
Instructiounea IF
C++:
if (expresie_logica) executa_instructiune;
Exemplu:
Fortran:
if (x>y) max=x
sau
if (x>y) &
max=x
C++:
if (x>y) max=x;
sau
if (x>y)
max=x;
Expresia logica
Operatori logici
Fortran C++
.AND. &&
.OR. ||
.NOT. !
Exemple
Fortran C++
Asignare
a=.true. a=1;
b=.false. b=0;
Expresii logice
.not.a ≡ .false !a ≡ 0
a .or. b ≡ .true. a||b ≡ 1
a .and. b ≡ .false. a&&b ≡ 0
.not.a .or. b ≡ false !a||b ≡ 0
a.and..not.b ≡ true a&&!b ≡ 1
Prioritatea operatorilor
Fortran C++
** */
*/ +-
+- < <= > >=
< <= > >= !
.not. &&
.and. ||
.or. ==
==
Prioritatea operatorilor
Exemple:
x ∈ [a , b]
x ∉ (a , b)
Fortran C++
Exemplu
Fortran C++
Fortran C++
Exemplu
Fortran
if (x>=0) then
write(*,*)"x este mai mare sau egal cu 0 “
else
write(*,*)"x este mai mic decat 0 “
endif
Instructiunea IF
Exemplu
C++
if (x>=0)
cout<<"x este mai mare sau egal cu 0 ";
else
cout<<"x este mai mic decat 0 ";
Instructiunea IF
Exemplu
Fortran
if (x>0) then
write(*,*)"x este mai mare decat 0 “
else
if(x==0) then
write(*,*)"x este egal cu 0 "
else
write(*,*)"x este mai mic decat 0 "
endif
endif
Instructiunea IF
Exemplu
C++
if (x>0)
cout<<"x este mai mare decat 0 ";
else
if(x==0)
cout<<"x este egal cu 0 ";
else
cout<<"x este mai mic decat 0;
Instructiunea IF
FORTRAN
switch (valoare)
{
case valoare_1:
set_instructiuni_1;
break;
case valoare_2:
set_instructiuni_2;
break;
..........
case valoare_N:
set_instructiuni_N;
break;
default:
set_instructiuni_implicit;
}
Instructiunea SELECT CASE
FORTRAN exemplu
switch (eveniment)
{
case WM_CREATE:
set_instructiuni_descidere_fereastra;
break;
case WM_CLOSE:
set_instructiuni_incidere_fereastra;
break;
case WM_LBUTTONDOWN:
set_instructiuni_buton_stanga_apasat;
case WM_RBUTTONDOWN:
set_instructiuni_buton_dreapta_apasat;
break;
}
Programe
Se
∈R
a,b,c∈ Program ordoneaza
crescator
Se citesc de la Se afiseaza pe
tastatura ecran
Etapele in realizarea programului
I. Declarare
real a,b,c
II. Initializare
se citesc a,b,c
III. Calcul
se ordoneaza numerele a,b,c
IV. Afisare
se afiseaza pe ecran numerele a,b si ce
in ordine crescatoare
Ordonarea a trei numere a,b,c
Se
∈R
a,b,c∈ Program ordoneaza
crescator
Se citesc de la Se afiseaza pe
tastatura ecran
Etapele in realizarea programului
I. Declarare
real a,b,c
II. Initializare
se citesc a,b,c
III. Calcul
se ordoneaza numerele a,b,c
IV. Afisare
se afiseaza pe ecran numerele a,b si ce
in ordine crescatoare
Instructiuni repetitive
Fortran
do contor: v_start , v_end , v_step
set_instructiuni
Enddo
C++
for (contor=v_start; contor<=v_end; contor++)
{
set_instructiuni;
}
Instructiunea repetitiva cu pasi determinati
∈N
n∈ nf ∈N
n>0
Program
Se citesc de la Se afiseaza pe
tastatura ecran
Etapele in realizarea programului
I. Declarare
integer n,nf
II. Initializare
se citeste n
III. Calcul
se calculeaza nf
IV. Afisare
se afiseaza pe ecran nf
Etapele in realizarea programului
III. Calcul
se calculeaza nf
n
n! = ∏ i
i =1
nf=1
do i=1,n
nf=nf*i
enddo
cazuri particulare:
n<0
n=0 nf=1
Instructiunea repetitiva cu pasi nedeterminati
Fortran
do contor: v_start , v_end , v_step
set_instructiuni
Enddo
C++
for (contor=v_start; contor<=v_end; contor++)
{
set_instructiuni;
}
Instructiunea repetitiva cu pasi nedeterminati
Fortran
do while (expresie .eq. .true.)
set_instructiuni
enddo
C++
while (expresie==true)
{
set_instructiuni;
}
Instructiunea repetitiva cu pasi nedeterminati
C++
do
{
set_instructiuni;
if(expresie==1) break;
}
Instructiunea repetitiva cu pasi determinati
C++
i=0;
do
{
cout<<"elementul "<<i<<endl;
cin>>v[i];
i++;
}
while(i<N);
Program
1 a
xi = xi −1 +
2 xi −1
a ∈R x2∈R
x1∈R Program
Se citesc de la Se afiseaza pe
tastatura ecran
Etapele in realizarea programului
I. Declarare
real a,x1,x2
II. Initializare
se citeste a,x1
III. Calcul
se calculeaza x2
IV. Afisare
se afiseaza pe ecran x2 si sqrt(a)
Etapele in realizarea programului
III. Calcul
se calculeaza x2
1 a
xi = xi −1 +
2 xi −1
do i=1,n
x2=0.5*(x1+a/x1)
x1=x2
enddo
Cat este n?
Etapele in realizarea programului
III. Calcul
se calculeaza x2
1 a
xi = xi −1 +
2 xi −1
do
x2=0.5*(x1+a/x1)
if(abs(x2-x1)<eps) EXIT
x1=x2
enddo
1 a
xi = xi −1 +
2 xi −1
a ∈R x2∈R
x1∈R Program
eps ∈R
Se citesc de la Se afiseaza pe
tastatura ecran
Vectori si matrici
Reprezentare
V(1) V(3)
Vectori si matrici
Reprezentare
Vi
Mi,j
Fortran
real,dimension(i1:i2)::V
Exemple:
real,dimension(-10:10)V1 !are 21 elemente
real,dimension(21)V2 !are 21 elemente
character(Len=10):: S !are 10 de caractere
declaratii suportate:
real V1(-10:10)
real V2(21)
character(10):: S
Vectori - declarare
C++
double V[n];
Exemple:
double V1[21]; //are 21 elemente
char S[10]; //are 9 caractere
ATENTIE!
-Indexarea vectorilor si matricilor in C++ se face de la 0
-Un cazul sirurilor de caractere ultimul caracter '\0'
Matrici - declarare
Fortran
real,dimension(il1:il2,ic1:ic2)::M
declaratii suportate:
real M1(0:10,0:10)
real M2(11,11)
character(Len=10) AS(10)
Matrici - declarare
C++
double M[nl][nc];
Exemple:
double M1[11][11]; //are 11x11 elemente
char AS[10][10]; //are 10x9 caractere
Accesarea unui element
Fortran C++
Vector: Vector:
V1(-5) V1[4]
S(5:5) S[5]
Matrice: Matrice:
M1(0,0) M1[0][0]
AS(1)(5:5) AS[5][5]
Elemente specifice fortranului
C=matmul(A,B)
Elemente specifice fortranului
A= B(1:5)
D= C(1:5,2:4)
A=reshape(B,(/3, 3/) )
A=reshape((/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /),(/3, 3/) )
Program
Cm , p = Am ,n Bn , p
n
C i , j = ∑ Ai ,k Bk , j
k =1
Inmultirea a doua matrici
Cm , p = Am ,n Bn , p
A ∈R m,n ∈ R m,p
C∈
∈ R n,p
B∈ Program
Se citesc de la Se afiseaza pe
tastatura ecran
Etapele in realizarea programului
I. Declarare
integer,parameter::Nmax=3
real,dimension(Nmax,Nmax)::A,B,C1,C2
integer m,n,p
II. Initializare
se citeste m,n,p,A,B
III. Calcul
se calculeaza C
IV. Afisare
se afiseaza pe ecran C
Program
v ∈R n v ∈R n
Program Sortat
crescator
Se citeste de la Se afiseaza pe
tastatura ecran
Etapele in realizarea programului
I. Declarare
integer,parameter::Nmax=100
real,dimension(Nmax)::V
integer n
II. Initializare
se citeste n,V
III. Calcul
se ordoneaza vectorul V
IV. Afisare
se afiseaza pe ecran vectorul ordonat V
Program
linie corect /
un sir de caratere
Program
incorect
Se citeste de la Se afiseaza pe
tastatura ecran
Etapele in realizarea programului
I. Declarare
character(200)::line
II. Initializare
se citeste variabila linie
III. Calcul
se verifica parantezele
IV. Afisare
se afiseaza pe ecran daca este expresia
este corecta sau nu
Unitati de program - functii si proceduri
C++
sau
FUNCTION Negative(x)
real Negative, x
Negative=-x
END FUNCTION
Exemple
Fortran
SUBROUTINE Negative(x,negative_x)
Real,INTENT(IN)::x
Real,INTENT(OUT)::negative_x
negative_x = -x
END SUBROUTINE
sau
SUBROUTINE Negative(x)
Real,INTENT(INOUT)::x
x=-x
END SUBROUTINE
Exemple
C++
double Negative(double x)
{
return -x;
}
sau
C++
Functii matematice
-sin(x)
-cos(x)
-tan(x)
-asin(x)
-acos(x)
-atan(x)
-atan2(x,y)
-exp(x)
-log(x)
-log10(x)
-sqrt(x)
Functii si proceduri implicite
Calculul sin(x)
x3 x5 x 7
sin( x) = x − + − + ...
3! 5! 7!
Calcul sin(x)
x3 x5 x 7
sin( x) = x − + − + ...
3! 5! 7!
x ∈R sinx ∈R
n ∈N Program
Se citeste de la Se afiseaza pe
tastatura ecran
Etapele in realizarea programului
I. Declarare
real x,sinx
Integer n
II. Initializare
se citeste x si n
III. Calcul
se calculeaza sinx
IV. Afisare
se afiseaza pe ecran sinx
Functii recursive
if (n>0) then
nf=n*Factorial(n-1)
else
nf=1
endif
end function
Alocarea dinamica
Fortran
real,dimension(:),allocatable::V
real,dimension(:,:),allocatable::M
allocate(V(10),STAT=err)
allocate(M(10,10),STAT=err)
deallocate(V)
deallocate(M)
double *V;
double **M;
delete [] V;
for(i=0;i<N;i++)
delete [] M[i];
delete [] M;
Alocare dinamica
Se aloca si
n,m ∈N
Program dealoca
V ∈ Rn
M ∈Rm,n
Se citeste de la
tastatura
Etapele in realizarea programului
I. Declarare
real x,sinx
Integer n
II. Initializare
se citeste x si n
III. Calcul
se calculeaza sinx
IV. Afisare
se afiseaza pe ecran sinx
Scrierea si citirea datelor folosind un fisier
inchiderea fisierului
Scrierea si citirea datelor folosind un fisier
Fortran
inchiderea fisierului
CLOSE(1)
Scrierea si citirea datelor folosind un fisier
Fortran
inchiderea fisierului
CLOSE(2)
Daca fisierul exista trebuie folosit ca parametru pentru status
‘replace’ sau ‘unknown’
Scrierea si citirea datelor folosind un fisier
cpp
double *V;
double **M;
delete [] V;
for(i=0;i<N;i++)
delete [] M[i];
delete [] M;
Scrierea si citirea datelor folosind un fisier
C++
inchiderea fisierului
f1.close();
Scrierea si citirea datelor folosind un fisier
C++
inchiderea fisierului
f2.close();
Program citire / scriere din fisier
V ∈ Rn V ∈ Rn
M ∈Rm,n Program M ∈Rm,n
I. Declarare
real,dimension(10)::V
real,dimension(10,10)::M
integer nl,nc
Integer n
II. Initializare
se citeste din fisier nl, nc, V si M
III. Calcul
IV. Afisare
se scrie in fisier V si M
Subiecte