Moldova
RAPORT
Chişinău – 20XX
/* pr0201
1. Scrieti un program cu pointeri care genereaza 1000 de seturi de
5 numere aleatoare cuprinse între 1 si 40, în final afisând
frecventa cu care a fost generat fiecare numar.
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int m, c, i, *f; f = (int *)malloc( 41 * sizeof(int) );
// f[i] este frecventa numarului i, pentru i=1,2,3,...,40
printf("Numere random intre 1 si 40 inclusiv\n");
for(i = 0; i < 41; ++i) *(f + i) = 0;
for(i = 0; i < 1000; i++)
{ printf("Set %d :", i);
for (c = 0; c < 5; c++)
{
m = rand() % 40 + 1; // numar aleator intre 1 si 40 inclusiv
*(f + m ) += 1;
printf(" %d ", m);
}
printf("\n");
}
for(i = 1; i < 41; i++) printf("f(%d) = %d\t", i , *(f + i));
return 0;
}
/* pr0202
2. Scrieti un program cu pointeri care sumeaza numerele negative
si pozitive dintr-un tablou.
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
/* pr0203
3. Scrieti un program cu pointeri care calculeaza cel mai mare
divizor comun dintr-un sir de numere date.
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, j, r, d, pr, cmmdc, *x;
printf("n = "); scanf("%d", &n);
x = (int *)malloc(n * sizeof(int));
for(i = 0; i < n; i++)
{
printf("x[%d] = ", i);
scanf("%d", x + i); // x + i = &x[i]
}
r = x[0]; // gasim cel mai mic x[i]
for(i = 0; i < n; i++)
{
if (r > *(x + i)) r = *(x + i); // *(x +i) este x[i]
}
// cmmdc pentru toti x[i] nu poate fi mai mare ca cel mai mic
x[i]
cmmdc = 1;
for(d = 2; d <= r; d++)
{
pr = 1;
for(j = 0; j < n; j++)
{
if (*(x + j) % d != 0) { pr = 0; break; }
}
if (pr == 1) cmmdc = d;
}
printf("cmmdc = %d", cmmdc);
return 0;
}
/* pr0204
4. Scrieti un program cu pointeri care compara valorile a doua
tablouri date.
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int *x, *y, i, m, n;
if( n!= m )
{
printf("Tablourile au un numar diferit de elemente\n");
printf("primul tablou x are %d elemente\n", n);
printf("al doilea tablou y are %d elemente\n", m);
}
else printf("Tablourile x si y au acelasi numar de elemente
%d\n", n);
return 0;
}
/* pr0205
5. Scrieti un program cu pointeri care efectueaza urmatoarele
operatii: afla daca în prima patrime a unui sir
de caractere sunt mai putin de 10 simboluri si in ultima patrime
a setului de caractere nu sunt simboluri
din segmentul ["a"..."z"]. Totodata sa se calculeze numarul de
simboluri numerice din treimea de mijloc
a setului de caractere date.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char s[121], sp14[31], su14[31], sm13[41]; int n, np14, nu14,
nm13, i, p;
// s - sirul initial; sp14 - prima patrime a sirului initial
// su14 - ultima patrime a sirului initial; sm13 - treimea din
mijloc a sirului initial
// n - lungimea sirului initial; np14 - lungimea priemi patrime
din sirul initial
// nu14 - lungime ultimei patrimi a sirului initial 9np14 si
nu14 sunt egale)
// nm13 - lungime treimei din mijloc a sirului initial
return 0;
}
/* pr0206
6. Scrieti un program cu pointeri care afiseaza numarul
elementelor pare si impare dintr-un tablou.
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, npar = 0, nimpar = 0, *x;
printf("n="); scanf("%d", &n);
x = (int *)malloc(n * sizeof(int));
for(i = 0; i < n; i++)
{
printf("x[%d] = ", i); scanf("%d", x + i);
}
for(i = 0; i < n; i++)
{
if (*(x + i) % 2 == 0) npar +=1;
else nimpar += 1;
}
return 0;
}
/* pr0208
8. Scrieti un program cu pointeri care efectueaza inmultirea
cifrelor unui numar dat.
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int c, p = 1, s, *n; // in p va fi produsul cifrelor
n = (int *)malloc(sizeof(int));
printf("n = "); scanf("%d", n);
printf("Ati intorus numarul %d\n", *n);
if( *n == 0 ) p = 0;
while( *n != 0 )
{
p *= *n % 10;
*n /= 10;
}
printf("Prousul cifrelor numarului introdus este %d\n", p);
return 0;
}
/* pr0226
26. Scrieti un program cu pointeri care sa tipareasca toate
tripletele (i,j,k) de numere naturale care verifica conditiile
i*i + j*j = k*k si 1 < i < j < k <= n
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int *i, *j, *k, *n;
i = (int*)malloc(sizeof(int)); j = (int*)malloc(sizeof(int));
k = (int*)malloc(sizeof(int)); n = (int*)malloc(sizeof(int));
printf("*n = "); scanf("%d", n);
for(*k = 4; *k < *n; *k = *k + 1)
{
for(*j = 3; *j < *k; *j = *j + 1)
{
for(*i = 2; *i < *j; *i = *i + 1)
{
if( *i * *i + *j * *j == *k * *k)
printf("(%d, %d, %d)\n", *i, *j, *k);
}
}
}
return 0;
}
/* pr0229
29. Scrieti un program cu pointeri care sa se calculeze si sa se
tipareasca primii n termeni din sirul Fibonacci, sir definit de relatia
de recurenta
t[i + 1] = t[i] + t[i - 1], i = 1, 2, 3, ..., avand t[0] = t[1] = 1.
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int *t, n, i;
printf("n = "); scanf("%d", &n);
t = (int *)malloc(n * sizeof(int)); *(t + 0) = 1; *(t + 1) = 1;
for(i = 1; i < n; i++)
{
*(t + i + 1) = *(t + i) + *(t + i - 1);
}
printf("\nNumerele Fiboncci sunt:\n\n");
for(i = 0; i < n; i++)
{
printf("F(%d) = %d\n", i, *(t + i));
}
// calculeaza corect numai pana la n=46 !!!
//deoarece numerele sunt mari si nu incap in diapazonul
pentru tipul int
return 0;
}