Sunteți pe pagina 1din 5

Laborator 11.

Programare Procedural

Pointeri
Obiective:
 aplicaii
aplica ii care folosesc pointeri,legatura dintre pointeri si tablouri,legatura dintre pointeri si
functii
1.Realizai un program care afieaz
afi
dou valori cu ajutorul pointerilor.
Rezolvare:
#include <stdio.h>
void main(){
int i, j;
int *pInt;
i = 5;
j = 2;

pInt = &i;
printf("\n*pInt
n*pInt are valoarea %d\n",*pInt);
%d
pInt = &j;
printf("\n*pInt
n*pInt are valoarea %d\n",*pInt);
%d
}

La compilarea programului,pe
ui,pe ecranul dumneavoastr
dumneavoastr se va afia :

Figura 11.1

torul program i observai ce realizeaz.


2.Executai urmtorul
Rezolvare:
#include <stdio.h>
void main(void)
{
int t[4]={0, 1, 2, 3};
int *p=&t[1];
printf("%d\n",
n", *p++); /* afiseaza valoarea
lui t[1] */

printf("%d\n",
n", *++p); /* afiseaza valoarea
lui t[3] */
printf("%d\n",
n", ++*p); /* afiseaza valoarea
incrementata a lui t[3] */
}

La compilarea programului,pe
ui,pe ecranul dumneavoastr
dumneavoastr se va afia :

Page 1

Laborator 11.Programare Procedural

Figura 11.2

3.S se scrie un program care realizeaz


realizeaz interschimbarea a dou variabile folosind o
funcie.
Indicaii:
1.Se declar parametrul funciei
iei ca fiind un pointer dup
dup care folosim
osim un pointer de indirectare n
corpul funciei.
ansmitem adresa unui argument cnd funcia
func este apelat.
2.Transmitem
Rezolvare:
#include <stdio.h>
void interschimba(int *,int*);
void main(){
int a=3,b=7;
printf("%d %d\n",a,b);
interschimba(&a,&b);
printf("%d %d\n",a,b);
}

void interschimba(int *p, int *q)


{
int tmp;
tmp=*p;
*p=*q;
*q=tmp;
}

La compilarea programului,pe
ui,pe ecranul dumneavoastr
dumneavoastr se va afia :

Figura 11.3

4.S se scrie un program care citete


cite
i afieaz elementele a dou tablouri, la primul
accesul se face indexat, la al doilea prin pointeri.
Rezolvare:
#include <stdio.h>
#include <conio.h>
#define N 5
int tab1[N],tab2[N];
void citire1()
{
int i;
puts("Introduceti elementele lui tab1:");
for(i=0;i<N;i++)
{
putchar(':');scanf("%d",&tab1[i]);
}
}
void tiparire1()
{
int i;

puts("Elementele lui tab1:");


for (i=0;i<N;i++)
printf("%d",tab1[i]);
putchar('\n');
}
void citire2()
{int *pi;
puts("Introduceti elementele lui tab2:");
for (pi=tab2;pi<tab2+N;pi++)
{
putchar(':');scanf("%d",pi);
}
}
void tiparire2()
{int *pi;
puts("Elementele lui tab2:");

Page 2

Laborator 11.Programare Procedural


for (pi=tab2;pi<tab2+N;pi++)
printf("%d",*pi);
putchar('\n');
}
void main()
{

citire1();
tiparire1();
citire2();
tiparire2();
getch();
}

ui,pe ecranul dumneavoastr


dumneavoastr se va afia :
La compilarea programului,pe

Figura 11.4

creeaz o funcie numit ir_majuscule


ir_majuscule care convertete
converte
5.Scrieii un program care creeaz
fiecare
iecare dintre caracterele unui ir n majuscule i apoi returneaz un pointer la ir.
Rezolvare:
#include <stdio.h>
#include<ctype.h>
char *sir_majuscule(char *sir)
{
char *adresa_start;
adresa_start=sir;
while(*sir)
{
*sir= toupper(*sir);
sir++;
}

return(adresa_start);
}
void main(void)
{
char *titlu="Totul despre C/C++";
char *sir;
sir=sir_majuscule(titlu);
printf("%s\n", sir);
printf("%s\n",
n",
sir_majuscule("Matrice
pointeri"));
}

si

La compilarea programului,
ui, pe ecranul dumneavoastr
dumneavoastr se va afia :

Figura 11.5

6.Se consider dou mulimi


imi de numere ntregi
ntregi reprezentate prin tablouri de valori
distincte.

Page 3

Laborator 11.Programare Procedural


S se scrie funciiin
in C pentru:
 Citirea coninutului
inutului mulimilor
mul
 Afiarea coninutului
inutului mulimilor.
mul
 Determinarea reuniunii a dou
dou mulimi.
Rezolvare:
#include <stdio.h>
#include<conio.h>
#define nmax 10
int nx,ny,nreun,ninter;
int
x[nmax],y[nmax],reun[2*nmax],inter[nmax];
int apar(int n,int*x,int v)
{int i;
int gasit=0;
i=0;
while(i<n &&!gasit)
if(x[i]==v)gasit=1;
else i++;
return(gasit);
}
void citeste(int *n,int*x)
{
int i,v;
printf("nr.elemente=");scanf("%d",n);
i=0;
while(i<*n)
{
printf("el%d=",i);
scanf("%d",&v);
if(!apar(i,x,v))
{
x[i]=v;
i++;
}
}

}
void afisare(int n,int*x)
{int i;
for(i=0;i<n;i++)
printf("%d",x[i]);
printf("\n");
}
void reuniune(int nx,int*x,int ny,int
*y,int*nz,int*z)
{int i;
for (i=0;i<nx;i++)
z[i]=x[i];
*nz=nx;
for(i=0;i<ny;i++)
if(!apar(*nz,z,y[i]))
{
z[*nz]=y[i];
(*nz)++;
}
}
void main()
{
clrscr();
citeste(&nx,x);
citeste(&ny,y);
reuniune(nx,x,ny,y,&nreun,reun);
afisare(nreun,reun);
getch();
}

La compilarea programului,
ui, pe ecranul dumneavoastr
dumneavoastr se va afia :

Figura 11.6

Page 4

Laborator 11.Programare Procedural


7.Facultativ:Ce afieaz urmtorul
urm
program?
Rezolvare:
#include <stdio.h>
void inc_contor(int *contor_ptr)
{
(*contor_ptr)++;
}
void main(void)

{
int contor = 0;
while (contor<10)
inc_contor(&contor);
printf("contor: %d\n",contor);
n",contor);
}

La compilarea programului,pe
ui,pe ecranul dumneavoastr
dumneavoastr se va afia :

Figura 11.7

urm
program?
8.Facultativ:Ce afieaz urmtorul
Rezolvare:
#include <stdio.h>
void f1(int a)
{
printf("%d\n",a);
}
void main(void)
{

void (*f1_ptr)(int);
f1_ptr=f1; /* pointerul f1_ptr va indica
spre functia f1 */
(*f1_ptr)(4); /* prin intermediul lui f1_ptr
se apeleaza functia f1 */
}

La compilarea programului,pe
ui,pe ecranul dumneavoastr
dumneavoastr se va afia :

Figura 11.8

Page 5

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