Documente Academic
Documente Profesional
Documente Cultură
*************************************** 10.00
*******
Care expresii sunt corecte ?
*************************************** 0x5775
*******
Ce extrage codul ? ***************************************
printf("Litera\0x41"); *******
Ce extrage codul ?
Litera char c = 'A' + 4;
printf("%c", c);
***************************************
******* Codul este corect. Va afişa un
Ce extrage codul ? caracter legal
char a[ ] = "123\0";
printf("%d", strlen(a)); ***************************************
*******
eroare la execuţie Ce extrage codul ?
printf("%d ", 7%4);
***************************************
******* 3
int i=0, j;
j=( i=4, i/2, i*i/i ); ***************************************
Care va fi valoarea lui j ? *******
Ce conţine variabila c ?
4 char c = '\101';
*************************************** -5
*******
Ce tip va avea rezultatul ***************************************
adunării a două variabile de tip *******
short ? Ce extrage codul ?
int x=0x1234, y=0x5555;
int printf("0x%04.4x", x^y);
*************************************** 0x4761
*******
*************************************** ***************************************
******* *******
Care iniţializare este greşită ? Ce valoare are a ?
int a, b=1, c=2, d=3, e=4, f=3;
int data[2][2]={ 1,2,3,4,5 }; a=b=c=d=e=f;
*************************************** 3
*******
Ce extrage codul ? ***************************************
int x=0x1234; *******
printf("0x%04.4", ~x); Ce extrage codul ?
short int a[ ] = { 1, 2, 3 };
0x0000 sau eroare la compilare printf("%d", sizeof(a) /
sizeof(a[0]));
***************************************
******* 3
Ce extrage codul ?
printf("%d", 64>>3); ***************************************
*******
8 Ce extrage codul ?
double x = 1.0 - 1/2 - 1/2;
*************************************** printf("%.2f", x);
*******
Cum se notează operaţia logică 1.00
AND ( şi ) în C ?
***************************************
&& *******
Care expresii calculează corect
valoarea fracţiei x/y ? AC
int x=5, y=2; float z;
***************************************
z=x/(float)y; *******
z=(float)x/(float)y; Ce afişează codul ?
z=(float)x/y; char a[ ]={ '1', '2', '3' };
printf("%d", sizeof(a));
***************************************
******* 3
Care este rezultatul operaţiei
sizeof( 5. ) ? ***************************************
*******
8 Ce afişează codul ?
int x=1;
*************************************** printf("%d", --x?++x:--x);
*******
Ce afişează codul ? -1
int i=4; int x=6; double z;
z=x/i; printf(z=%.2f ",z); ***************************************
*******
z=1.00 Ce extrage codul ?
short tar[4][3] = { {1}, {2,3},
*************************************** {4,5,6} };
******* printf("%d", sizeof(tar));
e extrage codul ?
char x='B'; 24
putchar(x-1);
putchar(x+1);
*************************************** 2. Ce este o operaţie de intrare
******* sau ieşire?
Ce afişează codul ? Operatie de shimb dintre program
int a=5^3; float b=1.5f; si periferic
b+=--a/2; printf("%.2f",b); 3. Ce este a în float a[10][50]
?Numele tabloului
3.50 4. Ce este un cuvînt cheie în C?
Cuvint cu utilizare predefinita ce
*************************************** nu poate fi schimbata de user
******* 5. Cum se stabileşte legătura
Constantele 314ul şi 134Lu au dintre numele variabilei şi tipul
acelaşi tip ei?
Prin declaratia variabilei
Fals 6. Ce este o operaţie de scriere?
Operatie de introducere a datelor la
*************************************** un periferic
******* 7. Ce este un şir de caractere?
Ce valori conţine tabloul x ? O succesiune de 0 sau mai multe
int x[10] = { 1,2,3,4,5,6,7,8,9,10 }; caractere scrise intre ghilimele
int y = 20, i = 10; x[--i]=y; 8. Unde poate fi amplasat un
comentariu în program?
{ 1,2,3,4,5,6,7,8,9,20 } Oriunde este legal un spatiu alb.
9. Ce este o operaţie de afişare?
Operatie de scriere la terminalul
standart(display)
1. Ce este o operaţie de citire? 10. Care este tipul unei
Operatie de introducere a datelor constante caracter? int
de la un periferic 11. Cum se reprezintă o
constantă caracter?
Caracterul sau secventa escape 20. Elementele unui tablou pot fi
intre caracterele apostrof de tipuri diferite. Fals
12. Ce valoare are a din 21. Elementele unei structuri pot
declaraţia int a[10]?Adresa fi de tipuri diferite.Adevarat
primului element in tablou 22. Pe câţi biţi se reprezintă o
13. Care este valoarea unei constantă hexazecimală? 16
constante caracter?Codul ASCII daca ii sunt suf.,altfel 32
al caracterului respectiv 23. Pe câţi biţi se reprezintă o
14. Ce este o declaraţie constantă zecimală întreagă? 16
implicită?In C nu exista declaratii daca ii sunt suf.,altfel 32
implicite 24. Pe câţi biţi se reprezintă o
15. Câtă memorie (în octeţi) constantă octală?16 daca ii sunt
ocupă un şir de n caractere? suf.,altfel 32
n+1 25. Citirea numerelor întregi cu
16. Poate, oare, fi schimbată scanf() se face prin intermediul
valoarea sau tipul unei variabile specificatorilor de format
în tipul execuţiei programului? definiţi de literele:
Valoarea da,tipul nu doxXu
17. Poate, oare, fi schimbată 26. Afişarea numerelor ce nu
valoarea sau tipul unei sunt întregi cu printf() se face
constante în timpul execuţiei prin intermediul specificatorilor
programului? de format definiţi de literele:
Valoarea nu,tipul nu doxXu
18. Afişarea şirurilor de 27. Afişarea numerelor întregi cu
caractere cu printf() se face prin printf() se face prin intermediul
intermediul specificatorilor de specificatorilor de format
format definiţi de literele:s definiţi de literele:
19. 0314 este o constantă doxXu
zecimală. Fals
28. Citirea numerelor ce nu sunt 36. Câtă memorie (în biţi) se
întregi cu scanf() se face prin alocă tipului long? 32
intermediul specificatorilor de 37. Pe câţi biţi se reprezintă o
format definiţi de literele: flfLf constantă octală ce se termină
29. Afişarea caracterelor cu cu L sau l?32
printf() se face prin intermediul 38. Pe câţi biţi se reprezintă o
specificatorilor de format constantă flotantă? 64
definiţi de literele: c 39. Câtă memorie (în biţi) se
30. Citirea şirurilor de caractere alocă tipului double? 64
cu scanf() se face prin 40. Câti octeţi ocupă tabloul
intermediul specificatorilor de float a[10][50] ?2000
format definiţi de literele: s 41. Câti octeţi ocupă tabloul
31. Citirea caracterelor cu double a[10][50] ? 4000
scanf() se face prin intermediul 42. Câţi octeţi ocupă tabloul
specificatorilor de format char a[100] ?100
definiţi de literele: c 43. Câtă memorie (în biţi) se
32. Pe câţi biţi se reprezintă o alocă tipului long double? 80
constantă zecimală întreagă ce 44. Pe câţi biţi se reprezintă o
se termină cu L sau l? 32 constantă flotantă ce se termină
33. Câtă memorie (în biţi) se cu L sau l? 80
alocă tipului float? 32 45. Fie declaraţia int a[10], câtă
34. Pe câţi biţi se reprezintă o memorie (în octeţi) se alocă?20
constantă flotantă ce se termină 46. Câtă memorie (în biţi) se
cu F sau f?32 alocă tipului int?16
35. Pe câţi biţi se reprezintă o 47. Care este indicele ultimului
constantă hexazecimală ce se element al tabloului int a[10] ? 9
termină cu L sau l? 32 48. Câtă memorie (în biţi) se
alocă tipului char? 8
49. Ce indice are primul element Care este poziţia parametrilor
al tabloului int a[10] ? 0 impliciţi în lista de parametri ai
50. Care este valoarea inferioară unei funcţii ?
pentru indici în tablouri?0 ultimii în listă
cout << setw(1) << 32767 << setw(4) 1 char * const s1 = "abc", *s2 =
<< 32767 << setw(7) << 32767 << "ABC";
setw(10) << 32767; Care din următoarele atribuiri
sunt corecte? 1,2
Câte numere egale vom obţine pe 1) s1[0] = s2[0];
ecran? 2) s1[0] = 'A';
3) s1 = s2;
2
2 union { int a; float b; double c;
int x; cin >> x;
} u = {3.14};
Cum se numeşte aici operatorul Ce valoare are u.a? imprevizibil
">>" ?
3 Ce valoare are sizeof 'a' în
Operator de extragere C? e. 2
Part 2
1 3
class my { int a; class my { int a;
public: my(); public: my(int a) { my::a=5; }
void show_a(); }; ~my() { cout << " Aici destructorul!";
my::my() { cout << "a="; cin >> a; }
a=25;} void show_a() { cout << " " << a; } };
void my::show_a() { cout << a; }
main() { my *p; p=new my[3]; p[i].show_a(); }
for(int i=0; i<3; i++) Ce afişează? Mesaj de eroare
p[i].show_a(); } 6
Ce afişează? Mesaj de eroare class my { int a;
4 public: my(int a);
class my { int a, b; my();
public: my(int a=1, int b=2) void show_a(); };
{ my::a=a; my::b=6; } my::my(int a) { my::a=a; }
void show_a() { my::my() { cout << "a="; cin >> a; }
cout << " " << a << " " << b; } }; void my::show_a() { cout << a; }
main() { my a; main() { my a;
int c; int c;
c=-(3-a); c=a*3;
cout << c; } cout << c; }
Ce afişează? Mesaj de eroare Ce afişează? 0
6 8
class my { int a; class my { int a;
public: my() { cout << public: my() { cout <<
"a="; cin >> a; } "a="; cin >> a; }
void show_a() { void show_a() {
cout << a; } cout << a; }
int operator +(int b) int operator -(int b) {
{ return ( (a+b)%3 ); } }; return ( (a-b)%5 ); } };
main() { my a;
int c; main() { my a;
c=7+a; int c;
cout << c; } c=a- -3;
Ce afişează? Mesaj de eroare cout << c; }
9 Ce afişează? Valoarea a+3 modulo
class my { int a; 5; Restul impartirii (a+3)/5
public: my() { cout <<
"a="; cin >> a; } Part 4
void show_a() { 1
cout << a; } class A { protected:int a;
int operator *(int b) public:A(int x=7){a=0;}};
{ return ( (a*b)%2 ); } };
class B: public A { int b;
main() { my a; void show(){ cout << a << endl; }
int c; public:B(int x=5){b=x;}};
c=a*3;
cout << c; } int main() {
Ce afişează? 1, dacă produsul B y(3); y.show();
numerelor a şi 3 este impar; 0, dacă return 0; }
produsul numerelor a şi 3 este par
10 Ce afişează ? compilation error
class my { int a;
public: my() { cout <<
"a="; cin >> a; }
2 4
class A { protected: int a; class A { protected:int a;
public:A(int x=3){a=x;}}; public:A(int x=3){a=0;}};
9 11
class A { int a; class A { int a;
public:A(int x=3){a=x;} public:A(int x=3){a=0;}
void show(){ cout << a << endl; }}; private:void show(){ cout << a <<
endl; }};
class B: public A { int b;
public:B(int x=5){b=x;}}; class B: protected A { int b;
public:B(int x=5){b=x;}};
int main() {
B y(7); y.show(); int main() {
return 0; } B y(7); y.show();
return 0; }
Ce extrage ? 3
Ce extrage ? compilation error
10
class A { int a; 12
public:A(int x=5){a=x;} class A { protected:int a;
private:void show(){ cout << a << public:A(int x=3){a=x;}};
endl; }};
class B: public A { int b;
class B: public A { int b; public:void show(){ cout << a <<
public:B(int x=7){b=x;}}; endl; }
B(int x=5){b=x;}};
int main() {
B y(3); y.show(); int main() {
B *p=new B(7); B y(7); y.show();
p->show(); return 0; }
return 0; }
Ce afişează ? compilation error
Ce extrage ?3
15
13 class A { int a;
class A { int a; public:A(int x=5){a=x;}
public:A(int x=3){a=x;} void show(){ cout << a << endl; }};
void show(){ cout << a << endl; }};
class B: pivate A { int b;
class B: protected A { int b; public:B(int x=3){b=x;}};
public:B(int x=5){b=x;}};
int main() {
int main() { B y(7); y.show();
B y(7); y.show(); return 0; }
return 0; }
Ce extrage ? compilation error
Ce extrage ? compilation error
16
14 class A { int a;
class A { int a; public:A(int x=7){a=x;}
public:A(int x=5){a=x;}}; protected:void show(){ cout << a <<
endl; }};
class B: public A { int b;
public:B(int x=3){b=0;} class B: protected A { int b;
void show(){ cout << a << endl; }}; public:B(int x=3){b=x;}};
int main() 8
{ A a, *p; B b; C c; class A {protected: double x,y;
p=&c; virtual void show(){cout << x+y <<
p->show(); endl;}
return 0; } A(double x=1, double
y=2){A::x=x;A::y=y;}};
Ce extrage ?3
class B: public A {protected: int x,y;
7 void show(){cout << x-y << endl;}
class f{public:virtual double s()=0;}; B(int x=3, int y=4){B::x=x;B::y=y;}};
class r: public f {double a,b; class C: public B {unsigned x,y;
public:double s(){return a*b;} void show(){cout << x*y << endl;}
r(double a=3, double b=4){this- C(unsigned x=5, unsigned
>a=a;this->b=b;}}; y=6){C::x=x;C::y=y;}};
class c: public f {double r; int main()
public: double s(){return M_PI*r*r;} { A a, *p; B b; C c;
c(double r=0){c::r=r;}}; p=&c;
p->show();
int main() return 0; }
{ f *p=new f; r b; c d(1);
p=&b; cout << p->s() << endl;
10
Ce extrage ? compilation error class A {protected: double x,y;
virtual void show(){cout << x+y <<
9 endl;}
class A {protected: double x,y; A(double x=1, double
public:virtual void show(){cout << y=2){A::x=x;A::y=y;}};
x+y << endl;}
A(double x=1, double class B: public A {protected: int x,y;
y=2){A::x=x;A::y=y;}}; void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << class C: public B {unsigned x,y;
endl;} public: void show(){cout << x*y <<
B(int x=3, int y=4){B::x=x;B::y=y;}}; endl;}
C(unsigned x=5, unsigned
class C: public B {unsigned x,y; y=6){C::x=x;C::y=y;}};
public: void show(){cout << x*y <<
endl;} int main()
C(unsigned x=5, unsigned { A a, *p; B b; C c;
y=6){C::x=x;C::y=y;}}; p=&b;
p->show();
int main() return 0; }
{ A a, *p; B b; C c;
p=&b; Ce extrage ? compilation error
p->show();
return 0; } 11
class f{public:virtual double s()=0;};
Ce extrage ?-1
class r: public f {double a,b;
public:double s(){return a*b;} endl;}
r(double a=3, double b=4){this- C(unsigned x=5, unsigned
>a=a;this->b=b;}}; y=6){C::x=x;C::y=y;}};
int main() 18
{ A a, *p; B b; C c; class A {protected: double x,y;
(p=&c)->show(); virtual void show(){cout << x+y <<
return 0; } endl;}
public:A(double x=1, double
Ce extrage ?-1 y=2){A::x=x;A::y=y;}};
41. La intrare avem : C++ is fine 44. Cout << “hello, C++!”;
! Cum se numeste aici operatorul
Ce obtinemla iesire ? “<<”?
Char s[22]; cin >> s; cout << s; a. Operator de inserare
a. ++ b. Operator de extragere
b. Eroare la compilare c. Deplasarea de biti la stinga
g. 3
45. Fie sizeof(int) este 4 si cout <<
32323 + 23232; 48. Care modificator defineşte
Ce extrage ? modul de aliniere pentru valorile
a. Eroare la compilare extrase cu cout ?
b. Un rezultat gresit a. Setw()
c. Imprevizibil b. Setf()
d. 55555 c. Setprecision()
d. Setfill()
46. Char msg[15]; e. Setbase()
Cin >> msg ;
Cout << msg;
La intrare avem mesajul “Hello !
C++!” 1)int *p = new int(10); *p = -10;
Ce va afisa ? Ce valoare are p ?
a. Nimic b. adresa unde este stocată
b. C++! valoarea 10
c. Hello !C++!
d. Hello const char *s1 = "abc", *s2 =
"ABC";
47. Int s =2; double c=3; 2)Care din următoarele atribuiri
Ce valoare are sizeof(2<3 ? s : c) sunt corecte ?
? 1) s1[0] = s2[0];
a. Sizeof(int) 2) s1[0] = 'A';
b. 8 3) s1 = s2; b. 3
c. 4
d. 1
3) .. { int x = 10; { int x = -10;
e. 2
cout << ::x; } }
f. Eroare
Ce extrage d. eroare la
compilare 11) Ce valoare are sizeof 'ab' în
C? f. eroare sintactică
4) Ce valoare are sizeof 'a' în C ?
e. 2 12) int& f(int& a) { return a; } ... int
a = 10;
5) int a = 10;
int& ra; Ce returnează f(a) ? c. 10
ra = a;
Ce valoarea are ra ? 13) Ce tip are constanta 'a' în
a. eroare la compilare C++ ? c. Char
18) int& f(int a) { return a; } ... int a 23) union { int a; float b; double
= 10; c; } u = {3.14};
Ce returnează f(a) ? Ce valoare are u.b ?
a. 10 d. Imprevizibil
2)Care modificator defineşte 7)cout << dec << 12 << oct << 12 <<
lăţimea câmpului de extragere a hex << 12;
datelor cu cout ? Ce va afişa?
b. 1214c
d. setw()
3)Care modificator defineşte
numărul de semne zecimale 8)cout << setw(1) << 32767 <<
pentru valorile flotante extase setw(4) << 32767 << setw(7) <<
cu cout ? 32767 << setw(10) << 32767;
d. setprecision()
Câte numere egale vom obţine
4)int s = 10, c = 20; pe ecran? a. 2
cout << setbase(8) << s << ' ' <<
dec << c; 9)Fie sizeof(int) este 4 şi
Ce extrage ? cout << 32323 + 23232;
. 12 20 Ce extrage ?
c. 55555
5)char s[5], c[3];
cin >> s >> c; 10)cout << "Hello, C++!";
cout << s << c; Cum se numeşte aici operatorul
La intrare avem: Limbajul C++ "<<" ? a. Operator de
Ce extrage ? inserare
c. Imprevizibil 11)char msg[15];
cin >> msg;
cout << msg;
La intrare avem mesajul Cum se numeşte aici operatorul
"Hello!C++!" ">>" ? a. Operator de
Ce va afişa? extragere
b. Hello!C++!
17) int s = 10, c = 20;
12)Care modificator defineşte cout << setbase(8) << s << ' ' <<
modul de aliniere pentru valorile c; d. 12 24
extrase cu cout
18 )int s = 3, c = 4;
e. setf() cout << setprecision(1) <<
13)int s = 2 > 1 << 2; double(s)/c; a. 0.8
cout << s;
Ce extrage ? 19 )int s = 2; double c = 3;
d. 0 Ce valoare are sizeof( 2 < 3 ? s :
c)? d. 8
14)cout << "C++ are clase!" <<
'\n' << "C++ are clase!"<< "\n" << Testul-3_C++
"C++ are clase!" << endl; Pe 1 Cum pot fi accesaţi membrii
câte linii vom obţine acelaşi privaţi ai unei structuri ?
mesaj ? c. 3 c. Prin
funcţii membru publice
15)La intrare avem: C++ is fine!
Ce obţinem la ieşire ? 2 Care parte a definiţiei unei clase
char s[22]; cin >> s; cout << s; defineşte modul de implementare a
e. C++ unui TAD?
b. m.c(10)
f. w[1]->n
2 class A { int b;
void c(int d) { b=d; } Puncte: 10
public: int e; Ce valoare are sizeof 'ab' în C ?
void f(int g) { b=g; } } x, *w, t[3]; Alegeţi un răspuns.
a. 2 float f(int x = 0, int y = 1) {
return float(x)/y; }
b. 8
c. sizeof(int) Ce returnează f(1,1) ?
d. 1
Alegeţi un răspuns.
e. sizeof(long)
a. 1
f. 4
b. imprevizibil
g. eroare
sintactică c. 2
Puncte: 10 d. eroare la compilare
Puncte: 10
13. int& f(int& a, int& b) { return a 15.int& f(int& a) { return a; } ... int
+ b; } a = 10;
... int a = 2, b = 8;
Ce returnează f(a) ?
Ce returnează f(a,b) ? Alegeţi un răspuns.
Alegeţi un răspuns. a. nu se poate determina
b. 10 18. double f(); // declaraţie prototip
funcţie C++
c. eroare la compilare
Puncte: 10 Câţi parametri are funcţia ?
Alegeţi un răspuns.
16. int& f(int x) { return -x; } a. 1
b. 0
Ce valoare are f(7) ? c. eroare sintactică
Alegeţi un răspuns. d. nu se poate determina
a. eroare la Puncte: 10
compilare
b. imprevizibil
19. int *p = new int(10); *p = -10;
c. 7
d. -7 Ce valoare are p ?
Puncte: 10
Alegeţi un răspuns.
17. Ce tip are constanta 'a' în C ? a. 10
Alegeţi un răspuns. b. adresa unde este stocată
a. short valoarea 10
b. char c. -10
c. int d. adresa unde este stocată
valoarea -10
d. eroare sintactică
e. eroare la compilare
Puncte: 10
Puncte: 10
20. f(); // declaraţie prototip funcţie 22. int& p = *new int(10); p = -10;
C++
Ce valoare are p ?
Ce tip returnează funcţia ?
Alegeţi un răspuns. Alegeţi un răspuns.
a. int a. -10
b. eroare sintactică b. adresa unde este stocată
valoarea 10
c. void
c. eroare la compilare
d. imprevizibil
d. 10
Puncte: 10
e. adresa unde este stocată
valoarea -10
21. union { int a; float b; double c; } Puncte: 10
u = {3.14};
23. int a = 10;
Ce valoare are u.a ? int& ra;
ra = a;
Alegeţi un răspuns.
a. 3 Ce valoarea are ra ?
b. imprevizibil Alegeţi un răspuns.
c. 3.14 a. 10
d. 0 b. eroare la
compilare
e. eroare la compilare
c. imprevizibil
Puncte: 10
24. Ce valoare are sizeof 'ab' în C++
?
Alegeţi un răspuns. c. short
a. sizeof(int) d. eroare sintactică
b. 1 e. char
c. sizeof(long)
d. 8
27. { int y = 10; { int x = -10; } cout
e. 4 << x;}
f. eroare sintactică
g. 2 Ce extrage ?
Puncte: 10 Alegeţi un răspuns.
a. 10
25. Ce tip are constanta 'ab' în C++
? b. eroare la compilare
Alegeţi un răspuns. c. -10
a. long d. imprevizibil
b. char Puncte: 10
c. int
28. int& f(int a) { return a; } ... int a
d. short
= 10;
e. eroare sintactică
Puncte: 10 Ce returnează f(a) ?
Alegeţi un răspuns.
26. Ce tip are constanta 'ab' în C ? a. nu se poate determina
Alegeţi un răspuns. b. 10
a. long
c. eroare la compilare
b. int
Testul 2 b. 10 20
Puncte: 10
c. 20 12
30. int s = 10, c = 20; d. eroare
cout << setbase(8) << s << ' ' << c; e. 12 20
f. 24 10
Ce extrage ?
Puncte: 10
Alegeţi un răspuns.
a. 32. cout << dec << 12 << oct << 12
eroare << hex << 12;
b. 20 Ce va afişa?
10
c. 24 Alegeţi un răspuns.
12 a. 121212
d. 12 b. 1214c
24
c. 101214
e. 10
20
31. int s = 10, c = 20; 33. int s = 3, c = 4;
cout << setbase(8) << s << ' ' << dec cout << setprecision(1) <<
<< c; double(s)/c;
Ce extrage ? Ce extrage ?
Alegeţi un răspuns. Alegeţi un răspuns.
a. 20 10 a. eroare
b. 0.75 “\n” << “ C++ are clase ! “ <<
endl;
c. 0.8
Pe cite linii vom obtine acelasi
Puncte: 10 mesaj ?
41. La intrare avem : C++ is fine 44. Cout << “hello, C++!”;
! Cum se numeste aici operatorul
Ce obtinemla iesire ? “<<”?
Char s[22]; cin >> s; cout << s; d. Operator de inserare
f. ++ e. Operator de extragere
g. Eroare la compilare f. Deplasarea de biti la stinga
h. C++
i. C++ is fine! 45. Fie sizeof(int) este 4 si cout <<
j. Imprevizibil 32323 + 23232;
Ce extrage ? 48. Care modificator defineşte
e. Eroare la compilare modul de aliniere pentru valorile
f. Un rezultat gresit extrase cu cout ?
g. Imprevizibil f. Setw()
h. 55555 g. Setf()
h. Setprecision()
46. Char msg[15]; i. Setfill()
Cin >> msg ; j. Setbase()
Cout << msg;
La intrare avem mesajul “Hello ! cout << setw(1) << 32767 <<
C++!” setw(4) << 32767 << setw(7) <<
Ce va afisa ? 32767 << setw(10) << 32767;
e. Nimic Câte numere egale vom obţine
f. C++! pe ecran?
g. Hello !C++! Select one:
h. Hello a. 4
b. 3
47. Int s =2; double c=3; c. Vom obţine un mesaj de eroare
Ce valoare are sizeof(2<3 ? s : c) d. 2
? e. 0
h. Sizeof(int)
i. 8
j. 4
k. 1 cout << "C++ are clase!" << '\n'
l. 2 << "C++ are clase!"<< "\n" <<
m. Eroare "C++ are clase!" << endl;
n. 3 Pe câte linii vom obţine acelaşi
mesaj ?
Select one: a. eroare la compilare
a. Vom obţine un mesaj de eroare b. Limbajul
b. 0 c. imprevizibi
c. 2 d. LimbajulC++
d. 3 e. Limbajul C++
int s = 2; double c = 3;
Care modificator defineşte
modul de aliniere pentru valorile Ce valoare are sizeof( 2 < 3 ? s :
extrase cu cout ? c)?
Select one: Select one:
a. setprecision() a. 4
b. setw() b. eroare
c. setf() c. sizeof(int)
d. setfill() d. 1
e. setbase() e. 3
f. 8
g. 2
Ce extrage ?
int s = 3, c = 4;
cout << setprecision(1) <<
double(s)/c; Select one:
a. 0
Ce extrage ? b. 4
Select one: c. 1
a. 0.8 d. eroare
b. eroare
c. 0.75 Fie sizeof(int) este 2 şi
Problema 9
class A {protected: double x,y;
public:virtual void show(){cout << Problema 10
x+y << endl;} class A {protected: double x,y;
A(double x=1, double public:virtual void show(){cout <<
y=2){A::x=x;A::y=y;}}; x+y << endl;}
class B: public A {protected: int A(double x=1, double
x,y; y=2){A::x=x;A::y=y;}};
public:B(int x=3, int class B: public A {protected: int
y=4){B::x=x;B::y=y;}}; x,y;
class C: public B {unsigned x,y; public:void show(){cout << x-y <<
public: void show(){cout << x*y << endl;}
endl;} B(int x=3, int y=4){B::x=x;B::y=y;}};
C(unsigned x=5, unsigned class C: public B {unsigned x,y;
y=6){C::x=x;C::y=y;}}; public: void show(){cout << x*y <<
int main() endl;}
{ A a, *p; B b; C c; C(unsigned x=5, unsigned
(p=&b)->show(); y=6){C::x=x;C::y=y;}};
return 0; } int main()
Ce extrage ? { A a, *p; B b; C c;
Alegeţi un răspuns. e. 3 p=&b;
p->show();
return 0; } class B: public A {protected: int
Ce extrage ? x,y;
Alegeţi un răspuns. e. -1 void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
void show(){cout << x*y << endl;}
Problema 11 C(unsigned x=5, unsigned
class f{public:virtual double y=6){C::x=x;C::y=y;}};
s()=0;}; int main()
class r: public f {double a,b; { A a, *p; B b; C c;
public:double s(){return a*b;} p=&c;
r(double a=3, double b=4){this- p->show();
>a=a;this->b=b;}}; return 0; }
class c: public f {double r; Ce extrage ?
public: double s(){return M_PI*r*r;} Alegeţi un răspuns. d.
c(double r=0){c::r=r;}}; compilation error
int main()
{ f *p; r b; c d(1);
p=&b; cout << p->s() << endl;
return 0; } Problema 13
Ce extrage ? class A {protected: double x,y;
Alegeţi un răspuns. e. 12 public:virtual void show(){cout <<
x+y << endl;}
Problema 12 A(double x=1, double
class A {protected: double x,y; y=2){A::x=x;A::y=y;}};
virtual void show(){cout << x+y << class B: public A {protected: int
endl;} x,y;
A(double x=1, double public:void show(){cout << x-y <<
y=2){A::x=x;A::y=y;}}; endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}}; y=6){C::x=x;C::y=y;}};
class C: public B {unsigned x,y; int main()
public: void show(){cout << x*y << { A a, *p; B b; C c;
endl;} p->show();
C(unsigned x=5, unsigned return 0; }
y=6){C::x=x;C::y=y;}}; Ce extrage ?
int main() Alegeţi un răspuns. a.
{ A a, *p; B b; C c; compilation error
p=&a;
p->show(); Problema 15
return 0; } class A {protected: double x,y;
Ce extrage ? public:virtual void show(){cout <<
Alegeţi un răspuns. f. 3 x+y << endl;}
A(double x=1, double
Problema 14 y=2){A::x=x;A::y=y;}};
class A {protected: double x,y; class B: public A {protected: int
public:virtual void show(){cout << x,y;
x+y << endl;} public:void show(){cout << x-y <<
A(double x=1, double endl;}
y=2){A::x=x;A::y=y;}}; B(int x=3, int y=4){B::x=x;B::y=y;}};
class B: public A {protected: int class C: public B {unsigned x,y;
x,y; public:C(unsigned x=5, unsigned
public:void show(){cout << x-y << y=6){C::x=x;C::y=y;}};
endl;} int main()
B(int x=3, int y=4){B::x=x;B::y=y;}}; { A a, *p; B b; C c;
class C: public B {unsigned x,y; p=&c;
public: void show(){cout << x*y << p->show();
endl;} return 0; }
C(unsigned x=5, unsigned Ce extrage ?
Alegeţi un răspuns. b. -1
Problema 17
class A {protected: double x,y;
public:virtual void show(){cout <<
x+y << endl;}
Problema 16 A(double x=1, double
class A {protected: double x,y; y=2){A::x=x;A::y=y;}};
virtual void show(){cout << x+y << class B: public A {protected: int
endl;} x,y;
A(double x=1, double public:void show(){cout << x-y <<
y=2){A::x=x;A::y=y;}}; endl;}
class B: public A {protected: int B(int x=3, int y=4){B::x=x;B::y=y;}};
x,y; class C: public B {unsigned x,y;
void show(){cout << x-y << endl;} public: void show(){cout << x*y <<
B(int x=3, int y=4){B::x=x;B::y=y;}}; endl;}
class C: public B {unsigned x,y; C(unsigned x=5, unsigned
public: void show(){cout << x*y << y=6){C::x=x;C::y=y;}};
endl;} int main()
C(unsigned x=5, unsigned { A a, *p; B b; C c;
y=6){C::x=x;C::y=y;}}; p=&c;
int main() p->show();
{ A a, *p; B b; C c; return 0; }
p=&b; Ce extrage ?
p->show(); Alegeţi un răspuns b. 30
return 0; }
Ce extrage ? Problema 18
Alegeţi un răspuns. d. class A {protected: double x,y;
compilation error public:virtual void show(){cout <<
x+y << endl;} public: double s(){return M_PI*r*r;}
A(double x=1, double c(double r=0){c::r=r;}};
y=2){A::x=x;A::y=y;}}; int main()
class B: public A {protected: int { f *p; r b; c d(1);
x,y; p=&d; cout << p->s() << endl;
public:void show(){cout << x-y << return 0; }
endl;} Ce extrage ?
B(int x=3, int y=4){B::x=x;B::y=y;}}; Alegeţi un răspuns. e. 3.14159
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned Problema 20
y=6){C::x=x;C::y=y;}}; class A {protected: double x,y;
int main() virtual void show(){cout << x+y <<
{ A a, *p; B b; C c; endl;}
(p=&c)->show(); public:A(double x=1, double
return 0; } y=2){A::x=x;A::y=y;}};
Ce extrage ? class B: public A {protected: int
Alegeţi un răspuns. c. -1 x,y;
void show(){cout << x-y << endl;}
public:B(int x=3, int
y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
Problema 19 void show(){cout << x*y << endl;}
class f{public:virtual double public: C(unsigned x=5, unsigned
s()=0;}; y=6){C::x=x;C::y=y;}};
class r: public f {double a,b; int main()
public:double s(){return a*b;} { A a, *p; B b; C c;
r(double a=3, double b=4){this- p=&c;
>a=a;this->b=b;}}; p->show();
class c: public f {double r;
return 0; }
Ce extrage ?
Alegeţi un răspuns. c.
compilation error
Problema 21 Problema 22
class A {protected: double x,y; class A {protected: double x,y;
public:virtual void show(){cout << virtual void show(){cout << x+y <<
x+y << endl;} endl;}
A(double x=1, double public:A(double x=1, double
y=2){A::x=x;A::y=y;}}; y=2){A::x=x;A::y=y;}};
class B: public A {protected: int class B: public A {protected: int
x,y; x,y;
public:void show(){cout << x-y << void show(){cout << x-y << endl;}
endl;} public:B(int x=3, int
B(int x=3, int y=4){B::x=x;B::y=y;}}; y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y; class C: public B {unsigned x,y;
public: void show(){cout << x*y << public: void show(){cout << x*y <<
endl;} endl;}
C(unsigned x=5, unsigned C(unsigned x=5, unsigned
y=6){C::x=x;C::y=y;}}; y=6){C::x=x;C::y=y;}};
int main() int main()
{ A a, *p; B b; C c; { A a, *p; B b; C c;
(p=&c)->show(); p=&b;
return 0; } p->show();
Ce extrage ? return 0; }
Alegeţi un răspuns. e. 30 Ce extrage ?
Alegeţi un răspuns. a.
compilation error
Ce valoare are sizeof 'a' în C++ ?
Problema 23 1
class A {protected: double x,y;
public:virtual void show(){cout << Ce tip are constanta 'ab' în C ?
x+y << endl;} eroare sintactică
A(double x=1, double
y=2){A::x=x;A::y=y;}}; Ce valoare are sizeof 'ab' în C++
class B: public A {protected: int ?
x,y; sizeof(int)
public:B(int x=3, int
y=4){B::x=x;B::y=y;}}; Ce tip are constanta 'ab' în C++ ?
class C: public B {unsigned x,y; Int
public:C(unsigned x=5, unsigned
y=6){C::x=x;C::y=y;}}; Ce valoare are sizeof 'ab' în C ?
int main() eroare sintactică
{ A a, *p; B b; C c;
(p=&c)->show(); Care este poziţia parametrilor
return 0; } impliciţi în lista de parametri ai
Ce extrage ? unei funcţii ?
Alegeţi un răspuns. b. 3 ultimii în listă
Ce tip are constanta 'a' în C ?
Int int a = 10;
int& ra;
Ce valoare are sizeof 'a' în C ? ra = a;
sizeof(int) Ce valoarea are ra ?
eroare la compilare
Ce tip are constanta 'a' în C++ ?
Char
int& f(int x) { return -x; } double f(); // declaraţie prototip
Ce valoare are f(7) ? funcţie C++
eroare la compilare Câţi parametri are funcţia ?
0
const char *s1 = "abc", *s2 =
"ABC";
Care din următoarele atribuiri ... { int x = 10; { int x = -10;
sunt corecte ? cout << ::x; } }
1) s1[0] = s2[0]; Ce extrage ?
2) s1[0] = 'A'; eroare la compilare
3) s1 = s2; int x = -10; // var. globală
3 { int x = 10; cout << ::x; }
Ce extrage ?
char * const s1 = "abc", *s2 = -10
"ABC";
Care din următoarele atribuiri ... { int y = 10; { int x = -10;
sunt corecte ? } cout << x;}
1) s1[0] = s2[0]; Ce extrage ?
2) s1[0] = 'A'; eroare la compilare
3) s1 = s2;
12 int *p = new int(10); *p = -10;
Ce valoare are p ?
f(); // declaraţie prototip funcţie adresa unde este stocată
C++ valoarea -10
Ce tip returnează funcţia ?
int int& p = *new int(10); p = -10;
Ce valoare are p ?
-10
imprevizibil
int& f(int& a) { return a; } ... int a =
10; union { int a; float b; double c; }
Ce returnează f(a) ? u = {3.14};
10 Ce valoare are u.a ?
3
int& f(int a) { return a; } ... int a =
10; struct A { int B; ... } C;
Ce returnează f(a) ? Care expresie este corectă ?
eroare la compilare C.B
int s = 3, c = 4;
cout << setprecision(1) <<
cout << "C++ are clase!" << '\n'
cout << "Hello, C++!"; << "C++ are clase!"<< "\n" <<
"C++ are clase!" << endl;
Cum se numeşte aici operatorul
"<<" ? Pe câte linii vom obţine acelaşi
mesaj ?
Operator de inserare
3
Ce va afişa?
cout << setw(1) << 32767 <<
1214c setw(4) << 32767 << setw(7) <<
32767 << setw(10) << 32767;
Operator de extragere
c. Prin
funcţii membru publice
5 class a { int b;
void c(void) { b=26; cout << b; } } d;
main() { d.b=16; cout << d.b; }
Nota 9.73
Testul 4
main() { my ob;
int a=25;
ob.show_a(); }
main() { my a(3);
f(a); }
main() { my a(3); 6
f(a); } class my { int a;
Ce afişează? d. 5 Aici destructorul!! public: my(int a=5) {
my::a=1; }
4 ~my() { cout << " Aici
struct S { int a,b; destructorul!"; }
public: S() { a=2; b=3; } void show_a() { cout << "
void show() { cout << a << ' ' << b; } " << a; } };
} w;
main() { w.show(); } void f(my& b) { b.show_a(); }
19 Ce afişează?
class my { int a; g. Mesaj de eroare
public: my(int a);
void show_a(); }; 21
my::my(int a) { my::a=a; } class my { int a;
void my::show_a() { cout << a; } public: my(int a=1) {
my::a=2; }
main() { my ob(25); void show_a() {
int a=15; cout << a; } };
ob.show_a();}
main() { my ob(3); my& p=ob;
Ce afişează? p.show_a(); }
d. 25 Ce afişează?
a. 2
20 22
class my { int a; class my { int a;
public: my(int a) { public: my(int a) { my::a=5; }
my::a=3; } my() { a=1; }
~my() { cout << " Aici destructorul!"; class S { int a,b;
} public: S() { a=2; b=3; }
void show_a() { cout << " " << a; } }; } x,y,z;
main() { z=x*y; ... }
main() { my *p; p=new my[3]; Ce valoare are z?
for(int i=0; i<3; i++) b. Eroare la compilare
{ p[i].show_a();
p[i].~my(); } }
Ce afişează?
a. Lipseşte răspunsul corect 25
(1 Aici destructorul! 1 Aici class my { int a;
destructorul! 1 Aici destructorul!) public: my(int a=1) {
my::a=5; }
23 ~my() { cout << "
class my { int a; Aici destructorul!"; }
public: my(int a=4) { void show_a() {
my::a=a; } cout << " " << a; } };
my() { a=5; } main() { my *p; p=new my(3);
void show_a() { p->show_a(); }
cout << " " << a; } }; Ce afişează?
b. 5
main() { my a[4]={1,2,3,4};
for(int i=0; i<4; i++) 26
a[i].show_a(); } class my { int a;
public: my(int a);
Ce afişează? my();
d. 1 2 3 4 void show_a(); };
my::my(int a) { my::a=a; }
24 my::my() { cout << "a="; cin >> a; }
void my::show_a() { cout << a; } 28
class my { int a;
main() { my ob=my(); public: my(int a) {
int a=125; my::a=5; }
ob.show_a(); } my() { }
~my() { cout << "
Ce afişează? Aici destructorul!"; }
c. Numărul introdus void show_a() {
cout << " " << a; } };
27
class my { int a; main() { my *p; p=new my[3];
public: my(int a) { for(int i=0; i<3; i++)
my::a=5; } p[i].show_a(); }
my() { a=1; }
~my() { cout << " Ce afişează?
Aici destructorul!"; } f. Lipseşte răspunsul corect
void show_a() { (imprevizibil)
cout << " " << a; } };
29
main() { my *p; p=new my[3]; class my { int a;
for(int i=0; i<3; i++) public: my(int a);
{ p[i].show_a(); my();
p[i].~my(); } } void show_a(); };
my::my(int a) { my::a=a; }
Ce afişează? my::my() { cout << "a="; cin >> a; }
c. Lipseşte răspunsul corect void my::show_a() { cout << a; }
(1 Aici destructorul! 1 Aici
destructorul! 1 Aici destructorul!) main() { my ob;
int a=25;
ob.show_a(); } ob.show_a(); }
Ce afişează? Ce afişează?
c. Numărul introdus c. Numărul introdus
32
class my { int a;
30 public: my();
class S { int a,b; void show_a(); };
public: S() { a=2; b=3; } my::my() { cout << "a="; cin >> a; }
} w; void my::show_a() { cout << a; }
main() { cout << w.a+w.b; }
main() { my ob;
Ce va afişa? int a=25;
b. Eroare la compilare ob.show_a(); }
Ce afişează?
a. Numărul inrodus
31
class my { int a; 33
public: my(int a); class my { int a, b;
my(); public: my(int a=1, int b=2)
void show_a(); }; { my::a=a; my::b=6; }
my::my(int a) { my::a=a; } void show_a() {
my::my() { cout << "a="; cin >> a; } cout << " " << a << " " << b; } };
void my::show_a() { cout << a; }
main() { my a[2][3]={ my(1,2), my(),
main() { my ob=my(); 1, 2, my(3), my(3,4) };
int a=25; for(int i=0; i<2; i++)
{ for(int j=0; j<3; j++) main() { my *p; p=new my[3];
a[i][j].show_a(); for(int i=0; i<3; i++)
cout << endl; } } p[i].show_a(); }
Ce afişează? Ce afişează?
b. 1 6 1 6 1 6 2 6 3 6 3 6 (Scrie g. Mesaj de eroare
in 2 rinduri, poate sa fie rasp
gre6it)) 35
class my { int a;
public: my(int a);
my();
void show_a(); };
my::my(int a) { my::a=a; }
my::my() { cout << "a="; cin >> a; }
void my::show_a() { cout << a; }
main() { my ob(28);
int a=25;
ob.show_a(); }
Ce afişează?
d. Lipseşte răspunsul correct
34 (28)
class my { int a;
public: my(int a) { my::a=5; } 36
~my() { cout << " Aici destructorul!"; class my { int a;
} public: my( int a);
void show_a() { cout << " " << a; } }; void show_a(); };
my::my(int a=35) { my::a=a; }
void my::show_a() { cout << a; } int operator -(int b) {
return ( (a-b)%5 ); } };
main() { my ob(15);
int a=25; main() { my a;
ob.show_a(); } int c;
Ce afişează? c=-(3-a);
d. 15 cout << c; }
Ce afişează?
37
class my { int a; a. Mesaj de eroare
public: my(int a=1) { b. Restul impartirii (a-b)/5
my::a=2; } c. Restul impartirii (a-3)/5
void show_a() { d. Lipseşte răspunsul corect
cout << a; } }; e. Valoarea a-3
f. Valoarea a-b
main() { my ob(3), *p=&ob; g. Valoarea a-3 modulo 5
p->show_a(); } h. Valoarea a-b modulo 5
2
Ce afişează? class my { int a;
b. 2 public: my() { cout <<
"a="; cin >> a; }
Testul 5 void show_a() {
1 cout << a; }
class my { int a; int operator /(int b) {
public: my() { cout << return ( (a/b)%2 ); } };
"a="; cin >> a; }
void show_a() { main() { my a;
cout << a; } int c;
c=1/(3/a);
cout << c; }
Ce afişează?
Testul 6
1
class A { protected:int a;
public:A(int x=7){a=0;}};
2
class A { protected:int a;
public:A(int x=3){a=x;}};
int main() {
B *p=new B(7);
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. a. 5
b. 3
c. imprevizibil
d. 0
e. run time error
f. compilation error
g. 7
3
class A { int a;
public:A(int x=3){a=x;}
protected:void show(){ cout << a <<
endl; }};
class B: private A { int b; class A { protected:int a;
public:B(int x=7){b=x;}}; public:A(int x=7){a=x;}};
4 int main() {
B y(7); y.show(); d. 0
return 0; } e. compilation error
f. 7
Ce extrage ? g. imprevizibil
Alegeţi un răspuns. a. 3
b. 0 7
c. 5 class A { int a;
d. 7 public:A(int x=3){a=0;}
e. compilation error private:void show(){ cout << a <<
f. run time error endl; }};
g. imprevizibil
6 class B: protected A { int b;
public:B(int x=5){b=x;}};
class A { int a;
public:A(int x=5){a=x;} int main() {
private:void show(){ cout << a << B y(7); y.show();
endl; }}; return 0; }
int main() {
B y(7); y.show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. a.
imprevizibil
b. compilation error
c. run time error
d. 0
e. 7
f. 3
g. 5
Problema 1.
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. d. 3
Problema 2
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
public:A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&a;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. b. compilation error
Problema 3
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&a;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. compilation error
Problema 4
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&a)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns d. 3
Problema 5
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&b;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. b. 3
Problema 6
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&b)->show();
return 0; }
Ce extrage ?
Alegeţi un răspun. d. -1
Problema 7
class f{public:virtual double s()=0;};
class r: public f {double a,b;
public:double s(){return a*b;}
r(double a=3, double b=4){this->a=a;this->b=b;}};
class c: public f {double r;
public: double s(){return M_PI*r*r;}
c(double r=0){c::r=r;}};
int main()
{ f *p=new f; r b; c d(1);
p=&d; cout << p->s() << endl;
return 0; }
Ce extrage ?
Alegeţi un răspuns a. compilation error
Problema 8
class f{public:virtual double s()=0;};
class r: public f {double a,b;
public:double s(){return a*b;}
r(double a=3, double b=4){this->a=a;this->b=b;}};
class c: public f {double r;
public: double s(){return M_PI*r*r;}
c(double r=0){c::r=r;}};
int main()
{ f *p=new f; r b; c d(1);
p=&b; cout << p->s() << endl;
return 0; }
Ce extrage ?
Alegeţi un răspuns. d. compilation error
Problema 9
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&b)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. 3
Problema 10
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&b;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. -1
Problema 11
class f{public:virtual double s()=0;};
class r: public f {double a,b;
public:double s(){return a*b;}
r(double a=3, double b=4){this->a=a;this->b=b;}};
class c: public f {double r;
public: double s(){return M_PI*r*r;}
c(double r=0){c::r=r;}};
int main()
{ f *p; r b; c d(1);
p=&b; cout << p->s() << endl;
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. 12
Problema 12
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. d. compilation error
Problema 13
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&a;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. f. 3
Problema 14
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. a. compilation error
Problema 15
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. b. -1
Problema 16
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&b;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. d. compilation error
Problema 17
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns b. 30
Problema 18
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&c)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. c. -1
Problema 19
class f{public:virtual double s()=0;};
class r: public f {double a,b;
public:double s(){return a*b;}
r(double a=3, double b=4){this->a=a;this->b=b;}};
class c: public f {double r;
public: double s(){return M_PI*r*r;}
c(double r=0){c::r=r;}};
int main()
{ f *p; r b; c d(1);
p=&d; cout << p->s() << endl;
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. 3.14159
Problema 20
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
public:A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
void show(){cout << x-y << endl;}
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
void show(){cout << x*y << endl;}
public: C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. c. compilation error
Problema 21
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&c)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. 30
Problema 22
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
public:A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
void show(){cout << x-y << endl;}
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&b;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. a. compilation error
Problema 23
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&c)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. b. 3
1. Folosind pointeri ,cititi un sir de nr intregi si aflati cel mai mic nr impar din sir
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
int main()
{int n, s=0, i, *pn, a[100];
system ("cls");
printf("Introduceti lungimea sirului:");
scanf("%d", &n);
pn=&n;
for (i=0; i<=*pn;i++){
printf("A[%d]=",i);
scanf("%d", (a+i));
}
for (i=2; i<=*pn; i+=2){
s+=*(a+i);
}
printf("Suma nr de pe pozitie para este=%d",s);
getch();
return 0; }
7. Fie un vector v. Aflati daca elementele lui formeaza un sir strict descrescator.
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{int s[100], n, i, m=1;
system ("cls");
printf("Introducdti lungimea sirului:\n");
scanf("%d", &n);
for(i=1; i<=n; i++) {
printf("S[%d]=",i);
scanf("%d", &s[i]);}
for(i=1; i<=n; i++){
if(s[i]>s[i+1])m++;}
if(m==n) printf("Sirul este strict descrescator");
else printf("sirul nu este strict descrescator");
getch();
return 0; }
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
for (c=0;c<n;c++)
{
for (i=0;i<n;i++)
{ k=0;
for (j=min[i];j<=max[i];j++)
k++;
if (s[c]==k)
{printf ("\n");for (g=min[i];g<=max[i];g++)
printf("%d",g);
}
}
}
getch();
return 0; }
10. Fie o matrice d*d. Afalti produsul scalar al primei coloane cu ultima coloana.
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
11. Fie un vector Q. Aflati cite resturi diferite se vor obtine la impartirea elementelor lui Q la 11.
{int i,n,Q[30],H[30],k,j;
printf("n=");
scanf("%d",&n);
printf("dati elementele vectorului Q:");
for (i=0;i<n;i++)
scanf("%d",&Q[i]);
for (j=0;j<11;j++)
H[j]=0;
for (i=0;i<n;i++)
for (j=1;j<11;j++)
if ((Q[i]%11)==j) H[j]=j;
k=0;
for (j=0;j<11;j++)
if (H[j]>0) k++;
for (i=0;i<n;i++)
if ((Q[i]%11)==0){k++;break;}
printf("k = %d",k);
getch(); return 0; }
12. Fie un cuv. S, adica un sir de caractere. Aflati cite vocale diferite contine cuv S.
13. Fie un cuv. W, adica un sir de caractere. Aflati cite caractere din cuv W au codul divizibil cu 5.
{int sir[100], n = 0, i;
unsigned long suma = 0;
system ("cls");
printf("Introdu un sir de numere. Cand termini, introdu orice litera.\n");
while(scanf("%d",&sir[n])) n++;
printf("%d numere introduse:\n",n);
for(i=0;i<n;i++) {
printf("%d ",*(sir+i));
suma += *(sir+i);
}
printf("\nSuma elementelor sirului este %lu",suma);
getch();
return 0; }
16. Folosind pointeri, aflaţi produsul elementelor impare ale unui şir de numere întregi.
{int sir[100], n = 0, i;
unsigned long produs = 1;
system ("cls");
printf("Introdu un sir de numere. Cand termini, introdu orice litera.\n");
while(scanf("%d",&sir[n])) n++;
printf("%d numere introduse:\n",n);
for(i=0;i<n;i++) {
printf("%d ",*(sir+i));
if(*(sir+i)%2 == 1) produs *= *(sir+i);
}
if(produs == 1) printf("\nSirul nu contine elemente impare");
else printf("\nProdusul elementelor impare este %lu",produs);
getch();
return 0; }
17. Folosind pointeri, determinaţi frecvenţa de apariţie a caracterelor într-un text introdus de la tastatură.
{char s[255],n;
int m=0;
unsigned short i;
int main();
system ("cls");
printf("Introdu sirul:\n");
gets(s);
printf("Introdu caracterul");
scanf("%c",&n);
for(i = 0; i < strlen(s); i ++) {
if(*(s+i)==n) m++; }
printf("\n numarul de aparitii a caracterului %d", m);
getch(); return 0; }
18. Fie un vector p. Aflaţi dacă elementele lui formează o progresie geometrică.
{int p[100],d=1,i=0,j;
system ("cls");
printf("Introduceti un sir numeric: ");
while( scanf("%d",&p[i])==1 ) i++;
for (j=--i; j>1; j--,i--)
{ if ( (p[i]-p[i-1])!=(p[i-1]-p[i-2]) ) d=0;}
printf("\n\nSirul introdus ");
if(!d) printf("nu ");
printf("formeaza o progresie aritmetica.");
getch();
return 0;
}
19. Folosind pointeri, convertiţi un şir de caractere, citit de la tastatură, într-un număr. Nu folosiţi funcţii
de tipul atoi().
{char s[255];
unsigned short max, i;
system ("cls");
printf("Introdu sirul:\n");
gets(s);
for(i = 1; i < strlen(s); i ++) {
printf("%d",(int)*(s+i));}
getch(); return 0; }
21.Folosind pointeri, aflaţi caracterul de cod minim într-un şir de caractere citit de la tastatură.
{char s[255];
unsigned short min, i;
system ("cls");
printf("Introdu sirul:\n");
gets(s);
min = *s;
for(i = 1; i < strlen(s); i ++) {
if((int)*(s+i)<(int)min) min = *(s+i);
}
printf("\nCaracterul cu cod minim este %c", min);
getch();
return 0; }
22. Folosind pointeri, citiţi un şir de caractere şi aflaţi primul caracter de cod par.
{char s[255],max;
unsigned short i;
system ("cls");
printf("Introdu sirul:\n");
gets(s);
for(i = 0; i < strlen(s); i ++) {
if((int)*(s+i)%2==0) {max = *(s+i);break;}
}
printf("\n primul Caracter cu cod par este %c", max);
getch();
return 0;
}
23. Fie un cuvânt Q, adică un şir de caractere. Aflaţi câte consoane conţine cuvântul Q.
{char s[255], min[26], maj[26];
unsigned short i, n=0;
system ("cls");
printf("Introdu sirul de caractere:\n");
gets(s);
n=strlen(s);
for(i=0;i<strlen(s);i++) {
if(s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U'
|| s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u') n-=1;}
printf("\nSirul introdus contine %d consoane",n);
getch();
return 0; }
24. Folosind pointeri, citiţi un şir de caractere şi permutaţi caracterele de indice par cu cele de indice
impar: c[0] cu c[1], c[2] cu c[3], … .
{ int x[123], i=0, t, z;
system ("cls");
printf("Introdu numerele, dupa care tasteaza un caracter\n");
while(scanf("%d",x+i)) i++;
z=i;
for(i=1; i<z; i+=2) {
t=*(x+i);
*(x+i)=*(x+i-1);
*(x+i-1)=t;
}
printf("Rezultat:\n");
for(i=0; i<z; i++) printf("%d ", *(x+i));
getch();
return 0;
}
26. Inversati un sir numeric fara a folosi variabile indexate. Folositi pointeri.
{char s[200], p;
int i=0, j;
system ("cls");
printf("Introdu sirul: ");
gets(s);
while (i<strlen(s)/2) {
j = strlen(s)-i-1;
p = *(s+i);
*(s+i) = *(s+j);
*(s+j) = p;
i++;
}
printf("Sirul e "); puts(s);
getch();
return 0; }
{int a=1;
system ("cls");
printf("Numarul de biti necesari\nreprezentarii unui numar natural\neste %d",8*sizeof(a));
getch();
return 0;
}
30. Fie n multimi de numere naturale consecutiveA_1, A_2, A_3, ..., A_n.Aflati intersectia acestor multimi.
{int a[N_MAX][2], n, i, min, max;
system ("cls");
printf("Introdu numarul de multimi (max %d): ",N_MAX);
scanf("%d",&n);
while(n>N_MAX||n<1) {
printf("Valoarea introdusa nu este valida. Introdu alt numar: ");
scanf("%d",&n); }
for(i=0;i<n;i++) {
printf("A_%d incepe de la ",i); scanf("%d",&a[i][0]);
printf(" si se termina cu "); scanf("%d",&a[i][1]); }
system ("cls");
printf("Multimile introduse:\n");
max = a[0][0]; min = a[0][1];
for(i=0;i<n;i++) {
printf("[%4d .. %4d]\n",a[i][0],a[i][1]);
if(a[i][0] > max) max = a[i][0];
if(a[i][1] < min) min = a[i][1]; }
printf("\nIntersectia: ");
if(max > min) printf("multime vida");
else if(max == min) printf("{%d}", max);
else printf("[%4d .. %4d]", max, min);
getch(); return 0; }
31.Fie un cuvant S ce incepe cu o consoanasi contine cel putin o vocala.Aflati care litera din alfabet preceda vocala cu cod
minim din cuvantul dat.
32. Fie o matrice m*m.Aflati produsul scalar al diagonalei principale cu diagonala secundara.
{ int a[99][99], m, i, j;
unsigned long produs = 0;
system ("cls");
printf("Introdu m (0<m<100): ");
scanf("%d",&m);
while(m<=0 || m>99) {
printf("Valoare invalida. Introdu alt numar: ");
scanf("%d",&m);
}
printf("Introdu elementele matricii:\n");
for(i=0;i<m;i++) {
for(j=0;j<m;j++) {
printf("A[%d][%d]=",i,j);
scanf("%d",&a[i][j]);} }
system ("cls");
printf("Matricea introdusa (%d*%d):\n",m,m);
for(i=0;i<m;i++) {
for(j=0;j<m;j++) {
printf("%5d",a[i][j]); }
printf("\n"); }
for(i=0;i<m;i++) {
produs += (a[i][i]*a[i][m-i-1]);
}
printf("\nProdusul scalar este %lu",produs);
getch();
return 0; }
33. Folosind pointeri, scrieti o functie care calculeaza lungimea unui sir de caractere introdus de la tastatura
{char s[200];
unsigned shortlen(char s[200]);
unsigned short i = 0;
while(*(s+i) != NULL) i++;
return i;
system ("cls");
printf("Introdu sirul de caractere:\n");
gets(s);
printf("\nLungimea sirului e %d",len(s));
getch();
return 0;
}
34.Fie x un vector coloana si y un vector linie cu acelasi numar de elemente. Aflati matricea A = x*y.
{char s[255];
unsigned short max, i;
system ("cls");
printf("Introdu sirul:\n");
gets(s);
max = *s;
for(i = 1; i < strlen(s); i ++) {
if((int)*(s+i)>(int)max) max = *(s+i);
}
printf("\nCaracterul cu cod maxim este %c", max);
getch();
return 0;
}
Programul citeste numele si prenumele unei persoane ( cu gets() ), apoi afiseaza ( cu putchar() ) initialele respective pe un
rand, fiecare initiala fiind urmata de un punct, executa newline ( cu putchar( '\n' ) ), afiseaza ( cu puts() ) mesajul "Pentru a
continua actionati o tasta oarecare" si asteapta ( cu getch() ) actionarea unei taste.
#include
#include
void main(void)
{ char s[15], n[15];
gets(s);
gets(n);
clrscr();
putchar(s[0]);
putchar('.');
putchar(' ');
putchar(n[0]);
putchar('.');
putchar('\n');
puts("Pentru a continua actionati o tasta oarecare");
getch();
}
Programul afiseaza in zecimal, octal si hexazecimal constanta 12345 definita prin directiva #define.
#include
#include
#define a 12345
void main(void)
{clrscr();
printf("zecimal=%d\n",a);
printf("octal=%o\n",a);
printf("hexazecimal=%0x\n",a);
getch();
}
Programul afiseaza in zecimal, octal si hexazecimal constanta 123456789 definita prin directiva #define.
#include
#include
#define constanta 123456789l
void main(void)
{clrscr();
printf("zecimal=%ld\n",constanta);
printf("octal=%lo\n",constanta);
printf("hexazecimal=%0lx\n",constanta);
getch();
}
Programul citeste ( cu scanf() ) un caracter ASCII si apoi afiseaza ( cu printf() ) caracterul citit si codul lui.
#include
#include
void main(void)
{char a;
scanf("%c",&a);
printf("cod %d",a);
getch();
}
Programul citeste ( cu scanf() ) un numar intreg zecimal format din cel mult patru cifre si apoi afiseaza ( cu printf() ) numarul
citit in zecimal, octal si hexazecimal.
#include
#include
void main(void)
{ int a;
clrscr();
scanf ("%d",&a);
printf("zecimal %d\n",a);
printf("octal %o\n",a);
printf("hexazecimal %0x\n",a);
getch();
}
Programul determina cu operatorul sizeof si afiseaza cata memorie este rezervata pentru fiecare tip de date ( char, signed
char, unsigned char, short, signed short, unsigned short, int, signed int, unsigned int, long int, long signed int, long unsigned
int, float, double, long double ).
void main(void)
{
char c;
signed char sc;
unsigned char uc;
short sh;
signed short ssh;
unsigned short ush;
int i;
signed int si;
unsigned int ui;
long int li;
long signed int lsi;
long unsigned int lui;
float f;
double d;
long double ld;
printf("bytes memorie:\n");
printf("char %d\n", sizeof(c));
printf("signed char %d\n", sizeof(sc));
printf("unsigned char %d\n", sizeof(uc));
printf("short %d\n", sizeof(sh));
printf("signed short %d\n", sizeof(ssh));
printf("unsigned short %d\n", sizeof(ush));
printf("int %d\n", sizeof(i));
printf("signed int %d\n", sizeof(si));
printf("unsigned int %d\n", sizeof(ui));
printf("long int %d\n", sizeof(li));
printf("long signed int %d\n", sizeof(lsi));
printf("long unsigned int %d\n", sizeof(lui));
printf("float %d\n", sizeof(f));
printf("double %d\n", sizeof(d));
printf("long double %d\n", sizeof(ld));
getch();
}
Programul citeste valoarea unui unghi exprimata in grade, minute si secunde prin trei numere intregi g, m, s si afiseaza
valoarea unghiului in radiani si valoarea functiei sinus de unghiul respectiv.
Folositi functia sin( x ).
#include
#include
#include
#define PI 3.14159265358979
void main(void)
{ int g,m,s; double x;
clrscr();
printf("introduceti unghiul in grade\n",g,m,s);
scanf("%d %d %d",&g,&m,&s);
x=PI*(g+m/60+s/3600)/180;
printf("unghiul in radiani %lf\nsinusul unghiului %lf\n",x,sin(x));
getch();
}
Programul citeste un numar intreg nenegativ si apoi afiseaza numarul citit si radacina patrata din el.
Folositi functia sqrt(x).
#include
#include
#include
void main(void)
{unsigned x;
scanf("%u",&x);
printf("%u radical e %f",x,sqrt(x));
getch();
}
#include
#include
#include
void main(void)
{int a,b;
clrscr();
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
a=abs(a);
b=abs(b);
printf("modul mai mare %d",a>b?a:b);
getch();
}
PROGRAMARE IN LIMBAJUL C
CULEGERE DE PROBLEME
EXEMPLE DE PROGRAME
#include <stdio.h>
void main () {
printf (" Text afisat pe ecran");
}
#include <stdio.h>
void main () {
int a=2, b=-3;
printf ("%d %d \n", a,b);
// printf ("%i %i \n",a,b); // %i este identic cu %d
}
#include <stdio.h>
void main () {
int a=2, b=-3;
printf ("a= %d, b= %d \n", a,b);
}
#include <stdio.h>
void main () {
int n;
printf ("n= ");
scanf ("%d", &n);
printf ("s-a citit %d ", n);
}
#include <stdio.h>
void main () {
float x;
printf ("x= ");
scanf ("%f", &x);
printf ("s-a citit %f ", x);
}
#include <stdio.h>
#include <math.h>
void main () {
printf (" sqrt(2)=%lf", sqrt(2));
}
#include <stdio.h>
#include <math.h>
void main () {
printf (" sqrt(25)=%d", (int) sqrt(25));
}
#include <stdio.h>
#include <math.h>
void main () {
printf ("%6.0f", sqrt(25));
}
#include <stdio.h>
void main () {
int a,b,c;
scanf ("%d%d%d",&a,&b,&c);
printf ("%6d%6d%6d \n",a,b,c);
}
E1.11 Afisare numere reale foarte mari sau foarte mici (cu exponent)
#include <stdio.h>
#include <math.h>
void main () {
double x,y ;
x=exp(20);
y=pow(10,10);
printf ("%e %e \n",x,y);
}
#include <stdio.h>
#include <math.h>
void main () {
float a,b,c,p,s;
printf("Lungimi laturi:");
scanf ("%f%f%f",&a,&b,&c);
p=(a+b+c)/2;
s=sqrt(p*(p-a)*p-b)*(p-c));
printf ("%.2f \n", s); // cu 2 zecimale dupa virgula
}
#include <stdio.h>
#include <math.h>
void main () {
float a,b,c,ua,ub,uc;
printf("Lungimi laturi:");
scanf ("%f%f%f",&a,&b,&c);
ua = acos ( (b*b+c*c-a*a)/(2*b*c) );
ub = acos ( (a*a+c*c-b*b)/(2*a*c) );
uc = acos ( (b*b+a*a-c*c)/(2*a*b) );
printf ("%6.2f \n",ua+ub+uc); // PI=3.14
}
#include <stdio.h>
#include <math.h>
#include <values.h>
void main () {
float x1,y1,x2,y2, d,u;
printf ("x1,y1: "); scanf("%f%f",&x1,&y1);
printf ("x2,y2: "); scanf("%f%f",&x2,&y2);
d= sqrt ( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );
if ( x2 != x1)
u = atan ((y2-y1)/(x2-x1));
else
u= MAXFLOAT; // verticala (panta infinita)
printf ("%e %e \n", d,u);
}
E1.15 Afisare cat si rest impartire intreaga numere cu semn.
#include <stdio.h>
void main () {
int a=7,b=2;
printf ("a=%d b= %d c=%d r=%d \n", a, b, a/b, a%b); // c=3 r=1
printf ("a=%d b= %d c=%d r=%d \n", -a, b, -a/b, -a%b); // c=-3 r=-1
printf ("a=%d b= %d c=%d r=%d \n", a, -b, a/-b, a%-b); // c=-3 r=1
printf ("a=%d b= %d c=%d r=%d \n", -a, -b, -a/-b, -a%-b); //c=3 r=-1
}
E1.16 Verifica daca un caracter dat este o litera ( fie mare, fie mica)
void main ()
char ch;
ch= getchar();
if ( ch >='a' && ch <='z' || ch >='A' && ch <='Z' )
printf ("este litera \n");
else
printf (" nu este litera \n");
}
void main () {
int a,b,c,max;
scanf ("%d%d%d",&a,&b,&c);
max=a;
if (max < b)
max=b;
if (max < c)
max=c;
printf("maxim este %d\n", max);
}
void main () {
int a,b,c;
printf ("laturi triunghi: ");
scanf("%i%i%i",&a,&b,&c);
if (a<b+c && b<a+c && c<a+b)
if (a==b && b==c)
printf ("echilateral \n");
else
if (a==b || a==c || b==c)
printf ("isoscel \n");
else
printf("oarecare \n");
else
printf ("imposibil \n");
}
void main () {
int zile, luna, an;
printf ("an:"); scanf("%d",&an);
printf("nr.luna (1-12): ");
scanf("%d",&luna);
switch (luna) {
case 2: if (an%4) zile=28;
else zile=29;
break;
case 4: case 6: case 9: case 11: zile=30; break;
default: zile=31; break;
}
printf ("luna %d are %d zile \n",luna,zile);
}
#include <stdio.h>
#include <values.h>
// afisare valoare maxima dintr-un sir
void main () {
int n,i, a,amax;
printf("n="); scanf("%d",&n);
amax=-MAXINT; // cel mai mic intreg
for (i=0;i<n;i++) {
scanf("%d",&a);
if (amax < a)
amax=a;
}
printf("%d\n",amax);
}
#include <stdio.h>
// suma valorilor dintr-un sir de numere
void main () {
float a,sum;
sum=0;
while ( scanf("%f",&a) != EOF)
sum=sum+a;
printf("%f \n",sum);
}
#include <stdio.h>
// sume valori din mai multe siruri terminate cu zero
void main () {
float a,sum,m;
do {
m=sum=0; // m=lungime sir, sum = suma sir
do {
scanf("%f",&a); // un numar a dintr-un sir
if (a==0) break;
sum=sum+a; m++; // aduna a la suma si numara
} while (a);
if (m) // daca sir de lungime nenula
printf("%f \n",sum);
} while (m);
}
Obs. Situatia de mai sus apare la verificarea unor programe cu mai multe
seturi de date (memorate probabil intr-un fisier), printr-o singura rulare
a fiecarui program.
E1.24 Afisarea unui numar intreg fara semn in binar folosind extragerea
selectiva de biti cu o masca ce contine un singur bit 1.
void main () {
int n; // un intreg
printf("n= "); scanf("%d",&n);
unsigned int mask = 1<<15; // bitul 15 =1, ceilalti zero (128)
while (mask) {
printf ("%d", (mask & d) ? 1: 0);
mask >>= 1; // deplasare masca la dreapta cu un bit
}
printf("\n");
}
E1.25 Determina cel mai mare divizor comun a doi intregi (ineficient).
void main () {
int a,b,d;
printf ("a,b: "); scanf("%d%d",&a,&b);
d= a< b ? a : b; // d= minim(a,b);
while ( a%d || b%d ) // cat timp d nu este divizor comun
d=d-1;
printf ("cmmdc=%d\n",d);
}
E1.26 Determina cel mai mare divizor comun a doi intregi (alg. lui Euclid).
void main () {
int a,b,r;
printf ("a,b: "); scanf("%d%d",&a,&b);
while (r = a%b) {
a=b; b=r;
}
printf ("cmmdc= %d\n", b);
}
void main () {
int a,b,r;
printf ("a,b: "); scanf("%d%d",&a,&b);
if ( a%b==0) {
printf ("%d \n",b);
return;
}
do {
r=a%b;
a=b; b=r;
} while (r);
printf("%d \n",a);
}
E1.28 Ciclu in ciclu. Numararea numerelor prime mai mici ca un intreg dat n.
#include <stdio.h>
main () {
int n,m,d,np ;
printf ("n= "); scanf ("%d",&n);
if (n < 4) {
printf ("%d\n",n); // primele 3 numere prime
return;
}
np=3; // vor fi cel putin 3 numere prime
for (m=5;m<=n;m=m+2) { // incearca numerele impare m
for (d=3;d<m;d=d+2) // cu toti divizorii posibili d
if (m % d ==0)
break;
if (d>=m) // daca m este prim
np++; // contor de numere prime
}
printf ("%d\n",np);
}
E1.29 Suma unei serii definite printr-o relatie de recurenta intre termeni.
#include <stdio.h>
#include <conio.h>
void main () {
int a,b;
char opt; // cod optiune (un caracter)
do {
// afisare meniu
clrscr(); // sterge ecran
printf ("\n\t A = Adunare \n\t S = Scadere \n\t M = inmultire");
printf("\n\t D = Impartire \n\t \n\t X = Iesire \n\n");
printf ("\t Optiune: ");
// citire si tratare optiune
fflush(stdin); opt=getchar();
if (opt=='x' || opt=='X') return;
printf ("\n\t Doi intregi: "); scanf("%d%d",&a,&b);
printf("\n\t Rezultat=");
switch (opt) {
case 'a': case 'A': printf (" %d", a+b); break;
case 's': case 'S': printf (" %d", a-b); break;
case 'm': case 'M': printf (" %d", a*b); break;
case 'd': case 'D': printf (" %d", a/b); break;
}
fflush(stdin); getchar();
} while (1);
}
E1.31 Afisarea in hexazecimal a octetilor din mai multe numere de tip "float"
void main () {
float f;
char *p; int i;
// afisare octeti in hexa (float)
for ( f=0; f<10;f=f+0.5) {
printf ("%6.2f\t",f); // afisare numar
p=(char*) &f; // adresa primului octet
for (i=0;i<sizeof(f);i++) // afisare octeti
printf("%02x ", *p++); // pe cate 2 cifre hexa, cu spatii intre ei
printf("\n");
}
}
PROBLEME PROPUSE
P1.1 Program care citeste coordonatele (x,y) ale unui punct din plan si
afiseaza numarul cadranului in care se afla (1,2,3,4). Se vor verifica
succesiv semnele valorilor x si y. S-ar putea folosi instructiunea "switch"?
P1.3 Program pentru calculul timpului scurs intre doua momente de timp
exprimate in ore, minute si secunde (cu si fara "if"). Exemplu :
h1:m1:s1 = 13:07:23 ; h2:m2:s2 = 02:49:48
rezultat = 10:17:35
P1.4 Program pentru determinarea celui mai mare intreg pentru care se mai
poate calcula corect factorialul sau, succesiv pentru tipurile "int",
"long", "float" si "double".
Indicatie: Se compara k!/k cu (k-1)! si daca difera se afiseaza k.
P1.12 Program pentru afisarea numerelor perfecte mai mici ca o valoare data.
(Un numar perfect este un numar egal cu suma tuturor divizorilor sai).
P1.15 Program pentru descompunerea unui numar natural dat in factori primi.
Se vor afisa factorii primi si puterile (exponentii) lor.
Exemplu: 60 = 2^2 * 3 ^1 * 5^1
// R1.1
// afisare pozitie punct fata de cele 4 cadrane
#include <stdio.h>
void main () {
float x,y;
printf("x,y : "); scanf("%f%f",&x,&y);
if (x==0 && y==0)
printf("In origine (0,0) \n");
else
if (x==0 || y==0)
printf("Pe una din axe \n");
else
if (x > 0 )
if (y > 0)
printf ("Cadranul I \n");
else
printf ("Cadranul IV \n");
else
if (y > 0)
printf ("Cadranul II \n");
else
printf ("Cadranul III \n");
}
// R1.2
void main () {
int h1,m1,s1, h2,m2,s2, h,m,s;
printf("timp1="); scanf("%d%d%d",&h1,&m1,&s1);
printf("timp2="); scanf("%d%d%d",&h2,&m2,&s2);
// adunare timpi (cu if)
s=s1+s2; m=h=0;
if (s >=60) {
s=s-60; m=1;
}
m=m1+m2+m;
if (m >=60) {
m=m-60; h=1;
}
h=h1+h2+h;
// afisare rezultat
printf ("%02d:%02d:%02d \n",h,m,s);
}
// R1.3
void main () {
int h1,m1,s1, h2,m2,s2, h,m,s;
long t1,t2,t; int r;
printf("timp1="); scanf("%d%d%d",&h1,&m1,&s1);
printf("timp2="); scanf("%d%d%d",&h2,&m2,&s2);
// scadere timpi (fara if)
t1= 3600L*h1 + 60*m1 + s1;
t2= 3600L*h2 + 60*m2 + s2;
t=t1-t2;
h= t/3600;
r=t%3600;
m=r/60;
s=r%60;
printf ("%02d:%02d:%02d \n",h,m,s);
}
// R1.4
// cel mai mare numar k pentru care se poate calcula k!
#include <stdio.h>
void main () {
int k;
double kf2,kf1=1; // sau: int, long, float
for (k=1;k<30;k++) {
kf2=kf1*k;
if (kf2/k !=kf1) {
printf ("%d ",k);
break;
}
else
kf1=kf2;
}
}
// R1.5
// erori la calcule cu numere reale
#include <stdio.h>
void main () {
float x, sx; double sy;
int i,k, n=100;
x=0.1;
for (k=0;k<3;k++) { // pentru 0.1, 0.01 si 0.001
sx=sy=0.;
for (i=1;i<=n;i++){
sx=sx+x;
sy=sy+(double)x;
if ( i % (n/10) ==0)
printf ("%f %lf \n", sx, sy);
}
n=n*10; x=x/10;
getchar();
}
}
// R1.6
// calcul combinari prin doua metode
#include <stdio.h>
void main () {
int k,n,m, c1, c2; long f1,f2,f3;
n=10;
for (f1=1,k=1;k<=n;k++)
f1=f1*k; // f1 = n!
for (m=1;m<=10;m++) {
// c1 prin metoda (a)
c1=1;
for (k=1;k<=m;k++)
c1=c1*(n-k+1)/k;
// c2 prin metoda (b)
for (f2=1,k=1;k<=m;k++)
f2=f2*k; // f2= m!
for (f3=1,k=1;k<=n-m;k++)
f3=f3*k; // f3 = (n-m)!
c2=f1/(f2*f3);
printf("%4d %8d %8d \n", m,c1,c2);
}
}
// R1.7
// cifrele binare sunt caturi ale impartirii prin puteri ale lui 2
void main () {
int n,d=1;
printf ("\n n= "); scanf("%i",&n);
while ( d <= n) // d = puterea lui 2 imediat inferioara lui n
d=d*2;
d=d/2;
while ( d>=1) {
printf ("%i", n/d); // catul este cifra binara
n=n%d; d=d/2; // continua cu restul impartirii
}
}
// R1.9
// numere de 2 cifre cu peste 6 divizori
void main () {
int nr,k,i,m;
nr=99;
printf ("\n");
// calcul numar de divizori
for (k=nr;k>=10;k--) { // incearca numere de 2 cifre k
m=0; // m=nr divizori ai lui k
for (i=2;i<k;i++)
if ( k % i == 0)
++m;
if ( m >= 7)
printf ("%d ",k);
}
}
// R1.10
// nr maxim de divizori ptr un numar de n cifre
void main () {
long n,n1,n2,m,max,k,i,nr1,nr2;
printf ("n= "); scanf ("%ld",&n);
n1=pow(10,n)-1; // nr maxim de n cifre
n2=pow(10,n-1); // nr minim de n cifre
max=1; // nr maxim divizori
for (k=n1;k>=n2;k--) { // ptr fiecare numar de n cifre
m=0; // nr divizori ai lui k
for (i=2;i<=k/2;i++) // incearca toti divizorii posibili
if ( k % i == 0)
++m; // m este nr de divizori ai lui k
if (m==max)
nr1=k; // nr1 este cel mai mic numar gasit
if ( max < m) {
max=m; nr2=k; // nr2 este cel mai mare numar gasit
}
}
printf ("%ld si %ld au %ld divizori \n", nr1, nr2, max);
}
// R1.11
// toate secventele de numere naturale consecutive
// a caror suma este egala cu n
main () {
int n,k,i,j,l,s;
printf("n= "); scanf ("%d",&n);
k= n/2+1; // pentru a nu se repeta secvente
for (i=1;i<k;i++) {
s=i; // inceput posibil de secventa
for (j=i+1;j<=k; j++) { // j = numere din secventa
s=s+j; // suma numerelor din secventa
if (s>=n)
break;
}
/* afisare numere Œntre i si j */
if (s==n) {
for (l=i;l<=j;l++)
printf ("%d ",l);
printf ("\n");
}
}
}
// R1.12
/* numere perfecte */
void main () {
int n,m,s,d ;
printf("n="); scanf("%d",&n);
for (m=2; m<=n ;m++) {
s=0;
for (d=1; d<m ; d++) {
if ( m % d==0)
s=s+d;
}
if (m==s)
printf ("\n %d", m);
}
}
// R1.13
// suma seriei Taylor pentru sin(x) si cos(x) cu precizie maxima
void main () {
float x,sx,cx,ts,tc; int k;
scanf ("%f",&x);
sx=cx=0; ts=x; tc=1; // ts, tc = termeni din seriile sin si cos
for (k=1; fabs(ts) > 0; k++) {
sx=sx+ts; // sx = suma seriei sinus
cx=cx+tc; // cx = suma seriei cosin
ts=-ts*x*x/(2*k*(2*k+1)); // termen urmator din seria sin
tc=-tc*x*x/(2*k*(2*k-1)); // termen urmator din seria cos
}
printf ("%15.6f %15.6f \n",sx, sin(x));
printf ("%15.6f %15.6f \n",cx, cos(x));
}
// R1.14
// Determina numarul de zerouri cu care se termina produsul
// a n numere naturale date (fara efectuare produs)
#include <stdio.h>
void main () {
int n,a,b,n2,n5,i ;
n2=n5=0; // numar de cifre 2 si 5 in produs
scanf ("%d",&n); // cite numere se citesc
for (i=0;i<n;i++) {
scanf ("%d",&a); // un numar natural
b=a;
while ( b%2==0) {
n2++; b=b/2;
}
while ( a%5 ==0) {
n5++; a=a/5;
}
}
if ( n2<n5)
printf ("%d\n",n2);
else
printf ("%d\n",n5);
}
// R1.15
/* descompunere in factori primi */
#include <stdio.h>
main () {
int n,m,k,p ;
printf ("n= "); scanf ("%d",&n);
m=n;
for (k=2; k<=n && m>1; k++) {
p=0; // putere a factorului k
while (m%k ==0) { // cat timp m se imparte prin k
p++; m=m/k; // numara impartiri si reduce pe m
}
if (p > 0) // daca m s-a impartit exact prin k
printf ("%d^%d*",k,p); // k este un factor prim, p este puterea sa
}
printf ("\b\n");
}
EXEMPLE DE PROGRAME
# include <stdio.h>
void main () {
int a[] ={ 3,5,2,6,8,1,7,4,2,4,5,3} ; // un sir de intregi
int n,i,i1,i2, b; // b= valoare cautata
// repeta citire b si cautare in a
n=sizeof(a)/sizeof(a[0]); //lungime vector initializat
while ( scanf("%d",&b) ==1) {
// cauta prima aparitie
i1=-1;
for (i=0; i<n && a[i] != b ;i++)
;
if (i<n)
i1=i;
// cauta ultima aparitie
i2=-1;
for (i=n-1; i>=0 && b!=a[i];i--)
;
if (i>=0)
i2=i;
// scrie rezultate
if ( i1<0 || i2<0)
printf ("%d negasit \n",b);
else
printf ("prima= %d, ultima=%d \n", i1,i2);
}
}
Obs. In expresia (i<n && b!=a[i]) ordinea celor 2 conditii este esentiala !
void main () {
int nl,nc,i,j; float a[20][20];
// citire matrice
printf("nr.linii: "); scanf("%d",&nl);
printf("nr.coloane: "); scanf("%d",&nc);
if (nl >20 || nc >20) {
printf("Eroare: dimensiuni > 20 \n"); return;
}
for (i=0;i<nl;i++)
for (j=0;j<nc;j++)
scnaf ("%f", &a[i][j]);
// afisare matrice
for (i=0;i<nl;i++) {
for (j=0;j<nc;j++)
printf ("%f ",a[i][j]);
printf ("\n");
}
}
PROBLEME PROPUSE
P2.7 Program pentru ordonarea unui vector de numere intregi prin metoda
bulelor: se compara elemente vecine din vector (a[i] si a[i+1] ) si, daca
este necesar, se schimba intre ele pentru ca a[i] <= a[i+1]. In general
sunt necesare mai multe treceri prin vector pentru ordonarea sa. Variante:
(a) Numarul de treceri este egal cu dimensiune vector minus 1.
(b) Se fac atatea treceri cate sunt necesare pentru ordonarea vectorului
(se memoreaza daca au fost necesare schimbari de elemente in vector si se
opreste repetarea cand nu a mai fost necesara nici o schimbare).
(c) O trecere prin vector se face de la prima la ultima pereche
(d) O trecere prin vector se face de la ultima pereche catre prima pereche
P2.11 Program pentru calculul valorii unui polinom cu coeficienti dati, prin
mai multe metode cu urmatoarea numerotare a coeficientilor:
P(x) = c[0]*x^n + c[1]*x^(n-1) + ... + c[n-1]*x + c[n]
Datele initiale : x, n, c[0],..c[n]
(a) Ca suma de termeni calculati separat (cu functia "pow")
(b) Ca suma de termeni calculati unul din altul (fara ridicare la putere)
(c) Printr-o relatie de recurenta de forma P(x,k)=P(x,k-1)*x + c[k] si
P(x,0)=c[0].
P2.15 Program pentru afisarea celei mai lungi secvente ordonate de elemente
consecutive dintr-un vector dat. Exemplu de date: 5 3 6 2 4 6 8 4 1
Rezultat: 2 4 6 8
Sa se verifice programul si pentru un vector ordonat descrescator.
// R2.1
// media studentilor integralisti si ponderea restantierilor
#include <stdio.h>
void main () {
int n, nota[200];
int i, m, s; // m =nr note > 5, s= suma note > 5
// citire date
n=0;
while ( scanf("%d", ¬a[n]) != EOF)
++n;
// numarare si insumare note peste 5
m=s=0;
for (i=0;i<n;i++)
if ( nota[i] >= 5) {
++m; s=s+nota[i];
}
if ( m )
printf(" Medie integralisti= %5.2f \n", (float)s/m );
printf (" Procent restantieri= %5.2f % \n", 100.*(n-m)/n);
}
// R2.2
// statistica notelor unor elevi
#include <stdio.h>
void main () {
int n, nota[200], nn[11]; //nn[k] = numar note egale cu k
int i,j;
// citire note
n=0;
while ( scanf("%d", ¬a[n]) != EOF)
++n;
// initializare contoare (sau la declarare)
for (j=1;j<11;j++)
nn[j]=0;
// numarare note din fiecare clasa
for (i=0;i<n;i++)
for (j=1;j<=10;j++)
if (nota[i] == j)
nn[j] ++;
// afisare procente
for (j=1;j<=10;j++)
printf ( "%5.2f %c note de %d \n", 100.*nn[j]/n, '%', j);
}
// R2.3
// clasifica n valori X in m intervale cu limitele A
#include <stdio.h>
void main () {
float x[500]; int a[100];
int nr[100]={0}; // init. vector nr
int n,m,i,j; float y;
// citire date
printf ("n="); scanf("%d",&n);
for (i=0;i<n;i++) {
scanf("%f",&y); x[i]=y; // ptr. Borland C 2.0
}
printf ("m="); scanf("%d",&m);
for (i=0;i<=m;i++)
scanf("%d",&a[i]);
// verifica daca vectorul a este ordonat
for (i=0;i< m;i++)
if (a[i] >= a[i+1] ) {
printf("limite neordonate \n");
return; // iesdire din main
}
// numara valorile din fiecare interval
for (i=0;i<n;i++)
for (j=0;j<=m;j++)
if ( x[i] > a[j] && x[i] <=a[j+1])
nr[j+1]++;
// afisare contoare
for (j=1;j<=m;j++)
printf ("%4d valori in intervalul %d \n", nr[j],j);
}
// R2.4
// comparatie de vectori neordonati
#include <stdio.h>
void main () {
int n, a[]={3,1,4,2,5}, b[]={1,5,3,2,4};
int egale, este, i,j;
egale=1; // presupunem ca sunt egali
n=sizeof(a)/sizeof(a[0]); // dimensiune vector a
for (i=0;i<n;i++) {
este = 0;
for (j=0;j<n;j++) // cauta pe a[i] in vectorul b
if (a[i] == b[j])
este =1; // daca a[i] este in b
if ( ! este ) {
egale=0; break; // daca a[i] nu este in b vectori diferiti
}
}
printf (egale ? "egale\n":"diferite\n");
}
// R2.5
// interclasare vectori ordonati
void main () {
int a[100], b[100], c[200];
int na, nb, nc, ia, ib, ic, k;
// citire vectori si verificare ordonare
...
// interclasare
ia=ib=ic=1;
while ( ia <= na && ib <= nb) { // cat timp exista elem in a si in b
if ( a[ia] < b[ib] )
c[ic++]=a[ia++]; // scoate in c pe minim (a[i],b[j])
else
c[ic++]=b[ib++];
}
// copiaza in c elem. ramase in a sau in b
for (k=ia;k<=na;k++)
c[ic++]=a[k];
for (k=ib;k<=nb;k++)
c[ic++]=b[k];
nc=--ic; // dimensiune vector rezultat
// afisare vector rezultat
for (k=1;k<=nc;k++)
printf ("%d ",c[k]);
}
// R2.6
// extragere elemente distincte dintr-un vector
#include <stdio.h>
void main () {
int a[]={ 3,2,5,1,3,4,6,4,1,6,5}; // un vector de intregi
int b[100]; // aici se pun elementele distincte din a
int n,m,i,j, gasit;
n=sizeof(a)/sizeof(a[0]);
m=0; // dimensiune vector b
for (i=0;i<n;i++) {
// cauta pe a[i] in vectorul b
gasit=0;
for (j=0;j<m && ! gasit; j++)
if (a[i]==b[j])
gasit=1;
if (! gasit) {
b[m++] =a[i];
}
}
m=m-1; // dimensiune vector b
// scrie vector b
for (j=0;j<m;j++)
printf ("%3d",b[j]);
}
// R2.7
// ordonare prin metoda bulelor (var. a)
#include <stdio.h>
void main () {
int a[300]; // un vector de intregi
int n,i,j, aux;
// citire vector
n=-1;
while (scanf("%d",&a[++n]) > 0) ; // repeta instr vida !
// repeta de n-1 ori
for (j=1;j<n;j++)
// compara n-1 perechi vecine
for (i=0;i<n-1;i++)
if ( a[i] > a[i+1] ) { // nu sunt in ordine
// schimba pe a[i] cu a[i+1]
aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;
}
// afisare vector ordonat
for (i=0;i<n;i++)
printf ("%4d",a[i]);
}
// R2.9
// sortare prin selectie directa (aduce valori mari la sfarsit)
#include <stdio.h>
void main () {
int a[500]; // un vector de intregi
int n,i,j, aux;
// citire date
n=-1;
while (scanf("%d",&a[++n]) > 0) ; // repeta instr vida !
// ordonare
for (i=n-1;i>0;i--)
// se aduce maxim dintre a[i-1]...a[0] in pozitia i
for (j=0;j<i;j++)
if ( a[j] > a[i] ) { //muta pe a[j] in pozitia i
aux = a[i]; a[i]=a[j]; a[j]=aux;
}
// scrie vector ordonat
for (i=0;i<n;i++)
printf ("%d ",a[i]);
}
// R2.10
// sortare prin numarare
#include <stdio.h>
void main () {
int a[300], nr[300]; // un vector de intregi si un vector de contoare
int n,i,j;
// citire date
n=-1;
while (scanf("%d",&a[++n]) > 0) ; // repeta instr vida !
// creare vector nr pe baza vectorului a
for (i=0;i<n;i++) {
nr[i]=0;
for (j=0;j<n;j++)
if (a[i] > a[j])
nr[i]++; // nr[i] = cate elem. sunt <= a[i]
}
// afisare vector a pe baza lui nr
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (nr[j]==i)
printf ("%3d",a[j]);
}
// R2.11
// calcul valoare polinom cu coeficienti dati
#include <stdio.h>
#include <math.h>
void main () {
int c[]={ 2, -3, 1 }; // vector coeficienti polinom
int n,i; // n= nr coef. polinom
int x, y, px; // x=valoare ptr care se calculeaza polinom
n=sizeof(c)/sizeof(c[0]); // nr de coeficienti
while (scanf("%d",&x)==1) { // repeta ptr mai multe valori x
// metoda 1: ca suma de termeni calculati separat
y=c[n]; // suma initiala
for (i=0;i<n;i++)
y=y+ pow(x,n-1-i) *c[i];
printf ("%d ",y);
// metoda 2: termeni calculati prin recurenta
y=c[n-1]; px=1; // suma initiala
for (i=n-2;i>=0;i--) {
px=px*x; // puterea lui x (x^i)
y=y+ px*c[i];
}
printf ("%d ",y);
// metoda 3 : relatie de recurenta intre polinoame
y=0; // polinom de grad 0
for (i=0;i<n;i++)
y=y*x+c[i];
printf ("%d \n",y);
}
}
// R2.12
// valoare polinom de interp. Newton
#include <stdio.h>
void main () {
float xx,yy,p; int i,j,n;
float c[]= { 1,2,3,4,5}, x[]={0,2,4,6,8};
n=4;
xx=5;
// mai putin eficient
yy=c[0];
for (i=1;i<=n;i++) {
p=1;
for (j=1;j<=i;j++)
p=p*(xx-x[j]);
yy = yy + c[i]*p;
}
printf ("%f ",yy);
// mai eficient
yy=c[0];
p=1;
for (i=1;i<=n;i++) {
p=p*(xx-x[i]);
yy = yy + c[i]*p;
}
printf ("%f \n",yy);
}
// R2.13
// norma unei matrice (cu numerotare de la 1 ptr linii si col)
#include <math.h>
#include <stdio.h>
#define M 20 // dimensiuni maxime matrice
void main () {
int n=3,m=3; // n linii, m coloane
float a[M][M] = { {0,0,0,0}, {0,3,-6,2}, {0,1,4,-5}, {0,-7,3,6} };
int i,j; float s, smax;
smax=0;
for (i=1;i<=n;i++) {
s=0;
for (j=1;j<=m;j++)
s=s+ abs (a[i][j]);
if ( smax < s)
smax=s;
}
printf ("%f \n", smax);
}
// R2.14
// valoare in "sa" dintr-o matrice
// minim dintre val. maxime pe linii
#include <stdio.h>
#include <math.h>
#define M 20 // nr maxim de linii/coloane
void main () {
int n=3,m=3; // n linii, m coloane
float a[M][M] = { {0,0,0,0}, {0,3,-6,2}, {0,1,4,-5}, {0,-7,3,6} };
int i,j; float min, max;
min = 1e30;
for (i=1;i<=n;i++) {
max=a[i][1];
for (j=1;j<=m;j++)
if (max < a[i][j])
max=a[i][j];
if (min > max)
min =max;
}
printf ("%f \n", min);
}
// R2.15
// secventa ordonata de lungime maxima
#include <stdio.h>
void main () {
int a[100] = {5,3,6,7,2,4,6,8,4,1,9,0}; // un sir terminat cu zero
int i,j,imax,l, lmax; // imax,lmax = inceput si lungime secventa maxima
imax=i=0; lmax=0; // sau lmax=1
while (a[i]) { // repeta pana la sfarsit sir
j=i; // ultimul din secventa
while ( a[j+1] && a[j]<=a[j+1])
j++;
l= j-i+1; // lungime secventa intre i si j
if ( lmax<l) {
lmax=l; imax= i;
}
i=j+1; // continua cautarea din poz. j+1
}
printf ("\n %d \n", lmax); // lungime secventa
for (i=imax; i<imax+lmax;i++)
printf ("%d ", a[i]);
}
// R2.16
# include <stdio.h>
# define M 30 // nr. maxim noduri graf
void main () {
int n, nv, max ; // n=nr de noduri, nv=nr de vecini
int a[M][M] ; // matrice de adiacente graf
int i,j, imax ;
// citire date
printf (" nr. noduri: "); scanf ("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j] =0;
printf ("perechi de noduri adiacente: ");
while ( scanf("%d%d", &i,&j)> 0) {
a[i][j] = a[j][i]=1;
}
// determina nod cu nr maxim de vecini
max=0; imax=0; // nr maxim de vecini
for (i=1;i<=n;i++) { // ptr fiecare nod i
nv=0; // nr de vecini nod i
for (j=1;j<=n;j++) // ptr fiecare posibil vecin
if (a[i][j]) // daca muchie i-j atunci
++nv; // s-a mai gasit un vecin al lui i
if (max < nv) {
max=nv; imax=i;
} // retine nr maxim de vecini
}
// afisare nod cu nr maxim de vecini
printf ("Varful %d are %d vecini \n ", imax, max);
}
// R2.17
// graf reprezentat prin lista arcelor sale
#include <stdio.h>
# define M 30 // nr. maxim noduri graf
void main () {
int n,na ; // n=nr de noduri, na=nr de arce
int a[M], b[M] ; // vectori de noduri vecine
int i,j,k ;
// citire date
printf (" nr. noduri: "); scanf ("%d",&n);
printf ("perechi de noduri adiacente: \n");
na=0;
while ( scanf("%d%d", &i,&j)> 0) {
++na; // nr de arce in graf
a[na] = i; b[na]=j;
}
// afisare liste de succesori noduri
printf ("Liste de succesori:\n");
for (i=1; i<=n;i++) {
printf("%d : ",i);
for (j=1;j<=na;j++)
if (i==a[j])
printf ("%d ", b[j]);
printf("\n");
}
// afisare liste de predecesori noduri
printf ("Liste de predecesori:\n");
for (i=1; i<=n;i++) {
printf("%d : ",i);
for (j=1;j<=na;j++)
if (i==b[j])
printf ("%d ", a[j]);
printf("\n");
}
}
// R2.19
#include <stdio.h>
#define M 100 // numar maxim de elemente clasificate
// reunire clase ce contin valorile p si q
void unif (int cls[],int n,int p,int q) {
int i, cp=cls[p], cq=cls[q];
if (cp==cq) return ;
if (cp > cq){ // inlocuieste cp cu cq
for (i=1;i<=n;i++)
if (cls[i]==cp)
cls[i]=cq;
} else { // inlocuieste cq cu cp
for (i=1;i<=n;i++)
if (cls[i]==cq)
cls[i]=cp;
}
}
// determina indice in vector de valori
int indexOf (int val[],int n, int x) {
int i;
for (i=1;i<=n;i++)
if (x==val[i])
return i;
return -1;
}
void main () {
int val[M]={0}, cls[M]={0}; // valorile si clasele lor
int i,j,p,q,n,m,cl;
// citire relatii de echivalenta
cl=0; // numar clase curente
n=0;
while (scanf("%d%d",&p,&q) > 0) {
i=indexOf(val,n,p);
if (i < 0) {
val[++n]=p; i=n; cls[n]= ++cl;
}
j=indexOf(val,n,q);
if (j < 0) {
val[++n]=q; j=n; cls[n]= ++cl;
}
unif(cls,n,i,j);
}
// afisare clase
for (i=1;i<=cl;i++) {
m=0;
for (j=1;j<=n;j++)
if (cls[j]==i) {
printf("%d ",val[j]);
m++;
}
if (m)
printf("\n");
}
}
EXEMPLE DE PROGRAME
Observatii:
- Functia "clrscr()" nu este standard in limbajul C, dupa cum nici fisierul
antet CONIO.H nu este standard (dar ele exista in Borland-C).
- Dupa stergere ecran cu "clrscr" cursorul este in prima linie de sus si
ecranul trece in mod pagina (implicit este in modul defilare).
#include <stdio.h>
void clear(); // declarare functie (prototip)
// utilizare functie
void main () {
clear(); printf ("text in linia de jos\n");
}
// definire functie (cu declaratie ca in C++)
void clear() {
for (int i=0;i<24;i++) // ptr un ecran de 25 de linii
putchar('\n'); // sau printf ("\n");
}
#include <stdio.h>
// Desenarea unei bare orizontale compuse din n caractere
void bar (int n) {
int i;
for (i=0;i<n;i++)
putchar('#');
putchar('\n');
}
// Desenare histograma pe baza unui vector de intregi
void main () {
int a[24]={5,10,15,10,5},n=5,k;
clear(); // sterge ecran
for (k=0;k<n;k++)
bar (a[k]); // desenare bara k de lungime a[k]
}
Obs.
- In C exista functii standard pentru verificarea tipului unui caracter dat
(isspace, isalpha,isdigit,...), declarate in CTYPE.H.
Obs.: Este preferabila scrierea a doua functii separate care transmit prin
numele functiei valoarea minima sau maxima.
printf ("%4.0f",a[i][j]);
printf("\n");
}
}
// utilizare
void main () {
float x[30][30]; int n;
for (n=2;n<=10;n++) {
matrunit(x,n);
scrmatr(x,n);
getchar(); // asteapta tasta "Enter"
}
}
PROBLEME PROPUSE
P3.1 Functie pentru determinarea numarului de cifre al unui numar dat (de
orice tip intreg). Program pentru citirea unui intreg n si afisarea a n
numere aleatoare intre 0 si n, cu determinare numar de coloane in functie
de valorile afisate. ( nr de coloane = 80/(nr.cifre+2) )
Se va utiliza functia "random" declarata in <math.h>
P3.2 Functie care verifica daca un numar dat este prim sau nu. Program
pentru afisarea descompunerilor numerelor pare mai mici ca un intreg dat
in sume de doua numere prime (Ipoteza lui Goldbach = orice numar par se
poate scrie ca suma a doua numere prime).
P3.4 Functie care determina pozitia valorii maxime intr-un vector. Program
pentru ordonarea unui vector de numere prin determinarea repetata a valorii
maxime dintr-un vector si schimbarea cu ultimul element din vector.
P3.5 Functie care determina semnul unui numar intreg ("sign") si are
rezultat 0 (valoare zero), -1 (numar negativ) sau +1 (numar pozitiv).
Functie care determina numarul cadranului in care se afla un punct de
coordonate intregi date x,y; rezultatul este 0 daca punctul se afla pe
una din axe sau la intersectia axelor. Indicatie: Se face o selectie
("switch") dupa valoarea 3*sign(x)+sign(y). Program de verificare.
P3.6 Functie pentru cautare binara intr-un vector ordonat in doua moduri:
iterativ si recursiv. Cautarea binara se face prin compararea valorii
cautate cu valoarea din mijlocul vectorului cercetat si alegerea primei
sau ultimei jumatati din vector pentru pasul urmator, in functie de
rezultatul comparatiei. Procesul de injumatatire a vectorului se opreste
fie la gasirea valorii cautate, fie la reducerea dimensiunii pana la 1.
Functia primeste ca argumente valoarea cautata, adresa vectorului si
indicii (pozitiile) din vector intre care se cauta.
P3.16 Functie care schimba intre ele doua linii i si j dintr-o matrice
patratica. Program care foloseste functia pentru a aduce pe diagonala
principala numai elemente nenule (daca este posibil). Se va afisa matricea
obtinuta prin schimbari de linii.
// R3.1
// determinare nr de cifre la p.intreaga a unui nr. dat
int digits (double x) {
int nc=0; // x=fabsl(x);
while ( x >= 1.) {
++nc;
x=x/10.0;
}
return nc;
}
// varianta mai simpla ptr functia digits
int digits(double x) {
return (int)log10(x) + 1 ;
}
// afisare vector de numere cu tabelare automata
void main () {
int x[10000]; int i,n,m,nv,max;
printf("n="); scanf("%d",&n);
max=0;
// completare vector de n intregi
for ( i=0;i<n;i++) {
x[i]=random(n);
m=digits (x[i]);
if ( max <m) max=m;
}
// printf ("nr. max. cifre=%d \n",max);
// afisare vector
nv=80/(max+1); // nr. maxim de coloane
for ( i=0;i<n;i++) {
if (i%nv==0)
printf ("\n");
printf ("%*d",max+2,x[i]); // scrie x[i] pe max+2 pozitii
}
}
// R3.2
// verifica daca este numar prim
int prim ( int n) {
int d;
for (d=2; d<=n/2 ; d++)
if ( n%d==0)
return 0; // nu este prim
return 1; // este prim
}
// verif. ipotezei lui Goldbach
main () {
int n,m,k;
printf("n="); scanf("%d",&n);
for (m=2; m<=n; m=m+2)
// incearca numerele k si m-k daca prime
for (k=1; k<=m/2; k++)
if (prim(k) && prim (m-k))
printf (" %d =%d+%d \n",m,k,m-k);
}
// R3.3
// factorul de multiplicitate al lui b in a
int mult (int a, int b, int * c) {
int k=0;
while ( a %b ==0) {
a=a/b;
k++;
}
*c=a;
return k;
}
// descompunere in factori primi
void main () {
int n,n2, m,k,r;
printf("n="); scanf("%d",&n);
n2=n;
printf ("\n%d = 1 ",n);
for (m=2;m<n2;m++)
if( (k=mult(n,m,&r)) > 0) {
printf("* %d^%d ",m,k);
n=r;
}
printf("\n");
}
// varianta pentru functia "mult" (cu alt mod de folosire)
void mult (int a, int b, int * m, int *c) {
int k=0;
while ( a %b ==0) {
a=a/b;
k++;
}
*c=a; *m=k;
}
// R3.4
// determina pozitie maxim in vector de numere
int imax ( float x[], int n) {
int i, im=0; // im = indice maxim
for (i=1;i<n;i++)
if ( x[i] > x[im]) // x[im] este un maxim partial
im=i;
return im;
}
// ordonare vector
void sort ( float x[], int n) {
int im,k; float aux;
while ( n>1 ) {
im=imax(x,n);
// schimba x[im] cu x[n-1]
aux=x[im];
x[im]=x[n-1];
x[n-1]=aux;
n--; // scade dimensiune vector
}
}
// verificare
void main () {
float t[]= {5,2,9,1,4,6,2,8};
int i, n = sizeof(t)/sizeof(t[0]);
sort (t,n);
for (i=0;i<n;i++)
printf ("%.2f ",t[i]);
// R3.5
#include <stdio.h>
#include <math.h>
// semn numar algebric = -1 sau 1 sau 0
int sign (int x) {
if (x==0) return 0;
else return x/abs(x);
}
// determinare cadran
int cadran ( int x, int y) {
int k= 3*sign(x)+sign(y);
switch (k){
case -1: case 1: case 3: case -3: return 0; // pe axe
case 4: return 1;
case -2: return 2;
case -4: return 3;
case 2 : return 4;
}
}
// verificare functii
void main () {
int x,y, c;
do {
printf("x,y : "); scanf("%d%d",&x,&y);
c= cadran(x,y);
if (c==0)
printf ("Pe una din axe \n");
else
printf (" Cadranul %d \n", c);
} while (1);
}
// R3.6
// cautare binara, nerecursiva
int caut(int b,int a[],int i,int j) {
int m;
while (i <= j ) {
m=(i+j)/2; // mijloc vector
if (a[m]==b)
return m; // pozitia unde a fost gasit
else
if (a[m] < b)
i=m+1;
else
j=m-1;
}
return -1;
}
// R3.7
// operatii cu multimi de biti
#include <stdio.h>
#define DIM 16
typedef unsigned int Set[DIM];
// initializare multime vida
void init (Set m){
int i;
for(i=0;i<DIM;i++) m[i]=0;
}
// adauga la multimea m valoarea x
void add (Set m,int x){
int i,j;
i= x / 16;
j= x % 16;
m[i]= m[i] | (1<<j);
}
// reuniune de multimi ( c=a+b)
void or (Set a, Set b, Set c) {
int i;
for (i=0; i<DIM;i++)
c[i]=a[i] | b[i];
}
// intersectie de multimi (c=a&b)
void and (Set a, Set b, Set c) {
int i;
for (i=0; i<DIM;i++)
c[i]=a[i] & b[i];
}
// diferenta simetrica de multimi
void xor (Set a, Set b, Set c) {
int i;
for (i=0; i<DIM;i++)
c[i]=a[i] ^ b[i];
}
// diferenta de multimi (c=a-b)
void dif (Set a, Set b, Set c) {
Set t;
and (a,b,t);
xor (a,t,c);
}
// verifica aparteneta la multimea m a lui x
int is (Set m,int x){
int i,j;
i= x / 16;
j= x % 16;
return m[i] | (1<<j);
}
// afisarea multimii m
void print (Set m)
{ int j,i;
printf("{ ");
for(j=0;j<16;j++)
for (i=0;i<16;i++)
if(m[j] & (1<<i))
printf("%d,",i+16*j);
printf("\b }\n");
}
// verificarea unor functii
main() {
Set a,b,c,t,u,v;
int i;
init (a); init (b);
for (i=10;i<100;i=i+20)
add (a,i);
for (i=5;i<100;i+=15)
add(b,i);
or (a,b,c); print(c);
and (a,b,t); print (t);
xor (a,b,u); print (u);
dif (a,b,v); print (v);
}
// R3.8
// operatii cu multimi reprezentate prin vectori neordonati
#include <stdio.h>
#define M 256 // dimensiune maxima vectori (multimi)
// initializare multime vida
void init (int a[]) {
int i;
for (i=0;i<M;i++)
a[i]=0;
}
// test daca o valoare data apartine unei multimi
int contine (int a[], int x) {
int i;
for (i=0; i<M && a[i] > 0 ; i++)
if (x==a[i])
return 1; // x apartine lui a
return 0; // x nu apartine lui a
}
// dimensiunea (cardinalul) unei multimi
int dim (int a[]) {
int i, m=0;
for (i=0; i<M && a[i] > 0 ; i++)
m=m+1;
return m;
}
// adaugare element la o multime
void plus (int a[], int x) {
int k;
if (contine (a,x)) return ; // nimic daca exista deja
k=dim(a); // prima pozitie libera
a[k]=x; // adauga elem la multime
}
// eliminare valoare data dintr-o multime
void minus (int a[], int x) {
int i=0;
if ( ! contine (a,x)) return ; // nimic daca nu exista
while ( a[i] != x ) // cauta element de eliminat
i++;
while (a[i]) { // si muta la stinga urmatoarele elem.
a[i]=a[i+1]; i++;
}
}
// afisarea elementelor unei multimi
void scrie (int a[]) {
int i=0;
printf ("\n{ ");
while (a[i] !=0) {
printf ("%d ", a[i]);
i++;
}
printf (" } \n");
}
// reuniune de multimi
void plusm (int a[],int b[], int c[]) {
int i; int t[M];
init(t);
for (i=0; a[i]; i++)
plus (t, a[i]);
for (i=0; b[i]; i++)
plus (t,b[i]);
for (i=0;i<M;i++)
c[i]=t[i];
}
// intersectie de multimi
void inters (int a[],int b[], int c[]) {
int i; init(c);
for (i=0;i<M && a[i] >0 ; i++)
if ( contine (b, a[i]))
plus (c,a[i]);
}
// diferenta de multimi a-b
void minusm (int a[], int b[], int c[]) {
int i,k;
init(c);
for (i=0; i<M && a[i];i++)
if ( ! contine (b, a[i]) ) // elem. din a care nu sunt si in b
plus (c,a[i]);
}
// comparatie la egalitate multimi
int egal (int a[], int b[]) {
int i;
if ( dim(a) != dim(b) )
return 0;
if (continem (a,b))
return 1;
else
return 0;
}
// citire multime vector
int citmul (int a[]) {
int i=0;
init (a);
do { scanf("%d", &a[i++]);
} while (a[i-1]);
return i;
}
// verificare functii
void main () {
int a[M], b[M], c[M], d[M], e[M], f[M], r[M];
citmul(a); citmul(b);
scrie(a); scrie(b);
plusm (a,b,c); scrie (c);
inters (a,b,d); scrie (d);
minusm(a,b,e); minusm (b,a,f);
plusm(d,e,r); plusm(r,f,r);
if ( egal (c,r) )
printf ("corect \n");
else
printf ("incorect \n");
}
// R3.9
#include <stdio.h>
// calcul valoare polinom ptr un x dat
long valPol ( int c[], int n, int x) {
long s=0L; int i;
for (i=0;i<=n-1;i++)
s=s*x+c[i];
return s;
}
// vector cu divizorii unui intreg dat (pozitivi si negativi)
int div (int n, int d[]) {
int k,j=0;
if(n<0) n=-n; // sa nu apara rest=-0 !
for (k=1; k<=n; k++)
if (n%k==0) {
d[j++]=k; d[j++]=-k; // k si -k sunt divizori
}
return j;
}
// impartire polinom prin x-r
void impPol (int a[],int n, int b[], int r) {
int k; --n;
b[0]=a[0];
for (k=1;k<=n-1;k++)
b[k]=a[k]+b[k-1]*r;
}
// radacini intregi ec. polinomiala
void main () {
int x, a[100],b[100], d[20],i=0, n, m, nr;
printf("nr. coef.="); scanf ("%d",&n);
printf ("coef. polinom,in ordinea descrescatoare a puterilor lui x:\n");
for (i=0;i<=n-1;i++)
scanf("%d",&a[i]);
printf ("Radacini intregi: ");
do { // repeta cat e nevoie
m=div(a[n],d); // divizori termen liber
nr=0; // numar de radacini intregi gasite
// verifica daca fiecare divizor este radacina
for (i=0;i<m;i++) {
if (valPol(a,n,d[i])==0) {
printf ("%d ",d[i]);
impPol (a,n,b,d[i]);
n--; ++nr;
for (i=0;i<n;i++)
a[i]=b[i]; // coef. noii ecuatii polinomiale (cu grad n-1)
}
}
} while (nr>0);
// scrie coeficienti polinom fara radacini intregi
// return ;
if (n >1) {
printf ("\nEcuatia fara coef. intregi: \n");
for (i=0;i<=n-1;i++)
if ( a[i])
printf ("%d(x^%d) ",a[i],n-1-i);
printf("\n");
}
}
// R3.10
#include <stdio.h>
// Interpolare Lagrange
float lagrange ( float x[], float y[], int n, float xx) {
int i,k; float s=0,p;
for (k=1;k<=n;k++) {
p=1;
for (i=1;i<=n;i++)
if (i!=k)
p=p*(xx-x[i])/(x[k]-x[i]);
// aduna la suma
s=s+y[k]*p;
}
return s;
}
// program principal
void main () {
float x[100],y[100],xm[100],ym[100],xx,yy;
int n,i,j;
// citire date initiale
printf ("nr.puncte:"); scanf("%d",&n);
printf("coord. puncte:\n");
for (i=1;i<=n;i++) {
scanf ("%f%f",&xx,&yy);
x[i]=xx;y[i]=yy;
}
// creare vector de n-1 puncte prin interpolare
for (i=1;i<n;i++) {
xm[i]= (x[i]+x[i+1])/2;
ym[i]=lagrange(x,y,n,xm[i]);
}
for (i=1;i<=n-1;i++)
printf ("%f %f \n", xm[i],ym[i]);
}
// R3.11
#include <stdio.h>
// produs dintre un polinom si un binom
// (a[n]+a[n-1]*x+...+a[0]*x^n)(x+c) = b[n+1]+b[n]*x+...+b[0]*x^(n+1)
int prodpoli (int a[], int n, int c, int b[]) {
int i;
b[0]=a[0];
for (i=1;i<n+1;i++)
b[i]=a[i]+a[i-1]*c;
b[n+1]=a[n]*c;
return n+1;
}
// calcul produs (x+c[0])*(x+c[1])* ...(x+c[n-1])=b[n]+b[n-1]*x+...+b[0]*x^n
void produs (int c[], int n, int b[]) {
int i,j,d[100];
b[0]=1;
for (i=0;i<n;i++) {
prodpoli (b,i,c[i],d);
for (j=0;j<=i+1;j++)
b[j]=d[j];
printf ("\n");
}
}
// verificare functii
void main () {
int a[100],b[100],i,j,n;
printf ("\n n="); scanf ("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
produs (a,n,b);
printf (" Rezultate:\n");
for (i=0;i<=n;i++)
printf("%4d",b[i]);
}
// R3.12
int cmmdc (int a,int b) {
if ( a%b==0)
return b;
return cmmdc( b,a%b);
}
// R3.13
// recursiv
void binar (int n) {
if (n>0) {
binar (n/2);
printf("%d", n%2);
}
else
printf("0");
}
// iterativ (cu vector)
void binar2 ( int n) {
int c[16],i;
// aduna resturi in vector
i=0;
while ( n>0) {
c[i++]=n%2;
n=n/2;
}
printf ("%d\n",i);
// scrie vector in ordine inversa
while (i>0)
printf ("%d",c[--i]);
}
// R3.14
// cautare secventiala recursiva intr-un vector
int lsearch (int a[], int n, int b) {
// cauta pe b in vectorul a de lungime n
if (n==0)
return -1; // negasit
if (b==a[n-1])
return n-1; // gasit in ultima pozitie
else
return lsearch(a,n-1,b); // cauta intr-un subvector mai mic
}
// R3.15
#include <stdio.h>
#define M 20 // dimensiuni matrice
typedef float num;
typedef num mat[M][M]; // definire tip "mat"
// generare matrice unitate
void matunit ( mat u,int n) {
int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (i ==j)
u[i][j]=1;
else
u[i][j]=0;
}
// produs matrice patratice
void prodmat ( mat a, mat b, mat c,int n) {
int i,j,k;
mat t; // matr de lucru (ptr produs)
// t=a*b
for (i=0;i<n;i++)
for (j=0;j<n;j++) {
t[i][j]=0;
for (k=0;k<n;k++)
t[i][j] += a[i][k]*b[k][j];
}
// copiaza din t in c
for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j]=t[i][j];
}
// afisare matrice
void scrmat (mat a, int n) {
int i,j;
for (i=0;i<n;i++) {
for (j=0;j<n;j++)
printf ("%f ",a[i][j]);
printf ("\n");
}
}
// ridicare la putere matrice
void expmat (mat a,int n,int k, mat p) {
int i,j;
matunit (p,n); // initializare p cu matrice unitate
// inmultiri repetate
for (i=0;i<k;i++)
prodmat (p,a,p,n);
}
// verificare functii
void main () {
int n=3; // dimensiuni ptr teste
mat a={ {1,2,3},{4,5,6},{7,8,9}};
mat b,c ;
matunit(b,n);
prodmat (a,b,a,n);
scrmat (a,n);
// ridicare la putere matrice
expmat (a,n,2,c);
scrmat(c,n);
}
// R3.16
#include <stdio.h>
#define M 10 // nr maxim linii/coloane
typedef float mat[M][M];
// schimba intre ele doua linii dintr-o matrice patratica
void schimb ( mat a, int n, int i, int j) {
float aux;
int k;
for (k=1;k<=n;k++) {
aux=a[i][k];
a[i][k]=a[j][k];
a[j][k]=aux;
}
}
// aducere valori nenule pe diagonala unei matrice patratice
// rezultat 1 daca a reusit si 0 daca nu a reusit
int transf (mat a, int n) {
int i,j, gasit;
for (i=1;i<=n;i++) // ptr fiecare linie i
if (a[i][i] == 0) {
gasit=0;
// cauta pe coloana i in liniile i+1,..n o val. nenula
for (j=1;j<=n;j++)
if ( j != i && a[j][i]) {
gasit=1; schimb (a,n,i,j);
}
if (gasit) continue;
else return 0;
}
return 1;
}
// verificare functie
void main () {
mat a; int i,j,n; float x;
printf ("n= "); scanf("%d",&n);
printf ("Elem matrice, pe linii: \n");
for (i=1;i<=n;i++)
for (j=1;j<=n;j++) {
scanf("%f",&x); a[i][j]=x;
}
i=transf (a,n); // transforma matricea a
if (i==0) {
printf("Imposibil !\n");
return;
}
for (i=1;i<=n;i++) { // scrie matricea transformata
for (j=1;j<=n;j++)
printf("%f ",a[i][j]);
printf("\n");
}
}
#include <stdio.h>
void main () {
char linie[80]; // aici se citeste o linie
while ( gets (linie) != NULL)
puts(linie); // scrie linia citita
}
#include <stdio.h>
#include <string.h>
void main () {
char linie[80]; // aici se citeste o linie
char text[30000]={0}; // aici se memoreaza toate liniile
while ( gets (linie) != NULL) {
strcat (linie,"\n"); // "gets" elimina car. '\n'
strcat(text,linie); // adauga la text linia citita
}
puts(text); // afisare text citit, pe linii
}
E4.3 Program pentru citirea de siruri separate prin spatii albe intre ele
(se pot introduce mai multe siruri intr-o linie):
#include <stdio.h>
#include <string.h>
void main () {
char word[30]; // lungime maxima cuvant=30
while (scanf("%s",word) !=EOF)
printf("%s(%d)\n",word,strlen(word)); // un cuvant si lungimea sa
}
#include <stdio.h>
#include <string.h>
// cauta un sir in alt sir
char * strstr ( char * s1, char* s2) {
while ( strlen (s1) >= strlen(s2) )
if ( strncmp(s1,s2,strlen(s2)) ==0 )
return s1;
else
++ s1;
return NULL;
}
// verificare functie
void main () {
char s1[30], s2[30];
while ( scanf ("%s %s", s1,s2) != EOF)
printf ("%s\n",strstr(s1,s2));
}
#include <stdio.h>
#include <string.h>
// numarare linii si cuvinte dintr-un fisier text
void main ( int argc, char *argv[] ) {
char linie [200], *p, *sep="\t \r\n" ;
FILE * f;
int nl=0, nc=0; // nr linii, nr cuvinte
if (argc < 2) {
printf("Lipseste numele fisierului din comanda \n");
return;
}
if( (f = fopen (argv[1],"r")) == NULL) {
printf(" fisier negasit \n"); return ;
}
while ( fgets (linie,200,f) != NULL) {
nl++;
p=linie;
while ( (p= strtok (p,sep)) != NULL) {
++nc;
p=p+strlen(p)+1;
}
}
printf ("\n %d linii %d cuvinte",nl,nc); // si alte operatii cu linia citita
fclose(f);
}
#include <stdio.h>
#include <ctype.h>
// numarare linii si cuvinte dintr-un fisier text
void main ( int argc, char *argv[] ) {
char linie [200], *p ; FILE * f;
int nl=0, nc=0; // nr linii, nr cuvinte
// aici se pot face verificari asupra datelor primite
f=fopen(argv[1],"r");
while ( fgets (linie,200,f) != NULL) {
nl++;
p=linie;
while (*p) {
while ( *p && isspace(*p) ) // ignora spatii dintre cuvinte
p++;
if (*p =='\0') // daca s-a terminat linia curenta
break; // citeste alta linie
nc ++;
while (*p && ! isspace(*p) ) // cauta sfarsit de cuvant
p++;
}
}
printf ("%d linii %d cuvinte",nl,nc); // si alte operatii cu linia citita
fclose(f);
}
E4.10 Program pentru citirea unui fisier text creat in Unix (in care fiecare
linie se termina cu un singur caracter '\n' ) si crearea unui alt fisier
cu acelasi continut, dar in care liniile se termina cu doua caractere: "\r\n".
In final se sterge fisierul initial si se schimba numele noului fisier in
numele fisierului initial. Functia "fputs" adauga caracterul '\r' inaintea
caracterului '\n'.
#include <stdio.h>
#include <string.h>
void main () {
char nume1[80], nume2[80]; // nume fisiere
char line[200]; // aici se citeste o linie
char *point ;
FILE * f1, * f2;
puts("Nume fisier text:"); gets(nume1);
if( (f1 = fopen (nume1,"r")) == NULL) {
printf(" fisier negasit \n"); return ;
}
strcpy(nume2,nume1);
point = strchr (nume2,'.');
if (point==0)
point=nume2+strlen(nume2);
strcpy(point+1,"$$$");
f2 =fopen (nume2,"w");
while ( fgets (line,200,f1) != 0)
fputs (line,f2);
if (fclose(f1)<0 || fclose(f2)<0) {
puts("Erori la fisiere \n"); return;
}
remove(nume1); rename(nume2,nume1); // schimba nume1.$$$ in nume1.*
}
PROBLEME PROPUSE
P4.3 Functie pentru eliminarea unui subsir de lungime data dintr-un sir
dat prin adresa sa (si terminat cu zero). Functie pentru inserarea
unui sir dat la o adresa dintr-un sir terminat cu zero.
P4.4 Program care inlocuieste toate aparitiile unui sir dat printr-un
alt sir (de lungime diferita), intr-un text aflat in memorie. Se pot folosi
functiile din programul anterior.
P4.10 Program pentru ordonarea unui fisier text dupa cuvantul numarul k
din fiecare linie (k=0,1,..n-1). Fiecare linie contine n cuvinte separate
prin spatii albe. Numele fisierului si intregul k se transmit prin linia de
comanda ( exemplu: sort linii 1).
P4.12 Program pentru citirea unui fisier text si crearea unui alt fisier text
cu linii de o lungime maxima impusa, fara a desparti cuvintele la trecerea de
pe o linie pe alta. Cuvintele sunt siruri separate prin unul sau mai multe
spatii albe.
P4.13 Program pentru citirea unui fisier text si scrierea unui alt fisier
(cu acelasi numar de linii) in care fiecare linie se termina cu un caracter
diferit de spatiu alb, prin inserarea de blancuri intre cuvinte cat mai
uniform posibil. In fisierul de iesire toate liniile au aceeasi lungime,
specificata in linia de comanda, dupa numele fisierului de intrare.
P4.14 Program pentru citirea unui fisier sursa C si afisarea textului
dupa eliminarea comentariilor din text. Se vor elimina ambele tipuri de
comentarii: cele care incep prin "//" si cele delimitate de "/*" si "*/".
Un comentariu nu poate contine nici un alt comentariu. Perechile de
caractere //,/* si */ intr-o constanta sir nu semnifica comentarii.
P4.15 Program care inlocuieste toate aparitiile unui sir dat printr-un
alt sir (de lungime diferita), intr-un fisier text. Se va crea un alt
fisier text (cu acelasi nume dar cu extensia "$$$"). In final se
schimba extensia fisierului initial in "BAK" si fisierul creat primeste
extensia fisierului initial.
P4.16 Program care citeste un fisier HTML si creeaza un fisier text (ASCII)
dupa eliminarea tuturor marcajelor din text. Un marcaj ("tag") incepe prin
caracterul '<' si se termina cu caracterul '>', poate contine oricite
caractere si se poate extinde pe mai multe linii. Programul va verifica daca
primele caractere diferite de blanc din fisierul de intrare sunt <HTML ...>
sau <!DOCTYPE HTML ...>.
// R4.1
// lungime sir terminat cu zero
int strlen ( char * s) {
int len=0;
while (* s++)
++ len;
return len;
}
// copiaza sir la adresa d de la adresa s
char * strcpy ( char * d, char * s) {
char * dd =d; // ptr. rezultat ( d se modifica !)
while (*d++ = * s++)
;
return dd; // adresa d nemodificata
}
// concatenare sir s in prelungirea sirului d
char * strcat (char * d, char * s) {
char *dd = d; // ptr. return
while (*d ++) ; // pozitionare pe sfirsitul sirului d
--d; // inaintea terminatorului de sir
while ( *s)
*d++ = *s++;
return dd; // adresa sir rezultat
}
// cauta un caracter c intr-un sir d
char * strchr (char * d, char c) {
while (*d)
if ( c == *d)
return d;
else
++d;
return 0;
}
// cauta ultima aparitie a lui c in sirul d
char * strrchr (char * d, char c) {
char * dd=d;
d=d+ strlen(d);
while (d != dd)
if ( c == *d)
return d;
else
--d;
return 0;
}
// comparare de siruri
int strcmp ( char * s1, char * s2) {
do {
if (*s1 < *s2)
return -1;
if (*s1 > *s2)
return +1;
} while ( *s1++ && *s2++);
return 0; // siruri egale pe toata lungimea
}
// cauta sirul s in sirul d
char * strstr ( char *d, char * s) {
char *pd, *ps ;
while (*d) {
ps=s; pd=d;
while ( *ps)
if ( *ps != *pd)
break;
else {
++ps; ++pd;
}
if ( *ps == 0)
return d;
else
++d;
}
return 0;
}
// R4.2
// echivalenta cu "strncpy"
char * stcpy (char* d, char * s,int n) {
int i=0;
char * dd=d;
while (i < n && *s) {
*d++ = *s++;
i++;
}
*d=0; return dd;
}
// echivalenta cu "strncat"
char * stcat (char* d, char * s,int n) {
char * dd=d;
while (*d) // pozit. pe sfirsit sir d
++d;
while ( n > 0 && *s) {
*d++ = *s++;
n--;
}
*d=0; return dd;
}
// echivalenta cu "strncmp"
int stcmp ( char * d, char *s, int n) {
while ( n>0 && *d && *s && *d == *s ) {
n--; ++d; ++s;
}
if (n==0 || (*d==0 && *s==0) )
return 0; // siruri egale
else
if (*d < *s)
return -1;
else
return 1;
}
// R4.3
/* sterge n caractere de la adresa d */
void strdel (char *d, int n) {
strcpy (d, d+n);
}
// insertie sir s la adresa d
void strins (char *d, char *s) {
int ld=strlen(d), ls=strlen(s);
strcpy (d+ld+ls,d); // deplasare dreapta sir d
strcpy(d,s);
strcpy (d+ls, d+ld+ls);
}
// varianta de insertie sir
void strins (char *d, char *s) {
char aux[1024];
strcpy(aux,d);
strcpy(d,s);
strcat(d,aux);
}
// alta varianta de insertie sir s la adresa d
void strins (char *d, char *s) {
char * aux;
aux=strdup (d); // duplicare d la adresa aux
strcpy(d,s);
strcpy (d+strlen(s), aux);
free(aux); // eliberare memorie alocata de strdup
}
// R4.4
// inlocuieste in txt toate apritiile lui s1 prin s2
void main () {
char txt[200] = "un bit plus un bit nu fac un byte";
char s1[]="un", s2[]="one";
char *p;
p=strstr (txt,s1); // pozitia lui s1 Œn txt
while (p != NULL) {
strdel (p,strlen(s1)); // sterge pe s1 de la adresa p
strins(p,s2); // insereaza s2 la adresa p
p=strstr(p+strlen(s2),s1); // cauta alta aparitie a lui s1
}
puts (txt); // afisare text dupa inlocuire
}
// R4.5
// extragere subsiruri dintr-un sir (var.1)
void data (char * d, int r[3]) {
sscanf (d,"%d-%d-%d",&r[0],&r[1],&r[2]);
}
// extragere subsiruri dintr-un sir (var. 2)
void data (char *d, int r[]) {
char * sep="-";
r[0]=atoi (strtok(d,sep));
r[1]=atoi (strtok(0,sep));
r[2]=atoi (strtok(0,sep));
}
// verificare
void main () {
char d[]="25-12-1999";
int x[3];
data (d1,x);
printf ("\n %d %d %d ",x[0],x[1],x[2]);
}
// R4.6
// afisare si numarare cuvinte
// (a) cu "strtok"
main () {
char *linie ="unu doi \ntrei patru \n cinci sase sapte opt";
char * token; // adresa unui atom din text
char * sep=" \t\n";
int nt=0;
token= strtok (linie,sep);
while ( token != NULL) {
++nt;
printf ("%s \n", token);
token= strtok (0,sep);
}
printf ("%d atomi \n", nt);
}
// afisare si numarare cuvinte (atomi)
// (b) cu "sscanf"
main () {
char *linie ="unu doi \ntrei patru \n cinci sase sapte opt";
char * p, token[40]; // un atom din text
int nt=0;
p=linie;
while ( sscanf(p,"%s",token) > 0) {
++nt;
printf ("%s \n", token);
p= strstr(linie,token)+strlen(token);
}
printf ("%d atomi \n", nt);
}
// R4.7
char *strtok2 (char * sir,char *separ, char * tok) {
char *p, *r;
p=sir;
/* ignora separatori intre atomi */
while (strchr(separ,*p) && *p )
p++;
if (*p=='\0') return NULL;
r=p;
while (strchr(separ,*p)==NULL && *p)
p++;
if (p==r) return NULL;
else {
*p++='\0';
strcpy(tok,r); return p;
}
}
// afisare si numarare cuvinte (atomi)
main () {
char *linie ="unu, doi trei; patru cinci.sase. sapte opt";
char token[20], *p; // adresa unui atom din text
char * sep =" ,.; "; // lista de separatori intre atomi
int nt=0;
p=linie;
while ( p= strtok2 (p,sep,token)) {
++nt;
printf ("%s \n", token);
}
printf ("%d atomi \n", nt);
}
// R4.8
// extrage de la adresa adr un sir de litere la adresa rez
char * nextword ( char * adr, char * rez) {
while ( *adr && ! isalpha(*adr)) // ignora alte caractere
++adr;
while (*adr && isalpha(*adr)) // copiaza litere la adresa rez
*rez++=*adr++;
*rez=0; // terminator sir rezultat
if (*adr==0)
return NULL; // daca nu s-a gasit cuvant
else
return adr; // adresa urmatoare cuvantului gasit
}
// R4.9
// frecv de utilizare a unor cuvinte cheie
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// cauta in tabel de cuv cheie
int keyw ( char * nume, char * kw[], int n ) {
int i;
for (i=0;i<n;i++)
if (strcmp(nume,kw[i])==0)
return i;
return -1;
}
// extrage de la adresa adr un cuvint la adresa rez
char * next ( char * adr, char * rez) {
while ( *adr && ! isalpha(*adr) )
++adr;
while (*adr && isalpha(*adr))
*rez++=*adr++;
*rez=0;
if (*adr==0)
return 0;
else
return adr; // adresa urmatoare cuvantului gasit
}
void main () {
FILE * f; char buf[128] ;
char * p, *r, w[20];
char* kw [5]={"do","for","if","while","break","switch"};
int nr[5]={0}; // nr de aparitii ptr fiecare cuvint
int k,lc,n=5; // lungime vectori kw si nr
printf ("nume fisier: "); scanf("%s",buf);
f=fopen (buf,"r");
if (f==NULL) {
printf("Fisierul %s nu exista \n",buf);
return;
}
while ( fgets(buf,128,f)!=0 ) {
p=buf;
while (r=next (p,w)) { // lungime cuvant urmator
printf("%s ",w);
k= keyw (w,kw,n);
if (k >=0)
nr[k]++;
p=r; // de aici continua cautarea
}
}
for (k=0;k<n;k++)
printf ("%8s = %d \n",kw[k],nr[k]);
}
// R4.10
// compara doua siruri dupa cuvantul k din sir (k=0,1,..)
int compar ( char * a, char * b, int k) {
char w1[80], w2[80];
while (k>=0) {
sscanf(a,"%s",w1); sscanf(b,"%s",w2);
a=strstr(a,w1)+strlen(w1);
b=strstr(b,w2)+strlen(w2);
k=k-1;
}
return strcmp(w1,w2);
}
// ordonare linii din fisier text dupa orice cuvant din linie
void main ( int argc, char * argv[]) {
FILE * f;
char line[132]; int k,n, gata; char * aux;
char * tlin[1000]; // vector de pointeri la linii (max 1000)
f= fopen(argv[1],"r"); // nume fisier in argv[1]
int nc = atoi(argv[2]); // numar cuvant in linie (0,1,..)
// citire fisier si creare vector de pointeri
k=0; // k= indice in vectorul tlin
while ( fgets (line,132,f) )
tlin[k++]=strdup(line);
n=k;
// ordonare vector de pointeri
do {
gata =1;
for (k=0;k<n-1;k++)
if ( compar(tlin[k],tlin[k+1],nc) > 0) {
aux=tlin[k+1]; tlin[k+1]=tlin[k]; tlin[k]=aux;
gata=0;
}
} while (!gata);
// afisare fisier ordonat
puts("");
for (k=0;k<n;k++)
printf("%s",tlin[k]);
}
// R4.11
typedef char word[30]; // un cuvint
// functie care cauta un sir intr-un vector de siruri
int caut ( word w, word t[], int n) {
int i;
for (i=0;i<n;i++)
if (strcmp(w,t[i])==0)
return i;
return -1;
}
// program principal
void main () {
FILE * f; char numef[50]; // nume fisier text
word cuv[300]; // tabel de cuvinte
int nr[300]={0}; int n,k,lc;
char linie[80], * adr, *sep=" \t\n";
puts("Nume fisier:"); gets(numef);
f=fopen(numef,"r"); //deschide fisier
n=0; // nr de cuvinte in vector
while ( fgets(linie,80,f) != 0) {
strcat(linie," ");
adr=strtok(linie,sep); // primul cuvant
// extrage cuvinte din linie
while ( adr ) {
k= caut (adr,cuv,n);
if (k >= 0) // daca exista deja in tabel
++nr[k];
else { // daca e prima aparitie
nr[n]=1;
strcpy(cuv[n],adr); // se introduce in tabel
++n; // si tabelul creste
}
adr=strtok(0,sep); // urmatorul cuvant
}
}
// afisare rezultate
for (k=0;k<n;k++)
if ( nr[k] > 1)
printf ("%s %d \n", cuv[k],nr[k]);
}
// R4.16
// conversie din HTML in text ASCII
#include <stdio.h>
#include <string.h>
void main () {
FILE *html, *text;
char hname[60], tname[60], hline[132], tline[132];
char * p, *p1, *p2;
int tag;
printf ("Fisier HTML: "); gets (hname);
strcpy(tname,hname);
p= strchr(tname,'.'); strcpy (p+1,"txt");
html=fopen(hname,"r"); text = fopen(tname,"w");
// verifica daca fisier HTML
fgets (hline,132,html);
p=hline;
while (*p ==' ') ++p;
if (strncmp(p,"<HTML>",6)!=0 && strncmp(p,"<!DOCTYPE HTML ",15)!=0) {
puts ("Nu este fisier HTML !");
return;
}
tag=0;
while ( fgets(hline,132,html) ) {
p1=hline; p2=tline;
// elimina marcaje HTML din linie
while (*p1) {
while ( *p1 && tag==0 && (*p1 !='<'))
*p2++=*p1++; // caractere exterioare marcajelor
if (*p1==0) break;
else
tag=1; // inceput marcaj
while (*p1 && tag && (*p1 !='>'))
p1++; // sir marcaj
if (*p1 =='>') {
tag=0; ++p1;
}
}
*p2=0;
fputs (tline,text);
}
fclose(text);
}
typedef struct {
float re, im;
} Complex;
typedef struct {
float re, im;
} Complex;
main () {
Complex c1={3,4},c2, c3;
cit_cx (&c2); scr_cx(c2);
ad_cx(c1,c2,&c3);
scr_cx(c3);
}
#include <stdio.h>
typedef struct { // o data calendaristica
int zi,luna,an;
} Date;
// comparare de date
int cmpdat ( Date d1, Date d2) {
int da,dl;
if ( da= (d1.an - d2.an)) return da; // < 0 sau > 0
if ( dl= (d1.luna - d2.luna)) return dl;
return d1.zi-d2.zi; // < 0, ==0, > 0
}
// ordonare vector de date
void sort (Date a[], int n) {
int i,j,gata; Date aux;
do {
gata=1;
for (i=0;i<n-1;i++)
if (cmpdat(a[i],a[i+1]) > 0 ) {
aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;
gata=0;
}
} while ( ! gata);
}
// verificare
void main () {
Date d[30], dd; int n,i;
i=0;
while (scanf ("%d%d%d",&dd.zi,&dd.luna,&dd.an)!=EOF)
d[i++]=dd;
n=i;
sort(d,n);
for (i=0;i<n;i++)
printf("%d-%d-%d\n",d[i].zi,d[i].luna,d[i].an);
}
#include <stdio.h>
// numar de orice tip
struct number {
char tipn;
union {
int ival;
long lval;
float fval;
double dval;
} v;
};
typedef struct number Num;
// afisare numar
PROBLEME PROPUSE
// R5.1
// ... alte functii (citire, scriere, adunare)
// produs de numere complexe
void prod_cx (Complex a, Complex b, Complex* pc) {
Complex c;
c.re = a.re*b.re - a.im*b.im;
c.im = a.re*b.im + a.im*b.re;
*pc=c;
}
// ridicare complex la putere intreaga
void put_cx (Complex a, int n, Complex * pc) {
Complex c={1,0}; int k;
for (k=0;k<n;k++)
prod_cx (a,c, &c);
*pc=c;
}
// valoare polinom de variabila complexa
void pol_cx ( int n, Complex c[], Complex x, Complex* rez) {
int i; Complex sum=c[0], t;
for (i=1;i<=n;i++) {
put_cx(x,i,&t); // t=x^i
prod_cx (c[i],t, &t); // c[i]*x^i
plus_cx (sum,t,&sum); // aduna termen la suma
}
*rez=sum;
}
// verificare functii
void main () {
Complex a[30], x, c; int i,n;
printf("x="); cit_cx (&x);
printf("n="); scanf("%d",&n);
printf("Coeficienti: \n");
for (i=0;i<=n;i++)
cit_cx(&a[i]);
pol_cx(n,a,x,&c);
scr_cx(c);
}
// R5.2
#include <stdio.h>
// operatii cu momente de timp
typedef struct {
int ora,min,sec;
} Time;
// verifica daca timp plauzibil
int corect (Time t) {
if ( t.ora < 0 || t.ora > 23 ) return 0;
if ( t.min < 0 || t.min > 59 ) return 0;
if ( t.sec < 0 || t.sec > 59 ) return 0;
return 1; // plauzibil corect
}
// citire ora
Time rdtime () {
Time t;
do {
scanf ("%d%d%d", &t.ora, &t.min,&t.sec);
if ( ! corect (t))
printf ("Date gresite, repetati introducerea: \n");
else break;
} while (1);
return t;
}
// scrie ora
void wrtime ( Time t) {
printf ("%d:%d:%d \n", t.ora,t.min,t.sec);
}
// compara momente de timp
int cmptime (Time t1, Time t2) {
int h,m;
h=t1.ora-t2.ora;
m=t1.min-t2.min;
if (h) return h;
if (m) return m;
return t1.sec-t2.sec;
}
main () {
Time t1,t2;
do {
t1=rdtime(); wrtime(t1);
t2=rdtime(); wrtime(t2);
printf ("%d \n", cmptime(t1,t2));
} while (1);
}
// R5.4
// structuri in probleme geometrice : punct, poligon etc.
#include <stdio.h>
#include <math.h>
typedef double Real;
typedef struct { Real x,y;} Punct;
typedef struct { int nv; Punct v[50];} Poligon;
// lungime segment delimitat de doua puncte
Real lung (Punct a, Punct b) {
Real dx= b.x-a.x;
Real dy= b.y-a.y;
return sqrt ( dx*dx+dy*dy);
}
// calcul primetru poligon
Real perim ( Poligon p) {
int i,n; Real rez=0;
n=p.nv;
for (i=0;i<n-1;i++)
rez = rez + lung (p.v[i],p.v[i+1]);
return rez+lung(p.v[n-1],p.v[0]);
}
// verificare
void main () {
Poligon p;
int i,n;
printf("nr. varfuri:"); scanf ("%d",&n);
p.nv=n;
printf ("coord. varfuri:\n");
for (i=0;i<n;i++)
scanf("%lf%lf", &(p.v[i].x), & (p.v[i].y) );
printf ("%lf \n", perim(p));
}
// R5.5
#include <stdio.h>
#include <stdlib.h>
#define INCR 100 // cu cat creste vectorul
typedef int T; // tip componente vector
typedef struct vf {
T * vec; // adresa vector
int dim, dmax; // dimensiune curenta si maxima
} Vector;
// initializare vector
void initVec (Vector * v) {
v->vec= (T *) malloc (INCR*sizeof(T));
v->dmax=INCR;
v->dim=0;
}
// adaugare element la vector
void addVec ( Vector * v, T x) {
if (v->dim == v->dmax) {
v->dmax += INCR; /* extindere vector */
v->vec=(T*) realloc (v->vec, (v->dmax)*sizeof(T));
}
v->vec[v->dim]=x; v->dim ++;
}
// afisare vector
void printVec ( Vector v) {
void printT (T );
int i;
for (i=0; i< v.dim;i++)
printT ( v.vec[i]);
printf("\n");
}
// afisare valoare de tip T
void printT (T x) {
printf ("%d ",x);
}
// creare si afisare vector
void main() {
T x; Vector v;
initVec (&v);
while (scanf("%d",&x) != EOF)
addVec ( &v,x);
printVec (v);
}
// R5.6
// frecventa de aparitie a cuvintelor, cu vector de structuri
#include <stdio.h>
#include <string.h>
#define MAXL 16 // nr maxim de litere dintr-un cuvant
#define MAXW 1000 // nr. maxim de cuvinte}
typedef struct {
char id[MAXL]; // cuvant
int na ; // numar de aparitii
} Per; // pereche cuvint-numar
typedef struct {
int nc; // dimensiune vector
Per tc[MAXW] ; // tabel de cuvinte
} Dic;
// R5.7
// dictionar ca structura cu doi vectori
#include <stdio.h>
#include <string.h>
#define MAXL 16 // nr maxim de litere dintr-un cuvant
#define MAXW 1000 // nr. maxim de cuvinte
typedef struct {
int n; // dimensiune vectori
char tc[MAXW][MAXL] ; // tabel de cuvinte
int tf[MAXW] ; // tabel frecventa de aparitie
} Dic;
// initializare
void initDic (Dic * d) {
d->n=0; // initial nici un cuvint
}
// afisare dictionar
void printDic (Dic d) {
int i;
for (i=0;i< d.n;i++)
printf ("%20s %4d \n",d.tc[i], d.tf[i]);
}
// pune pereche cheie-valoare in dictionar
void putDic (Dic * d, char* cuv, int n) {
int i=0;
// cauta cheia in dictionar
while ( i<d->n && strcmp(cuv,d->tc[i]))
i++;
if (i >= d->n) { //daca este un cuvint nou
strcpy (d->tc[d->n], cuv); // adauga la sfirsit de tabel
d->tf[d->n]=1; // prima aparitie
++ d->n;
}
else // cheie existenta
d->tf[i]=n;
}
// R5.8
#include <stdio.h>
#include <stdlib.h>
#define M 10 // dimensiune initiala multime
typedef struct set {
int * val; // adresa vector de valori
int max, n; // numar maxim si numar efectiv de elemente
} * Set;
// R5.10
#include <stdio.h>
#include <assert.h>
#include <string.h>
// structura articole fisier
typedef struct {
char nume[20];
int cant; long val;
} Bon;
// adaugare bonuri la sfarsit de fisier (si creare fisier)
void adaugare (char * numef) {
FILE * f; Bon b; char c;
f=fopen (numef,"rb");
if (f==NULL) {
printf ("Fisier inexistent . Creare fisier nou ? (d/n) ");
fflush(stdin); c=getchar();
if (c=='n' || c=='N')
return;
f=fopen(numef,"wb"); assert (f != NULL);
}
else
f=fopen (numef,"ab"); // pozitionare pe afarsit de fisier
puts ("Introducere bonuri si creare fisier \n");
printf (" nume, cantitate, valoare : \n\n");
while (scanf ("%s %d %ld ",b.nume, &b.cant, &b.val) != EOF)
fwrite(&b,sizeof(b),1,f);
fclose (f);
}
// afisarea tuturor bonurilor din fisier
void listare (char* numef) {
FILE * f; Bon b;
f=fopen(numef,"rb"); assert (f != NULL);
while (fread (&b,sizeof(b),1,f)==1)
printf ("%-20s %6d %12ld \n",b.nume, b.cant, b.val);
fclose (f);
}
// afisare si totalizare bonuri pentru un produs dat
void total (char * numef) {
FILE * f; Bon b;
char numep[20]; long sum=0;
f=fopen(numef,"rb"); assert (f != NULL);
puts("\n\n\n"); fflush(stdin);
printf("Nume produs: "); gets(numep);
while (fread (&b,sizeof(b),1,f)==1)
if (strcmp(numep,b.nume)==0) {
printf ("%-20s %6d %12ld \n",b.nume, b.cant, b.val);
sum =sum+ b.val;
}
printf (" Valoare totala = %ld\n", sum);
fclose (f);
}
// afisare meniu si tratare optiuni
void main () {
char opt [2];
char numef [30]; // nume fisier
printf("Nume fisier: "); scanf ("%s", numef);
// afisare repetata meniu
do {
printf (" a = adaugare bonuri la fisier \n");
printf (" l= afisare bonuri din fisier \n");
printf (" t = bonuri si total pe produs \n");
printf (" x = terminare program \n");
printf (" \n \n \n ");
// citire si interpretare comanda
scanf ("%1s",opt);
switch (opt[0]) {
case 'a' : adaugare (numef); break;
case 'l' : listare(numef); break;
case 't' : total(numef); break;
case 'x' : return;
}
getchar(); // pentru mentinere rezultate
} while ( opt[0] != 'x');
}
EXEMPLE DE PROGRAME
#include <string.h>
#include <alloc.h>
// alocare memorie si copiere sir
char * strdup ( char * adr) {
int len=strlen(adr);
char * rez = (char*) malloc(len);
strcpy(rez,adr);
return adr;
}
// utilizare "strdup"
#include <stdio.h>
void main () {
char s[80], * d;
do {
if (gets(s)==0) break;
d= strdup(s);
puts(d);
} while (1);
}
E6.2 Vector alocat dinamic (cu dimensiune cunoscuta la eexecutie)
#include <stdio.h>
#include <stdlib.h>
void main () {
int n,i;
int * a; // adresa vector
printf("n="); scanf("%d",&n); // dimensiune vector
a=(int*) malloc (n*sizeof(int));
printf("componente vector: \n");
for (i=0;i<n;i++) // citire vector
scanf("%d", &a[i]);
for (i=0;i<n;i++) // afisare vector
printf("%d ", a[i]);
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define INCR 4
void main() {
int n,i,m ;
float x, * v;
n=INCR; i=0;
v=(float *)malloc (n*sizeof(float));
while (scanf("%f",&x) !=EOF){
if (i == n) {
n= n+ INCR;
v=(float *) realloc (v,n*sizeof(float));
}
v[i++]=x;
}
m=i;
for (i=0;i<m;i++)
printf ("%.2f ",v[i]);
}
#include <stdio.h>
#include <stdlib.h>
void main () {
int n,i,j;
int ** mat; // adresa matrice
// citire dimensiuni matrice
printf("n="); scanf("%d",&n);
// alocare memorie ptr matrice
mat=(int **) malloc (n*sizeof (int*));
for (i=0;i<n;i++)
mat[i] =(int*) calloc (n,sizeof (int));
// completare matrice
for (i=0;i<n;i++)
for (j=0;j<n;j++)
mat[i][j]= n*i+j+1;
// afisare matrice
for (i=0;i<n;i++) {
for (j=0;j<n;j++)
printf ("%6d ",mat[i][j]);
printf ("\n");
}
}
void main () {
int n; char * vp[1000]; // vector de pointeri, cu dimens. fixa
n=readstr(vp); // citire siruri si creare vector
sort ( vp,n); // ordonare vector
printstr (vp,n); // afisare siruri
}
void main () {
nod * list, *nou, *p; // lst = adresa primului nod
int x;
// citire numere si creare lista
list=NULL; // lista initial vida
while (scanf ("%d",&x) > 0) {
nou= (nod*) malloc(sizeof(nod)); // creare nod nou
nou->val=x;
nou->leg=list; list=nou; // adauga noul nod la inceputul listei
}
// afisare lista
p=list;
while ( p != NULL) { // cat timp mai sunt noduri in lista
printf ("%d ", p->val); // afisare valoare din nodul cu adresa p
p=p->leg; // avans la nodul urmator
}
}
PROBLEME PROPUSE
P6.2 Program care citeste mai multe linii de text de la tastatura, aloca
dinamic memorie pentru fiecare linie si pune adresa liniei intr-un vector
de pointeri (vector alocat si realocat dinamic)
P6.6 Functie pentru adunarea a doua numere intregi fara semn cu maxim 254
cifre zecimale, reprezentate prin vectori de cifre zecimale (cate o cifra
pe un octet), precedate de lungimea lor . Numerele pot avea lungimi diferite,
iar prima cifra este cea mai putin semnificativa (cifra unitatilor). Functii
pentru conversia din sir de caractere in numere reprezentate ca vectori de
cifre si pentru conversia inversa. Memoria se aloca dinamic pentru fiecare
sir de cifre. Program pentru verificarea functiilor prin citire, adunare
si afisare suma de intregi foarte lungi.
Exemplu de adunare: 567089 + 432 = 567521
// R6.5
#include <stdio.h>
#include <stdlib.h>
// definire tip Set
typedef struct {
unsigned int * bset;
int dim;
} * Set;
// initializare multime de n elemente
void init (Set m, int n){
m->dim = n/16+1; // nr de cuvinte in vector
m->bset = (unsigned int *) calloc (n/16+1, sizeof(int));
}
// adauga un element la multime
void addelem (Set m,int el){
int i,j;
i= el / 16;
j= el % 16;
m->bset[i]= m->bset[i] | (1<<j);
}
// adunare (reuniune) multimi
void add (Set a, Set b, Set c) {
int i;
if ( a->dim != b->dim)
return;
c->dim=a->dim;
c->bset = (unsigned int*)calloc (c->dim, sizeof(int));
for (i=0; i<c->dim;i++)
c->bset[i]=a->bset[i] | b->bset[i];
}
// intersectie de multimi
void inters (Set a, Set b, Set c) {
int i;
if ( a->dim != b->dim)
return;
c->dim=a->dim;
c->bset = (unsigned int*)calloc (c->dim, sizeof(int));
for (i=0; i<c->dim;i++)
c->bset[i]=a->bset[i] & b->bset[i];
}
// apartenenta la multime
int este(Set m,int el){
int i,j;
i= el / 16;
j= el % 16;
return m->bset[i]&(1<<j)? 1:0;
}
// nr de elemente in multime
int size ( Set m) {
int j,i,k=0;
for(j=0;j<m->dim;j++)
for (i=0;i<16;i++)
if(m->bset[j] & (1<<i))
k++;
return k;
}
// afisare multime
void printset(Set m) {
int j,i;
printf("{ ");
for(j=0;j<m->dim;j++)
for (i=0;i<16;i++)
if(m->bset[j] & (1<<i))
printf("%d,",i+16*j);
printf("\b }\n");
}
// copiere multime
void clone ( Set a, Set c) {
int i;
c->dim=a->dim;
c->bset = (unsigned int*)calloc (c->dim, sizeof(int));
for (i=0; i<c->dim;i++)
c->bset[i]=a->bset[i] ;
}
// verificare functii
void main() {
Set a,b,c,d; int i;
init (b,50); init (a,50);
addelem (a,3); addelem (a,13);
addelem (b,13); addelem(b,4);
printset(a); printf (" %d \n",size(a));
printset (b); printf (" %d \n",size(b));
add (a,b,c); printset (c);
clone (a,d); printset (d);
inters (a,b,d); printset (d);
printf ("%d \n", este (d,13));
printf ("%d \n", este (d,3));
}
// R6.6
// numere lungi ca sir de cifre bcd (o cifra pe octet)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef char* bcd;
// conversie din ascii in bcd
bcd asc_bcd (char a[]) {
char * b; // adresa rezultat conversie
int i,j,la =strlen(a); // ;lungime sir a
if (la >254) return NULL; // eroare
b= (char*) malloc(la+1); // aloca memorie pentru numarul bcd
b[0]=la;
j=la-1; // ultimul octet din a
for (i=1;i<=la;i++,j--)
b[i]=a[j]-'0';
return b;
}
// conversie din bcd in ascii
void bcd_asc (bcd b, char a[]) {
int i,j;
j=0;
for (i=b[0];i>0;i--,j++)
a[j]=b[i]+'0';
a[j]=0;
}
// adunare de numere bcd
bcd add_bcd (bcd b1, bcd b2) {
int i,s,t,l1,l2,l3,c1,c2;
char * b3;
l1=b1[0]; l2=b2[0];
l3= l1>l2?l1:l2;
b3 =(char*) malloc(l3+2);
t=0;
b3[0]=l3; // poate mai creste cu 1 !
for (i=1;i<=l3;i++) {
c1= i<=l1? b1[i]:0;
c2= i<=l2? b2[i]:0;
s=c1+c2+t;
t=s/10; // transport la rangul urmator
s=s%10; b3[i]=s;
}
if (t) { // transport de la ultimul rang;
b3[0]++;
b3[i]=1;
}
return b3;
}
// verificare functii
void main () {
char s[255],r[255]; bcd b1,b2,b3;
int i;
do {
scanf("%s",s);
b1=asc_bcd(s);
scanf("%s",s);
b2=asc_bcd(s);
b3=add_bcd (b1,b2);
bcd_asc (b3,r);
printf("%s\n",r);
} while (1);
}
1) Fie m un număr întreg, 10 < m < 1000. Aflaţi ultima 2) Fie r un număr întreg, 10 < r < 1000. Aflaţi penultima
cifră a sumei -1 + 2 - 3 + 4 -…+ m .
1 2 3 4 m
cifră a sumei -11 + 22 - 33 + 44-…+ rr.
#include<conio.h>
#include<conio.h> #include<stdio.h>
#include<stdio.h> #include<math.h>
#include<math.h> main()
main() { int m,i,x,y; float s;
{ scanf("%d",&m);s=0;
int m,i,x,y; float s; for(i=1;i<=m;i++)
scanf("%d",&m);s=0; s=s+pow((-1),i)*pow(i,i);
for(i=1;i<=m;i++) x=s; y=x/10;
s=s+pow((-1),i)*pow(i,i); x=y%10;
x=s; y=x%10; if (x<0) x*=-1;
if (y<0) y*=-1; printf( "%d", x);
printf( "%d", y); getch();}
getch();}
pentru n intre 10 si 1000 nu merge
#include<conio.h>
#include<stdio.h>
#include<math.h>
int p(int);
main(){
int n,i,k,s1,s2;
i=1;
printf("introduceti un nr 10<n<1000,n=");
scanf("%d",&n);
s1=0;
s2=0;
for(;i<=n;i++)
{
if(i%2==0) s1=s1+p(i);
else
s2=s2+p(i);
}
if(n%2==0)
{
if(s1>s2)
k=(s1-s2)-((s1-s2)/10)*10;
else
{
s1=10000+s1;
k=(s1-s2)-((s1-s2)/10)*10;
}
}
else
{
if(s2>s1) k=(s2-s1)-((s2-s1)/10)*10;
else
{
s2=10000+s2;
k=(s2-s1)-((s2-s1)/10)*10;
}
}
printf("ultima cifra a sumei -1+2*2-3*3*3... este:%d",k);
getch();
}
int p(int i)
{
int r,
k=1;
r=1;
for(;k<=i;k++)
{
r=r*i;
r=r-r/10*10;
}
return r;
}
3) Fie un cuvânt B ce conţine cel puţin o vocală. Aflaţi care 4) Fie s un număr întreg, 10 < s < 1000. Aflaţi ultimele 2
literă din alfabet urmează după vocala de cod minim din cifre ale sumei -11 + 22 - 33 + 44-…+ ss.
cuvântul dat.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<string.h> #include<math.h>
main() main()
{ {
char s[50];int i,m,a[50],min; int m,i,x,y,ul,pen; float s;
gets(s); scanf("%d",&m);s=0;
i=0; m=0; for(i=1;i<=m;i++)
while(s[i]!='\0'){ s=s+pow((-1),i)*pow(i,i);
if((s[i]=='a')||(s[i]=='e')||(s[i]=='o')||(s[i]=='i') x=s;
||(s[i]=='u')||(s[i]=='A')||(s[i]=='E')||(s[i]=='O')||(s[i]=='I')||(s[i]== ul=x%10;
'U')) y=x/10;
a[m++]=s[i]; i++;} pen=y%10;
min=a[0]; if (ul<0) ul*=-1;
for(i=0;i<m;i++) if (pen<0) pen*=-1;
if(min>a[i]) min=a[i]; printf( "%d , %d",pen,ul);
printf("Vocala cu codul minim in acest cuvint este %c, dupa ea getch();}
urmeaza litera %c ",min,min+1); pentru n intre 10 si 1000 nu merge
getch();}
5) Fie m un număr întreg, 10 < m < 1000. Aflaţi produsul 6) Fie n mulţimi de numere întregi consecutive A1, A2,
ultimelor 2 cifre ale sumei -1 + 2 - 3 + 4 -…+ m .
1 2 3 4 m
A3, ..., An. Aflaţi intersecţia acestor mulţimi.
#include<conio.h> #include <stdio.h>
#include<stdio.h> #include <conio.h>
#include<math.h> #include <string.h>
main() main()
{ {
int m,i,x,y,ul,pen; float s; int i,min[130],max[30],n,in,ax;
scanf("%d",&m);s=0;
for(i=1;i<=m;i++) printf ("Dati nr. de multimi intregi:",n);
s=s+pow((-1),i)*pow(i,i); scanf("%d",&n);
x=s;
ul=x%10; for (i=0;i<n;i++)
y=x/10; {
pen=y%10; printf("\nValorile %d multimi:\n",i+1);
if (ul<0) ul*=-1; printf("min:");
if (pen<0) pen*=-1; scanf("%d",&min[i]);
printf( "%d",pen*ul); printf("max:");
getch();} scanf("%d",&max[i]);
if (max[i]<min[i]) {printf ("Multime imposibila\n"); i--;}
pentru n intre 10 si 1000 nu merge }
in=min[0];
ax=max[0];
for (i=0;i<n;i++){
if (in<min[i]) in=min[i];
if (ax>max[i]) ax=max[i];
}
if (in>ax) printf("Intesectia multimilor este multimea vida");
else
{
printf("\nIntesectia multimelor este:");
for (i=in;i<ax;i++)
printf("%d",i);
}
getch();
}
7) Fie n mulţimi de numere întregi consecutive A1, A2, A3, 8) Fie n mulţimi de numere întregi consecutive A1, A2,
..., An. Aflaţi reuniunea acestor mulţimi. A3, ..., An. Verificaţi dacă aceste mulţimi sunt incluse una
în alta, adică A1 A2 A3 ... An.
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
int i,min[130],max[30],n,in,ax,j,re[100],re2[100],z,l,k;
for (i=0;i<n;i++)
{
printf("\nValorile %d multimi:\n",i+1);
printf("min:");
scanf("%d",&min[i]);
printf("max:");
scanf("%d",&max[i]);
if (max[i]<min[i]) {printf ("Multime imposibila\n"); i--;}
}
in=min[0];
ax=max[0];
for (i=0;i<n;i++)
{
if (in>min[i]) in=min[i];
if (ax<max[i]) ax=max[i];
}
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (s[i]>s[j])
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
for (c=0;c<n;c++)
{
for (i=0;i<n;i++)
{ k=0;
for (j=min[i];j<=max[i];j++)
k++;
if (s[c]==k)
{printf ("\n");for (g=min[i];g<=max[i];g++)
printf("%d",g);
}
}
}
printf ("\n");
for (i=0;i<n;i++)
printf ("%d,",s[i]);
getch();
}
11) Fie o matrice y*y. Aflaţi produsul scalar al primei linii 12) Fie o matrice d*d. Aflaţi produsul scalar al primei
cu diagonala principală. coloane cu ultima coloană.
#include<conio.h> #include<conio.h>
#include<string.h> #include<string.h>
#include<stdio.h> #include<stdio.h>
main() main()
{ int m,i,j, v[50][50],ps=0; { int m,i,j, v[50][50],ps=0;
printf("Dati m:"); printf("Dati m:");
scanf("%d",&m); scanf("%d",&m);
for(i=0;i<m;i++) for(i=0;i<m;i++)
for(j=0;j<m;j++) for(j=0;j<m;j++)
{ printf("v[%d][%d]=",i,j); { printf("v[%d][%d]=",i,j);
scanf("%d",&v[i][j]); } scanf("%d",&v[i][j]); }
printf("Matricea:\n"); printf("Matricea:\n");
for(i=0;i<m;i++) for(i=0;i<m;i++)
{ for(j=0;j<m;j++) { for(j=0;j<m;j++)
printf("%d ",v[i][j]); printf("%d ",v[i][j]);
printf("\n"); } printf("\n"); }
for(i=0;i<m;i++) for(i=0;i<m;i++)
ps+=v[i][i]*v[0][i]; ps+=v[i][m-1]*v[i][0];
printf("\nProdusul scalar este: %d",ps); printf("\nProdusul scalar este: %d",ps);
getch(); } getch(); }
13) Fie o matrice s*s. Aflaţi produsul scalar al liniei 2 cu 14)Fie x un vector coloană şi y un vector linie cu acelaşi
linia 3. număr de elemente. Aflaţi matricea A = y * x.
#include<conio.h> #include<conio.h>
#include<string.h> #include<stdio.h>
#include<stdio.h> #include<math.h>
main() main()
{ int m,i,j, v[50][50],ps=0; {int x[50][1],y[1][50],i,n; long A;
printf("Dati m:"); printf("n=");
scanf("%d",&m); scanf("%d",&n);
while(1) printf("dati elementele vectorului coloana x");
{ if(m<3) for (i=0;i<n;i++)
{ printf("Produsul scalar a liniei 2 cu 3 nu poate fi calculat, scanf("%d",&x[i][0]);
matricea trebuie sa aiba\ncel putin 3*3:\n"); printf("dati elementele vectorului linie y");
scanf("%d",&m);} for (i=0;i<n;i++)
else scanf("%d",&y[0][i]);
break; } A=0;
for(i=0;i<m;i++) for (i=0;i<n;i++)
for(j=0;j<m;j++) A=A+x[i][0]*y[0][i];
{ printf("v[%d][%d]=",i,j); printf( "A=y*x=%ld", A);
scanf("%d",&v[i][j]); } getch();}
printf("Matricea:\n");
for(i=0;i<m;i++)
{ for(j=0;j<m;j++)
printf("%d ",v[i][j]);
printf("\n"); }
for(i=0;i<m;i++)
ps+=v[1][i]*v[2][i];
printf("\nProdusul scalar este: %d",ps);
getch(); }
15) Fie un vector Z. Aflaţi dacă elementele lui formează o 16) Fie un vector Q. Aflaţi dacă elementele lui formează
progresie aritmetică. o progresie geometrică.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<math.h> #include<math.h>
main() main()
{int Z[50],a,i,k,n; {int i,k,n;float Q[30],a;
printf("n="); printf("n=");
scanf("%d",&n); scanf("%d",&n);
printf("dati elementele vectorului Z"); printf("dati elementele vectorului Q");
for (i=0;i<n;i++) for (i=0;i<n;i++)
scanf("%d",&Z[i]); scanf("%f",&Q[i]);
a=Z[1]-Z[0]; a=Q[1]/Q[0];
k=2; k=2;
for (i=1;i<n;i++) for (i=1;i<n;i++)
if ((Z[i]+a)==Z[i+1]) k++; if ((Q[i]*a)==Q[i+1]) k++;
if (k==n) if (k==n)
printf( "Elementele vectorului Z formeaza o progresie printf( "Elementele vectorului Q formeaza o progresie
aritmetica"); geometrica");
else printf( "Elementele vectorului Z nu formeaza o progresie else printf( "Elementele vectorului Q nu formeaza o
aritmetica"); progresie geometrica");
getch();} getch();}
17) Fie un vector R. Aflaţi dacă elementele lui formează 18) Fie un vector R. Aflaţi suma tuturor elementelor
un şir strict screscător. care nu se împart la 37
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<math.h> #include<math.h>
main() main()
{ {
int i,j,k,n,R[30],a;
int i,n,R[30],s;
printf("n=");
scanf("%d",&n); printf("n=");
printf("dati elementele vectorului R:"); scanf("%d",&n);
for (i=0;i<n;i++) printf("dati elementele vectorului R:");
scanf("%d",&R[i]); for (i=0;i<n;i++)
k=0; scanf("%d",&R[i]);
for (i=1;i<n;i++) s=0;
if (R[i]>R[i-1]) k++; for (i=0;i<n;i++)
if (k==n-1) if (R[i]%37) s+=R[i];
printf( "Elementele vectorului R formeaza un sir strict printf("s= %d",s);
crescator"); getch();
else printf( "Elementele vectorului R nu formeaza un sir strict
}
crescator");
getch(); }
19) Fie un vector V. Aflaţi produsul tuturor elementelor 20) Fie un vector H. Aflaţi suma resturilor ce se obţin la
care au restul 3 când sunt împărţite la 4. împărţirea elementelor lui H la 11.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<math.h> #include<math.h>
main() main()
{ {
int i,n,V[30],p; int i,n,H[30],s;
printf("n="); printf("n=");
scanf("%d",&n); scanf("%d",&n);
printf("dati elementele vectorului V:"); printf("dati elementele vectorului H:");
for (i=0;i<n;i++) for (i=0;i<n;i++)
scanf("%d",&V[i]); scanf("%d",&H[i]);
p=1; s=0;
for (i=0;i<n;i++) for (i=0;i<n;i++)
if (V[i]%4==3) p*=V[i]; s+=(H[i]%11);
printf("p= %d",p); printf("s = %d",s);
getch(); getch();
} }
21) Fie un vector Q. Aflaţi câte resturi diferite se vor 22) Fie un cuvânt S începe cu o consoană şi conţine cel
obţine la împărţirea elementelor lui Q la 11. puţin o vocală. Aflaţi care litera din alfabet precedă vocala
#include<conio.h> de cod minim din cuvântul dat.
#include<stdio.h> #include<conio.h>
#include<math.h> #include<stdio.h>
main() #include<string.h>
{ main()
int i,n,Q[30],H[30],k,j; {char s[50];int i,m,a[50],min;
printf("n="); gets(s);
scanf("%d",&n); i=0;
printf("dati elementele vectorului Q:"); m=0;
for (i=0;i<n;i++) while(s[i]!='\0'){
scanf("%d",&Q[i]); if((s[i]=='a')||(s[i]=='e')||(s[i]=='o')||(s[i]=='i')
for (j=0;j<11;j++)
H[j]=0; ||(s[i]=='u')||(s[i]=='A')||(s[i]=='E')||(s[i]=='O')||(s[i]=='I')||(s[i]=
for (i=0;i<n;i++) ='U'))
for (j=1;j<11;j++) a[m++]=s[i];
if ((Q[i]%11)==j) H[j]=j; i++;}
k=0; min=a[0];
for (j=0;j<11;j++) for(i=0;i<m;i++)
if (H[j]>0) k++; if(min>a[i]) min=a[i];
for (i=0;i<n;i++) if((min==65)||(min==97))
if ((Q[i]%11)==0){k++;break;} printf("litera care preceda vocala %c nu exista ",min);
printf("k = %d",k); else
getch(); printf("Vocala cu codul minim in acest cuvint este %c,
} inaintea ei este litera %c ",min,min-1);
getch(); }
23) Fie un cuvânt S, adică un şir de caractere. Aflaţi câte 24) Fie un cuvânt Q, adică un şir de caractere. Aflaţi
vocale diferite conţine cuvântul S. câte consoane diferite conţine cuvântul Q.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<string.h> #include<string.h>
main() main()
{char s[50], a[50]; int i,m,min,j,k=0,k2; {char s[50], a[50]; int i,m,min,j,k=0,k2;
gets(s); gets(s);
i=0; i=0;
m=0; m=0;
while(s[i]!='\0'){ while(s[i]!='\0'){
if((s[i]=='a')||(s[i]=='e')||(s[i]=='o')||(s[i]=='i') if((s[i]=='b')||(s[i]=='c')||(s[i]=='d')||(s[i]=='f')
||(s[i]=='u')||(s[i]=='A')||(s[i]=='E')||(s[i]=='O')||(s[i]=='I')||(s[i]== ||(s[i]=='g')||(s[i]=='h')||(s[i]=='j')||(s[i]=='l')||(s[i]=='k')||(s[i]=='
'U')) m')
if(i==0)
{ ||(s[i]=='n')||(s[i]=='p')||(s[i]=='q')||(s[i]=='r')||(s[i]=='s')||(s[i]=='
a[m++]=s[i]; t')
k++;
} ||(s[i]=='v')||(s[i]=='x')||(s[i]=='w')||(s[i]=='y')||(s[i]=='z')||(s[i]=
else ='B')
{
k2=0; ||(s[i]=='C')||(s[i]=='D')||(s[i]=='F')||(s[i]=='G')||(s[i]=='H')||(s[i]
for(j=0;j<m;j++) =='J')
if(s[i]!=a[j])
k2++; ||(s[i]=='L')||(s[i]=='M')||(s[i]=='N')||(s[i]=='P')||(s[i]=='Q')||(s[i]
if(k2==m) =='R')
{
a[m++]=s[i]; ||(s[i]=='S')||(s[i]=='T')||(s[i]=='V')||(s[i]=='X')||(s[i]=='W')||(s[i]
k++; =='Y')||(s[i]=='Z'))
} if(i==0)
} {
i++; a[m++]=s[i];
} k++;
printf("Cuvintul are %d vocale diferite ",k); }
getch(); else
} {
k2=0;
for(j=0;j<m;j++)
if(s[i]!=a[j])
k2++;
if(k2==m)
{
a[m++]=s[i];
k++;
}
}
i++;
}
printf("Cuvintul are %d consoane diferite ",k);
getch();
}
25) Fie un cuvânt W, adică un şir de caractere. Aflaţi câte 26) Fie un cuvânt M, adică un şir de caractere. Aflaţi
caractere din cuvântul W au codul divizibil cu 5. câte litere diferite conţine cuvântul M.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<string.h> #include<string.h>
main() main()
{char W[50]; int a[50],i,m,k; {char s[50], a[50]; int i,m,min,j,k=0,k2;
gets(W); gets(s);
i=0; i=0;
while(W[i]!='\0'){ m=0;
a[i]=W[i]; while(s[i]!='\0'){
i++;} if((s[i]=='b')||(s[i]=='c')||(s[i]=='d')||(s[i]=='f')
m=i-1; k=0;
for (i=0;i<m;i++){printf("%d",a[i]); ||(s[i]=='g')||(s[i]=='h')||(s[i]=='j')||(s[i]=='l')||(s[i]=='k')||(s[i]=='
if (a[i]%5==0) k++; } m')
printf("k = %d",k);
getch(); } ||(s[i]=='n')||(s[i]=='p')||(s[i]=='q')||(s[i]=='r')||(s[i]=='s')||(s[i]=='
t')
||(s[i]=='v')||(s[i]=='x')||(s[i]=='w')||(s[i]=='y')||(s[i]=='z')||(s[i]=
='B')
||(s[i]=='C')||(s[i]=='D')||(s[i]=='F')||(s[i]=='G')||(s[i]=='H')||(s[i]
=='J')
||(s[i]=='L')||(s[i]=='M')||(s[i]=='N')||(s[i]=='P')||(s[i]=='Q')||(s[i]
=='R')
||(s[i]=='S')||(s[i]=='T')||(s[i]=='V')||(s[i]=='X')||(s[i]=='W')||(s[i]
=='Y')
||(s[i]=='Y')||(s[i]=='a')||(s[i]=='e')||(s[i]=='o')||(s[i]=='i')
||(s[i]=='u')||(s[i]=='A')||(s[i]=='E')||(s[i]=='O')||(s[i]=='I')||(s[i]=
='U')
)
if(i==0)
{
a[m++]=s[i];
k++;
}
else
{
k2=0;
for(j=0;j<m;j++)
if(s[i]!=a[j])
k2++;
if(k2==m)
{
a[m++]=s[i];
k++;
}
}
i++;
}
printf("Cuvintul are %d litere diferite ",k);
getch();
}
27) Fie o matrice m * n de caractere. Aflaţi primul 28) Fie o matrice n * m de caractere. Aflaţi numărul de
caracter de cod maxim. caractere diferite ce au codul par.
main() main()
{ {
char b[20][20]; char b[20][20],a[100];
int m,n,i,j,max; int m,n,i,j,max,m1=0,k=0,k2,h;
scanf("%d",&m); scanf("%d",&m);
scanf("%d",&n); scanf("%d",&n);
for(i=0;i<m;i++) for(i=0;i<m;i++)
for(j=0;j<n;j++) for(j=0;j<n;j++)
{ {
printf("b[%d][%d]=",i,j); printf("b[%d][%d]=",i,j);
b[i][j]=getch(); b[i][j]=getch();
printf("%c\n",b[i][j]); printf("%c\n",b[i][j]);
} }
for(i=0;i<m;i++) for(i=0;i<m;i++)
{ {
for(j=0;j<n;j++) for(j=0;j<n;j++)
printf("%c ",b[i][j]); printf("%c ",b[i][j]);
printf("\n"); printf("\n");
} }
max=(int)b[0][0]; for(i=0;i<m;i++)
for(i=0;i<m;i++) for(j=0;j<n;j++)
for(j=0;j<n;j++) if ((i==0)&&(j==0))
if((int)b[i][j]>max) max=(int)b[i][j]; {
printf("\nCaracterul de cod maxim este:%c",max); if((int)b[i][j]%2==0)
getch(); {
} a[m1++]=b[i][j];
k++;
}
}
else
{
k2=0;
for(h=0;h<m1;h++)
if((int)b[i][j]%2==0)
{
if(b[i][j]!=a[h])
k2++;
}
if(k2==m1)
{
a[m1++]=b[i][j];
k++;
}
}
printf("\nCarcatre cu cod par diferite:%d",k);
getch();
}
29) Fie o matrice a * b de caractere. Aflaţi suma primelor 30) Fie o matrice v * w de caractere. Aflaţi cea mai mică
2 caractere de cod impar diferenţă a codurilor vocalelor din matrice.
main()
main() {
{ char b[20][20],a[20],aux;
char b[20][20],a[5],k=0; int m,n,i,j,k=0;
int m,n,i,j; scanf("%d",&m);
scanf("%d",&m); scanf("%d",&n);
scanf("%d",&n); for(i=0;i<m;i++)
for(i=0;i<m;i++) for(j=0;j<n;j++)
for(j=0;j<n;j++) {
{ printf("b[%d][%d]=",i,j);
printf("b[%d][%d]=",i,j); b[i][j]=getch();
b[i][j]=getch(); printf("%c\n",b[i][j]);
printf("%c\n",b[i][j]); }
} for(i=0;i<m;i++)
for(i=0;i<m;i++) {
{ for(j=0;j<n;j++)
for(j=0;j<n;j++) printf("%c ",b[i][j]);
printf("%c ",b[i][j]); printf("\n");
printf("\n"); }
} for(i=0;i<m;i++)
for(i=0;i<m;i++) for(j=0;j<n;j++)
for(j=0;j<n;j++) if((b[i][j]=='a')||(b[i][j]=='e')||(b[i][j]=='o')||(b[i][j]=='i')
if (k<=2) ||(b[i][j]=='u')||(b[i][j]=='A')||(b[i][j]=='E')||(b[i][j]=='O')||(b[i][j
if (b[i][j]%2) a[k++]=b[i][j]; ]=='I')||(b[i][j]=='U'))
else break; a[k++]=b[i][j];
printf("\nSuma primelor 2 carcatere de cod impar:%d", for(i=0;i<k-1;i++)
a[0]+a[1]); for(j=i+1;j<k;j++)
getch(); if((int)a[i]>(int)a[j])
} {
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
printf("Vocalele: ");
for(i=0;i<k;i++)
printf("%c, ",a[i]);
printf("\nCea mai mica diferenta de cod a vocalelor
este:%d",a[0]-a[k-1]);
getch();
}
31) Fie un cuvânt A. Aflaţi dacă literele lui au coduri 32) Fie un cuvânt C. Aflaţi dacă paritatea codurilor
ce formează un şir crescător literelor lui alterează, adică literele au codurile
cu paritatea: par, impar, par, impar, par, .... sau
#include<conio.h> invers.
#include<stdio.h>
#include<string.h> #include<conio.h>
main() #include<stdio.h>
{char s[50], a[50]; int i,m,min,j,k=0; #include<string.h>
gets(s); main()
i=0; {
m=0; char s[50], a[50]; int i,m,min,j,k=0;
while(s[i]!='\0') gets(s);
{ i=0;
a[m++]=s[i]; m=0;
i++; while(s[i]!='\0')
} {
k=0; a[m++]=s[i];
for (i=1;i<m;i++) i++;
if (a[i]>a[i-1]) k++; }
if (k==m-1) k=0;
for(i=0;i<m;i++)
printf( "Literele cuvintului A formeaza un sir crescator"); if ((!(a[i+1]%2)&&(a[i]%2))||((a[i+1]%2)&&!(a[i]%2)))
else printf( "Literele cuvintului A nu formeaza un sir k++;
crescator"); printf("%d\n",k);
getch(); if (k==m-1)
} printf( "Codurile literelelor cuvintului C altereaza");
else printf( "Codurile literelelor cuvintului C nu
altereaza");
getch();
}
//Laborator3
/*0. Extrage partea imaginara a unui numar complex*/
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <cstdlib>
#include <cmath>
#define PI 3.14159265358979
using namespace std;
class complex
int _tmain(int argc, _TCHAR* argv[])
{
private: double re;
double im;
public: void cit( );
}
void afis( );
void imaginar( )
{
cout << "Partea imaginara este: ";
cout << im << endl;
}
};
void complex::afis( )
{
cout << "Am introdus: ";
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z, *p;
p = new complex;
cout<<"Introducem partea reala si partea imaginara pentru primul numar"<<endl;
z.cit();
z.afis();
z.imaginar();
cout<<"\nIntroducem partea reala si partea imaginara pentru al doilea numar"<<endl;
p->cit();
p->afis();
p->imaginar();
delete p;
/*7. Schimbarea cu locul a părţii reale cu partea imaginară ( simetrie faţă de diagonala y = x )
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void simetric()
{ double q;
q=re;
re=im;
im=q;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z;
cout<<"Introdu partea real si partea imaginara pentru numar initsial\n";
z.cit();
cout << "\nNumerele intoduse sunt: " << endl<<endl;
z.afis();
cout << "\nNumar simetric fatsa de diagonala este: " << endl<<endl;
z.simetric();
z.afis();*/
/*7. Schimbarea cu locul a părţii reale cu partea imaginară ( simetrie faţă de diagonala y = x )
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void simetric()
{ double q;
q=re;
re=im;
im=q;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z;
cout<<"Introdu partea real si partea imaginara pentru numar initsial\n";
z.cit();
cout << "\nNumerele intoduse sunt: " << endl<<endl;
z.afis();
cout << "\nNumar simetric fatsa de diagonala este: " << endl<<endl;
z.simetric();
z.afis();*/
double complex::darg(complex& a)
{ double ar;
if( (a.x >= 0) && (a.y == 0) ) return 0.0;
if( (a.x == 0) && (a.y >=0) ) return PI/2;
if( (a.x < 0) && (a.y == 0) ) return PI;
if( (a.x == 0) && (a.y < 0) ) return 3*PI/2;
ar=atan( a.y / a.x );
if( (a.x < 0) && (a.y != 0) ) return ar+PI;
if( (a.x > 0) && (a.y < 0) ) return ar+2*PI;
return ar;
}
double complex::mod(complex& a){
double r;
r= sqrt(a.x*a.x + a.y*a.y);
return r;}
int main()
{complex z,y;
double rn=1.0 , an;
int i,n;
cout << "Introduceti puterea la care trebuie ridicat numarul complex '>0' : "; cin >> n;
z.cit();
z.afis();
cout << endl << endl;
for (i=1; i<n; i++){
rn= rn*y.mod(z); }
an=y.darg(z)*n;
cout << "z^" << n << "=" << rn << "[ cos("<< an << ")"<< " + i*sin(" << an << ") ]";
cout << endl << endl; */
int main( )
{
complex z; int n;
cout<<"Introdu partea reala si partea imaginara pentru numarul initsial\n";
z.cit();
cout<<"\nIntrodu puterea la care doresti sa ridici numarul complex"<<endl;
cin>>n;
cout << "\nNumarul introdus este: " << endl<<endl;
z.afis();
cout << "\nNumarul initsial ridicat la puterea "<<n<< " : " << endl<<endl;
z.putere(n);z.afis();*/
/*10. Radacina patrata dintr-un numar complex
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void rad2(complex& a, complex& b)
{ double delta;
delta=sqrt(16*re*re+16*im*im);
a.re=sqrt((4*re+delta)/8);
b.re=-a.re;
a.im=im/(2*a.re);
b.im=im/(2*b.re);
}
void nenul(int& o){
if ((re==0) && (im==0)) o=1;
else o=0;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z,u,w; int a;
cout<<"Introdu partea reala Si partea imaginara pentru numar initsial\n";
z.cit();
cout << "Numarul initsial este: " << endl;
z.afis();
z.nenul(a);
z.rad2(u,w);
if (a!=1){cout << "Radacinele patrate a nr intitsial sunt\n\n1. ";
u.afis();
cout << "\n\n2. ";
w.afis();}
else cout<<"Numarul dat nu admite radacini ";*/
/*13. Trecerea de la forma algebrică a unui număr complex la forma lui trigonometrică
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
double arg()
{double a;
if( (re >= 0) && (im== 0) ) return 0.0;
if( (re == 0) && (im >=0) ) return pi/2;
if( (re < 0) && (im == 0) ) return pi;
if( (re == 0) && (im < 0) ) return 3*pi/2;
a=atan( im / re );
if( (re < 0) && (im != 0) ) return a+pi;
if( (re > 0) && (im < 0) ) return a+2*pi;
return a;
};
double modul()
{return sqrt(re*re+im*im);
};
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z;
cout<<"Introdu partea reala Si partea imaginara pentru numarul complex\n";
z.cit();
cout << "\nNumarul introdus este : " << endl<<endl;
z.afis();
cout << "\nForma trigonometrica acestui numar este: " << endl<<endl<<z.modul()<<"*(cos("<<z.arg()<<")+i*sin("<<z.arg()<<')'<<endl
;*/
/*14. Rezolvarea ecuaţiei a*z + b = 0 , unde a şi b sunt numere complexe date, iar z este numărul complex necunoscut, care
trebuie calculat.
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void sol(complex& a, complex& b)
{ double c;
c=(b.re*b.re+b.im*b.im);
re=-(a.re*b.re+a.im*b.im)/c ;
im=-(a.im*b.re-a.re*b.im)/c;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')';
}
int main( )
{
complex z, u, w;
cout<<"Introdu elementele ecuatsiei a*z+b=0, daca a Si b sint numere complexe\n\n";
cout<<"Introdu partea reala Si partea imaginara pentru elementul a\n";
z.cit();
cout<<"\nIntrodu partea reala Si partea imaginara pentru elementul b\n";
u.cit();
cout << "\nAm primit ecuatsia : " << endl<<endl;
cout<<'('; z.afis();cout<<") * z + ("; u.afis();cout<<") = 0\n";
cout << "\nSolutsia ecuatsiei este: " << endl<<endl;
w.sol(u,z); w.afis();*/
int main()
{
complex z;
z.cit();
cout << "Vy vveli cisla: " << endl;
z.afis();
cout << "Koreni stepeni iz n kompleksnogo cisla raven: " << endl;
z.kor();*/
}
Elemente de bază ale limbajului C
1.5 Exerciţii şi teste grilă
1. La compilare se sesizează :
a) erorile de sintaxă şi semantice
b) erorile de calcul
c) nerespectarea ordinii operaţiilor
din modelul matematic
d) furnizarea unor date eronate la
operaţia de citire
2. Ce face secvenţa ?
float n=16;
printf("%x",n+1);
a) afişează numărul in baza 16
b) dă eroare de compilare deoarece
nu am folosit o variabilă la
scriere
c) chiar dacă nu este semnalată
nici o eroare la compilare, nu
se afişează valoarea dorită,
deoarece nu am folosit un
specificator de format adecvat
3. Fie declaraţiile :
int n;long double x;char s[100];
Care din secvenţele următoare sunt corecte
pentru citirea variabilelor ?
a) scanf("%i %s %lg",&n,&s,&x);
b) scanf("%d %s %Lg",&n,&s,&x);
c) scanf("%d %s %Lg",&n,s,&x);
d) scanf("%d %c %lf",&n,&s,&x);
e) scanf("%d %",&n,&s,&x);
18. C’s a
“fun” language!
Selectaţi codul care va produce ieşirea de mai
sus:
a) printf(“C’s a\”fun\”
language!\n”);
b) printf(“C’s a
\”fun\”language!”);
c) printf(“C’s a\n “fun”
language!\n”);
d) printf(“C’s
a\n \”fun\”
language!\n”);
19. short int x; /*presupunem că x este pe
16 biţi*/
Care este numărul maxim care poate fi tipărit
folosind printf(“%d\n”,x), presupunând că
x este declarat aşa cum am arătat mai sus ?
a) 127 b) 255
c) 32767 d) 65536
14.
A) for(exp1;exp2;exp3)
instructiune;
este echivalent cu
exp1;
while(exp2)
{ instructiune;
exp3;}
B) for( ;exp; ) instructiune;
este echivalent cu
while(exp) instructiune;
C) for( ; ; ) instructiune;
este echivalent cu
while(1) instructiune;
Care din echivalenţele de mai sus sunt eronate:
a) nici una b) A,B
c) B,C d) A,C
24. Se dă codul :
int x=4, a=2;
int b=4, c=8;
if(x==b) x=a;
else x=b;
if(x!=b) c=c+b;
else c=c+a;
printf(“c=%d\n”,c);
Ce se va afişa după execuţia codului de mai sus
?
a) c=4 b) c=8 c) c=10 d) c=12
27. Se dă codul :
int a=3, b=0;
while(a)
{ b=b++; a=b; }
Ce valoare va avea b ?
a) 1 b) 3 c) 0
d) nedefinită pentru că va fi o
buclă infinită
35. Se dă codul :
short testarray[4][3]=
{{1},{2,3},{4,5,6}};
printf(“%d\n”,sizeof(testarray));
Presupunând că tipul “short” este de lungime 2
octeţi, ce va afişa codul de mai sus ?
a) nu va compila pentru că nu sunt
daţi destui iniţializatori
b) 6 c) 12 d) 24
Cap.7 Pointeri
7. Fie declaraţia : int a[10][10];
Care din expresiile următoare sunt echivalente?
a) *a[i] b) **(a+i) c) *(*a+i)
d) a[0][i] e) a[i][0]
46. Se dă codul:
int *ptr; int y[10];
int i;
for(i=0;i<10;i++) y[i]=i;
ptr=y; ptr+=8;
printf(“ptr=%d\n”, *ptr);
Ce se va afişa când codul este executat ?
a) ptr=0 b) ptr=9
c) ptr=7 d) ptr=8
Cap.9 Structuri
1. Fie structura :
struct data {
int zi, luna , an;
} d, *dl;
Cum se accesează membrul “zi” ?
a) d.zi respectiv dl.zi
b) d->zi respectiv dl->zi
c) d->zi respectiv dl.zi
d) d.zi respectiv dl->zi
2. Fie structura :
struct data {
int zi, luna , an;
}*d;
Care este expresia logică a cărei valoare arată
că anul este sau nu bisect ?
a) an%4==0 && an%100!=0
b) d.an%4==0 && d.an%100!=0
c) d.an%4==0 && d.an%100!=0 ||
d.an%400==0
d) d->an%4==0 && d->an%100!=0 ||
d->an%400==0
7. Fie secvenţa :
typedef struct
{ long cust_id;
char custName[50];
double balance;
} CUSTOMER_REC;
CUSTOMER_REC customer[50];
int i;
/*mai jos in program*/
for(i=0;i<50;i++)
{
printf(“%s\n”,?????);
}
Ce ar trebui pus in locul ???? pentru a afişa
fiecare element custName în codul anterior :
a) customer[i]->custName;
b) customer.custName[i];
c) customer[i].custName;
d) customer->custName[i];
8. Fie declaraţia:
struct computer{
int cpuSpeed;
char cpuType[10];
} comp[]=
{
{400,”Pentium”} ,
{266,”PowerPC”} ,
{333,”Sparc”},
};
Se dă şirul de structuri de mai sus. Care dintre
următoarele expresii va evalua numărul
structurilor din şir (în cazul de faţă este 3)?
a) sizeof(*comp)/sizeof(comp)
b) sizeof(*comp)
c) sizeof(comp)
d) sizeof(comp)/sizeof(*comp)
6. Fie programul:
#include<stdio.h>
#include<math.h>
void main()
{
FILE *f,*g; int e;
char c1, c2;
f=fopen(“1.txt”,“r”);
g=fopen(“2.txt”,“r”);
e=1;
do{
c1=fgetc(f);
c2=fgetc(g);
if(c1!=c2) e=0;
}while(!(feof(f)||feof(g))
&&e);
if(e)
if(!(feof(f)&&feof(g)))e=0;
fclose(f); fclose(g);
printf(“%d”,e);
}
Programul de mai sus afişează valoarea 1 dacă:
a) cele două fişiere diferă prin
cel puţin un caracter
b) cele două fişiere sunt identice
c) in cele două fişiere există şi
caractere identice
d) cele două fişiere au acelaşi
număr de caractere
e) nici unul dintre cazurile de mai
sus