Documente Academic
Documente Profesional
Documente Cultură
Algoritmi i tehnici de
programare
Cursul 1
+
Cuprins
Introducere
Evaluare
Prezentare curs
Bibliografie
Pointeri la funcii
+
Evaluare
Examen 50 de puncte
+
Prezentare curs
Cutare secvenial
interclasare.
Fiiere de date.
Algoritmi de prelucrare a fiierelor binare
organizate secvenial
binar.
Interclasare.
Sortare
prin
+
Prezentare curs
+
Bibliografie
1.
2.
3.
4.
5.
+
Elemente ale limbajului C
Tipuri de date
unsigned
char
[signed] char
unsigned [int]
[signed] [int]
unsigned long
[signed] long [int]
float
double
long double
+
Elemente ale limbajului C
Dup
modul de
alocare a memoriei
Tipuri
ntregi
existente
Statice
Reale
Dinamice
Caracter
Masiv
Articol
Fiier
Dup
numrul de
valori memorate
Simple
Pointer
Structurate
Referin
+
Elemente ale limbajului C
Instruciuni :
if
switch
while
do-while
for
+
Elemente ale limbajului C
Operator
+
-++
+
*
/
/
%
Semnificaie operaie
Schimbare semn
Pstrare semn (nici un efect, nu este folosit)
Decrementare (post sau pre)
Incrementare (post sau pre)
Adunare
Scdere
nmulire
mprire
mprire ntreag (ctul)
mprire ntreag (restul)
+
Elemente ale limbajului C
Operator
!
&&
||
>
>=
<
<=
==
!=
Semnificaie operaie
Negare
i logic
Sau logic
Mai mare
Mai mare sau egal
Mai mic
Mai mic sau egal
Egal
Diferit
+
Pointeri
Rol important n:
lucrul cu masive.
+
Pointeri
Operatori specifici pointerilor
Nume
Simbol
Rol
Utilizare
Operator de
refereniere
Operator de
refereniere
&
&a
Operator de
derefereniere
Acceseaz zona de
memorie indicat de un
pointer
*p
int**
+
Pointeri
int* p, x;
x = 4;
p = &x;
*p = x;
+
Pointeri
Exemplu:
p
+
Subprograme
+
Subprograme
#include "stdio.h"
argument formal
int sum (int a, int b)
{
}
int s;
s=a+b;
return s;
void main()
{
int a, b, s1;
printf("a=");
scanf_s("%d",&a);
argument actual
printf("b=");
scanf_s("%d",&b);
s1=sum(a,b);
printf("suma_1 este %d\n",s1);
printf("suma_2 este %d\n",sum(2,3));
printf("suma_3 este %d",sum(2*2,3*2+2));
}
+
Subprograme
int sum(int a, int b)
{
variablila locala
int s;
s=a+b;
return s;
+
Subprograme
#include <stdio.h>
int x;
void f1 ()
{
x++;
}
void f2 ()
{
x=x+5;
}
variablila globala
void main()
{
printf("x=%d
x=7;
printf("x=%d
f1();
printf("x=%d
f2();
printf("x=%d
}
\n",x);
\n",x);
\n",x);
\n",x);
+
Transmiterea parametrilor
Prin parametri
prin valoare
prin adres
+
Transmiterea parametrilor
#include <stdio.h>
int sum(int a, int b)
{
int s;
s=a+b;
return s;
}
void main ()
{
int x=10,y=15, s;
s=sum(x,y);
printf("x=%d y=%d \n",x,y);
printf("sum=%d",s);
#include <stdio.h>
void sum(int a, int b, int *s)
{
*s=a+b;
}
void main ()
{
int x=10,y=15, s;
sum(x,y,&s);
printf("x=%d y=%d \n",x,y);
printf("sum=%d",s);
}
Transmiterea parametrilor
prin valoare
#include <stdio.h>
void schimb(int a, int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void main ()
{
int x=10,y=15;
schimb(x,y);
printf("x=%d y=%d \n",x,y);
Transmiterea parametrilor
prin adresa
#include <stdio.h>
void schimb(int *a, int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void main ()
{
int x=10,y=15;
schimb(&x,&y);
printf("x=%d y=%d \n",x,y);
+
Alocarea dinamic a memoriei
Funcii importante:
malloc()
tip *p;
p = (tip*) malloc(dimensiune);
free()
free(p);
+
Alocarea dinamic a memoriei
*(p+5) p[5]
+
Alocarea dinamic a memoriei
Declarare
Declarare
tip* *a;
Alocare
tip* p;
Alocare
p = (tip*) malloc( n * sizeof(tip));
Utilizare
*(p+i)
Eliberare (dezalocare)
free(p);
a = (tip**) malloc(m*sizeof(tip*));
for(i=0;i<m;i++)
*(a+i)=(tip*) malloc(n*sizeof(tip));
Utilizare
*(*(a+i)+j)
Eliberare (dezalocare)
for(i=0;i<m;i++)
free(a[i]);
free(a);
+
Alocarea dinamic a memoriei
// funcia care determin vnzrile medii
pentru m firme de panificaie (n
produse)
void med1(float **a, float **v, int m,int n)
{
int i, j,k;
*v=(float *) malloc (m*sizeof(float *));
for(i=0;i<m;i++)
{
(*v)[i]=0;
for(j=0;j<n;j++)
(*v)[i]=(*v)[i]+*(*(a+i)+j);
(*v)[i]=(*v)[i]/m;
}
}
Apel:
float *v;
med1(vanz,&v,m,n);
+
Alocarea dinamic a memoriei
float *med2(float **a, int m,int n)
{
int i, j,k;
float *v;
v=(float *) malloc (m*sizeof(float *));
for(i=0;i<m;i++)
{
v[i]=0;
for(j=0;j<n;j++)
v[i]=v[i]+*(*(a+i)+j);
v[i]=v[i]/m;
}
return v;
}
Apel:
float *v;
v=med2(vanz,m,n);
for(i=0;i<m;i++)
printf("v[%d]=%f\n",i,v[i]);
free(v);
for(i=0;i<m;i++)
free(vanz[i]);
free(vanz);
+
Alocarea dinamic a memoriei
typedef float *REZ;
void med3(float **a, REZ *v, int m,int n)
{
int i, j,k;
*v=(float *) malloc (m*sizeof(float *));
for(i=0;i<m;i++)
{
(*v)[i]=0;
for(j=0;j<n;j++)
(*v)[i]=(*v)[i]+*(*(a+i)+j);
(*v)[i]=(*v)[i]/m;
}
}
Apel:
REZ v;
med3(vanz,&v,m,n);
+
Alocarea dinamic a memoriei
//funcie care determin vnzrile medii mai mari de 500 RON
//pentru m firme de panificaie (n produse)
float * med(float **a, int m, int n, int *k)
{ int i, j;
float *v; float s;
*k=0;
for(i=0;i<m; i++)
{
s=0;
for(j=0;j<n; j++)
s=s+*(*(a+i)+j);
s=s/n;
if (s>500) (*k)++;
}
v=(float *) malloc((*k)*sizeof(float *));
int l=0;
for(i=0;i<m;i++)
{
s=0;
for(j=0;j<n;j++)
s=s+*(*(a+i)+j);
if (s/n>500) {v[l]=s/m;l++;}
}
return v;
}
+
Alocarea dinamic a memoriei
//produsul a doua masive bidimensionale
void main()
{
.
int **d;
.
d=produs1(a,b,m,p,n);
.
}
+
Alocarea dinamic a memoriei
void produs2(int **a, int**b, int m, int p, int n,int
***c)
{int i, j,k;
*c=(int **) malloc (m*sizeof(int*));
for(i=0;i<m;i++)
(*c)[i]=(int *) malloc(p*sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<p;j++)
{(*c)[i][j]=0;
for(k=0;k<n;k++)
(*c)[i][j]=(*c)[i][j]+a[i][k]*b[k][j];
}
}
void main()
{
.
int **d;
.
produs2(a,b,m,p,n,&d);
.
}