This is an old revision of the document!
În acest laborator veţi învăţa să:
Scrieţi o funcţie care să calculeze numărul de cifre ale unui număr întreg dat ca parametru, N. În funcţia main() citiţi un număr de la tastatură şi afişaţi rezultatul apelului funcţiei. Antetul funcţiei trebuie să respecte următorul format:
int nrcf(long n)
Un numar dat N
Numarul de cifre ale numarului citit
Intrare | Ieşire |
---|---|
12345 | 5 |
9 | 1 |
-325 | 3 |
Programul C care implementează cerinţa problemei de mai sus va fi:
#include <stdio.h> int nrcf(long n) { if (n == 0) return 1; int nr = 0; /* declar un contor in care sa numar cifrele */ while (n) /* cat timp mai pot obtine o cifra */ { n = n/10; /* o trunchiez pe ultima */ nr++; /* incrementez contorul */ } return nr; /* functia intoarce numarul de cifre */ } int main(void) { long N; printf("N = "); /* afisam un mesaj pentru utilizator */ scanf("%ld", &N); /* citim numarul introdus de la tastatura */ printf("Numarul %ld are %d cifre!\n", N, nrcf(N)); /* afisez numarul de cifre */ return 0; }
Programul C care implementează algoritmul descris mai sus va fi:
Scrieţi o funcţie care să verifice dacă un număr întreg n conţine cifra c. Numerele n şi c sunt date ca parametri. Antetul funcţiei trebuie să respecte următorul format:
int cifra(int n, int c)
Programul primeste 2 parametri n si c ca in antetul de mai sus
Se va afisa DA sau NU. Astfel ca DA semnifica existenta cifrei c in numarul n, sau NU in caz contrar
Intrare | Ieşire |
---|---|
13584 3 | DA |
100111 0 | DA |
666013 8 | NU |
Ipoteza lui Goldbach: Orice număr par se poate exprima printr-o sumă de două numere prime, nu neapărat distincte. A. Scrieţi o funcţie care să verifice dacă un număr întreg este prim sau nu. Funcţia va returna valoarea 1 dacă N este număr prim şi 0 în caz contrar. Si trebuie sa aiba urmatorul antet:
int prim(int n)
B. Scrieţi un program care verifică ipoteza lui Goldbach prin afişarea tuturor descompunerilor distincte(de ex. nu se vor afişa şi “5+7” şi “7+5”) posibile în sumă de numere prime ale unui număr citit de la tastatură. Programul va apela funcţia prim.
Un numar N par.
Afisarea tuturor descompunerilor pentru numarul dat N
Intrare | Ieşire |
---|---|
12 | 1 + 11 5 + 7 |
Se citesc de la tastatură patru numere întregi reprezentând două fracţii x1 / y1 şi x2/ y2. Aduceţi fracţiile la acelaşi numitor (cel mai mic posibil) folosind o funcţie care calculează cel mai mic multiplu comun a două numere întregi. Consideraţi că fracţiile date ca input sunt deja în formă ireductibilă. Antetul funcţiei trebuie să respecte următorul format:
int cmmmc(int a, int b)
Patru numere intregi reprezentand x1, y1, x2, y2 cu semnificatia din enunt
Cele 2 fractii aduse la acelasi numitor
Intrare | Ieşire |
---|---|
1 2 1 11 | 11 22 2 22 |
5 12 3 14 | 35 84 18 84 |
Să se scrie un program pentru calculul sumei seriei Taylor pentru funcţia e^x până la un termen dat:
e^x = 1 + x/1! + (x^2)/2! + (x^3)/3! + … + (x^n)/n!
Se vor defini şi utiliza următoarele funcţii:
double taylor(double x, int n)
int factorial(int n)
double putere(double x, int n)
Fişierul de intrare va avea o singură linie, pe care se vor afla un număr real X şi un număr natural N.
Valoarea expresiei expuse mai sus pentru x şi n date, cu precizie de patru zecimale.
Intrare | Ieşire |
---|---|
2.5 10 | 12.1817 |
Se citesc n puncte de la tastatură, date prin coordonatele lor: x[i], y[i], i=1,n. Să se afişeze perechea de puncte între care distanţa este maximă (dacă există mai multe astfel de perechi, se poate afişa oricare dintre ele), precum şi această distanţă. Se va defini şi folosi o funcţie pentru calculul distanţei dintre două puncte în plan, care trebuie să respecte următorul antet:
float dist(int x1, int y1, int x2, int y2)
Un numar natural n, urmate de n linii, pe fiecare linie cate un punct dat prin coordonatele sale în plan, cu specificatia din enunt.
Pe primele doua linii perechea de puncte intre care distanta e maxima. Pe a treia linie se va regasi distanta
Intrare | Ieşire |
---|---|
4 0 0 0 1 1 0 1 1 | 0 0 1 1 1.414214 |
Scrieţi o funcţie care sortează cifrele unui număr astfel:
Funcţia trebuie să respecte următorul antet:
int transforma(int n)
Un numar dat N cu specificatia din enunt.
Cifrele numarului dat, sortate dupa cum se cere in enunt.
Intrare | Ieşire |
---|---|
19430123 | 94332110 |
2534562 | 2234556 |
Scrieţi o funcţie care caculează aria intersecţiei a două dreptunghiuri, date prin coordonatele colţurilor stânga-sus şi dreapta-jos. Coordonatele sunt numere întregi pozitive. Funcţia trebuie să respecte următorul antet:
int arie_intersectie(int x11, int y11, int x12, int y12, int x21, inty21, int x22, int y22)
Se vor citi 8 numere intregi, reprezentand coordonatele colturilor celor 2 figuri geometrice. Ele vor fi date in ordine conform cu antetul functiei pus la dispozitie in enunt.
Un numar reprezentand aria intersectiei dintre cele 2 dreptunghiuri.
Intrare | Ieşire |
---|---|
1 10 5 5 5 0 -1 -4 2 8 3 -1 2 -5 -8 4 | 5 0 -1 -4 2 8 3 -1 2 |
Secventa 2 8 3 -1 2 are de asemenea suma maximă, dar vom alege ca răspuns secvenţa care începe cel mai din stânga.
Scrieţi un program care citeşte un şir de numere şi verifică dacă acest şir este ordonat crescator sau ordonat descrescator sau nu este ordonat sau este un şir constant. Se afişează un mesaj: “crescator” , “descrescator”, “neordonat”, “constant” .
Pe prima linie se va afla un număr natural, N, ce reprezintă dimensiunea vectorului. Pe a doua linie se vor afla N numere întregi ce reprezintă elementele matricei.
Se va afişa mesajul specific.
Intrare | Ieşire |
---|---|
5 2 3 5 7 11 | crescator |
4 11 2 2 5 | neordonat |
3 3 3 3 | constant |
Scrieţi un program care citeşte n numere reale X şi m + 1 numere întregi A şi afişează numărul de valori din X situat în fiecare din cele m intervale deschise delimitate de valorile din A.
Pe prima linie se va afla numărul natural n. Pe a doua linie vor fi n numere reale. Pe a patra linie se va afla numărul natural m. Pe a cincea linie vor fi m numere întregi.
Se va afişa numărul de valori din X situat în fiecare din cele m - 1 intervale deschise delimitate de valorile din A sau mesajul Error dacă valorile din şirul A nu sunt sorte în ordine scrict crescătoare.
Intrare | Ieşire |
---|---|
7 5.2 4.1 1.1 5 5.9 6.7 3.14 4 2 3 5 7 | 0 2 3 |
7 5.2 4.1 1.1 5 5.9 6.7 3.14 4 2 5 3 7 | Error |
Nu sunt numere incluse în intervalul (2, 3).
În (3, 5) sunt incluse 3.14, 4.1.
În (5, 7) sunt incluse 5.2, 5.9, 6.7.
Program pentru calculul valorii unui polinom cu coeficienţi daţi, prin mai multe metode cu următoarea numerotare a coeficienţilor:
P(x) = c0 * xn + c1 * xn - 1 + … + cn - 1 * x + cn.
De exemplu: pentru n = 3 şi c = { 1, 2, 3, 4 }, corespunzătoare polinomului P(x) = x3 + 2 * x2 + 3 * x + 4, se poate scrie P(x) = x * (x * (x * 1 + 2) + 3) + 4
Pe prima linie se vor afla două numere: un număr real x şi un număr natural n ce reprezintă gradul polinomului. Pe a doua linie, separate printr-un spaţiu, n+1 numere întregi ce reprezintă coeficienţii polinomului ( c[0], c[1], …, c[n] ).
Se va afişa valoarea polinomului cu o precizie de 2 zecimale.
Intrare | Ieşire |
---|---|
0.5 3 1 2 3 4 | 6.12 |
Fie un vector de numere întregi (iniţial toate având valoarea 0) de lungime N. Se citesc de la tastatură un set de M tripleţi de forma B E V fiecare având urmatoarea semnificaţie : toate elementele din vector ale căror poziţii (indexate de la 0) sunt cuprinse între B şi E inclusiv vor fi modificate prin adunare cu V.
Afişati vectorul obţinut în urma aplicării celor M operaţii.
Pe prima linie se vor afla două numere naturale: N, ce reprezintă lungimea vectorului şi M, ce reprezintă numărul de tripleţi ce vor fi citiţi de la tastatură. Pe următoarele M linii, câte trei numere naturale, B, E şi V, separate prin câte un spaţiu.
Se vor afişa pe o linie elementele vectorului obţinut în urma aplicării celor M operaţii, separate prin câte un spaţiu.
Intrare | Ieşire |
---|---|
5 3 1 2 3 2 4 -1 0 1 2 | 2 5 2 -1 -1 |
Iniţial: 0 0 0 0 0
După (1 2 3): 0 3 3 0 0
După (2 4 -1): 0 3 2 -1 -1
După (0 1 2): 2 5 2 -1 -1