Documente Academic
Documente Profesional
Documente Cultură
Rezolvari
1) Exemplificare in declarare si folosirea variabilelor pointer. Transferul se va face intre adrese
ale locatiilor de memorie, cu retinere simultana si a valorilor retinute la acestea.
#include<stdio.h>
void main()
{
int a=1;
/* a este o locatie de memorie pentru elemente de tip int pe
doi
octeti, pe care am initializat-o cu valoarea 1 */
int* b;
b=&a;
getchar();
int k;
scanf("&d", k);
//initializam pointerul
/* in adresa b retinem adresa locatiei de memorie (adica a
deci b devine adresa locatiei de memorie x */
/* transferul se face intre valori;
valorii retinute la adresa b ii atribuim
a */
printf("Val a= %d\t Val b= %d\n\n", a,*b);
valoarea retinuta in
//initializam a
//initializam b
printf("Introduceti a: ",a);
scanf("%d", a);
printf("Introduceti b: ",b);
scanf("%d", b);
printf("\nInainte de interschimbare: \n");
printf("\tVal a= %d\tVal b= %d\n\n", *a,*b);
printf("\tAdresa a= %p\tAdresa b= %p\n", a, b);
//interschimbarea
c=a;
a=b;
b=c;
printf("\nDupa interschimbare: \n");
printf("\tVal a= %d\tVal b= %d\n\n", *a,*b);
printf("\tAdresa a= %p\tAdresa b= %p\n", a, b);
getchar();
int k;
scanf("&d", k);
a=&x;
b=&y;
//initializam a
//initializam b
printf("Introduceti a: ",a);
scanf("%d", a);
printf("Introduceti b: ",b);
scanf("%d", b);
printf("\nInainte de interschimbare: \n");
printf("\tVal a= %d\tVal b= %d\n\n", *a,*b);
printf("\tAdresa a= %p\tAdresa b= %p\n", a, b);
//interschimbarea
valida
c=*a;
a=b;
b=&c;
printf("\nDupa interschimbare: \n");
printf("\tVal a= %d\tVal b= %d\n\n", *a,*b);
printf("\tAdresa a= %p\tAdresa b= %p\n", a, b);
getchar();
int k;
scanf("&d", k);
}
//initializam a
//initializam b
//initializam c
printf("Introduceti a: ",a);
scanf("%d", a);
printf("Introduceti b: ",b);
scanf("%d", b);
printf("\nInainte de interschimbare: \n");
printf("\tVal a= %d\tVal b= %d\n\n", *a,*b);
printf("\tAdresa a= %p\tAdresa b= %p\n", a, b);
//interschimbarea
*c=*a; // transfer intre valori
*a=*b;
*b=*c;
printf("\nDupa interschimbare: \n");
printf("\tVal a= %d\tVal b= %d\n\n", *a,*b);
printf("\tAdresa a= %p\tAdresa b= %p\n", a, b);
getchar();
int k;
scanf("&d", k);
//initializam a
//initializam b
printf("Introduceti a: ",a);
scanf("%d", a);
printf("Introduceti b: ",b);
scanf("%d", b);
printf("\nInainte de interschimbare: \n");
printf("\tVal a= %d\tVal b= %d\n\n", *a,*b);
printf("\tAdresa a= %p\tAdresa b= %p\n", a, b);
//interschimbarea
c=*a;
*a=*b;
*b=c;
b-=5;
//sau b=b-5
printf("Primul element al sirului: %d\n", *b);
/* ne pastram pozitia de pointare in sir, daca vrem sa afisam
elementul
al treilea al sirului*/
printf("Al treilea element al sirului: %d\n", *(b+2));
getchar();
int k;
scanf("&d", k);
}
va
for(int i=1;i<=5;i++)
{
printf("%s\n",b); /* un sir este o adresa, iar, mesajul acesta
b-=5;
printf("subsirul incepand cu prima pozitie: %s\n",b);
printf("subsirul incepand cu a treia pozitie: %s",b+2);
getchar();
int k;
scanf("&d", k);
}
getchar();
int k;
scanf("&d", k);
#include<stdio.h>
void modifica(int x, int y, int z)
{
printf("Valori initiale in functie: %d %d %d\n",x,y,z);
//1 2 3
x+=10;
y+=10;
z+=10;
printf("Valori finale in functie: %d %d %d\n",x,y,z); //11 12 13
}
void main()
{
int a=1,b=2,c=3;
printf("Valori initiale in program: %d %d %d\n",a,b,c);
//1 2 3
modifica(a,b,c);
printf("Valori finale in program: %d %d %d\n",a,b,c); //1 2 3
getchar();
int k;
scanf("&d", k);
}
//Sume este 0
getchar();
int k;
scanf("%d",k);
}
//1 2 3
//11 12
13
}
void main()
{
int a=1,b=2,c=3;
printf("Valori initiale in program: %d %d %d\n",a,b,c);
//1 2 3 modifica(&a,&b,&c);
printf("Valori finale in program: %d %d %d\n",a,b,c);
//11 12
13
getchar();
int k;
scanf("%d",k);
//Sume este 55
getchar();
int k;
scanf("%d",k);
14) Sa se scrie un program care va realiza interschimbarea coninutului a dou variabile ce pot
reine valori reale. Programul va defini funcii de citire i afiare pentru un numr real, precum i
o funcie proprie pentru interschimbarea coninutului variabilelor, cu rmnerea rezultatului i n
afara execuiei funciei.
#include<stdio.h>
//citirea unei variabile reale
void citire(float* x, char c)
{
printf("Introduceti %c: ", c);
scanf("%f", x);
}
//afisarea continutului unei variabile reale
void afisare(float x, char c)
15) Sa se scrie un program care va realiza interschimbarea coninutului a dou variabile ce pot
reine valori reale. Programul va defini funcii de citire i afiare pentru un numr real, precum i
o funcie proprie pentru interschimbarea coninutului variabilelor, cu rmnerea rezultatului i n
afara execuiei funciei. Variabilele sunt declarate global; declarate de un tip standard definit.
#include<stdio.h>
float a,b;
//functia de citire a celor doua variabile
void citire()
{
printf("Introduceti a: ");
scanf("%f", &a);
printf("Introduceti b: ");
scanf("%f", &b);
}
//functia de afisare
void afisare()
{
printf("Valoarile sunt: a=%.2f, b=%.2f\n", a, b);
}
//functia de interschimbare
void interschimbare()
{
float c;
c=a;
a=b;
b=c;
}
void main()
{
citire();
afisare();
printf("\n");
interschimbare();
afisare();
getchar();
int k;
scanf("%d",k);
}
16) Sa se scrie un program care va realiza interschimbarea coninutului a dou variabile ce pot
reine valori reale. Programul va defini funcii de citire i afiare pentru un numr real, precum i
o funcie proprie pentru interschimbarea coninutului variabilelor, cu rmnerea rezultatului i n
afara execuiei funciei. Variabilele sunt declarate global; declarate de un tip pointer spre un tip
real.
#include<stdio.h>
#include<stdlib.h>
float*a,*b;
void alocare()
{
a=(float*)malloc(sizeof(float));
b=(float*)malloc(sizeof(float));
}
void citire()
{
alocare();
printf("dati a: ");
scanf("%f",a);
printf("dati b: ");
scanf("%f",b);
}
void afisare()
{
printf("valorile sunt: a=%.2f, b=%.2f\n",*a,*b);
}
void interschimba()
{
float c;
c=*a;
*a=*b;
*b=c;
}
void main()
{
citire();
afisare();
printf("\n");
interschimba();
afisare();
getchar();
int k;
scanf("%d",k);
}
getchar();
int k;
scanf("%d",k);
Raspuns: 6 5 21 6 5
18) Se cere a se scrie o funcie care va calcula suma cifrelor unui numar. Funcia se va scrie cu
prototip (zona declarativ difereniat de cea definitiv).
#include<stdio.h>
//in acest caz rezultatul se va transmite prin tipul rezultat
int suma(int); //suma cifrelor unui nr. intreg
void main()
{
int n, suma_cifrelor=0, nr_invers=0;
printf("Introduceti n: ");
scanf("%d",&n);
suma_cifrelor=suma(n);
printf("\nSuma cifrelor sale este: %d", suma_cifrelor);
getchar();
int k;
scanf("%d",k);
}
/* suma cifrelor unui numar intreg:
Presupunem nr. dorit ca fiind 523 ptr. care sa calculam suma cifrelor
523 : 10 = 52 rest 3
Suma cifrelor intermediara: 0+3=3
52 : 10 = 5 rest 2
Suma cifrelor intermediara: 3+2=5
5 : 10 = 0 rest 5
Suma cifrelor finala: 5+5=10
*/
int suma(int n)
{
int s=0;
while (n)
{
}
return s;
s=s+n%10;
n/=10;
}
/* inversul unui numar intreg:
Presupunem nr. dorit ca fiind 523 ptr. care dorim sa-i aflam inversul
523 : 10 = 52 rest 3
Numarul invers intermediar: 0*10+3=3
52 : 10 = 5 rest 2
Numarul invers intermediar: 3*10+2=32
5 : 10 = 0 rest 5
Numarul invers final: 32*10+5=325
*/
19) Folosind o funcie s se realizeze un program care calculeaz urmtoarea expresie: (1+ +
1/3+ ++1/n)^n , unde n este un ntreg dat de la tastatur.
#include<stdio.h>
#include<math.h>
float suma (int n)
{
float s=0;
float p=1;
for(int i=1; i<=n; i++)
{
p=1/(float)i;
s=s+p;
}
s=pow(s,n);
return s;
}
void main()
{
int n;
printf("\nIntroduceti n: ");
scanf("%d", &n);
printf("\n\tRezultatul expresiei este: %.2f", suma(n));
getchar();
int k;
scanf("%d", k);
}
20) S se realizeze un program care calculeaza prin intermediul a dou funcii cmmdc-ul i
cmmmc-ul a dou numere date de la tastatur.
#include <stdio.h>
#include <math.h>
int cmmdc (int n, int m)
{
while(n!=m)
{
if(n>m)
n=n-m;
else
m=m-n;
}
return n;
}
int cmmmc (int n, int m)
{
int z;
z=(n*m)/cmmdc(n,m);
return z;
}
void main()
{
int n,m;
printf("\nIntroduceti n: ");
scanf("%d", &n);
printf("\nIntroduceti m: ");
scanf("%d", &m);
printf("\nCmmdc este: %d", cmmdc(n,m));
printf("\nCmmmc este: %d", cmmmc(n,m));
getchar();
int k;
scanf("%d", k);
}
21) S se realizeze adunarea i nmulirea a dou numere reale folosind variabile de tipul pointer.
#include<stdio.h>
void main()
int a;
printf("Introduceti a: ");
scanf("%d", &a);
int b;
printf("Introduceti b: ");
scanf("%d", &b);
int* n; //declar pointer
int* m; //declar pointer
n=&a;
m=&b;
//initializez pointer
//initializez pointer
getchar();
int k;
scanf("%d", k);
22) Scriei o funcie care primete ca parametru lungimea laturii unui ptrat i returneaz aria sa
i o funcie care returneaz diagonala.
#include<stdio.h>
#include<math.h>
float lungime (int n)
{
float aria;
aria=n*n;
return aria;
}
23) Scriei o funcie care primete 3 parametri de tip real, cu semnificaia de lungimi pentru 3
segmente. Funcia va returna 1, dac cele trei segmente pot forma un triunghi i 0, n caz contrar.
#include<stdio.h>
#include<math.h>
int triunghi (float x, float y, float z)
{
if((x>0)&&(y>0)&&(z>0)&&(x<y+z)&&(y<x+z)&&(z<x+y))
return 1;
else return 0;
}
void main()
{
float x;
float y;
float z;
printf("Introduceti x: ");
scanf("%f", &x);
printf("Introduceti y: ");
scanf("%f", &y);
printf("Introduceti z: ");
scanf("%f", &z);
printf("Rezultat: %d",triunghi(x,y,z)),
getchar();
int k;
scanf("%d", k);
24) Scriei o funcie care returneaz ultima cifr a unui numr natural. De exemplu, dac
numrul este 234, funcia va returna 4.
#include<stdio.h>
#include<math.h>
int cifra (int a)
{
int b;
b=a%10;
return b;
}
void main()
{
int a;