lab_9-10_pclp (1)
TRANSCRIPT
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 1/64
http://adl.anmb.ro
Lect.dr.ing. Florin Postolache
Programarea calculatoarelor si
limbaje de programare
Laborator 9-10
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 2/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r
o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 2
Masive de date unidimensionale
Un masiv unidimensional se numeşte vector. Un vector sedeclară conform sintaxei:
tip identificator[n];– tip este tipul (predefinit sau utilizator) comun al tuturor elementelor vectorului;– identificator este numele vectorului;– n este un număr natural nenul care precizează numărul de componente ale vectorului.
• Numărul de elemente/componente se declară între [].• Fiecare componentă a unui tablou poate fi tratată exact ca o variabilă simplă
(identificator[i]).• Referirea la componenta i a vectorului se face cu identificatorul[i]. Această
componentă are valoarea memorată la adresa adr+i*sizeof(tip).
Declaraţia
int vector[1000];
creează un tablou cu 1000 de elemente/componente, toate de tip int. Primul element are indicele 0, al doilea are indicele 1, iar ultimul are indicele 999. se rezervă o zonă contiguă de memorie de dimensiune sizeof(int)*1000=4*1000=4000
octeţi.
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 3/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r
o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 3
Masive de date unidimensionale
Tabourile cu valori tip char :Declaraţia
char sir[7];
Tabloul sir este declarat ca un şir de caractere care poate săstocheze 6 caractere + terminatorul de şir (caracterul null ) '\0'. Programator stabileste dimensiunea tabloului în care se vor păstra
aceste caractere.
Scrierea/initializarea tablourilor de caractere:
• prin constante individuale printr-o listă de iniţializare.Ex:
char sir[] = {’p’,’r’,’ i’,’m’,’u’,’l’,’ \0’};Putem accesa componentele individuale ale unui tablou de caractere prinfolosirea indicilor: sir[0] este caracterul ’p’, sir[1] este caracterul ’r’, etc.
• individual: vor fi citite 6 caractere de la tastatură după care seadaugă automat caracterul null ('\0').
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 4/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 4
Masive de date bidimensionale
Un masiv bidimensional se numeşte matrice si se declară conformsintaxei:
tip identificator [m][n];– tip este tipul (predefinit sau utilizator) comun al tuturor elementelor matricii;– identificator este numele matricii;– m, n este un număr natural nenul care precizează numărul de linii si coloane ale matricii
– Liniile se numerotează cu 0,1, ...,(m-1). Coloanele se numerotează cu 0,1, ...,(n-1).– Fiecare element din matrice are acelaşi tip, dat de tipul matricei. Nu se pot defini matrici cuelemente de tipuri diferite.
– Referirea la elementul de pe linia i şi coloana j din matrice se face cu identificator[i][j].
Declaraţia
int matrice[10][10]; creează o matrice patratica cu 10 linii si coloane (100 elemente), toate de tip int. se rezervă o zonă contiguă de memorie de dimensiune m*n*sizeof(int)=100*4=400 octeţi.
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 5/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 5
Masive de date n-dimensionale
Un masiv n-dimensional este limitat doar de memoria fizică acalculatorului pe care rulează programul si se declară conformsintaxei:
tip identificator [dim1][dim2]…[dimn];– tip este tipul (predefinit sau utilizator) comun al tuturor elementelor tabloului;– identificator este numele tabloului;
– dim1 , dim2 , dimn sunt expresii constante a căror valori reprezintă numărul decomponente pentru fiecare dimensiune.
– Numărul total de elemente ale unui masiv cu n dimensiuni este egal cudim1*dim2*...*dimn.
– Pentru memorarea unui masiv cu tipul tip cu n dimensiuni sunt necesarisizeof(tip)*dim1*dim2*...*dimn octeţi.
– Accesarea unui element al masivului se face cu construcţia nume[i1][i2]…[in], unde i1, i2, …,
in sunt coordonatele elementului pe fiecare dintre dimensiuni (0 ≤ i j < dim j, 1≤j≤n).
Declaraţia
int masiv[3][3][3];
creează masivul tridimensional cu 3x3x3 elemente de tip real, toate de tip int. se rezervă o zonă contiguă de memorie de dimensiune sizeof(int)*27=4*27=108 octeţi.
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 6/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 6
Initializare masive de date
Vectorii• tip vector[n]={v1,v2,...,vp}; p<=n;• tip vector[]={v1,v2,...,vp}; p<n;Matrici• tip matrice[m][n]={M 0,M1,...,Mp}•
tip matrice[][n]={M 0,M1,...,Mp}• Mh={vh1,vh2,...,vht} mulţimea valorilor primelor t elemente
de pe linia h. Dacă t>n-1 se semnalează eroare. Dacă t<n-1ultimele n-t elemente de pe linia h se iniţializează cu valorinule.
Masive• tip masiv [dim1][dim2]…[dimn]={{...},{...},...,{...}};• tip masiv [][dim2]…[dimn]={{v1,…,vp},{vp+1...},...,{...vn}};
Dacă numărul de valori folosite la iniţializare depăşeşte numărul de elemente din masiv atunci compilatorulgenerează un mesaj de eroare. Dacă numărul de valori folosite la iniţializare este mai mic decât numărul deelemente din masiv, atunci restul valorilor sunt iniţializate cu 0.
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 7/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 7
Elementele unui vector• Citeste/initializeaza elementele unui vector
• Varianta 1
for(i=0;i<n;i++){printf("a[%d]=",i);
scanf("%d",&a[i]);}
• Varianta 2
• i=0;• while (i<n)• {• printf("a[%d]=",i);• scanf("%d",&a[i]);• i++;•
}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 8/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 8
Elementele unui vector• Scrie elementele unui vector
• Varianta 1
for(i=0;i<n;i++){printf("Elementul a[%d]=%d\n",i,a[i]);
}
• Varianta 2
• i=0;• while (i<n)• {printf (“Elementul a[%d]=%d\n",i,a[i]);• i++;• }
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 9/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 9
Exercitii• Citeste si scrie elementele unui vector
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 10/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 10
Exercitii• Citeste si scrie elementele unui vector
#include <stdio.h>#include<conio.h>int i,n,a[25];main(){printf("Stabiliti numarul de elemente ale vectorului:");scanf("%d",&n); // citire/initializare elemente vector
for(i=0;i<n;i++){printf("a[%d]=",i);scanf("%d",&a[i]);} // afisare elemente vectorprintf("Elementele vectorului sunt:\n");for(i=0;i<n;i++)
printf("a[%d]=%d\n",i,a[i]);
//system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 11/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 11
Exercitii• Citeste si scrie elementele unui vector de tip char
#include <stdio.h>#include <conio.h>int main(){
char s[50]; // Declararea sirului de caractere sputs(" Inserati sirul:");gets(s);
printf(" Sirul inserat este: %s\n",s);getch(); //system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 12/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 12
Exercitii• Numarul de cuvinte dintr-un vector de tip char
#include "stdio.h"#include "conio.h"int main(){char sir[100];int nc,i;puts(" Sirul :");gets(sir);i=0;if(sir[i]==' ' || sir[i]==',' || sir[i]==';')nc=-1;else nc=0;while(sir[i]!='\0'){if(sir[i]==' ' || sir[i]==',' || sir[i]==';'){nc++;
i++;while(sir[i]==' ' || sir[i]==',' || sir[i]==';')i++;}i++;}nc++;printf("Numar cuvinte in sir=%d \n",nc);getch();
}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 13/64
© A
c a d e m
i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 13
Exercitii• Suma elementelor unui vector
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 14/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 14
Exercitii• Suma elementelor unui vector
#include <stdio.h>#include<conio.h>int s=0,i,n,a[25];main(){printf("Stabiliti numarul de elemente ale vectorului, n<=25:");scanf("%d",&n); // initializare elemente vector
for(i=0;i<n;i++){printf("a[%d]=",i);scanf("%d",&a[i]);} /* afisare elemente vectorprintf("Elementele vectorului sunt:\n");for(i=0;i<n;i++)
printf("a[%d]=%d\n",i,a[i]);*/
//suma elemente vectorfor(i=0;i<n;i++)s=s+a[i];printf("Suma elementelor vectorului=%d\n",s); //system("pause");
return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 15/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 15
Exercitii• Suma elementelor cu valoare para, produsul elementelor cu
valoare impara ale unui vector
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 16/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 16
Exercitii• Suma elementelor cu valoare para, produsul elementelor cu
valoare impara ale unui vector• #include <stdio.h>• #include <conio.h>• int main()• {• int v[100]; // Declararea vectorului v• int s,p,i,n; // s-suma, p-produsul, i-index in vector, n-numar de componente• printf(" Introduceti numarul de componente ale vectorului ");• scanf("%d",&n);• printf(" Tastati componentele vectorului \n");• for(s=0,p=1,i=0;i<n;i++)• {• printf(" v[%d] = ",i);• scanf("%d",&v[i]);• if(v[i]%2) // Elementul v[i] impar•
p*=v[i];• else // Elementul v[i] par• s+=v[i];• }• printf(" Suma componentelor pare este %d \n",s);• printf(" Produsul componentelor impare este %d \n",p);• getch();• return 0;• }
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 17/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 17
Exercitii• Sortarea elementelor unui vector in ordine crescatoare
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 18/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 18
Exercitii• Sortarea elementelor unui vector in ordine crescatoare
#include <stdio.h>#include <conio.h>int main(){
int i,j,n,pmin;float v[100], aux;printf("Introduceti numarul de termeni:");scanf("%d",&n);printf("Introduceti componentele:\n");for(i=0; i<n; i++){
printf("v[%d]=",i);scanf("%f",&v[i]);
}for(i=0;i<n;i++)
for(j=i+1;j<n;j++)if(v[i]>v[j]) //sortare in ordine crescatoare{
aux=v[i];
v[i]=v[j];v[j]=aux;}
printf("Vectorul sortat crescator este:\n");for(i=0;i<n;i++)
printf("a[%d] = %.2f\n",i,v[i]);getch();
//system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 19/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b .
r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 19
Exercitii• Zilele saptamanii
#include <stdio.h>#include <conio.h>int main(){int n;char *zile[] = {"Eroare", "Luni", "Marti", "Miercuri", "Joi", "Vineri","Sambata", "Duminica"};printf("Introduceti un numar intre 1 si 7:");scanf("%i", &n);if(n>=1 && n<=7)printf(zile[n]);elseprintf(zile[0]);getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 20/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b .
r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 20
Exercitii• determinarea valorii minime şi poziţia sa într-un vector de
numere reale:#include <stdio.h>#include <conio.h>int main(){int i,n,pmin;
float v[100];printf("Introduceti numarul de termeni:");scanf("%d",&n);printf("Introduceti componentele:\n");for(i=0; i<n; i++) {printf("v[%d]=", i);scanf("%f",&v[i]);}for(pmin=0,i=1; i<n; i++)if(v[pmin]>v[i])pmin = i;printf("Minimul este v[%d]=%f.2\n", pmin, v[pmin]);getch();
}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 21/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b .
r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 21
Exercitii• Produsul scalar al elementelor vectorilor v1 si v2
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 22/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă
t r â n ” –
h t t p : / / a d l . a n m b .
r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 22
Exercitii• Produsul scalar al elementelor vectorilor v1 si v2
#include <stdio.h>#include <conio.h>int main(){
int i,j,n;float v1[100], v2[100],ps=0;printf("Introduceti numarul de termeni ai vectorilor:");scanf("%d",&n);printf("Introduceti componentele vectorului 1:\n");for(i=0; i<n; i++){
printf("v1[%d]=",i);scanf("%f",&v1[i]);
}printf("Introduceti componentele vectorului 2:\n");for(i=0; i<n; i++){
printf("v2[%d]=",i);scanf("%f",&v2[i]);
}for(i=0;i<n;i++)ps+=v1[i]*v2[i];printf("Produsul scalar al vectorului =%.2f\n",ps);
getch(); //system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 23/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b .
r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 23
Exercitii• Produsul scalar al elementelor vectorilor v1 si v2
#include <stdio.h>#include <conio.h>int main(){
int i,j,n;float v1[100], v2[100],ps=0;printf("Introduceti numarul de termeni ai vectorilor:");scanf("%d",&n);printf("Introduceti componentele vectorilor:\n");for(i=0; i<n; i++){
printf("v1[%d]=",i);scanf("%f",&v1[i]);printf("v2[%d]=",i);scanf("%f",&v2[i]);ps+=v1[i]*v2[i];
}printf("Produsul scalar al vectorului =%.2f\n",ps);
getch(); //system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 24/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b .
r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 24
Exercitii• Identificarea unui character intr-un vector de tip char• Afisarea numarului de caractere identice intalnite.
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 25/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b .
r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 25
Exercitii• Identificarea unui character intr-un vector de tip char
#include <stdio.h>#include <conio.h>int main(){
int n=0,i=0;char s[50],c; // Declararea sirului de caractere sputs(" Inserati sirul:");gets(s);puts(" Caracterul ");
scanf("%c",&c);while(s[i]!='\0'){
if(s[i]==c)n++;
i++;}if(n==0)
printf("Sirul %s nu contine caracterul %c \n",s,c);else
printf(" Numarul de caractere %c din sirul %s este egal cu %d \n",c,s,n);getch();
//system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 26/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b .
r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 26
Exercitii• determină şi sortează descrescător frecvenţele de apariţie ale
tuturor caracterelor dintr-un şir de caractere#include <stdio.h>#include <conio.h>int main(){
int n=0,i=0;char s[50],c; // Declararea sirului de caractere sputs(" Inserati sirul:");gets(s);
puts(" Caracterul ");scanf("%c",&c);while(s[i]!='\0'){
if(s[i]==c)n++;
i++;}if(n==0)
printf("Sirul %s nu contine caracterul %c \n",s,c);elseprintf(" Numarul de caractere %c din sirul %s este egal cu %d \n",c,s,n);
getch(); //system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 27/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 27
Exercitii• Oglinda caracterelor dintr-un şir de caractere#include <stdio.h>#include <conio.h>#include <string.h>int main(){char mesaj[256];
int i, len;printf("Introduceti un text:\n");gets(mesaj);len = strlen(mesaj);for(i = 0; i<len/2; ++i) {char temp = mesaj[i];
mesaj[i] = mesaj[len - i - 1];mesaj[len - i - 1] = temp;}printf("Rezultat:\n%s", mesaj);getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 28/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 28
Exercitii• Criptarea cu n deplasari ASCII intr-un şir de caractere
#include <stdio.h>#include <string.h>#include <conio.h>int main(){char mesaj[256];int i, len, n;printf("Introduceti un text:\n");gets(mesaj);printf("Introduceti n:");scanf("%d", &n);
len = strlen(mesaj);for(i = 0; i<len; ++i)mesaj[i] += n;printf("Rezultat:\n%s", mesaj);getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 29/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 29
Exercitii• Primul cuvant din propozitie cu majuscula
#include <stdio.h>#include <string.h>#include <ctype.h>#include <conio.h>int main(){char mesaj[256];int i, len, frazanoua = 1;
printf("Introduceti un text:\n");gets(mesaj);len = strlen(mesaj);for(i = 0; i<len; ++i)if(isalpha(mesaj[i]))if(frazanoua){mesaj[i] = toupper(mesaj[i]);
frazanoua = 0;}else{mesaj[i] = tolower(mesaj[i]);}else if(ispunct(mesaj[i]))frazanoua = 1;printf("Rezultat:\n%s", mesaj);getch();
}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 30/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 30
Elementele unei matrici• Citeste/initializeaza elementele matricii
for(i=0;i<n;i++)for(j=0;j<n;j++){printf("a[%d][%d]=",i,j);scanf("%d",&a[i][j]);
}
• Scrie elementele matricii
for(i=0;i<n;i++)for(j=0;j<n;j++)
{printf("%d=", a[i][j]);}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 31/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 31
Matrici
Algoritmul de citire/scriere a elementelor, de calcul a sumei
elementelor diagonalei principale si secundare ale matricii.Intr-o matrice pătratică, numarul de linii= numarul de coloane (n=m).
Diagonala principala:elementele a[i][i], cu i=1,n sau a[i][i], cu i=0,n-1
Diagonala secundara:elementele a[i][n-i+1], cu i=1,n sau a[i][n-i-1], cu i=0,n-1
Zonele determinate de diagonale:I. Pe diagonala principala i=j
Sub diagonala principala: i>j
Deasupra diagonalei principale: i<j
II. Pe diagonala secundară j=n-i+1Sub diagonala secundara: j>n-i+1Deasupra diagonalei secundare: j<n-i+1
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 32/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 32
Exercitii• Suma elementele matricii de pe diagonala principala si secundara#include <stdio.h>#include<conio.h>int sp=0,ss=0,i,j,n,a[30][30];main(){printf("Numerul de linii si coloane ale matricii:");scanf("%d",&n);
for(i=0;i<n;i++)for(j=0;j<n;j++){printf("a[%d][%d]=",i,j);scanf("%d",&a[i][j]);}for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j)sp=sp+a[i][j];}printf("Suma elementelor de pe diagonala principala=%d\n",sp);for(i=0;i<n;i++)
for(j=0;j<n;j++){if(i+j==n-1)ss=ss+a[i][j];}printf("Suma elementelor de pe diagonala secundara=%d\n",ss); //system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 33/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 33
Exercitii // Suma elemente matrice pe coloana k
#include "stdio.h"
int sum(int a[][20], int n,int k){int i,j,s;s=0;for(i=0;i<n;i++)for(j=0;j<n;j++)if(j==k) s+=a[i][j];return s;}int main()
{int n,i,j,a[20][20],k;printf(" Dimensiunea: ");scanf("%d",&n);printf(" Elementele matricei \n");for(i=0;i<n;i++)for(j=0;j<n;j++){printf(" a [ %d ][ %d ] = ",i,j);
scanf("%d",&a[i][j]);}printf(" Coloana pe care se calculeaza suma: ");scanf("%d",&k);if(k>=0 && k<=n-1)printf(" Suma elementelor de pe coloana %d este %d\n",k,sum(a,n,k));elseprintf(" Coloana %d inexistenta \n",k);getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 34/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 34
Exercitii // Suma elemente matrice de pe linia k#include "stdio.h"#include "conio.h"
int sum(int a[][20], int n,int k){int i,j,s;s=0;for(i=0;i<n;i++)for(j=0;j<n;j++)if(i==k) s+=a[i][j];return s;}int main()
{int n,i,j,a[20][20],k;printf(" Dimensiunea: ");scanf("%d",&n);printf(" Elementele matricei \n");for(i=0;i<n;i++)for(j=0;j<n;j++){printf(" a [ %d ][ %d ] = ",i,j);
scanf("%d",&a[i][j]);}printf(" Linia pe care se calculeaza suma: ");scanf("%d",&k);if(k>=0 && k<=n-1)printf(" Suma elementelor de pe linia %d este %d\n",k,sum(a,n,k));elseprintf(" Linia %d inexistenta \n",k);getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 35/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 35
Functii
Funcţia reprezintă unitatea fundamentală de execuţie a programelor C
prin care se obţine o divizare logică a programelor mari şi complexe.Funcţiile, numite si subrutine, încapsulează prelucrări bine precizate carepot fi reutilizate, impiedicand scrierea repetata a aceluiasi cod in cadrulunui program. Reprezinta o variabila globala a programului.
Practic, nu există program care să nu apeleze atât funcţii din bibliotecile
existente cât şi funcţii definite în cadrul aplicaţiei respective. Cu altecuvinte, programul (aplicaţia) este de fapt o colecţie de funcţii(subprograme).
În utilizarea unei funcţii sunt implicate 2 entităţi: apelantul (careapelează /cheamă funcţia) şi funcţia apelată.
Apelantul (este tot o funcţie), transmite parametri (numiti şi argumente)catre funcţia apelata. Funcţia primeşte aceşti parametri, efectueazăoperaţiile din corpul funcţiei şi returnează rezultatul/rezultatele înapoifuncţiei apelante.Pentru a construi şi folosi o funcţie trebuie să cunoaştem trei elementecare sunt implicate în utilizarea funcţiilor: declararea funcţiei, apelulfuncţiei si prototipul funcţiei
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 36/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 36
Functii
#include "stdio.h" //----------------------------------void afisare_string(void){printf("Acesta este un string!");}
//----------------------------------main(){afisare_string();
//system ("PAUSE"); //return 0;
}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 37/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 37
Functii
1. Declararea funcţiei
tip nume_funcţie (lista parametri){declaraţii localeinstrucţiunireturn expresie
}
2. Apelul funcţiei
nume_functie(p1, p2, . . . ,pn);
3. Prototipul funcţieitip nume_funcţie(lista declaraţii parametri);
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 38/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 38
Exemple
1. Declararea funcţiei
float suma_numere (int a, int b){
float sum;sum=a+b;
return sum;}
2. Apelul funcţiei
suma_numere(a,b);
3. Prototipul funcţiei
float suma_numere (int a, int b);
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 39/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 39
Exemple
#include "stdio.h"
//----- functia suma ----float suma_numere (int a, int b){
float sum;sum=a+b;return sum;
} //-------------------------int main(){int a,b;printf("Inserati valoarea variabilei a:");
scanf("%d",&a);printf("Inserati valoarea variabilei b:");scanf("%d",&b);printf("Suma numerelor=%.2f\n", suma_numere(a,b));
//system ("PAUSE"); //return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 40/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 40
Exemple
#include "stdio.h" //--------Functia factorial------int factorial(int a){
int i,fact=1;for (i=1;i<=a;i++)fact=fact*i;return fact;
}
//----------------------------------int main(){int a,b;printf("Inserati valoarea variabilei a:");scanf("%d",&a);printf("Inserati valoarea variabilei b:");
scanf("%d",&b);printf("a!=%d\n",factorial(a));printf (“b!=%d\n",factorial(b));printf (“(a-b)!=%d\n",factorial(a-b)); //system ("PAUSE");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 41/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b . r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 41
Functii
// Functie pentru determinarea lungimii unui sir de caractere
#include "stdio.h"#include "conio.h"void strlen(char *s,int &n){
int i;for(i=0;*(s+i)!='\0';i++);
n=i;}int main(){char s[100];int lung;puts(" Sirul ");gets(s);strlen(s,lung);printf(" Sirul %s are %d caractere \n",s,lung);getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 42/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 42
Functii
#include <stdio.h>#include <conio.h>
// Declararea variabilei globale vectorint vector[100];void citvector(int k){int i;for(i=0;i<k;i++) {printf(" v [ %d ] = ",i);scanf("%d", &vector[i]);
}}int suma(int k){int s = 0,i;for(i=0;i<k;i++)s+=vector[i];return s;}int main(){int n;printf(" Numar de componente n = ");scanf("%d",&n);citvector(n);printf("Suma componentelor: %d\n", suma(n));getch();
}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 43/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 43
Functii recursive
Recursivitatea este o tehnică de programare frecvent utilizată în
implementarea funcţiilor. Tehnica recursivităţii constă în autoapelulfuncţiei (de către ea însăşi), în mod direct sau indirect. Tehnica poate fifolosită în cazul problemelor cu natură recursivă şi simplifică scriereaprogramelor prin scrierea directă a formulelor recursive.
De exemplu, funcţia factorial recursivă prezentată anterior, poate fiimplementată în limbajul C astfel:
long factorial (unsigned int n){if(n==0)return 1;else
return n*factorial(n-1);}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 44/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 44
Functii (CMMDC)
#include <stdio.h>
#include <conio.h>int euclid(int p, int q){int r;while(r=p%q) {p=q;q=r;}return q;}int main(){int m,n;
printf("Valoarea lui m = ");scanf("%d",&m);printf("Valoarea lui n = ");scanf("%d",&n);printf("cmmdc(%d,%d) = %d \n", m, n, euclid(m,n));getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 45/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 45
Functii (CMMDC)
#include <stdio.h>
#include <conio.h>int euclid(int, int); // Prototipul functieiint main(){int m,n;printf("Valoarea lui m = ");scanf("%d",&m);printf("Valoarea lui n = ");
scanf("%d",&n);printf("cmmdc(%d,%d) = %d \n", m, n,euclid(m,n));getch();}int euclid(int p, int q) // Definitia functiei{
int r;while(r=p%q) {p=q;q=r;}return q;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 46/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 46
Functii recursive (CMMDC)
// Varianta recursiva a algoritmului lui Euclid#include "stdio.h"#include "conio.h"int cmmdc(int m, int n){if(n==0) return m;else return cmmdc(n,m%n);}int main()
{int m,n;printf(" m = ");scanf("%d",&m);printf(" n = ");scanf("%d",&n);if(cmmdc(m,n)==1)
printf(" Numerele %d si %d sunt prime intre ele\n",m,n);elseprintf(" Numerele %d si %d nu sunt prime intre ele \n",m,n);printf(" cmmdc( %d , %d ) = %d\n",m,n,cmmdc(m,n));getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 47/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 47
Functii
Problema turnurilor din Hanoi
Se dau trei tije notate A, B, C, aşezate în poziţie verticală. Pe tijaA se găsesc n discuri care au razele r1>r2>...>rn, aşezate înordine descrescătoare a razelor începând de la baza tijei.Problema constă în determinarea mutărilor necesare transferuluicelor n discuri de pe tija A pe tija B, în final discurile fiind aşezatepe tija B în aceeaşi ordine ca pe tija A. O mutare constă înaşezarea unui singur disc pe o tijă goală, sau peste un disc curaza mai mare, pe oricare dintre tije. Nu se poate aşeza un disccu rază mai mare peste un disc cu raza mai mică.
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 48/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 48
FunctiiProblema turnurilor din Hanoi
#include <stdio.h>#include <conio.h>void hanoi(int n, char a, char b, char c){if (n==1) {printf("Se muta discul %d de pe %c pe %c\n", n, a, b);} else {
hanoi(n-1,a,c,b);printf("Se muta discul %d de pe %c pe %c\n", n, a, b);hanoi(n-1,c,b,a);}}int main(){int n;printf("Problema turnurilor din Hanoi\n");printf("Numarul de discuri n = ");scanf("%d",&n);hanoi(n,'A','B','C');getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 49/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 49
Functii
Avantajele utilizării funcţiilor:• Evită repetarea codului: este uşor să faci copy şi paste, dar este greu să
menţii şi să sincronizezi toate duplicarile/copiile;• Utilizarea de funcţii permite după cum spuneam dezvoltarea progresivă a
unui program mare, fie de jos în sus (bottom up), fie de sus în jos(top down), fie combinat. Astfel, un program mare poate fi mai uşor descris, de înţeles şi de modificat dacă este modular, adică format din modulefuncţionale relativ mici;
• O funcţie poate fi reutilizată în mai multe aplicaţii (prin adăugarea ei într-obibliotecă de funcţii) ceea ce reduce efortul de programare al unei noi aplicaţii;• O funcţie poate fi scrisă şi verificată separat de restul aplicaţiei, ceea ce reduce
timpul de punere la punct al unei aplicaţii mari (deoarece erorile pot aparenumai la comunicarea între subprograme corecte);
• Întreţinerea unei aplicaţii este simplificată, deoarece modificările se fac numai în anumite funcţii şi nu afectează alte funcţii (care nici nu mai trebuie
recompilate);
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 50/64
© A
c a d e
m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 50
Adrese de memorie. Pointeri
Orice variabilă are două elemente caracteristice:• Valoarea pe care o are variabila la un moment dat (int a=10;)• valoarea adresei locaţiei de memorie (&a).
O variabilă se memorează într o zonă de memorie de o anumită lungime,funcţie de tipul ei: o variabilă de tip char se memorează pe 1 octet, o
variabila de tip int sau float pe 4 octeţi iar un double pe 8 octeti.
printf("Dimensiunea int=%d\n", sizeof (int));printf("Dimensiunea float=%d\n", sizeof (float));printf("Dimensiunea char=%d\n", sizeof (char));printf("Dimensiunea double=%d\n", sizeof (double));
printf("Dimensiunea u int=%d", sizeof (unsigned int));
Adresa locaţiei de memorie în care este stocată valoarea unei variabile sepoate obţine aplicând operatorul de adresă (operatorul &) înainteanumelui variabilei (operaţie întâlnită frecvent în cazul apelării funcţieiscanf).
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 51/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 51
Pointeri
Mecanismul transmiterii parametrilor prin intermediul pointerilor este oextensie a transmiterii prin referinţă.Un pointer este o variabilă care are ca valoare adresa unei zone dememorie a unui obiect (o variabila sau o functie). Pointerul este ovariabilă care poate memora numai adrese de memorie.
Fie T = un tip de data standard(int, double, char, etc.)Fie T* = un nou tip de data de tip pointer (o variabila de tip pointer areca valoare adresele variabilelor de tip pointer).
int *p; //variabila de tip pointer si poate sa memoreze numai adrese de memorie de variabile ale carorvalori sunt de tip intreg
float *f //variabila de tip pointer si poate sa memoreze numai adrese de memorie de variabile ale carorvalori sunt de tip float
T*p //p este o variabila pointer si va contine adrese de memorie alocate unor date de tip T // * semnifica faptul ca variabila p este pointer la tipul de data T
Pointerii se utilizează pentru a face referire (a avea acces) la valoareaunei variabile atunci când se cunoaşte adresa ei.
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 52/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 52
Operatorii de adresare si dereferenţiere
Pentru a atribui variabilei p valoarea adresei variabilei a, se folosesteoperatorul de adresă într-o expresie de atribuire de forma:p=&a;
În urma acestei operaţii, se poate spune că pointerul p indică sprevariabila a.
Un nume de variabilă referă direct o valoare
Un pointer referă indirect o valoareReferirea unei valori printr-un pointer se numeşte indirectare
Pentru a obţine valoarea obiectului indicat de un pointer se utilizeazăoperatorul de dereferenţiere (indirectare) (operatorul *):Dacă p este o variabilă de tip pointer care are ca valoare adresa locaţieide memorie a variabilei întregi a ( p indică spre a) atunci expresia *p
reprezintă o valoare întreagă (valoarea variabilei a).
int a=2, *p;p=&a;*p=6; // variabila a ia valoarea 6
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 53/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 53
Pointeri
Astfel, un pointer nu reprezintă numai adresa unei variabile ci si:
• adresa unei zone de memorie;• tipul variabilei (int, char, double etc.) care este memorată în acea zonă
de memorie.
Pentru a obţine valoarea obiectului indicat de un pointer se utilizeazăoperatorul de dereferenţiere (indirectare) (operatorul *).
int a=2,*p; /*definesc o variabila de tip intreg si o variabila p pointer la intreg care va contineadrese de memorie in care se memoreaza valori intregi*/
p=&a; //operatorul &, numit "de adresa", furnizeaza adresa zonei de memorie unde este memorata valoarea variabilei a
printf("a=%d, Adresa lui a=%d\n",a,&a);
printf("a=%d, Adresa lui a=%d\n",a,p);printf("a=%d, Adresa lui a=%d\n",*p,&a);
printf("a=%d, Adresa lui a=%d\n",*p,p); //operatorul unar *, numit "de dereferentiere", sau "de indirectare"
*p=20; //reinitializare variabila a (a=20)
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 54/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 54
Pointeri#include <stdio.h>#include<conio.h>int s=0,i,n,a[25];main(){printf("Stabiliti numarul de elemente alevectorului, n<=25:");scanf("%d",&n);
// initializare elemente vectorfor(i=0;i<n;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}
// afisare elemente vector
printf("Elementele vectorului sunt:\n");for(i=0;i<n;i++)printf("a[%d]=%d\n",i,a[i]);
//suma elemente vectorfor(i=0;i<n;i++)s=s+a[i];printf("Suma elementelor vectorului=%d\n",s);
//system("pause");return 0;}
#include <stdio.h>#include<conio.h>int s=0,i,n,a[25],*p;main(){printf("Stabiliti numarul de elemente alevectorului, n<=25:");scanf("%d",&n);
// initializare elemente vectorfor(i=0;i<n;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}
// afisare elemente vectorp=&a[0];printf("Elementele vectorului sunt:\n");for(i=0;i<n;i++)printf("a[%d]=%d\n",i,*p+i);
//suma elemente vectorfor(i=0;i<n;i++)s=s+*(p+i);printf("Suma elementelor vectorului=%d\n",s);
//system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 55/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 55
Pointeri
#include<stdio.h>#include<stdlib.h>
#include<conio.h>int main(){int n, i, pal=1;int *vector;printf("Dimensiunea vectorului n:");scanf("%i", &n);
vector = (int*) malloc(sizeof(int) * n);for(i=0; i<n; ++i) {printf("Introduceti v[%d]:", i);scanf("%i", &vector[i]);}for(i=0; i<n/2 && pal == 1; ++i)if(vector[i] != vector[n-i-1])pal = 0;if(pal == 1)printf("Vectorul este palindrom.\n");elseprintf("Vectorul nu este palindrom.\n");free(vector);getch();}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 56/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 56
Pointeri
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 57/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 57
Pointeri. Functii
#include "stdio.h" //----------------------------------
int schimba_valori(int *a, int *b){int t;t=*a;*a=*b;*b=t;}
//----------------------------------int main(){int a,b; //float sum;printf("Inserati valoarea variabilei a:");scanf("%d",&a);printf("Inserati valoarea variabilei b:");scanf("%d",&b);schimba_valori(&a,&b);printf("Valoarea variabilei a:%d\n",a);printf("Valoarea variabilei b:%d\n",b); //system ("PAUSE"); //return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 58/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 58
Pointeri
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 59/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 59
Operatii cu pointeri
Toate operaţiile de manipulare a pointerilor iau în considerare în mod
automat dimensiunea obiectului spre care se indică.Pointerii pot fi folosiţi în expresii aritmetice, asignări şi comparaţii, însănu toţi operatorii pot avea pointeri ca operanzi.
Asupra pointerilor pot fi realizate operaţii de:• incrementare (++)•
decrementare (--)• adăugare a unui întreg (+ sau +=)• scădere a unui întreg (- sau -=)• scădere a unui pointer din alt pointer
Operaţiile permise cu pointeri sunt:•
atribuirea pointerilor de acelasi tip;• adunarea unui pointer cu un întreg sau scăderea unui întreg;• scăderea sau compararea a doi pointeri care indică spre elementele
aceluiasi tablou;• atribuirea valorii zero (NULL) sau compararea cu aceasta.
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 60/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 60
Operatii cu pointeri
Operatorii unari de incrementare si decrementare se pot aplica asupravariabilelor de tip pointer, în format prefix si postfix.T * p;p++; p--; // incrementarea/decrementarea lui p cu lungimea in octeti a tipului de data T
++p; --p;Operatorul de incrementare aplicat asupra unui operand de tip pointer la
tipul T măreste adresa conţinută de operand cu numărul de octeţinecesar pentru a păstra o dată de tipul T (se adună sizeof(T));
p++; // incrementarea lui p cu lungimea in octeti a tipului de data T
p++=> 1* sizeof(T)
ex:int *p;p++ => p=1*sizeof(int)=> p=1*4=4
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 61/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 61
Operatii cu pointeri
T tab[N];T * p;int i;p=&tab[i];p++;
p va contine adresa elementului tab[i+1];
Dacă p este un pointer la tipul T si n o valoare întreagă, expresia p+nmăreste valoarea lui p cu n*sizeof(T). Analog, expresia p-n micsoreazăvaloarea lui p cu n*sizeof(T);
Adunarea si scaderea unei constante la un pointern = nr intreg
p+n;p-n;p+/-n=n*sizeof(T)
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 62/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 62
Pointeri#include <stdio.h>#include<conio.h>int s=0,i,n,a[25];main(){printf("Stabiliti numarul de elemente alevectorului, n<=25:");scanf("%d",&n);
// initializare elemente vectorfor(i=0;i<n;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}
// afisare elemente vector
printf("Elementele vectorului sunt:\n");for(i=0;i<n;i++)printf("a[%d]=%d\n",i,a[i]);
//suma elemente vectorfor(i=0;i<n;i++)s=s+a[i];printf("Suma elementelor vectorului=%d\n",s);
//system("pause");return 0;}
#include <stdio.h>#include<conio.h>int s=0,i,n,a[25],*p;main(){printf("Stabiliti numarul de elemente alevectorului, n<=25:");scanf("%d",&n);
// initializare elemente vectorfor(i=0;i<n;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}
// afisare elemente vectorp=&a[0];printf("Elementele vectorului sunt:\n");for(i=0;i<n;i++)printf("a[%d]=%d\n",i,*p+i);
//suma elemente vectorfor(i=0;i<n;i++)s=s+*(p+i);printf("Suma elementelor vectorului=%d\n",s);
//system("pause");return 0;}
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 63/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
14 decembrie 2015 Lect.dr.ing. Florin Postolache 63
Pointeri. Functii#include <stdio.h>#include<conio.h>int suma_vector(int i, int n, int *p)//suma elemente vector
{int s=0;for(i=0;i<n;){s+=(*p+i);i++;}printf("Suma elemente vector=%d\n",s);return s;} //-----------------------main(){int i,n,a[25],*p;p=&a[0];printf("Stabiliti numarul de elemente ale vectorului, n<=25:");scanf("%d",&n);printf("Inserati elementele vectorului:\n"); // initializare elemente vectorfor(i=0;i<n;i++)
{printf("a[%d]=",i);scanf("%d",&a[i]);}suma_vector(i,n,a); //system("pause");return 0;}
b
7/23/2019 Lab_9-10_PCLP (1)
http://slidepdf.com/reader/full/lab9-10pclp-1 64/64
© A
c a d e m i a N a v a l ă “ M i r c e a
c e l B
ă t r â n ” –
h t t p : / / a d l . a n m b
. r o
Intrebari?
Multumesc!