Pentru fisierele sursa cu rezolvarile, verificati arhiva.
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p01.c.html
/**
* Problema 1
*
*/
// Pentru functia printf()
#include <stdio.h>
int main()
{
int i;
for ( i = 32; i < 127; i++ )
if ( i % 10 == 1 )
printf("%c = %d\n", i, i );
else
printf("%c = %d ", i, i );
return 0;
}
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p02.c.html
/**
* Problema 2
*
*/
//Pentru functiile scanf() si printf()
# include <stdio.h>
int main()
{
int i, n, m;
scanf("%d%d", &n, &m);
for (i = 1; i <= n; i++){
printf("%6d", i);
// conditie de test pentru trecerea la linie noua
if (i % m == 0)
printf("\n");
// conditie de test pentru intreruperea afisarii
if (i % (24 * m) == 0){
fflush(stdin);
getchar();
}
}
return 0;
}
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p03.c.html
/**
* Problema 3
*
*/
// Pentru functiile scanf() si printf()
#include <stdio.h>
int main ()
{
float x, sx = 0;
double y, sy = 0;
int n, i;
printf ("n = "); scanf ("%d", &n);
printf ("x = "); scanf ("%f", &x);
printf ("y = "); scanf ("%lf", &y);
for (i = 0; i < n; i++) {
// reactualizam sumele partiale sx si sy
sx += x;
sy += y;
//testam daca am parcurs n/10 termeni
if (i % (n / 10) == 0) printf("%f %e\n%lf %e\n\n", sx, sx, sy, sy);
}
printf("%f %e\n%lf %e\n", sx, sx, sy, sy);
return 0;
}
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p04.c.html
/**
* Problema 4
*
*/
// Pentru functiile printf() si scanf()
#include <stdio.h>
int main()
{
int a, b, s, aux;
// se citeste un numar
scanf("%d", &a);
// se verifica daca numarul este egal cu 0
if (a == 0)
return 0;
do
{
//se citeste un alt numar
scanf("%d", &b);
// se calculeaza suma cifrelor primului numar din pereche, adica suma cifrelor lui a
aux = a;
for ( s = 0; aux > 0; aux /= 10)
s += aux % 10;
// se verifica conditia
if (b == a % s)
printf("%d %% %d = %d \n", a, s, b);
// se actualizeaza valoarea lui a
a = b;
} while (a != 0);
return 0;
}
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p05.c.html
/**
* Problema 5
*
*/
// Pentru functiile printf() si scanf()
#include <stdio.h>
int main()
{
int i, j, p, k;
scanf( "%d", &p );
for( i = 1; i < p - 1; i++ )
for( j = i; j < p - i; j++ ) {
k = p - i - j;
// verificam daca cele 3 numere pot forma laturile unui triunghi.
if ( k >= j && k <= i + j && i <= k + j && j <= k + i )
printf( "%d %d %d\n", i, j, k );
}
return 0;
}
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p06.c.html
/**
* Problema 6
*
*/
// Pentru printf() si scanf()
#include <stdio.h>
int main ()
{
int n, m, i, c, nf, mf, nmf;
scanf ("%d%d", &n, &m);
//metoda 1: folosirea relatiei de recurenta
c = 1; // C(n,0)
for (i = 1; i <= m; i++)
c = c * (n - i + 1) / i;
printf ("C(%d, %d) = %d\n", n, m, c);
//metoda 2: folosind relatia de calcul
for (nf = 1, i = 1; i <= n; i++) nf *= i; //calculul lui n!
for (mf = 1, i = 1; i <= m; i++) mf *= i; //calculul lui m!
for (nmf = 1, i = 1; i <= n - m; i++) nmf *= i; //calculul lui (n - m)!
printf ("C(%d, %d) = %d\n", n, m, nf / (mf * nmf));
return 0;
}
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p07.c.html
/**
* Problema 7
*
*/
// Pentru functiile printf() si scanf()
#include <stdio.h>
// Pentru functia pow()
#include <math.h>
int main()
{
float x, s1 = 0, s2 = 0, t = 1, eps = 0.0001;
int n, i;
scanf("%f %d", &x, &n);
for ( i = 0; i < n; i++) /* Ca suma a unui numar dat de termeni */
{
s1 += t;
t = t * x / (i + 1);
}
t = 1;
for ( i = 0; t > eps; i++) /* Ca suma a termenilor mai mari decat un epsilon dat*/
{
s2 += t;
t = t * x / (i + 1);
}
printf("%f %f %f %f\n", s1, s2, exp(x), pow(2.718, x));
return 0;
}
//pentru mai multe detalii despre functia pow() accesati http://www.cplusplus.com/reference/clibrary/cmath/pow/
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p08.c.html
/**
* Problema 8
*
*/
// Pentru functiile scanf() si printf()
#include <stdio.h>
// Pentru functiile fabs() si sqrt()
#include <math.h>
int main ()
{
float x, r1, r2, EPS = 0.001;
int i;
scanf("%f", &x);
r1 = r2 = x / 2 ;
do
{
r1 = r2;
r2 = ( r1 + x/r1 ) / 2;
} while ( fabs( r1 - r2 ) > EPS );
printf("rad(%2.0f) = %.3f | %.3f \n", x, r2, sqrt(x));
for(i = 1; i <= 20; i++)
printf("rad(%d) = %.3f\n", 2 * i, sqrt(2 * i));
return 0;
}
//mai multe detalii despre functia sqrt() gasiti accesand http://www.cplusplus.com/reference/clibrary/cmath/sqrt/
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p09.c.html
/**
* Problema 9
*
*/
// Pentru printf() si scanf()
#include <stdio.h>
// Pentru sqrt(x)
#include <math.h>
int main ()
{
int n, i;
int p = 1, q = 1; // cu p si q generez sirul lui fibonacci
int prim, d, rad, aux;
scanf ("%d", &n);
if (n <= 3) { // primii 3 termeni sunt 0,1,1
printf ("Nu exista numere prime\n");
return 0;
}
printf ("Numerele prime din sirul Fibonacci sunt: ");
for (i = 4; i <= n; i++) {
aux = p;
p = q;
q = aux + q; // calculam in q termenii sirului Fib. , tinand cont ca ultimii doi termeni sunt p si q
if (q == 2)
printf ("%d ", q);
else {
// daca restul impartirii lui q la 2 este 0, atunci q nu poate fi numar prim
prim = q % 2 == 0 ? 0 : 1;
//luam partea intreaga a radicalului
rad = (int)(sqrt(q));
d = 3;
while (prim && d <= rad) {
if (q % d == 0)
prim = 0;
d += 2;
}
if (prim)
printf ("%d ", q);
}
}
printf("\n");
return 0;
}
~/pc-materiale/Rezolvari/2010_2011/lab3/rezolvari3p10.c.html
/**
* Problema 10
*
*/
#include <stdio.h>
int main ()
{
int n, limit = 10, nr_cf = 1;
int s = 0; // suma cifrelor
scanf ("%d", &n);
//intuitiv: intre 0 si 9 exista 10 numere de 1 cifra
// intre 10 si 99 exista 90 de numere de 2 cifre
//comparam pe rand numarul n cu 10^1, 10^2 etc. pana cand n il depaseste pe limit (o putere a lui 10)
while (n >= limit) {
//actualizam suma
s += nr_cf * (limit - limit/10);
//odata cu cresterea limitei crestem si numarul de cifre
nr_cf++;
//actualizam limita prin inmultirea cu 10
limit *= 10;
}
limit /= 10;
//se va mai adauga la suma diferenta de cifre dintre n ultima limita
s += nr_cf * (n - limit + 1);
printf ("%d\n", s);
return 0;
}