C
C
NO
PROGRAMARE ÎN
LIMBAJUL C++
ISBN 978-973-144-550-2
ADRIAN RUNCEANU MIHAELA RUNCEANU
Descrie
RUNCEANU, ADRIAN
Bibliogr.
ISBN 978-973-144-550-2 NO
ÎN LIMBAJUL C++
Coperta i design:
Silviu Runceanu
[Link]
Conf. univ. dr. ing. Florin Grofu, Universitatea Constantin Brân -Jiu, Facultatea :
de Inginerie, Departamentul de Automatic
dr. ing. Marian Popescu -Jiu, ilor no tri, (Georgeta i Vasile Runceanu, Cornelia i
Facultatea de Inginerie, Departamentul de Automatic
Vasile Irod) care ne- .
No 2 No 3
2.5. 160 4.1.6. Variabile statice i dinamice 218
Capitolul 3 iruri de c 161 4.1.7. Func ii matematice 220
3.1. iruri de caractere 161 4.1.8. Apelul prin valoare 225
3.2. Probleme rezolvate 161 4.1.9. Apelul prin referin 228
3.2.1. Enun uri 167 ii 232
3.2.2. Solu ii propuse 167 4.1.11. Argumentele lin 234
3.3. Probleme propuse spre rezolvare 171 3.1. Probleme rezolvate 236
3.4. Structuri i uniuni 178 3.1.1. Enun uri 236
3.4.1. Definirea structurilor 178 3.1.2. Solu ii propuse 237
3.4.2. Declararea variabilelor de tip stru 180 3.2. Probleme propuse spre rezolvare 248
3.4.3. Accesarea elementelor unei structuri 180 3.3. 260
3.4.4. Tablouri de structuri 181 3.4. 276
3.4.5. Pointeri la structuri 181 Capitolul 5 Pointeri 277
3.4.6. Tipuri utilizator 182 5.1. Declarare 277
3.4.7. Uniuni 182 5.2. Opera ii specifice pointerilor 279
3.5. Probleme rezolvate 183 5.3. Artimetica pointerilor 280
3.5.1. Enun uri 183 5.3.1. Pointeri i tablouri 281
3.5.2. Solu ii propuse 184 5.3.2. Echivalen e de scriere 283
3.6. Probleme propuse spre rezolvare 191 5.3.3. Folosirea pointerilor de tip void 285
3.7. T 199 5.3.4. Expresii compacte cu pointeri 285
3.8. 209 5.3.5. Tablouri cu pointeri 287
Capitolul 4 Func ii 211 5.4. Probleme rezolvate 290
4.1. Declarare. Apel. Prototip 211 5.4.1. Enun uri 290
4.1.1. Declararea func iei 211 5.4.2. Solu ii propuse 292
4.1.2. Apelul unei func ii 212 5.5. Probleme propuse spre rezolvare 298
4.1.3. Prototipul func iei 212 5.6. 307
4.1.4. Parametri formali si actuali 214 5.7. 313
4.1.5. Variabile locale i variabile globale 215 Capitolul 6 Fi iere 315
No 4 No 5
6.1. Tipuri de fi 315 422
6.1.1. Opera iere 315 8.7. Programe demonstrative 425
6.1.2. Prelucrarea fi ierelor la nivel inferior 316 Capitolul 9 Teste recapitulative 429
6.1.3. Prelucrarea fi ierelor la nivel superior 319 430
6.2. Probleme rezolvate 355 rul 2 432
6.2.1. Enun uri 355 rul 3 434
6.2.2. Solu ii propuse 355 rul 4 436
6.3. Probleme propuse spre rezolvare 360 438
6.4. 371 Testul 440
6.5. 378 442
Capitolul 7 Sistemul de intrare/ie ire 379 444
7.1. Testarea 385 446
7.2. Formatarea datelor din fluxurile de intrare/ie ire 387 448
7.2.1. Formatarea prin manipulatori 389 450
[Link]. 390 453
[Link]. Manipulatori cu parametri 391 456
7.2.2. Formatarea prin metode 393 459
7.3. Metodele clasei istream 395 462
7.4. Metodele clasei ostream 397 464
7.5. Manipulatori create de utilizator 399 Tes 466
7.6. Fluxuri de date pentru fi iere 400 468
7.7. Fi iere binare 407 470
Capitolul 8 Func ii din biblioteca standard 411 472
411 474
8.2. Sortare 412 476
8.3. Func ii de clasificare 414 478
8.4. Opera ii cu blocuri de memorie 416 480
8.5. Opera ii cu 418 Bibliografie 482
No 6 No 7
Introducere
al
- Pascal 641 -
- Leibnitz 1674 -
- Babbage 1840 -
aparate primitive unele din componentele
unui arhitecturi moderne - de exemplu un registru temporar de memorie care
u
Acest lucru a fost posibil deoarece se dorea calcularea traiectoriilor de
Germania
640 Ko RAM.
No 8 No 9
rapide. Acest lucru tegoriilor .d sunt
reprezentative.
Perioada 1970-
main-frame la
.
dezvoltar
- diverse domenii:
microcontrolere, CAM (Computer
Sistemul de operare MS-DOS a fost realizat prin adaptarea la noile Aided Manufactory)
microkernel de UNIX la care s- Economie: gestiune, transferul banilor, "banii electronici"
ivele
calculatoarelor personale.
controalele prin zone active ale ecranului. Aceste controale care sunt activate procesoare analogice, s
din mouse sunt caracteristice sistemului de operare WINDOWS. Proiectare : programele de tip CAD (Computer Aided Design)
- Se mai pot da
microcalculatoarelor acestea fiind mu
- -
-
- mai
Prin programare
asupra unui set de da -
softului.
:
No 10 No 11
specializate numite compilatoare (e
Rolul p este ca fiind
, .
de intrare (cele
prelucrate), lor s scris corect este executat gre
Ca
a * au fost preluate de pe un suport extern si anume cel scris, rezultatul
returnat (trimis
de la el ca vreo -a pus cineva, un programator prin
intermediul unui program
altele,
descompunerea unei probleme
transpunem -un limbaj de programare. arhitectura
de altfel este extrem
bloc
No 12 No 13
-o memorie ROM (Read Only
omul la asemenea
A mai
No 14 No 15
-
ilor - adresa
na din componentele de
cifre , etape:
2.
te fi scris -o
memorie. O ru a ne putea referi la 3. Sunt
No 16 No 17
1. Metoda schemei logice
4.
al II-lea aX2 + bX + c = 0,
, dar modul de procesare a valorilor lor nu. Start
Stop
1.
2. -
3. -
Bloc citire Bloc scriere
variabile variabile
INDEPENDENT DE TIPUL DE LIMBAJ
Nu Da
Bloc de atribuire conditie
nu
Reprezentarea algoritmilor
No 18 No 19
Start
de descriere pseudocodul.
Media <-(nota1+nota2+nota3)/3 ,
Scriere media
Stop
3.
variabile: med_a,n1,n2,n3
{
n2, n3
la generare med_a = (n1 + n2 + n3) / 3
utilizatorului.
No 20 No 21
Limbajul C
-
Limbajele de programare de nivel mediu au fost serios dezvoltate pe la
la adaptarea compilatorului pentru sistemul de operare MS-DOS. De
X,-
PC-uri, limbajul -
difere
Limbajul FORTRAN (FORmula TRANslator) a fost unul dintre primele
a creat un subcomitet pentru limbajul C,
e a fost
Un limbaj de niv
No 22 No 23
1.
2. Realizarea mo
3. Verificarea modelului matematic cu un set de date reale sau calculate
Apeluri ale directivelor speciale de compilare; punctelor
anterioare ,
-line;
4. Identificarea datelor de intrare, a dat
variabilelor intermediare.
Corpul programului principal
{ 5.
respectivelor date.
apeluri de
} 6.
Corp
Pasul 1
ax2 +bx+c=0.
Pasul 2
programele bune si cele care merg.
- Fie , atunci:
ului au
Daca atunci:
No 24 No 25
1,2
Daca atunci:
intrare.
Daca atunci:
Pasul 6
Pasul 3
n acest caz poate fi evitat modelul matematic este prea simplu.
Pasul 4
X1,2
m un
simbol suplimentar -4*a*c;
{
Pasul 5 x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
1,x2
}
ales: altfel
{
modelul matematic delta=-delta;
delta=sqrt(delta)/(2 *a)
1 de forma re+i*im
2 de forma re-i*im
}
c
float.
No 26 No 27
Codul ar fi fost mai clar, Pasul 10
prin
Pasul 11
#include <stdio.h>
interpretor /*
void main(void)
{ ------ autor:
float a,b,c,delta,x1,x2; ------
clrscr()
------ copyright
coefi */
printf("\na=");
** scanf("%f",a); //
interpretor
printf("\nb=");
scanf("%f",&b);
printf("\nb=");
scanf("%f",&b);
*** delta=b*b+4*a*c; //aici eroare de calcul
if( delta >=0 )
{
xi=(-b+sqrt(delta))/(2 *a);
x2=(-b-sqrt(delta))/(2 *a);
printf("\nxl=%f",xl)
printf("\nx2=%f",x2)
{
delta=-delta; delta=sqrt(delta)/(2 *a)
printf( "xl = %/+ i *%/", -b/(2 *a), delta);
printf( "x2 = %f-i*%f", -b/(2 *a), delta);
}
No 28 No 29
CAPITOLUL
L cuvinte
cheie:
aceste denumiri.
No 30 No 31
1.1.2. Tipuri de date Tipul de date int
Un tip de date
le poa int <definitie_de_data>;
NUMELE CARACTERISTICI
TIPULUI
char
int retine numere intregi cu semn;
Ex: 23,-45,0, etc. unsigned
float retine numere reale in format cu virgula mobila, in
la 0 la 65535.
simpla precizie;
Ex: 7.8965, -4.123, 7.0, etc.
retine numere reale in format cu virgula mobila, in Exemplu: int a = 9;
double
dubla precizie; int b = 4567;
Ex: 7.8965, -4.123, 7.0, etc.(se utilizeaza cand se int c = -31456;
prellucreaza numere foarte mari sau foarte mici)
void tip de date special care nu specifica un anumit set de
valori initial, dar care poate fi specificat ulterior
declararii.
Tipul de date float
char <definitie_de_data>;
p -
apost
unsigned Tipul de date double
No 32 No 33
Modificatorul de tip unsigned
Exemplu: - ru a reprezenta valori mai
double numar_foarte_mare=12345678912345.123456789123456789;
double numar_foarte_mic=-123456789123456789.12345678912345; mari.
double numar_mare=-123456789;
Astfel: unsigned int
intervalul [0,65535]; unsigned char
variabilelor din intervalul [0,255], etc.
Tipul de date void Modificatorul de tip long
Exemplu:
void salut(void) la fiecare repetare a unei bucle.
{
AM PROGRAMATORII IN LIMBAJUL C++!!!\n
}
1.
2. constante zecimale
Exemplu:
unsigned int numar; 3. constante octale
register int i;
long int numar_foarte_mare;
4. constate hexazecimale (s
baza 16
No 34 No 35
7.
5. (care \
exponent (care poate fi el vid) linia 2 : nu
exponent 65 98 98 65 0
A b b A
Exemplu: 3.45e-17 3,45-17
1.1.4. Variabile
6.
rului
respectiv.
din caractere
Numim o denumire (identificator) pe care compilatorul o
\
tipul de
CARACTER SEMNIFICATIE date asociat.
\a caracter ASCII de
atentionare (sunet) Exemplu:
\b backspace int variabila_de tip_intreg;
\f avans hartie // am declarat o variabila de tip intreg careia i-am dat denumirea
\n linie noua variabila_de_tip_intreg
\r retur de car float variabila_de_tip_real;
// am declarat o variabila de tip real careia i-am dat denumirea
\t tabulator orizontal variabila_de_tip_real
\v tabulator vertical char variabila_de_tip_caracter;
\\ backslash // am declarat o variabila de tip caracter careia i-am dat denumirea
variabila_de_tip_caracter
\ apostrof
\ ghilimele
\? semnul intrebarii
No 36 No 37
Exemplu: variabila1 este corect
1variabila - nu este corect
case sensitive
tip nume_tablou[][];
Exemplu:
Exemplu: int var_intreaga;
int v[5];
int VAR_INTREAGA; float x[25];
double a[3][2];
3)
nia de declarare a variabilelor:
tip nume_variabila;
Exemplu:
int i = 5;
float x = 7.8;
int v[5] = {1,2,7,10,-5};
Exemplu: float y[3] = {-9.034,89,2};
int i; char c =
int j,k,l;
double a,b;
float x,y;
char m,n,t;
\
2) Variabilele tablou
4)
-se cu ajutorul indicilor. Numim comentarii
/* comentariu */ e vorba despre
// comentariu.
No 38 No 39
1. Operatori aritmetici
OPERATOR
+ adunare
-
*
1.2. Operatorii limbajului C++
/
%
+
Expresii -
ii matematice cum ar fi
operatori.
Exemplu:
int i=9, j=2;
atunci i / j are ca rezultat 4
Operatori i%j are ca rezultat 1
matematici:
a un singur operand),
#include <iostream.h>
int main(void)
{
int secunde_pe_ora;
float media;
OP E R A TOR I secunde_pe_ora= 60 * 60;
media = (5 + 10 + 15 + 20) / 4;
1 aritmetici e intr-o ora este
2
3 de egalitate
4 logici 12 * 60<<endl;
5 }
6 de atribuire
7 de increme
8
9 de lungime (sizeof)
Numarul de secunde intr-o ora este 3600
10
11 Media numerelor 5, 10, 15 si 20 este 12.000000
Numarul de secunde in 48 de minute este 2880
No 40 No 41
4. Operatori logici
OPERATOR OPERATOR
< mai mic ! negare
<= mai mic sau egal &&
> mai mare || sau logic
>= mai mare sau egal
3. Operatori de egalitate
&& 0 0
0 0 0
OPERATOR 0 0 1
== egal
!= diferit || 0 0
0 0 1
0 1 1
No 42 No 43
-i reduce consumul de memorie
0
-o
Expresie Valoare
expresie
i && j 0
~
!i && j 1
-a efectuat negarea.
i || j 1
Exemplu :
i ||!j 0
~0 are valoarea 1 010 = 00000000 2
!(i && j) 1 prin negare bit cu bit se trans ~010 = 111111112
!i || !j 1
!i && j || !j && i 1 &
i <= j || j <= k 0 sau 1
Exemplu:
expresie valoare
!i && k || !j && i, evaluarea se face
1&2 0
prin scurtcircuitare, 1&3 1
Exemplu:
expresie valoare
1|2 3
1|3 3
OPERATOR
~
& 110 = 000000012 110 = 000000012
| sau pe 210 = 000000102 310 = 000000112
^
-------------------- --------------------
<<
>> 310 = 000000112 310 = 000000112
No 44 No 45
^
^ 0 1 /C++, se poate scrie
0 0 0 prescurtat:
1 1 0
var operator = expresie.
unde operator poat
Exemplu: Exemplu: int i, j;
expresie valoare i = i + 2; se poate scrie i + = 2;
1^2 3
j = j | 1; se poate scrie j | = 1;
1^3 2
++i
<< se --i
i i++
i--
pre
var = expresie
No 46 No 47
int valoare = 1;
un scurt program:
valoare=1;
(tip) operand
if.
sau
No 48 No 49
unde expresie1 este o expresie logic 12.
2
resie3. -au
Exemplu: stabilit anumite .
modul = x < 0 ? x : x;
max = a < b ? b : a;
min = a < b ? a : b;
NIVEL DE OPERATOR ASOCIATIVITATE
PRIORITATE
1 () [] . -> stânga -> dreapta
2 - (unar) + (unar) & (unar) ! ~ dreapta -> stânga
*(unar) (cast) (sizeof) ++ --
3 * (binar) / % stânga -> dreapta
4 + (binar) - (binar) stânga -> dreapta
5 << >> stânga -> dreapta
6 < <= > >= dreapta -> stânga
7 == != stânga -> dreapta
8 & stânga -> dreapta
expresie1, expresie2, expresie3, . . . expresien 9 ^ stânga -> dreapta
10 | stânga -> dreapta
11 && stânga -> dreapta
12 || stânga -> dreapta
sau 13 ?: stânga -> dreapta
14 = dreapta -> stânga
expresie = expresie1, expresie2, expresie3, . . . expresien 15 , stânga -> dreapta
-se
Limbajul C
construi programe. Acestea sunt:
{....}
No 50 No 51
{ }. (instr
:
atunc -
if(expresie) instructiune;
a)
simple .
O
a printf). THEN.
O
b)
if(expresie)
expresie; instructiune1;
e: else
instructiune2;
Are 3 forme:
a) : if imbricate if uri
cuprinse
variabila = expresie;
sau
variabila operator = expresie;
b) inst :
variabila ++;
++ variabila;
variabila --;
-- variabila;
No 52 No 53
Exemplu:
cin>>n;
i=1;
while(i<=n)
{
s+=i;
i++;
} e.
naturale este
for(expresie1 ; expresie2 ; expresie3) instructiune;
}
Astfel:
Dati numarul n = 5 expresie1
Suma primelor 5 numere naturale este 15 expresie2
expresie3
- corpul ciclului
-
for
int main(void) while, drept pentru care se poate scrie echivalent astfel:
{
int i=1,n,s=0;
cin>>n; expresie1;
while(i<=n) s+=i++; while(expresie2)
naturale este
{
} instructiune;
expresie3;
}
La executia acestui program se poate obtine urmatorul rezultat:
Dati numarul n = 5 :
Suma primelor 5 numere naturale este 15 while (expresie) instructiune; for( ; expresie ;) instructiune;
for are loc astfel
expresia1
No 54 No 55
expresia2
expresia3 expresiei2 .m.d..
do
instructiune;
expresia1, expresia2, expresia3
while(expresie);
.
for(;;) while(1)
area
Exemplu: naturale
for, v while:
int main(void)
{
int main(void) int numar=0, total=0;
{ do{
int i,n,s; total+=numar;
cin>>n;
for(i=1, s=0; i<=n; s+=i, i++) ; }while(numar<10);
naturale este }
: numar=0 total=0
numar=1 total=1
Suma primelor 5 numere naturale este 15 numar=2 total=3
No 56 No 57
numar=3 total=6
numar=4 total=10
switch (expresie)
numar=5 total=15
{ case c1 : sir_instructiuni_1;
numar=6 total=21 break;
numar=7 total=28 case c2 : sir_instructiuni_2;
break;
numar=8 total=36 ........
numar=9 total=45 case cn : sir_instructiuni_ n;
break;
default : sir_instructiuni;
Instru }
break;
switch
while, do while, for 1, c2, . . ., cn
switch -un ciclu repetitv sau din switch. c1
Exemplu: switch. Acela i lucru
for(;;) 2 ,sau cu c3 , sau cu cn.
{
..... switch
break; if :
}
Exemplu: un program, if (expresie==c1)
sir_instructiuni_1;
break
else if (expresie==c2)
break face ca sir_instructiuni_2;
........
else if (expresie==cn)
sir_instructiuni_ n;
int main(void){
else sir_instructiuni;
int numar;
for(numar = 1; numar<=100; numar++)
{
if(numar == 50) break; Exemplu:
}
cout -
for(numar = 100; numar>=1; numar--)
{
if(numar == 50) break;
}
}
No 58 No 59
k=1k+2k k, unde
#include<iostream.h>
void main(void)
{
int n=0;
int main(void)
char a;
{
switch(a==getche())
int numar;
{
\n Numerele pare dintre 1 si 100 sunt: \
{
for (numar = 1; numar <= 100; numar++)
\
{
n++;
if(numar % 2) continue;
} break;
}
-ti apasat i \
}
}
numar=0;
while(numar <= 100)
{
numar++;
if( ! numar % 2) continue;
Exemplu:
}
consoanele din alfabet. De obs case se }
default:
int main(void)
{
char litera;
int nr_vocale = 0, nr_consoane = 0; Se refe : for, while do while
ei ciclurile while do while
switch (litera) {
for
reevaluarea ciclului.
break; Exemplu:
default: nr_consoane++;
} continue -un ciclu for -un ciclu while
nr_consoane<<endl;
}
No 60 No 61
Exemplu:
#include <iostream.h> goto
#include <conio.h>
int main(void) int main(void)
{ {
int n,k;
char raspuns; int numar=1;
do
{
cout<<endl<<" introduceti n - maxim: "; if (numar <= 100) goto eticheta;
cin>>n; }
cout<<" Introduceti puterea ( 1,2,3,4) : ";
cin>>k;
switch(k)
{
case 1 : cout<<endl<<" S_i**1 = "<<n*(n+1)/2;break;
case 2 : cout<<endl<<" S_i**2 = 1. return;
"<<n*(n+1)*(2*n+1)/6; break; 2. return expresie;
case 3 : cout<<endl<<" S_i**3 = 3. return (expresie);
"<<n*n*(n+1)*(n+1)/4; break;
case 4 : cout<<" S_i**4 = "<<n * (n+1) *
(6*n*n*n+9*n*n+n-1)/30); break;
default : cout<<endl<<" putere in afara intervalului -
!"; break;
} forma 1.
cout<<endl<<endl<<" Doriti sa continuati ? ( d / n )";
raspuns=getchar();
}while(raspuns=='d' || raspuns=='D'); Preprocesare
cout<<endl<<" iesire din program";
getch();
} Schemat
preprocesare
program sursa initial(.C) program sursa(.C)
compilare editarea de legaturi (linkeditare)
program obiect(.OBJ)
program executabil(.EXE)
goto eticheta;
rte
:
a)
b) definire constante simbolice
No 62 No 63
c) definire macrouri
d)
a)
limbajului header-e (au extensia
le constante:
(scanf / #define TRUE 1
printf) putul unui program C++: #define FALSE 0
#include <stdio.h> - #define PI 3.1415
Runceanu Adrian
c)
constante.
#define nume(param_form1, param_form2, . . . ,
O param_formn) text
#define.
Apelul macroului se face astfel:
#define nume_constanta text
nume(param_actual1, param_actual2, . . . ,param_actualn)
No 64 No 65
1.4. Probleme rezolvate
maximul, respectiv minimul
signatura
1.4.1.
int main(void)
{ 1. c.m.m.d.c
r 10.0 si 25.0 este
%f\ multiplu comun (c.m.m.m.c
\
}
algoritmul lui Euclid
cmmdc(a-
executa acest program, preprocesorul va avea ca
cmmdc(a,b ) = cmmdc(a,b-
\
(10.0) : (25.0)));
a,
\
(3.1)));
2.
3. prim
4. perfect
5.
6.
No 66 No 67
palindrom x+b=0, valorile
al II-lea:
ax2+bx+c=0, unde a, b, c
-
1.4.2. propuse
Problema 1:
c.m.m.d.c
multiplu comun (c.m.m.m.c
-se coordonatele acestora: A(x1, y1) si B(x2, y2).
cmmdc(a,b ) = cmmdc(a,b-
a,
abc
acb #include <iostream.h>
int main(void)
cab {
cba int a, b, x, y, r, cmmdc1, cmmdc2, cmmmc;
cout<<"Dati primul numar "; cin>>a;
bac cout<<"Dati al doilea numar "; cin>>b;
bca // calculam c.m.m.d.c. folosind algoritmul lui Euclid
x = a; y = b;
r = a % b;
while( r != 0)
{
a = b;
b = r;
r = a % b;
}
cmmdc1 = b;
cout<<"Cmmdc este "<<cmmdc1<<endl;
No 68 No 69
// calculam c.m.m.d.c. folosind relatia data
while( a != b) Problema 4:
if( a > b ) perfect sau
a=a-b;
else
if( a < b )
b=b-a;
cmmdc2 = a;
cout<<"Cmmdc este "<<cmmdc2<<endl;
cmmmc = ( x * y ) / cmmdc1; #include <iostream.h>
cout<<"Cmmmc este "<<cmmmc<<endl; int main(void)
} {
int n, i, s = 0;
cout<<"Dati numarul "; cin>>n;
for(i=1; i<=n/2; i++)
Problema 2: if( n % i == 0 ) s+=i;
if( n == s )
cout<<"Numarul "<<n<<" este numar
PERFECT";
#include <iostream.h> else
int main(void) cout<<"Numarul "<<n<<" NU este numar
{ PERFECT";
int n, i; }
cout<<"Dati numarul "; cin>>n;
cout<<"Divizorii numarului "<<n<<" sunt: ";
for(i=1; i<=n; i++)
if( n % i == 0)
cout<<" "<<i; Problema 5:
}
#include <iostream.h>
Problema 3: int main(void)
prim sau nu. Spunem {
int n, i, max, min, x;
numai valorile 1 min = 32367;
max = -32368;
cout<<"Dati numarul "; cin>>n;
#include <iostream.h> for(i=1; i<=n; i++)
int main(void) {
{ cout<<"dati numarul "<<i<<" ";
int n,i,prim; cin>>x;
cout<<"Dati numarul "; cin>>n; if( max < x ) max=x;
prim=1; if( min > x ) min=x;
for(i=2;i<=n/2;i++) }
if(n%i==0) prim=0; cout<<"Maximul este "<<max<<endl;
if(prim==1) cout<<"Minimul este "<<min;
cout<<"Numarul "<<n<<" este numar PRIM"; }
else
cout<<"Numarul "<<n<<" NU este numar PRIM";
}
No 70 No 71
Problema 6: Problema 8:
#include <iostream.h>
int main(void) -
{
int n, i, suma=0, r;
cout<<"Dati numarul "; cin>>n;
while( n != 0 ) #include<iostream.h>
{ int main(void)
r = n % 10; {
suma+= r; int a, b, suma, media;
n = n / 10; a = 5; b = 7;
} suma = a + b;
cout<<"Suma este "<<suma<<endl; media = suma / 2;
} cout<<"media este ="<<media;
}
Problema 7:
palindrom Problema 9:
rul
exemplu: n =
25652).
#include<iostream.h>
#include <iostream.h> int main(void)
int main(void) {
{ int a, b, suma, media;
int n, r, m = 0, x; cout<<"dati primul numar a=";
cout<<"Dati numarul "; cin>>n; cin>>a;
x = n; cout<<"dati al doilea numar b=";
while( n != 0 ) cin>>b;
{ suma = a + b;
r = n % 10; media = suma / 2;
m+= r; cout<<"media este ="<<media;
n = n / 10; }
}
if( x == m )
cout<<"Numarul "<<x<<" este PALINDROM"<<endl;
else
cout<<"Numarul "<<x<<" NU este PALINDROM"<<endl; Problema 10:
}
No 72 No 73
#include<iostream.h> #include<iostream.h>
#include<math.h> int main(void)
int main(void) {
{ int a, b, c;
int x1, y1, x2, y2; cout<<"Dati primul numar = "; cin>>a;
float d; cout<<"Dati al doilea numar = "; cin>>b;
cout<<"dati x1= "; cin>>x1; cout<<"Dati al treilea numar = "; cin>>c;
cout<<"dati y1= "; cin>>y1; if ( a < b )
cout<<"dati x2= "; cin>>x2; if( b < c ) cout<<a<<","<<b<<","<<c;
cout<<"dati y2= "; cin>>y2; else if( a < c ) cout<<a<<","<<c<<","<<b;
d = sqrt( (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) ); else cout<<c<<","<<a<<","<<b;
cout<<"Distanta intre "<<x1<<","<<y1<<" si else if( a < c ) cout<<b<<","<<a<<","<<c;
"<<x2<<","<<y2<<" este = "<<d; else if(b < c )
} cout<<b<<","<<c<<","<<a;
else
cout<<c<<","<<b<<","<<a;
}
Problema 11:
Problema 13:
#include<iostream.h>
int main(void)
{
int u; #include<iostream.h>
float r; int main(void)
cout<<"dati unghiul u = "; cin>>u; {
r = (float)u / 180; int a, b, c, temp;
cout<<"unghiul in radiani este = pi*"<<r; cout<<"Dati primul numar = "; cin>>a;
} cout<<"Dati al doilea numar = "; cin>>b;
cout<<"Dati al treilea numar = "; cin>>c;
if( a > b )
{
temp = a; a = b; b = temp;
Problema 12: }
if( b > c )
{
temp = b; b = c; c = temp;
}
if( a > b )
abc {
acb temp = a; a = b; b = temp;
}
cab cout<<"Numerele in ordine crescatoare sunt
cba
}
bac
bca
No 74 No 75
else
Problema 14:
{
+b=0, delta=b*b-4*a*c;
if(delta >= 0)
{
cout<<"Radacini reale: ";
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
cout<<"x1 = "<<x1<<" x2 = "<<x2;
#include<iostream.h> }
int main(void) else
{ {
float a,b,x; cout<<"Radacini complexe :";
cout<<"Dati valoarea lui a = "; delta=-delta;
cin>>a; preal=-b/(2*a);
cout<<"Dati valoarea lui b = "; pimag=sqrt(delta)/(2*a);
cin>>b; cout<<"x1 = "<<preal<<" +
if( a == 0 ) i*"<<pimag<<"\n";
if( b == 0 ) cout<<"infinitate de solutii"; cout<<"x2 = "<<preal<<" - i*"<<pimag;
else cout<<"ecuatie imposibila";
else }
{ }
x = -b / a; }
cout<<"solutia este x= "<<x;
}
}
Problema 15:
2+bx+c=0,
#include<iostream.h>
#include<math.h>
int main(void)
{
int a,b,c;
float x1,x2,delta,preal,pimag;
cout<<"Dati valoarea lui a = ";
cin>>a;
cout<<"Dati valoarea lui b = ";
cin>>b;
cout<<"Dati valoarea lui c = ";
cin>>c;
if(a==0)
cout<<"Ecuatie de gradul I"<<"\n";
No 76 No 77
1.5. Probleme propuse spre rezolvare 6.
2 3 4.
7.
,p
1.
-al doilea
8.
2.
9.
conjectura lui GOLDBACH).
3.
10.
4.
No 78 No 79
14. 18.
de pe secunde.
Exemplu: 300 - 100 0
2 = A ,B, C 3 = D, E, F 4 = G, H, I
5 = J, K , L 6 = M, N, O 7 = P , R, S 19. e
8 = T, U ,V 9 = W, X, Y
15. Exemplu:
- este di
sau 20.
- este divizibil cu 400
Exemplu: Exemplu:
1890
2004: doua mii patru
16. 3000: trei mii
2=b2+c2, b2=a2+c2, c2=a2+b2).
Exemplu: numerele 3, 4, 5 sunt pitagorice.
21. b ere naturale
17.
Exemplu: 59
No 80 No 81
24. e divizori 31.
Exemplu: cifre.
Exemplu:
32.
de cifre distincte din care se compune.
25. ram Exemplu:
33.
valo
= suma divizorilor lui n Exemplu:
Exemplu: Divizorii lui n = 20 sunt 1, 2, 4, 5, 10, 20, suma lor este 42, iar
34.
frelor lor.
26. Exemplu:
20, 21, 24
No 82 No 83
38. Exemplu: -5, 47, 0, 32, 12, -6,
este 14, 0, - -45480960.
Exemplu: 10=1B2B116)
43.
repetate.
Exemplu: 3*9=27 (3+3+3+3+3+3+3+3+3 sau 9+9+9). 50.
44.
impar ( 51. n
de zero.
No 84 No 85
52. Citindu- ul natural n 60. x
n. eps sin(x)
eps
53.
ma zi- -an cu x
61.
54. conversie este: F=32+9/5
ambele valori ale temperaturii cu mesajele
55. 1
n , Cn2, ... Cnp n p sunt
62.
switch.
63.
56. Pentru n fn, termenul de rangul n din a) 2+ n = y2 .
b) a)*(2b + 1).
f0 = 1 ; f1 = 1 ; fp = fp-1 + fp-2 pentru orice valoare p >= 2.
64.
57. - n x format din n fiecare p
- c a)
x;
c)
x.
No 86 No 87
67. - 74.
nume -
a)
68. - b) , aliniat la dreapta;
75.
69. - func ie de anumite ponderi pentru fiecare criteriu stabilit de profesor.
- Astfel, se vor citi date
- n procente
laborator, ponderea notei de la
cadrul notei finale a notei de la oral, de asemenea,
70. - un program care suma ponderilor
-o apoi pentru 100%, i
scrierea unei alte macro-
(pondere_scris*nota_scris+pondere_oral*nota_oral+pondere_laborator*nota_
- laborator)/100
n care suma ponderilor
71. -
- VALOARE_ABSOLUT~ 76. lui Collatz
(x + delta) natural:
72.
memorat - tip char. valorile -
i 128. a)
numere naturale n,
73. E = ( f o f o . .. o f ) (n)
i 'o' de k ori
maxim b) un program natural
<ore>H:<minute>M:<secunde>S valoarea 1.
Exemplu: pentru un interval de 8358 secunde avem: 2H:19M:18S.
No 88 No 89
77. Seria Farey de ordinul n 80. De pe mediul standard de intrare se introduc trei numerele naturale
reduse, sau egal
cu n. (X1, Y1); (X2, Y2); ... ; (Xk,
Yk); ... Termenii Xk
seria Farey de ordinul n, pentru n citit de formatul: ZZ/MM/AA , MM luna pe
pe mediul standard conform AA
Exemplu:
Exemplu: Seria Farey
0/1, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 2/5, 3/7, 1/2, 4/7, 3/5, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7 81.
Reprezentarea acestei serii
(0,1); (1,7); (1,6); (1,5); (1,4); (2,7); (1,3); (2,5); (3,7); (1,2); (4,7); (3,5); (2,3); c
(5,7); (3,4); (4,5); (5,6); (6,7); (1,1).
=1, difer
X1 Exemplu: Un interval de timp rezultat de forma 26H, 90M, 70S nu este
: 27H, 31M, 10S.
Farey: Xk+2 = (Yk+n /Yk+1) * Xk+1 - Xk.
Yk+2 = (Yk+n / Yk+1) * Yk+1 - Yk. 82. ntervale de timp
78.
oate numerele naturale formate cu cifrele sale distincte.
Exemplu: 83. Se c
2 3 8 23 32 28 82 38 83 238 283 328 382 823 832
79.
ozitivul standard de iesire "multiple" 84.
un pr
caz contrar.
85.
Exemplu: a = 32 b=9 nemultiple , supraunitare,
a=40 b=8 multiple
No 90 No 91
86. caracter citit de pe
91. r ate numerele naturale
-un interval de numere dat (a, b) care sunt divizibile cu k.
Format Format octal Format Format binar Caracterul
zecimal hexazecimal
Exemplu:
032 040 020 00100000 SPATIU 92. ere naturale (a,b), a<=b,
125 175 07d 01111101 }
87.
93.
de trei cifre.
94.
cel mai mic numar natural cu n divizori.
88. Exemplu:
95.
re.
Exemplu:
89. deficiente, perfecte abundente prim.
96.
k {2, 3, . . . , n-1} care sunt prime cu n.
Exemplu: n = 12 este abundent deoarece Exemplu: pentru n=8, avem numerele
Sd(12)=1+2+3 + 4+6=16>12,
n = 6 este perfect deoarece Sd(6)= 1 + 2 + 3 = 6 97.
iar n = 14 este deficient deoarece Sd(14)=1+2+7=9<14.
zecimale.
90. Exemplu: x=12345678.377259 102 - 219 = -117
No 92 No 93
1.6
Exemplu:
1.6.1.
700 = 683 + 17
corect ?
702 = 691 + 11
a) 123 b) -17 c) +843 d) 0154 e) --67
704 = 701 + 3
............
1.6.2. Care dintre construc constante
800 = 793 + 7
caracter?
1)" " 2)'\' 3)'a' 4) ' " ' 5)'\\' 6)'\13' 7)"a" 8)' '
99. calcu u maxim 4000 de
a) i 8) b) toate c) in
Exemplu: 35552=12638025 d) 2), 3), e) 3),
1.6.4.
No 94 No 95
1.6.5. c) d)
#include<iostream.h> #include<iostream.h>
int main() int main()
{ {
a) int x==2; b) x:int=2; c) int x=2; d) int x 2; e) x=2 : int; \
\ \
} }
1.6.6. e) nici unul dintre programele anterioare
1.6.8. 1.6.11.
"Program" si "simplu" unul sub altul (fiecare pe
a) Operatorul de atribuire este "=".
"SAU logic"
c) " !=" este un operator logic.
a) b) a la b.
#include<iostream.h> #include<iostream.h> -
int main() ; main()
{ {
\ 1.6.12. Pentru care dintre seturile de valori ale variabilelor x, y, z
\
} } de mai jos expresia (x<y) < (z!=x) < ( (z-y)<x are valoarea 1?
No 96 No 97
a) x=3; y=5; z=4 b) x=4; y=3; z=4 c) x=3; y=4; z=3 1.6.17. de variabile:
d) x=5; y=4; z=3 e) x=5; y=5; z=5 int a,b,e; float c,d;
Care dintre ncorecte?
1.6.13. Fie variabilele intregi a. si b. Expresia se scrie in C++
astfel: a) a=a*b; b) e=a<c; c) -b=a+a/b;
d) cout << (d=(a+b)/2); e) c*d=a-b;
No 98 No 99
1.6.21. Fie variabilele x, y, z de tipul int, fiind cunoscute valorile cu ecou, iar getch()
x=3,
getchar() getche() i getch()
valoarea 0
1.6.25.
b)
codurile succesive ('A' 65, 'B' 66, 'C' 67,
valoarea 0
(3) actere
ecimale, cu aliniere la dreapta
a) 1 #include<stdio.h>
int main()
b) 3 {
respectiv,
c) 69 int x,y,z,p;
a=2 $b= 6 char n,m;
d ) 67
(prin " " am simbolizat caracterul
e) 0 x=m; y=2*m-n; z=3;
e) p=x<y ? (y<z ? z : y) : (z<x ? x : z);
\
scanf }
No 100 No 101
1.6.26. Presupunem ca sub o versiune 1.6.29.
a limbajului de tipul nu vor produce erori la
a) a = b = c = d; b) a = (b = c) = d; c) (a = (b = c)) = d;
1.6.28. Ce valoare putem introduce la citirea variabilei y, astfel d) a = ((b = c) = d); e) (a = b = c) = d;
t programul de mai j 1?
No 102 No 103
1.6.32. Precizati valoarea pe care o va avea variabila c n urma
executiei programului de mai jos: a) #include<iostream.h>
int main()
b) o
#include<iostream.h> {
int main() c) de doua ori int a, b, x;
cin>>a>>b>>x;
{ d) de trei ori if (!((x<-a) && (x>=b) cout<<1<<"\n";
if (!(x<=a I| x>=b)) cout <<1<<"\n";
int n=99; e) de patru ori if (!(x<=a) && !(x>=b)) oout<<1<<"\n";
c=n+1=c-1; if (!(x<=a) || !(x>=b)) cout <<1<<"\n";
d) NULL }
}
e)
a) Nu
b) Textul unu
a) if (a=b) x=b; b) x=a; c) Textul doi
else if (x>b) d) Instru
if (b>a) x=a; x=b; e) Nici un
c) if (b>=a) x=a; d) if (a<=b) x=b;
else x=b; else x=a, 1.6.37.
e)
va afisa x=5?
1.6.35. se va n timpul a) a=- -1
if (a>0)
b) if (b>0) x=8;
variabilele primesc valorile a=3, i x=5. c) -1 else x=5 ;
else x=6;
d) -1 cout << x;
e)
No 104 No 105
1.6.38. primi 1.6.40. de
prin citire 232213, care x valoarea n2, cu n
valorile variabilelor f1, f i f3? variabila auxiliar
#include<iostream.h>
int main() a) x=1;
{ for(i=1;i<3;i++) x*=n ;
long n;
b) x=1;
unsigned int f1,f2,f3,c;
cin >> n; for(i=1;i<=n;i++) x*=2;
f1=f2=f3=0;
a) f1=1, f2=1, f3=1 do{ c) x=1; i=0;
b) f1=1, f2=2, f3=2 c=n%10; while (i<2) x*=n; i++;
n=n/10;
c) f1=1, f2=3, f3=2 switch(c) d) x=1; i=0;
d) f1=2, f2=1, f3=3 { do { i++; x*=n;
case 1: {f1++; break;}
e) f1=3, f2=2, f3=1 case 2: {f2++; break;} } while (i<2);
case 3: {f3++; break;} e) x = x*n;
}
}while(n!=0);
cout << f1 << f2 << f3;
} 1.6.41. de instruc iuni
atribuie v n, cu n atural,
variabila
a) x=10; b) x=1;
1.6.39. Pentru n=7, care program de mai jos
for (i=1; i<=n; i++) for (i=n; i>0; i--)
x*=i; x*=10;
P fie 48?
c) x=1; i=1; d) x=1; i=0;
do { x*=10; while (i<=n) {
i++; i++;
a) b) c) d)
} while (i<n); x*=i;
P=1 ; i=2 ; P=1; i=1; P=1; i=1; P=1; i= 0;
}
while (i<=n) while (i<n/2) while (i<=n/2) while (i<n)
e) Nici una dintre variantele anterioare.
{ { { {
P*=i ; i+=2 ; i++; P=P* (2*i); i+=2;
} P=P* (2*i+1) ; i++; P*=i ;
1.6.42.
} } }
x citite
e) Nici una dintre s
de l n ordine 3,2,4,3,5,10,20,0.
No 106 No 107
a) 0 cin >> x;
b) 1 nr = 0; // Secventa S1 // Secventa S2 // Secventa S3
do{ p=1; s=0; p=1; s=0; p=1; s=0;
c) 2 y=x; for(i=1;i<=n;i++) for(i=1;i<=n;i++) for(i=1;i<=n;i++)
cin >> x; { { {
d) 3
if(x==2*y) p=p*i; s=s+i; p=p*s;
e) 4 nr++; s=s+p; p=p*s; s=s+i;
} while(x!=0); } } }
cout << nr;
a) numai S1 b) numai S2 c) numai S3 d) toate e) nici una
1.6.43. Care va fi valoarea variabilei c afi
1.6.45. Care de
#include<iostream.h> variabilei u valoarea primei cifre a natural reprezentat de
int main() variabila x?
a) 8 {
b) 32 long a,b,c,z,i;
; a) u=x; b) while (u>=10) u=u%1O;
c) 27 cin>>a>>b ;
for(i=1 ; i<=a ; i++) while (u>=10) u=u%10; u=x;
d) 13
{ c) u=x/10; d) u=x%10;
e) 1 c+=z ; e) Nici una dintre variantele anterioare
z*=b ;
}
cout<< ; 1.6.46. Care dintre atribuie
}
prezentat de
variabila x?
p=1;
for (i=1; i<=n;i++) 1.6.47. Fie n care ok este o
{ int, iar x este un num r natural.
s=0;
for (j=1; j<=i;j++) s=s+j;
ok=0;
p=p*s;
for(i=2; i<x; i++)
if(x % i == 0) ok == 1;
cout<<ok;
Secven
No 108 No 109
nu are nici un divizor propriu 1.6.50.
c) Toate numerele naturale mai mici dec sunt divizori proprii s=0;
ai lui x for(i=3; i<=n; i+=3)
s+=i;
l mult un divizor propriu
e) Nici una dintre variantele de mai sus
Se dau mai jos cinci triplete de numere, fiecare astfel de triplet
reprezent nd un set de valori pentru variabila de intrare n. Care dintre aceste
1.6.48.
12233344444
a) (3, 5, 6) b) (6, 7, 8) c) (10, 11, 12) d) (6, 9, 12) e) (15, 16, 17)
a) b) c)
for ( i=1 ; i<=n ; i++) for (i=1;i<=n;i++) for ( i=1 ; i<=n ; i++)
for for (j=1;j<=i;j++) for
(j=1;j<=n;j++) printf ("%2d",i) ; (j=1;j<=n;j++) 1.6.51.
printf ("%2d",i); printf ("%2d",j) ;
d) e)
for (i=1;i<=n;i++) for (j=1;j<=n;j++) for s=0; t=0; x=3; i=1; y=1; z=1;
for (j=1;j<=i;j++) (i=1;i<=n;i++) a) 1 do{
printf ("%2d",j) ; printf ("%2d",i) ; if(x>0)
b) 5 if(y>1)
c) 6 if(z>2) t=x;
1.6.49. Pentru af else t=x+y;
d) 51 else t=x+y+z;
e) 63 s+=i+t;
i++;
}while(i>7);
S1) S2) cout<<s;
for(i=1;i<=n;i++) for(i=1;i<=n;i++) ;
printf ("%2d",i) ; printf("%2d",i);
e)
No 110 No 111
1.6.53.
// Programul P3 //Programul P4
(cea a #include <stdio.h> #include <stdio.h>
int main() void main()
{
int c; long d,x,y; {
valoarea 4. int c; long d,x,y;
scanf("%ld",fix);
#include <iostream.h> d=x; y=0; scanf("%ld",&x);
int main() while (d) d=x; y=0;
a) 1, 2, 3, 4 {
{ do
b) 2, 3, 4 c=d % 10;
int n=1, a, b; y=y*10+c; {
c) 1, 3, 4 cin >> a; d=d/10; c=d% 10;
do { } y=y*10+c;
d) 1, 2, 4 printf("%ld",y); d=d/10;
cin >> b;
e) 4, 4,4 n++; } } while (d);
} while(b!=a); printf("%ld",y);
cout << n; }
}
a) P1 i P2
b)
la dreapta la d)
1.6.55.
//Programul P1 //Programul P2 :
#include <stdio.h> #include <stdio.h>
int main() int main()
{ { #include<iostream.h>
a) 0,0,0 int main()
int c; long d,x,y; int c; long d,x,y;
scanf("%ld",&x); scanf("%ld",&x); {
b) 0,0,1
d=x; y=0; d=x; y=0; int x,y,m,n,a,b=5;
while (d) do
c) 0,1,1 x=(m=b=n=3,b+4);
{ { y=a=((b=5) ? b-- : --b);
d) 1,1,1
c=d % 10; c=d% 10; if( (!y==a) && (m==n) ) cout <<1; else cout << 0;
y=y+c*10; y=y+c*10; e) 1,0,1 if( !a && b && !m ) cout << 1; else cout << 0;
d=d/10; d=d/10; if( (n=(a+b--)) == (m-x)) cout <<1; else cout <<0;
} } while'(d); }
printf("%ld",y); printf("%ld",y);
} }
1.6.56. n variantele de
trebuie
No 112 No 113
#include <stdio.h>
a) 2,7,3,8,0,0 int main () i=<v1>; x=0; j=<v2>; y=0;
{ while (i<=10) do
b) 2,5,4,4,0,0
int x,y; { {
c) 1,3,6,2,0,0 while (scanf ("%d",&x)=1 && scanf ("%d",&y)=1 && (x | | y)) x+=10; i++; j++; y+=10;
do { } } while (j < <v3>);
d) 2,4,5,8,0,0 printf("*%d *%d",x,y);
} while(x!=y);
e) 0,0 }
1.6.58. Se conside n
#include <iostream.h>
care: int main()
toate variabilele ntreg {
int S,x;
<v1>, <v2>, <v3> ntregi for(S=0, x=1; 0; S+=x, cin >> x)
if (!x) break;
cout << S;
Determina i valorile <v1>, <v2>, <v3> }
dintre valorile ix -x=10).
No 114 No 115
5, atunci
1.6.50. ordonate, iar accesul la fiecare element are loc prin indice.
1.6.51. c)
1.6.52. d)
1.6.53. b), c) 1. Tablouri unidimensionale (cu un singur indice)
1.6.55. b) 3.
1.6.56.
1.6.57. 2.1.1. Tablouri unidimensionale
1.6.58.
1.6.59. b)
1.6.60. b)
tip nume_tablou[dimensiune_maxim ];
1.6.61. c)
1.6.62.
unidimensional.
#include<stdio.h>
int main(void)
unidimensionale: {
int i,n;
float x[50],min,max;
Exemplu: printf("Dati numarul de elemente ale tabloului ");
int a[25]; // declararea unui tablou unidimensional cu maxim 25 scanf("%d",&n);
for(i=1;i<=n;i++)
de elemente, fiecare de tip întreg;
{
float x[30]; // declararea unui tablou unidimensional cu maxim 30 de printf("x[%d]= ",i);
scanf("%f",&x[i]);
char s[40]; // declararea unui tablou unidimensional cu maxim 40 de }
elemente, fiecare de tip caracter; min=x[1];max=x[1];
for(i=2;i<=n;i++)
if(min>x[i]) min=x[i];
else if(max<x[i]) max=x[i];
printf("\nMinimul este %6.2f",min);
printf("\nMaximul este %6.2f",max);
}
Problema 2:
valoarea 0. sunt sa
#include<stdio.h>
int main(void)
anterior: {
int i,n,verif=1;
int x[50];
printf("Dati numarul de elemente ale tabloului X ");
Exemplu: scanf("%d",&n);
a[0] for(i=1;i<=n;i++)
a[24] - {
x[i] - printf("x[%d]= ",i);
scanf("%d",&x[i]);
}
for(i=1;i<=n-1;i++)
if( x[i]>x[i+1] ) verif=0;
if(verif==1) printf("\nNumerele din tablou sunt in ordine
declararea lor: CRESCATOARE");
else printf("\nNumerele din tablou NU sunt in ordine
int b[5]={1,2,3,4,5}; CRESCATOARE");
}
Astfel, elementul b[0] are valoarea 1, elementul b[1] are valoarea 2,
elementul b[2] are valoarea 3, elementul b[3] are valoarea 4, elementul b[4]
are valoarea 5.
astfel: Astfel, elementul b[0][0] are valoarea 1, elementul b[0][1] are valoarea
2, elementul b[0][2] are valoarea 3, elementul b[1][0] are valoarea 4,
tip nume_tablou[dimensiune_linie][dimensiune_coloan ]; elementul b[1][1] are valoarea 5, elementul b[1][2] are valoarea 6.
Problema 1: cu
(dimensiune (dimensiune_coloana). n m, respectiv m
C=A*B.
bidimensionale: #include<stdio.h>
int main(void)
{
Exemplu: int a[10][10],b[10][10],c[10][10];
int n,m,i,j,k,p;
int a[10][10]; // declararea unui tablou bidimensional cu
printf("Dati dimensiunile matricei A \n");
maxim 100 de elemente (10*10), fiecare de tip întreg;
printf("Dati numarul de linii n = ");
float x[5][5]; // declararea unui tablou bidimensional cu
scanf("%d",&n);
printf("Dati numarul de coloane m = ");
char s[20][10]; // declararea unui tablou bidimensional cu scanf("%d",&m);
maxim 200 de elemente(20*10), fiecare de tip caracter; for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
ii {
printf("a[%d,%d] = ",i,j);
scanf("%d",&a[i][j]);
}
printf("Elementele matricei A sunt : \n");
tabloulu for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++) printf("%d ",a[i][j]);
printf("\n");
}
ale declarate anterior:
Exemplu:
a[0][0] oloana 0
a[9][9] -
x[i][j] -
Problema 2:
.
2.1.3. Tablouri multidimensionale
tip nume_tablou[dimensiune1][dimensiune2
[dimensiunen];
determinat
.
, dimn) cu
Exemplu:
int a[10][10][10]; // declararea unui tablou 4 diagonale ale cubului mare.
tridimensional cu maxim 1000 de elemente (10*10*10), fiecare
de tip întreg;
float x[5][5][5]; // declararea unui tablou tridimensional cu #include<stdio.h>
maxim 125 de elemente(5*5*5), fiecare de tip real sim int main(void)
precizie; {
char s[20][10][30]; // declararea unui tablou tridimensional int a[10][10][10];
cu maxim 6000 de elemente(20*10*30), fiecare de tip caracter; int n,i,j,k,suma=0;
printf("Dati dimensiunile matricei A \n");
printf("Dati numarul n = ");scanf("%d",&n);
Exemplu: for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
sizeof: {
printf("a[%d,%d,%d] = ",i,j,k);
scanf("%d",&a[i][j][k]);
#include <stdio.h>
}
int main(void)
for(i=1;i<=n;i++)
{
suma+=a[i][i][i]+a[i][n-i+1][n-i+1]+a[i][n-
int a[20];
i+1][i]+a[i][i][n-i+1];
float x[3][4];
printf("suma=%d",suma);
char t[20][30][40];
}
u tabloul unidimensional
int a[20] este %d\
1.
a[20] este 40
tabloul bidimensional float x[3][4] este 48
2.
48000
4. Problema 1:
se calculeze cel mai mare divizor comun al elementelor tabloului.
5.
6.
#include<iostream.h>
int main(void)
tablouri date, ) {
7. int a,b,i,n,suma=0;
float x[50],media;
bidimensionale) An*m, Bm*p. cout<<"Dati numarul de elemente ale tabloului "; cin>>n;
8. -o matrice for(i=1;i<=n;i++)
{
cu n li n*m) (1 n,m 30).
9. n*m
cin>>x[i];
}
(1 n,m 30). cout<<"Dati numarul a = ";cin>>a;
10. n*n
cout<<"Dati numarul b = ";cin>>b;
for(i=1;i<=n;i++)
a. if( (a<=x[i]) && (x[i]<=b) ) suma+=x[i];
b. produsul ele media=suma/n;
cout<<"Media aritmetica a elementelor din tablou, aflate
c. minimele din elementele aflate deasupra, respectiv sub diagonala
}
cin>>x[i];
} Problema 7:
min=x[1];max=x[1];
for(i=1;i<=n;i++) (tablouri bidimensionale) An*m, Bm*p.
if(min>x[i]) min=x[i];
else if(max<x[i]) max=x[i];
cout<<endl<<"Minimul este "<<min<<endl;
cout<<"Maximul este "<<max; #include <iostream.h>
} int main(void)
{
int n,m,p,i,j,k,a[10][10],b[10][10],c[10][10];
Problema 6: cout<<"Dati dimensiunile matricei "<<endl;
cout<<"Dati numarul de linii n = "; cin>>n;
cout<<"Dati numarul de coloane m = "; cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
Prob ) cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j];
#include<iostream.h> }
int main(void) cout<<"Elementele matricei A sunt: "<<endl;
{ for(i=1;i<=n;i++)
int i,n,j,m,k; {
float x[50],y[50],z[100]; for(j=1;j<=m;j++)
cout<<"Dati numarul de elemente ale tabloului X "; cout<<a[i][j]<<" ";
cin>>n; cout<<endl;
for(i=1;i<=n;i++) }
{
cin>>x[i];
}
Problema 8:
-o
Problema 9:
n*m) (1 n,m 30).
n*m (1
#include <iostream.h> n, m 30).
int main(void)
{ #include <iostream.h>
int n, m, min, i, j, max, a[30][30]; int main(void)
cout<<"Dati dimensiunile matricei "<<endl; {
cout<<"Dati numarul de linii n = "; cin>>n; int n,m,i,j,a[30][30],b[30][30];
cout<<"Dati numarul de coloane m = "; cin>>m; cout<<"Dati dimensiunile matricei "<<endl;
cout<<"Dati numarul de linii n = "; cin>>n;
cout<<"Dati numarul de coloane m = "; cin>>m;
elemente nenule.
1.
#include<iostream.h>
int main(void) tablou a
{
int a[30][30], n, m, i, j, max, nr;
cout<<"Dati numarul de linii n = "; cin>>n; 2. aT * b, unde a
cout<<"Dati numarul de coloane m = "; cin>>m; b sunt doi vec
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{ 3. v, de dimensiune
cout<<"a["<<i<<","<<j<<"]= ";
cin>>a[i][j]; n
} r.
cout<<endl<<"Matricea A are elementele:"<<endl;
for(i=1;i<=n;i++) 4.
{
for(j=1;j<=m;j++) cout<<a[i][j]<<" "; numerice, a b s ce
cout<<endl; a b.
}
max=0; 5. v n p componente
for(i=1;i<=n;i++)
{
nr=0;
for(j=1;j<=m;j++)
if(a[i][j]!=0) nr++; 6. m de dimensiune n*n
if(max<nr) max=nr;
}
-m
for(i=1;i<=n;i++)
- m asupra
{
nr=0; diagonalei principale sunt nule.
for(j=1;j<=m;j++)
if(a[i][j]!=0) nr++;
if(max==nr) cout<<"Linia "<<i<<" are 7. n m coloane (1< n, m < 10)
"<<max<<" elemente nenule"<<endl;
} k elemente nule (0 < k
} k
elemente nule.
b.
10. - s cu n
17. x y ordonate strict cre m n
n (n <= 100). z
11. Dintr- a cu l c x y
18. x, cu n elemente
ordonate stri
12. un valori alfa
alfa < x1, x1
x.
30.
al.
24. Exemplu :
25. n*m (1 n,m 32. divizor comun a n numere - cmmdc (x1, x2, .
uma componentelor de pe marginea . . ,xn).
matricei. Exemplu : cmmdc(2940,882,70,182) = 14.
Exemplu :
27. 2 (1 n 30)
problemei
Exemplu :
Exemplu: x= {10,3,5,8}
Exemplu : . 43.
37. Exemplu :
.
47. :
0, dac 2 + j2
a[i][j] =
matricei. 0 0 1 0
Exemplu: Pentru n = 4, matricea corespunz : 0 1 0 1
1 0 1 0
0 1 0 1
b) Ciclul for
c) d)
i=0; i=0; c) (v[0] ,vfi],... ,v[5]) sunt 5,4,-11,9,-12,1
do do valoarea 4.
{ {
i++; cout<<v[i]; d) elementele vectorului (v[0] ,v[i],... ,v[5]) sunt 3,-2,8,6,11,4,
cout<<v[i]; i++; 4.
}while(i<n); }while(i<n);
e)
e) nici una; valoarea 0.
2.4.4.
2.4.2.
produsul elementelor pare ale unui vector v = {v[1], v[2], . . ., v[n]} int i=0, v[5]={1,1,1,1,1};
while( i<5 && v[i] && !v[i])
? {
v[i]=0;
i++;
a) b) c) }
p=1; p=1; p=0;
for(i=1;i<=n;i++) for(i=0;i<n;i++) for(i=0;i<n;i++) a) Expresi
if(v[i] % 2 == 0) if(v[i] / 2 == 0) if(v[i] % 2 != 0)
b)
p=p*v[i]; p=p*v[i]; p=p*v[i];
cout << p; cout << p; cout << p; c)
d)
e) u infinit.
a) Pentru i v=(5,6,2,7,1),
b) Toate elementele sunt egale.
nemodificate ale vectorului: 5 6 2 7
c)
b) Pentru n=5, i v=(2,i,3,i,4), 314
d) egale.
c) de
e) Nici una dintre variantele de mai sus.
d) din vector elementul cu valoarea x, prin mutarea cu o
n = 3;
b) for(i=0; i<n; i++) a) b)
a[i][i] = 0; for(i=0;i<m;i++) for(i=0;i<m;i++)
for(i=0; i<n; i++) { {
for(j=i+1; j<n; j++) x=a[i][0]; x=a[i][n-1];
c)
{ for(j=1;j<n;j++) for(j=1;j<n-1;j++)
a[i][j] = 1; if(a[i][j]>x) if(a[i][j]>x)
a[j][i] = -1; x=a[i][j]; x=a[i][j];
} b[i]=x; b[i]=x;
} }
d)
c) d)
e)
for(i=0;i<m;i++) for(i=0;i<m;i++)
{ {
x=a[i][n-1]; x=-MAXINT;
for(j=n-2;j>=0;j--) for(j=0;j<n;j++)
if(a[i][j]>x) if(a[i][j]>x)
x=a[i][j]; x=a[i][j];
2.4.12. n s=3; nr=0; b[i]=x; b[i]=x;
matrice cu m linii for(i=0;i<m;i++) } }
for(j=0;j<n;j++)
i n coloane cu if( . . . . . . . . . . . . . . )
ar m este { e) anterioare
s+=a[i][j];
de tipul float. nr++;
}
m=(float) s / nr;
2.4.14. Se a
este o cu m linii * n coloane, iar x este o
if lui elementele matricei se
presupun cunoscute (citite anterior).
a) (a[i][j]>0) && (i%2==0) && (j%2!=0) // Secventa S1 // Secventa S2
for(j=x+1; j<=n-1; j++) for(j=n-1; j>=x+1; j--)
b) (a[i][j]>0) && ((i+j) %2!=0)
for(i=0; i<=m-1; i++) for(i=m-1; i>=0; i--)
c) (a[i][j]>0) && (i/2==0) && (j%2!=0) a[i][j-1]=a[i][j]; a[i][j-1]=a[i][j];
d) (a[i][j]>0) && (i/2 !=0) && (j%2==0)
e) Nic :
k=0;
tricea va fi for(i=0,i<m;i++)
for(j=0,j<n;j++)
if(u[i]==v[i])
w[k++]=u[i];
int main()
{
a) Primul element al vectorului este 5, iar celelalte elemente sunt nule a) I int *a[10], (*b)[10];
int x, y[10];
b) Ultimul element al vectorului este 5, iar celelalte elemente sunt nule b) II
a[0]=&x; // (I)
c) c) III b=&y; // (II)
a[4]=y; // (III)
elementul d) IV
b=&y[4]; // (IV)
d) e) nici una }
No 154 No 155
#include<iostream.h>
2.4.18. int main()
{
int m[20], i, n=10, s;
jos: #include<stdio.h> m[0]=m[1]=1 ;
int main() for(i=2; i<n;i++)
{ m[i]=m[i-1] + i%3;
a) int **a[10], *b[10], c[10]; for(s=*m;, i=1; i<n; i++)
b[3]=&c[5]; s=( *(m+i) != *(m+i-1) ) ? s+*(m+i) : s;
b) a[4]=&b[3]; cout << s;
c) III c[5]=3; }
\ ); // (I)
d) i IV \ // (II) a)
e) nici una \ // (III)
pri \ // (IV)
} b)
c) din a
d) m prin intermediul
2.4.19. pointerilor
#include<stdio.h> e) Nici un
int main()
a) Adresa lui b {
int x=12; 2.4.22.
b) Adresa lui a[2] int *a[10], *&b=a[2]; #include<iostream.h>
c) 12 b=&x; int main()
\ a) nici o
d) NULL {
} b) o int *a[5], i=0, v[5], x=30;
e) while(i+<5) v[i]=x/i;
c)
for(i=1; i<5;i++)
d) de trei ori *(a+i)=&v[i];
2.4.20. : a[0]=&x;
e) Programul
for(i=0; i<5; i++)
eroarea "Divide error" din \
}
pointer ptr ?
2.4.21.
timpul
No 156 No 157
#include<iostream.h> 2.4.25.
int main()
{
int a[20][20], i, j, n=4;
for(i=0; i<n; i++)
for(j=0; j<n;j++) #include<iostream.h>
*(*(a+i)+j) = ( i>j ) ? ( j-i ) : ( j+i ); int main()
int m=10; {
for(i=0; i<n; i++) int x[4]={1,2,3}, y[4]={4,5,6,7}, z[7], i,j;
programul este eronat for(j=0; j<n;j++) for(i=0; i<4; i++)
if ( m > (*(a+i)) [j]) ) *(z+i) = *(y+i);
m=a[i][j]; for(j=0; j<3; i++)
\ *(z+i+j) = *(x+j);
} for(i=0; i<7; i++)
cout << *(z+i);
}
2.4.24.
#include<stdio.h>
int main()
{ a) 1,2,3,4,5,6,7
int u[4] = {1,2,3,4}, v[4]= {5,6,7,8}, w[4] = {0,0,0,0} i; b) 7,6,5,4,3,2,1
int (*x) [4] = &u, (*y) [4] = &v, (*z) [4] = &w;
for(i=0; i<4;i++) c) 3,2,1,7,6,5,4
d) 4,5,6,7,1,2,3
}
e) Programul este eronat
Care dintre
a) memorie
b)
c) Valoarea lui (*x) [2] este 3
d) Valoarea lui (*y) [4] este 8
e) din ciclu este , din cauza folosirii
operatorului
No 158 No 159
2.5. R spunsuri CAPITOLUL
2.5.
2.5.2. a)
2.5.
2.5.
2.5.5. d)
2.5.6.
2.5.7. b)
2.5.8. c) 3.1. iruri de caractere
2.5.9. e)
2.5.10. a)
2.5.11. b) atel
2.5.12. a), c)
2.5.13. e) folosit.
2.5.14. b)
2.5.15.
2.5.16. a), c) tablouri unidimensionale de caractere.
2.5.
2.5. Declararea unui tablou de caractere se face astfel:
2.5.19. c)
char num_tablou[dimensiune_maxima];
2.5.20. c)
2.5.21. b)
2.5.22. c)
Exemple:
2.5.23. d) char sir[20]; // tablou de 20 de caractere
2.5. char t[10]; // tablou de 10 caractere
2.5.25. d)
No 160 No 161
caractere:
- stdio.h gets()
char
puts().
- string.h le vom prezenta mai
departe.
L i m b a j u l C - t e o r i e s i a p l i c a t i i \0
sir[0] - Problema 1:
a)
caractere dat ca paramentru.
b)
adaug c)
fgets() gets() caractere.
d)
Exe
#include<stdio.h>
// determinarea lungimi unui sir
#include<stdio.h> int unsigned lungime(char a[])
int main(void) {
{ int i = 0;
char sir[256]; while( a[i] != NULL ) i++;
int i; return i;
for(i=0;i<26;i++) }
sir[i] = 'A' + i; // copierea unui sir in alt sir
sir[i] = NULL; char copiaza(char dest[], char sursa[])
printf("Sirul de caractere contine: %s\n",sir); {
} int i = 0;
while( sursa[i] != NULL )
{
dest[i] = sursa[i];
i++;
Sirul de caractere contine: ABCDEFGHIJKLMNOPRSTUVXYZW }
dest[i]=NULL;
}
No 162 No 163
// concatenarea a doua siruri
char concatenare(char a[], char b[]) #include<stdio.h>
{ char *stergere(char *sir, char *subsir)
int i=0,j=0; {
while(a[i]!=NULL) i++; int i,j,k,poz=-1;
while(b[j]!=NULL) // cauta subsirul in sirul dat si retine pozitia de unde incepe
{ a[i]=b[j];j++;i++; } for(i=0;(sir[i]) && (poz == -1);i++)
a[i]=NULL; for(j=i, k=0; sir[j]==subsir[k]; j++,k++)
} if(!subsir[k+1]) poz=i;
if(poz!=-1) // daca subsirul a fost gasit
// cauta un subsir in altul {
int cauta_sir(char sir[], char subsir[]) for(k=0;subsir[k];k++) ; //numara cate caractere are
{ subsirul
int i,j,k,nr=0; for(j=poz, i=poz+k; sir[i]; j++, i++) sir[j]=sir[i];
for(i=0;sir[i];i++) sir[j]=NULL;
for(j=i, k=0; sir[j]==subsir[k]; j++,k++) }
if(!subsir[k+1]) nr++; return sir;
return nr; }
} int main(void)
{
int main(void) char sir[256],sir1[256];
{ printf("\nDati sirul "); gets(sir);
char sir[256],sir1[256],sir2[256]; printf("\nDati subsirul care se sterge "); gets(sir1);
printf("\nDati sirul "); gets(sir); printf("Sirul ramas dupa stergere este %s",
printf("Sirul de caractere are %d caractere\n", stergere(sir,sir1));
lungime(sir)); }
printf("\nDati sirul sursa "); gets(sir1);
copiaza(sir2,sir1);
printf("\nSirul destinatie este: %s",sir2);
printf("\nDati sirul 1 "); gets(sir1);
printf("\nDati sirul 2 "); gets(sir2); Problema 3:
concatenare(sir1,sir2); r ersie
printf("\nSirul concatenat este: %s",sir1);
printf("\nDati sirul "); gets(sir); dintr- -
printf("\nDati subsirul care se cauta "); gets(sir1);
printf("Subsirul dat apare de %d ori",
cauta_sir(sir,sir1));
} IE LA CE FOLO TE
atof -
precizie
atoi -
Problema 2: întreg
atol -
- întreg de tip long
un alt strtod ntr- r real
dubl precizie
strtol - r de
tip long
No 164 No 165
#include<stdio.h> 3.2. Probleme rezolvate
#include<stdlib.h>
int main(void)
{
int numar_int; 3.2.1. Enun uri
float numar_real;
long numar;
numar_int = atoi("6789");
numar_real = atof("12.345"); transmis ca parametru.
numar = atol("1234567890L");
printf("%d %f %ld\n", numar_int, numar_real, numar);
} cu litere mici.
IE TE
itoa - ir de
caractere
ftoa -
ir de caractere
ultoa r de tip unsigned long într- Problema 1:
un ir de caractere
transmis ca parametru.
#include<stdio.h> #include<iostream.h>
#include<stdlib.h> int lungime(char s[30])
int main(void) {
{ int i;
int numar_int=6789; i=0;
float numar_real; while(s[i]!=0) i++;
long numar=1234567890L; return i;
char sir[25]; }
int main(void)
itoa(numar_int, sir, 10); {
printf(" numar = %d sir = %s\n", numar_int, sir); char s[30];
ltoa(numar, sir, 10); int l;
printf(" numar = %ld sir = %s\n", numar, sir); cout<<"Dati sirul de caractere ";cin>>s;
} l=lungime(s);
cout<<"Numarul de caractere ale sirului este "<<l;
}
No 166 No 167
Problema 2: int main(void)
{
char s[30];
int l;
cout<<"Dati sirul de caractere ";cin>>s;
#include<iostream.h> cout<<"Prefixele sirului dat sunt : "<<endl;
void litere_mici(char s[30]) prefixe(s);
{ }
int i;
i=0;
while(s[i]!=0) Problema 4:
{
if( (s[i]>=65) && (s[i]<=90) ) s[i]=s[i]+32;
i++;
}
return;
#include<iostream.h>
}
int rima(char s[30],char t[30])
int main(void)
{
{
int i,j;
char s[30];
i=0;
int l;
while(s[i]!=0) i++;
cout<<"Dati sirul de caractere ";cin>>s;
j=0;
litere_mici(s);
while(t[j]!=0) j++;
cout<<"Sirul transformat in litere mici este "<<s;
if( (s[i]==t[j]) && (s[i-1]==t[j-1]) ) return 1;
}
else return 0;
}
int main(void)
{
Problema 3: char s[30],t[30];
int l;
cout<<"Dati primul sir de caractere ";cin>>s;
cout<<"Dati al doilea sir de caractere ";cin>>t;
toate caracterele, citite de if( rima(s,t)==1 ) cout<<s<<" rimeaza cu "<<t;
else cout<<s<<" NU rimeaza cu "<<t;
}
#include<iostream.h>
void prefixe(char s[30])
{
int i,j;
i=0;
while(s[i]!=0) Problema 5:
{
for(j=0;j<=i;j++) cout<<s[j];
cout<<endl;
i++;
}
return;
}
No 168 No 169
#include<iostream.h>
int main(void) 3.3. Probleme propuse spre rezolvare
{
char s[50];
int voc=0,cons=0,i;
cout<<"Dati sirul de caractere ";cin>>s;
i=0; 1. S it de la
while(s[i]!=0)
{
switch (s[i]){
case 'a':
Exemplu :
case 'e':
case 'i':
case 'o':
Sufixele sunt
case 'u':
case 'A':
case 'E':
case 'I':
case 'O': 2. litere :
case 'U': {voc++;break;}
default : cons++;
} cu litere mici.
i++;
}
cout<<"Numarul de vocale ale sirului este Exemplu :
"<<voc<<endl;
Si respectiv
cout<<"Numarul de consoane ale sirului este
"<<cons<<endl; b)
}
3.
caractere speciale)
4.
majuscule.
Exemplu : n textul "Acesta este un exemplu destul de banal" litera 'a' apare
de 4 ori.
No 170 No 171
5. Exemplu : -a nascut la Bucuresti in 1874 pe 4 mai. A trait mai bine
Exemplu : ar A = ( 10.
nd s-
6. -un text.
11. rime
Exemplu :
7. Exemplu : e.
. ; ,
12.
Exemplu :
Exemplu : Pentru fraza "Acesta este un exemplu simplu, dar bun, de fraza ."
8.
-a
13.
Exemplu : separa
Elevul iese la tabla formate din k caractere .
El raspunde la intrebarile profesorului
Daca raspunde corect ia nota mare Exemplu :
- .
9. 14. -
caracterelor-
Exemplu :
No 172 No 173
15. Exemplu:
, una sub alta, toate perechile de vocale situate pe pozi ii consecutive ordine, cuvintele: TUDENT, SUDENT, STDENT, STUENT, STUDNT,
STUDET, STUDEN.
Exemplu : 20.
ca am cumparat- .
Exemplu :
16.
21.
s e
, . ;
pot fi convertite.
Exemplu : si mi-a dat o
Exemplu :
era eleva. El era student si mi- merelor
17.
- 22.
-
ir.
Exemplu: Exemplu :
18.
3 cuvinte de lungime 4
4 cuvinte de lungime 5
Exemplu : 2 cuvinte de lungime 6
No 174 No 175
27.
Exemplu : NFOINFO'.
Exemplu :
28.
Exemplu :
Exemplu :
insistat sa- 29.
epaorpa perfect asa ca ma insistat sa- par doar
-
25. -un text dat care sunt mai lungi considera distincte de majuscule. Nu se vor folosi alte tipuri structurate de
ul dat cuvintele sunt date.
Exemplu :
Exemplu : afi
a
valoarea 3. 30.
\ \ \ \
26.
31.
Exemplu : !!! Nota 1
alfabetului.
celui final 26.
Exemplu :
permutarea literelor.
No 176 No 177
32. Se c 3.4.
sau a
Exemplu :
,
rei ori fiecare.
33.
de tipuri de date co
mai multor date, de diverse tipuri care pot fi prelucrate fie individual, fie ca o
-
toate,
struct.
O -un
Exemplu :
34.
3.4.1. Definirea structurilor
Exemplu : 2=22676644).
{
elementele structurii
};
complex:
Exemplu:
struct complex
{
double real;
double imaginar;
};
No 178 No 179
3.4.2. 3.4.4. Tablouri de structuri
sau
Expresie Efect
membru al structurii se face astfel: (++p)->m
++p->m
Exemplu: (p->m)++ increment -
[Link]=0.1 element al structurii ++(p->m) ->m) înainte de acces
[Link]=0
structurii
No 180 No 181
3.4.6. Tipuri definite de utilizator
union nume_uniune
{
programelor.
elementele uniunii
};
Exemplu: 1.
typedef struct complex
{
double real, imaginar;
}COMPLEX; calculul modulului unu
sau
typedef struct
{ 2.
double real, imaginar;
}COMPLEX;
:
dimensional sau bidimensional) este transmis
-
3.4.7. Uniuni
masivul respectiv.
No 182 No 183
: Spre deosebire de probl
complex inmultire(complex a,complex b);
complex conjugat(complex a);
double modul(complex a);
int optiune; // variabila folosita pentru a alege varianta
dorita
double w;
4. union
char raspuns; // variabila folosita pentru continuarea
de alegere a unei figure geometrice dorite introducerii
// datelor de intrare
-i calculeze aria.
clrscr();
do{
cout<<" Introduceti partea reala a numarului X : "
;cin>>[Link];
3.5.2. Solu ii propuse cout<<" Introduceti partea inaginara a numarului X :
";cin>>[Link];
cout<<" Introduceti partea reala a numarului Y :
Problema 1: ";cin>>[Link];
cout<<" Introduceti partea imaginara a numarului Y :
";cin>>[Link];
a unui nu cout<<" \n Doriti sa continuati ( D / N ) : "<<endl;
raspuns=getch();
}while(raspuns=='d' || raspuns=='D');
clrscr();
while(1)
{
#include <iostream.h> cout<<" Operatia :"<<endl;
#include <conio.h> cout<<" 1 : Adunarea a doua numere complexe\n";
#include <stdlib.h> cout<<" 2 : Scaderea a doua numere complexe \n";
#include <math.h> cout<<" 3 : Inmultirea a doua numere complexe \n";
#include <dos.h> cout<<" 4 : Conjugatul unui numar complex\n";
cout<<" 5 : Modulul unui numar complex\n";
typedef struct cout<<" 6,7,8,... : EXIT\n";
{ cin>>optiune;
double re; // re = partea reala a numarului switch (optiune) {
double im; // im = partea imaginara a numarului case 1 :
} complex; z=adunare(x,y);
cout<<"Adunare z = " <<[Link] <<" + "<< [Link]<<
int main(void) "*i\n";
{ delay(5000); // intarzie afisarea pe ecran a datelor
complex x,y,z; // x,y,z sunt de tip COMPLEX clrscr();
complex adunare(complex a,complex b); // tipul returnat de break;
functii case 2 :
complex scadere(complex a,complex b); // este tot COMPLEX z=scadere(x,y);
cout<<"Scadere z = " <<[Link]<< " + "<<[Link]<<"
*i\n";
delay(5000);
clrscr();
break;
No 184 No 185
case 3 :
z=inmultire(x,y); complex conjugat(complex a)
cout<<"Inmultirea lui x cu y este z = "<<[Link]<<" {
+ "<<[Link]<<" *i"<<endl;; complex rezultat;
delay(5000); [Link]=[Link];
clrscr(); [Link]=-[Link];
break; return rezultat;
case 4 : }
z=conjugat(x);
cout<<"Conjugatul lui x este z = "<<[Link]<<" double modul(complex a)
+"<<[Link]<<"*i"<<endl; {
delay(5000); double rez;
clrscr(); rez=sqrt([Link]*[Link]+[Link]*[Link]);
break; return rez;
case 5 : }
w=modul(x);
cout<<"Modulul lui x este w = "<<w<<endl;
delay(5000);
clrscr();
break; Problema 2:
default : exit(0);
}
}
getch();
}
calculelor.
complex adunare(complex a,complex b) :
{
complex rezultat; dimensional sau bidimensional) este transmis
[Link]=[Link]+[Link]; -
[Link]=[Link]+[Link];
return rezultat;
} masivul respectiv.
complex scadere(complex a,complex b)
{ #include<iostream.h>
complex rezultat; #include<conio.h>
[Link]=[Link]; struct matrice{
[Link]=[Link]; int a[3][3];
return rezultat; };
} void calculmat(struct matrice mat);
void printmat(struct matrice mat);
complex inmultire(complex a,complex b) int main()
{ {
complex rezultat; struct matrice mat={1,2,3,4,5,6,7,8,9};
[Link]=[Link]*[Link]*[Link]; clrscr();
[Link]=[Link]*[Link]*[Link]; cout<<endl<<" Matricea inainte de calcule : "<<endl;
return rezultat; printmat(mat);
} calculmat(mat);
No 186 No 187
int main()
{
cout<<endl<<"Matricea dupa revenirea din subprogram: struct matrice mat={1,2,3,4,5,6,7,8,9},*pmat;
\n"; clrscr();
printmat(mat); pmat=&mat;
getch(); cout<<"\n Matricea inainte de calcule : ";
} printmat(mat);
void calculmat(struct matrice mat) calculmat(pmat);
{ cout<<"\n Matricea dupa revenirea din subprogram : ";
int i,j; printmat(mat);
for(i=0;i<3;i++) getch();
for(j=0;j<3;j++) mat.a[i][j]*=mat.a[i][j]; }
cout<<"\nMatricea afisata in functia de calcul : \n"; void calculmat(struct matrice *pmat)
printmat(mat); {
} int i,j;
void printmat(struct matrice mat) for(i=0;i<3;i++)
{ for(j=0;j<3;j++) pmat->a[i][j]*=pmat->a[i][j];
int i,j; cout<<"\n Matricea afisata in functia de calcul : ";
for(i=0;i<3;i++) printmat(*pmat);
{ }
cout<<endl; void printmat(struct matrice mat)
for(j=0;j<3;j++) cout<<mat.a[i][j]<<" "; {
} int i,j;
} for(i=0;i<3;i++)
{
cout<<endl;
for(j=0;j<3;j++) cout<<mat.a[i][j]<<" ";
Problema 3: }
}
: Problema 4:
union
-i calculeze aria.
#include<iostream.h> #include<iostream.h>
#include<conio.h> #include<stdlib.h>
struct matrice{ #include<conio.h>
int a[3][3]; #define cerc 0
}; #define patrat 1
void calculmat(struct matrice *pmat); #define dreptunghi 2
void printmat(struct matrice mat); #define pi 3.14159265358979
No 188 No 189
typedef struct { int main(void)
int tip; {
union { char lit[2];
int raza; FIG f;
int lp; float a;
int ld[2]; clrscr();
} fig; cout<<"Tastati una din literele: C P sau D"<<endl;
} FIG; cout<<"C - pentru CERC"<<endl;
cout<<"P - pentru PATRAT"<<endl;
double aria (FIG *p) cout<<"D - pentru DREPTUNGHI"<<endl;
{ cin>>lit;
switch(p->tip) { switch(lit[0])
case cerc: return pi*p->[Link]*p->[Link]; {
case patrat: return p->[Link]*p->[Link]; case 'c':[Link]=cerc;break;
case dreptunghi: return p->[Link][0]*p->[Link][1]; case 'd':[Link]=dreptunghi;break;
default: return 0; case 'p':[Link]=patrat;break;
} default:cout<<"Nu s-a tastat unul din caracterele
} c, p sau d"<<endl;
};
int citfig(FIG *p) citfig(&f);
{ a=aria(&f);
char t[255]; cout<<"Aria este: "<<a;
switch(p->tip) getch();
{ }
case cerc: { cout<<"Dati raza: ";
cin>>p->[Link];
return 1;
};
case patrat:
{ cout<<"Dati latura: ";
cin>>p->[Link];
return 1;
};
case dreptunghi:
{ cout<<"Dati laturile: "; 3.6. Probleme propuse spre rezolvare
cin>>p->[Link][0];
cin>>p->[Link][1];
return 1;
};
default: return 0;
} 1. Tocmai s- egeri ale
}
primarului din ora ul du a voturilor primite
de cei pat
No 190 No 191
2. Exemplu : P
CNTV, 8), (Iliescu, CNET, 9), (Lazaroiu, CNTA, 10), elevii cu cea mai mare
caractere), urmat
7. -
e un
selecteaz
3.
Exemplu : 8.
01.06.2002 atunci persoana are 21 de ani. -
4.
5.
9.
Exemplu : -i, 7-2i, 1-
1.7320, 3.1622, 3.6055,7.2801. dore
10.
1, nota2, ...,
notam
No 192 No 193
este sub 5.00. Exemplu :
(-
11. a) (12,2), (9,5), (7,7), (6,22), (4,4), (3,8), (2,1), (2,6), (1,5), (-1,4);
1, nota2, b) (12,2), (-1,4), (9,5), (6,22), (4,4), (1,5), (2,1), (2,6), (7,7), (3,8);
..., notan c) s=45, p=5913600.
Exemplu :
descompunere. (4,4), (-1,4), (3,8), (6,22), iar x0=2, y0
(2,1), (4,4), (-
Exemplu : nu face parte din interiorul acestuia).
exponentul. 16.
telor aflate pe una din axele
13. Ox sau Oy.
axe.
17.
14. articole de tipul:
struct { int x,y; }
18.
No 194 No 195
22.
19. -o magazie: fiind numere naturale. Se ce
a) elevi
b) denumirea materialului
c) se citesc de la
d) stoc normal
e)
f) 23.
alelor cu a) data;
- b) numele meteorologului de serviciu;
c)
20. d)
n perioada
-
meteorologilor de serviciu din zilele respective.
a) marca
b) 24. -un depozit, sunt necesare
c)
d) sex a) reg);
e) salariu b)
c)
-un vector de articole.
codului.
21.
le-
No 196 No 197
25. S se cons 3.7.
a)
3.7.1.
b) anumite date
c)
a) char c[4]="abcde"; b) char c[5]="abcde" ;
c) char c[6]="abcda"; d) char c[ ]="abcde";
26.
e) Nici una din variantele anterioare.
3.7.2.
char c[9]="abcde";
27.
a)
a) b)
student);
c) d)
b)
e) c [7] are valoarea 0 binar
c)
d)
e)
3.7.3.
f) me;
corect textul "C++"?
g)
a) b) c)
h) calcularea mediilor char s[4]="C++"; char s[3]="C++"; char s="C++";
i) en ilor; printf("%s", s) ; cout<<s; puts(s);
j)
k) d) e)
char s [4] ; char s [3] ;
l) eliminarea ultimului student din baza de date;
printf("%s",s="C++"); cout<<(s="C++");
28.
-
numitorul acestora.
No 198 No 199
3.7.4.
tere) a) Citir
b)
a) gets (s1, s2); b) gets (s1); gets(s2);
c) scanf("%s %s", s1, s2); d) scanf ("%s" ,&s1); scanf ("%s" ,&s2); c) i programul
e) cin >>s1 >>s2;
d) Con
3.7.5. e)
eronate ?
#include <stdio.h>
#include <string.h> 3.7.7.
int main()
{
char a[10], b[10]; int k; // (1)
scanf("%s %s",a,b); // (2) #include <iostream.h>
k=strlen (a) /2 ; // (3) #include <string.h>
a[k]='*'; // (4) int main()
printf ("%d",strlen(a)<strlen(b)); // (5) {
b=a; // (6) char s[20]="BorLanD C++ 3.1";
} int i ;
for(i=0;i<strlen(s);
a) iile de variabile din linia (1)
b) s[i]- -
cout<<s;
c) Atr }
d)
e) Atribuirea din linia (6) a) "BorLanD C++ 3.1"
b) "bORlANd C++ 3.1
3.7.6. c) "BORLAND C++ 3.1"
No 200 No 201
S1)
i=0; 3.7.11.
i++;
printf ("%c",a[i]) ; #include <iostream.h>
a) numai S1)
int main()
b) numai S2) {
S2) char s[10]="AB6X92P3M", b[10]; int i=0, k=0;
c) nici una while (s[i])
i=0;
d) ambele do { {
i++; if (i%2) b[k]=s[i];
e) i++;
} while (a [i] && !(a[i]>='A' && a[i]<='Z'));
putchar (a[i]); }
b[k]=0;
cout<<b;
}
a) BX23 b) A69PM
3.7.9. c) B d) 3
e) nimic
#include<stdio.h>
a) Popescu int main() 3.7.12. .
b) lonescu { s
char v[3][100] = {"Popescu", "lonescu",
c) Vasilescu "Vasilescu"}; ".
d) Nimic if ( v[0] < v[1] ) printf("%s",v[0]);
else printf("%s",v[1]);
e) ri } a) if (strlen(s)>=n) strncpy(s,t,n); t[n]=0;
b) if (strlen(s)>=n) strncpy(t,s,n); t[n]=0;
c) if (strlen(s)>=n) strncpy (n, s , t) ; t[n]=0;
3.7.10. d) if (n<=strlen(s)) strcpy(s,t,n);
e) if (strlen(s)>=n) strcpy(t,s,n);
#include <stdio.h>
int main() 3.7.13. char s1[15], s2[15], s3[15];
{
char s[6] [2]={ "ab", "ac", "ad", "bc" , "bd", "cd"};
printf ("%c%c",s[3] [0],s[2] [1]) ; if (strcmp(sl,s2) && strcmp(s2,s3)) cout<<1;
printf ("%s",s[3] [0]+s[2] [1]) ;
printf ("%s", s [5]) ;
} a)
b) Toate cele trei
a) Toate b) Numai prima c)
c) Numai primele d) d) rdine al
e) Nici una e) Nici una dintre variantele anterioare
No 202 No 203
3.7.14. 3.7.17.
char s[4]="123", t[4]; int x=123, y; #include <stdio.h>
Care dintre expresiile de mai jos au valoarea 0? int main ()
{
char *s="123456789", *t, *u;
a) atoi(s) !=x; b) itoa(x, t,10)==s; c) (y=atoi (s) )==x; u=&s[4], s+=3, t=&s[1];
, s==t) ;
d) x==(atoi(itoa(x,t,10))); e) !strcmp(itoa(x,t,10) ,s); }
3.7.18.
#include <stdlib.h>
main de mai jos sunt eronate?
#include <string.h>
#include <iostream.h> # include <stdio.h>
a) 0
int main () # include <string.h>
b) 6 { # include <iostream.h>
char s[12]="6789", t[12]="6", u[12]="89"; int main()
c) 89 long >>0; {
d) 689 strcat(t,u); char *s1, *s2, *s3;
if (strcmp(s,t)) x=atol(t); int x;
e) 6789 else x-atol(a); s1="test"; // (1)
if (strcmp(s,u)>0) x=atol(u); scanf ("%s",s2) ; // (2)
cout<<"\n"<<x; s3=&s1; // (3)
} cout « s1+s2; // (4)
x=strlen(*s2) ; // (5)
}
3.7.16.
a) ( c)
#include <stdio.h> e)
int main()
{
3.7.19. Fie programul:
char *s2="SIMPLU";
printf("\n%.8s%.6s",s1,s2);
} #include <iostream.h>
int main ()
a) "EXEMPLU" {
char *s, *t, *u;
b) "EXEMPLU SIMPLU"
int i,x;
c) "EXEMPLU SIMPLU SIMPLU" cin>>s;
for (x=0, i=0; s[i]; t=&s[i], u=t+1, u[0]=t[0] ? x=1 : 0, i++);
d) "EXEMPLUSIMPLU" cout<<x;
e) "SIMPLU" }
No 204 No 205
3.7.22.
a) Toate cara
#include <string.h>
b) #include <iostream.h>
c) aractere succesive identice a) -1 int main()
{
d) s b) 0 char *s[10]={"10","00","10","10","01","11"};
e) s c) 1 char *t="10"; int i=0, j=i-1;
while (s[i])
d) 3 {
if (!strcmp(s[i],t)) j=i;
3.7.20. Conside e) 4
}
cout<<j;
}
A)
B)
3.7.23.
I) char *a[2] ;
II) char (*b) [2] ; A. char *a[4][6];
B. char (*b[4]) [6] ;
C. char (*c)[4][6];
a) A) cu I) B) cu II) D. char ((*d) [4]) [6] ;
b) A) cu II B) cu I)
c) N1. Vector de 4 elemente, fiecare element este un pointe
d) B) nu are corespondent caractere.
e) N2. 6 coloane
N3.
3.7.21. N4.
P
#include <iostream.h>
a) 178 int main () a) (A,N1), (B, N2), (C, N3), (D, N4)
{
b) 1AB b) (A, N4), (B, N1), (C, N2), (D, N3)
char *s[5]={"012","345","678","9AB","CDE"};
c) 078 char *t, *u; c) (A, N4), (B, N1), (C, N3), (D, N2)
int i;
d) OAB t=&s[1][0]; d) (A, N2), (B, N3), (C, N4), (D, N1)
e) 067 cout<<(*(t+5)==s[2][1]); e)
u=&s[3];
i=0;
while (u[i]) cout<<u[i++];
}
No 206 No 207
3.7.24. 3.8.
No 208 No 209
CAPITOLUL
folosirea func
:O
Pentru a cons
1.
2.
3.
4.1.1.
No 210 No 211
Unde: tip
lista parametrii formali
ruia dintre ele, dar care au un nume (denumiri)
generice formale cu denumirile Unde tip
variabilelor
- compilatorul C ca fiind tipul int.
tip este void
i
1)
2)
astfel:
3)
4.1.2. 4) void
care
nume_functie(pa1, pa2, . . . ,pan);
4.1.3.
No 212 No 213
#include <iostream.h>
int intreg_la_cub(int);
float real_la_cub(float);
variabilelor ca parametri actuali:
int main(void) int vârsta_angajat = 34;
{ float salariu_angajat = 4500000.00;
} in
int intreg_la_cub(int valoare)
{
return (valoare*valoare*valoare);
}
float real_la_cub(float valoare)
{ parametrilor formali. iderare numai valorile pe
return (valoare*valoare*valoare);
} care le au variabilele respective
4.1.
4.1.
sa
} considerate:
Exemplu:
parametrii actuali (sau parametrii reali). As #include<stdio.h>
void var_locale(void)
{
int x = 10, y = 20, z = 30;
No 214 No 215
val
variabilele globale par convenabile la prima vedere, ele nu sunt recomandate
Exemplu:
void local(void) apelului prin valoare .
{
int x, y, z;
x = 30; aloarea
y = x + 10;
z = x + y;
}
un control asupra efectelor acestor modi
variabilel
var_globale
cea de- main
Exemplu:
#include <stdio.h>
int x = 10, y = 20, z = 30;
Exemplu:
void var_globale(void) #include <stdio.h>
{ int a = 10, b = 20, c = 30; // variabile globale
void valoarea_lui_a(void)
{
int a = 100;
}
int main(void) variabila c contine %d\
{ }
var_global(); int main(void)
{
y, z); valoarea_lui_a();
} ine %d;
variabila c contine %d\
}
var_globale main,
-
No 216 No 217
variabila a contine 100; variabila b contine 20; variabila c contine 300
variabila a contine 10; variabila b contine 20; variabila c contine 300
:
1. variabilele locale automatice
2.
3.
ogramului. 4.
zona de date :
4.1. 1. variabilele globale
2.
3. variabilele locale statice
variabile statice variabile automatice (auto). zona registers :
Variabilele automatice 1. variabilele locale automatice
- 2.
Variabilele statice
programului:
ce
zona memoriei libere (HEAP)
__________________________________
__________________________________ -a fost
______________________
elev:
No 218 No 219
void afiseaza_matricol(int numar_print)
{
static int id_elev; 1. abs():
} #include<stdio.h>
statice, astfel #include<math.h>
int main(void)
{
id_elev: \
bsoluta a lui %d este %d\
\ -10, abs(-10));
}
#include<stdio.h>
void afiseaza_matricol(int numar_print)
{
static int id_elev = 100;
\
id_elev++;
// celelalte instructiuni
} Valoar 10 este 10
int main(void)
{
afiseaza_matricol(1); 2. ceil() floor():
afiseaza_matricol(1);
afiseaza_matricol(1);
} ceil()
-
imediat u
floor()
-
Elevul cu numarul matricol 100
Elevul cu numarul matricol 101
Elevul cu numarul matricol 102 #include <stdio.h>
#include <math.h>
int main(void)
la alta. {
\
ceil(1.9));
4.1. printf( \
ceil(2.1));
\
floor(1.9));
matematice, put \
floor(2.1));
}
<math.h>, care trebuie inclus pentru compilarea programului.
Pr
No 220 No 221
\n Arccosinus\
Valoarea 1.900000 rotunjita cu functia ceil() este 2.000000 for(radian=-0.5; radian<=0.5; radian+=0.2)
\
Valoarea 2.100000 rotunjita cu functia ceil() este 3.000000
Valoarea 1.900000 rotunjita cu functia floor() este 1.000000 \n Arctangenta\
for(radian=-0.5; radian<=0.5; radian+=0.2)
Valoarea 2.100000 rotunjita cu functia floor() este 2.000000 \
}
3. nometrice
1. sinus sin()
2. cosinus cos() 4. - ex
3. sinusul hiperbolic sinh() Pentru a calcula ex exp():
4. cosinusul hiberbolic cosh()
#include <stdio.h>
5. tangenta tan() #include <math.h>
6. tanh() int main(void)
{
7. arcsinus asin() double valoare;
8. arccosinus acos() for(valoare=0.0; valoare<=1.0; valoare+=0.1)
printf("exp(%f) este %f\n", valoare, exp(valoare));
9. arctangenta atan() }
-un triunghi dreptunghic, sinusul unui unghi es
No 222 No 223
#include <stdio.h>
#include <math.h>
int main(void)
{ 10 ridicat la puterea 2 este 0.010000
double numarator=10.0, numitor=3.0; 10 ridicat la puterea 1 este 0.100000
printf("fmod(10,3) este %f\n",fmod(numarator,numitor));
} 10 idicat la puterea 0 este 1.000000
10 ridicat la puterea 1 este 10.000000
10 ridicat la puterea 2 este 100.000000
fmod(10,3)=1.000000
8. sqrt()
6. - modf(): -o valoare de tip double, putem
sqrt():
#include <stdio.h>
#include <math.h>
int main(void) #include <stdio.h>
{ #include <math.h>
double valoare=1.2345; int main(void)
double parte_intreaga, fract; {
fract=modf(valoare, &parte_intreaga); double valoare;
printf("Valoarea %f are partea intreaga egala cu %f si partea for(valoare=0.0; valoare<10.0; valoare+=0.1)
fractionara egala cu %f",valoare,parte_intreaga,fract); printf("Valoarea %f are radacina patrata %f\n", valoare,
} sqrt(valoare));
}
#include<stdio.h> stiva
#include<math.h>
int main(void)
{
int putere; l
for(putere=-2; putere <= 2; putere++)
\ adresa de revenire). Apoi,
pow(10.0, putere)); compilatorul de C plaseaz
}
No 224 No 225
respective.
printf("lucreaza . . . \n");
time(&start_time);
for(i=1; i<=1000000000L; i++)
rezultat+=i;
Variabile locale time(&stop_time);
printf("utilizare bucla %d secunde\n", stop_time - start_time);
1 printf("lucreaza . . . \n");
time(&start_time);
2 for(i=1; i<=1000000000L; i++)
rezultat = aduna(i,rezultat);
3 time(&stop_time);
printf("utilizare functie %d secunde\n", stop_time - start_time);
}
Adresa de
revenire
ele valori:
lucreaza . . . utilizare bucla 171 secunde
lucreaza . . . utilizare functie 492 secunde
#include <stdio.h>
#include <time.h> nou:
float aduna(long int x, float y) #include <stdio.h>
{ void aduna(int copie_x, int copie_y, int copie_z)
float rezultat; {
rezultat = x + y; printf("valorile originale ale functiei sunt %d %d %d\n",
return(rezultat); copie_x, copie_y, copie_z);
} copie_x+=100;
int main(void) copie_y+=100;
{ copie_z+=100;
long int i; printf("valorile finale ale functiei sunt %d %d %d\n", copie_x,
float rezultat; copie_y, copie_z);
time_t start_time, stop_time; }
No 226 No 227
int main(void)
{
int main(void)
int x=1,y=2,z=3;
{
int x=1,y=2,z=3; modifica(&x,&y,&z);
printf("valorile finale in functia main sunt %d %d %d\n",x,y,z);
aduna(x,y,z);
}
printf("valorile finale in functia main sunt %d %d %d\n",x,y,z);
}
4.1.
cel lalt, transmis prin
valoare nu va fi modificat.
modifice valorile variabilelor transmise ca parametri. Acest lucru nu se poate #include <stdio.h>
realiza folosind apelul prin valoare void modifica_unul(int *x, int y)
{
*x+=20;
variabilelor propriu-zise. y+=100;
}
. Acest tip de apel al int main(void)
{
parametrilor unei func r. Astfel
int x = 5, y = 10;
se transmit parametri , iar la modifica_unul(&x,y);
printf("valorile finale in functia main sunt %d %d\n", x, y);
.
}
#include <stdio.h> n
void modifica(int *x, int *y, int *z)
{
printf("valorile originale ale functiei sunt %d %d Problema 1:
%d\n",*x,*y,*z);
*x+=10;
*y+=10; sunt sau nu numere prime gemene
*z+=10;
printf("valorile finale ale functiei sunt %d %d %d\n",*x,*y,*z); prime gemene
}
No 228 No 229
int main(void)
#include <stdio.h>
{
#include <math.h>
long int a,b,c,d;
int prim(long int x)
printf("Dati primul numar a= "); scanf("%ld",&a);
{
printf("Dati al doilea numar b= "); scanf("%ld",&b);
long int i,nr_prim=1;
c=cmmdc(a,b);
for(i=2;i<=x/2;i++)
d=(a*b)/c;
if(x%i==0) nr_prim=0;
printf("C.m.m.d.c. al numerelor %ld si %ld este %ld\n",a,b,c);
if(nr_prim==1) return 1;
printf("C.m.m.m.c. al numerelor %ld si %ld este %ld\n",a,b,d);
else return 0;
}
}
int main(void)
{ Problema 3:
long int a,b;
printf("Dati primul numar a= ");scanf("%ld",&a);
printf("Dati al doilea numar b= ");scanf("%ld",&b); sau nu palindrom r este palindrom
if( (prim(a) == 1) && (prim(b) == 1) && (abs(a-b) == 2) )
printf("numerele %ld si %ld sunt prime gemene\n", a, b);
else
printf("numerele %ld si %ld NU sunt prime gemene\n", a,
b); pr
}
#include <stdio.h>
int palindrom(long int x,*long int y)
Problema 2: {
long int z=x;
*y=0;
while(x!=0){ *y=*y*10+x%10; x=x/10; }
if(z==y) return 1;
algoritmul lui else return 0;
, iar pentru cea de- }
cmmmc( a, b) = ( a * b ) / cmmdc( a, b ). int main(void)
{
long int a,b;
#include <stdio.h> printf("Dati numarul a= ");scanf("%ld",&a);
#include <math.h> if(palindrom(a,b)==1)
long int cmmdc(long int x, long int y) printf("numarul %d este palindrom\n",a);
{ else
long int r; printf("numarul %d NU este palindrom\n",a);
r=x%y; }
while(r!=0) { x=y; y=r; r=x%y; }
return y;
}
Problema 4:
-un
No 230 No 231
un parametru dat prin valoare ( at
p tabl ). pune expresia (* nume_pointer).
Exemplu: char (*p)(char *, char *);
#include <stdio.h>
#include <math.h>
long int y;
int a[30],n,i; moduri:
void cifre(long int x, int *a, int *n)
{ a)
int i=0;
while(x!=0) { a[i]=x%10; i++; x=x/10; }
*n=i-1; (*nume_pointer) (lista de parametri actuali);
}
int main(void)
{ b)
printf("Dati numarul y= "); scanf("%ld",&y);
cifre(y,a,&n);
printf("Cifrele numarului sunt: ");
for(i=n;i>=0;i--) printf("%d ",a[i]); var=(*nume_pointer) (lista de parametri actuali);
}
bila var
double, care un
4.1.
<math.h>.
la
tablou[i]
*tablou[i]
(*tablou[i])(x) apelul
tip (*nume_pointer) (lista de parametri formali);
No 232 No 233
#include <stdio.h>
#include <math.h>
#include <conio.h> argv[0] nume_program
double(*tablou[])()={sin,cos,tan,exp,log,log10}; argv[1] argument_1
int main(void) argv[2] argument_2
{
int i;
double x; argv[n] argument_n
clrscr();
for(x=0;x<=1;x+=0.01)
{ PRODUS.C cu dou -al
for(i=0;i<sizeof(tablou);i++)
printf("%lf ",(*tablou[i])(x)); doilea argument.
printf("\n");
C:\Probleme\produs 25 4
}
} Ave
argv[ ] = \probleme\
No 234 No 235
4.2. Probleme rezolvate b)
produsul celorlalte elemente
c)
d)
4.2.1. Enun uri
8.
rep
1. S
a)
- cel mai mare divizor comun ( notat prin cmmdc
b)
ca parametri.
c)
- cel mai mic multiplu comun ( notat prin cmmmc
date ca parametri
ontrar.
9.
Pentru determinarea cmmdc se va folosi algoritmul lui Euclid prin
a)
b)
c) rfecte mai mici sau egale cu n.
te ca parametru.
Urma unei matrice patratice este suma elementelor aflate pe diagonala
4.2.2. Solu ii propuse
Problema 1:
1. S
prime
- cel mai mare divizor comun ( notat prin cmmdc
gemene
ca parametri.
- cel mai mic multiplu comun ( notat prin cmmmc
parametru.
date ca parametri
7. S
a) Citi
No 236 No 237
#include <iostream.h>
Pentru determinarea cmmdc se va folosi algoritmul lui Euclid prin
#include <math.h>
void ecuatie(float a, float b, float c)
{
Pentru determinarea cmmmc se va folosi rela ia dintre cmmmc i float delta,x1,x2;
cmmdc: delta=b*b-4*c;
if(delta<0) cout<<"ecuatia are solutii complexe";
cmmmc(a,b) = (a*b) / cmmdc(a,b) else
if(delta==0)
{
cout<<"ecuatia are doua radacini egale"<<endl;
#include <iostream.h> x1=x2=-b/(2*a);
int cmmdc(int a, int b) cout<<"x1= "<<x1<<endl;
{ cout<<"x2= "<<x2<<endl;
int r; }
r=a%b; else
while(r!=0) {
{ x1=(-b+sqrt(delta))/(2*a);
a=b; x2=(-b-sqrt(delta))/(2*a);
b=r; cout<<"ecuatia are urmatoarele radacini: "<<endl;
r=a%b; cout<<"x1= "<<x1<<endl;
} cout<<"x2= "<<x2<<endl;
return b; }
} return;
int cmmmc(int a, int b) }
{ int main(void)
return(a*b/cmmdc(a,b)); {
} int a1,b1,c1,a2,b2,c2;
int main(void) cout<<"Dati coeficientii primei ecuatii "<<endl;
{ cout<<"Dati coeficientul a1 "; cin>>a1;
int x,y,divizor,multiplu; cout<<"Dati coeficientul b1 "; cin>>b1;
cout<<"Dati primul numar "; cin>>x; cout<<"Dati coeficientul c1 "; cin>>c1;
cout<<"Dati al doilea numar "; cin>>y; ecuatie(a1,b1,c1);
divisor = cmmdc(x,y); cout<<endl;
cout<<"C.m.m.d.c este "<<divizor<<endl; cout<<"Dati coeficientii celei de-a doua ecuatie "<<endl;
multiplu=cmmmc(x,y); cout<<"Dati coeficientul a2 "; cin>>a2;
cout<<"C.m.m.m.c este "<<multiplu<<endl; cout<<"Dati coeficientul b2 "; cin>>b2;
} cout<<"Dati coeficientul c2 "; cin>>c2;
ecuatie(a2,b2,c2);
}
Problema 2:
al II-lea, unde
rte.
No 238 No 239
Problema 3: #include <iostream.h>
int palindrom(long int x)
{
long int z=0,y;
y=x;
Urma unei matrice patratice este suma elementelor aflate pe diagonala while(x!=0){ z=z*10+x%10; x=x/10; }
if(z==y) return 1;
else return 0;
}
#include <iostream.h>
#include <math.h> int main(void)
int urma(int a[10][10],int n) {
{ long int a,b;
int suma=0,i,j; cout<<"Dati numarul a= "; cin>>a;
for(i=1;i<=n;i++) if(palindrom(a) == 1)
for(j=1;j<=n;j++) cout<<"numarul "<<a<<" este palindrom"<<endl;
if(i==j) suma+=a[i][j]; else
return suma; cout<<"numarul "<<a<<" NU este palindrom"<<endl;
} }
int main(void)
{
int a[10][10],i,j,n,u;
cout<<"Dati numarul de linii si coloane n = "; cin>>n; Problema 5:
cout<<"Dati elementele matricei "<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) prime gemene (sunt prime
cin>>a[i][j];
cout<<"Matricea data este: "<<endl; #include <iostream.h>
for(i=1;i<=n;i++) #include <math.h>
{
for(j=1;j<=n;j++) cout<<a[i][j]<<" "; int prim(long int x)
cout<<endl; {
} long int i,nr_prim=1;
u=urma(a,n); for(i=2;i<=x/2;i++)
cout<<"Urma matricei este "<<u; if(x%i==0) nr_prim=0;
} if(nr_prim==1) return 1;
else return 0;
}
int main(void)
{
Problema 4:
long int a,b;
cout<<"Dati primul numar a= "; cin>>a;
cout<<"Dati al doilea numar b= "; cin>>b;
if( (prim(a) == 1) && (prim(b) == 1) && (abs(a-b) == 2) )
palindrom cout<<"numerele "<<a<<" si "<<b<<" sunt prime
gemene"<<endl;
else cout<<"numerele "<<a<<" si "<<b<<" NU sunt prime
gemene"<<endl;
}
No 240 No 241
Problema 6: void suma(int a[10][10],int *s,int *p)
{
int i,j;
dat ca parametru. *s=0;*p=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
#include <iostream.h> if(i==j) *s=*s+a[i][j];
long int n; else *p=*p * a[i][j];
void cifre(long int n) return;
{ }
int s=0;
while(n!=0) { s+=n%10; n=n/10; } void afisare(int s, int p)
cout<<"Suma cifrelor este "<<s<<endl;; {
return; cout<<"suma elementelor de pe diagonala principala este
} "<<s<<endl;
cout<<"produsul elementelor este "<<p<<endl;
int main(void) return;
{ }
cout<<"Dati numarul n= ";cin>>n;
cifre(n); void afisare_matrice(int a[10][10],int n)
} {
int i,j;
cout<<"matricea este "<<endl;
Problema 7: for(i=1;i<=n;i++)
S {
for(j=1;j<=n;j++) cout<<a[i][j]<<" ";
a) Citirea unei mat cout<<endl;
}
b)
return;
produsul celorlalte elemente }
c)
int main(void)
d) {
cout<<"Dati numarul linii si de coloane n = ";
cin>>n;
citire(a,n);
#include <iostream.h> afisare_matrice(a,n);
int a[10][10],n,m,s,p; suma(a,&s,&p);
void citire(int a[10][10],int n) afisare(s,p);
{ }
int i,j;
cout<<"dati elem. matricii \n";
for(i=1; i<=n; i++)
for(j=1;j<=n;j++) Problema 8:
cin>>a[i][j];
return;
}
a)
b)
No 242 No 243
c) Problema 9:
No 244 No 245
Problema 10: int main(void)
{
cout<<"Dati n = "; cin>>n;
numere_prime(n);
cout<<endl;
a) numerele prime mai mici sau egale cu n numere_perfecte(n);
b) cout<<endl;
numere_patrate_perfecte(n);
c) }
#include <iostream.h>
#include <math.h>
int n;
void numere_prime(int n)
{
int i,j,prim;
cout<<"Numerele prime mai mici sau egale decat
"<<n<<" sunt "<<endl;
for(i=2;i<=n;i++)
{
prim=1;
for(j=2;j<=i/2;j++)
if(i%j==0) prim=0;
if(prim==1) cout<<i<<" ";
}
return;
}
void numere_perfecte(int n)
{
int i, j, suma;
cout<<"Numerele perfecte mai mici sau egale decat "<<n<<"
sunt "<<endl;
for(i=6;i<=n;i++)
{
suma=0;
for(j=1;j<=i/2;j++)
if(i%j==0) suma=suma+j;
if(suma==i) cout<<i<<" ";
}
return;
}
void numere_patrate_perfecte(int n)
{ int i, j;
cout<<"Numerele patrate perfecte mai mici sau egale decat
"<<n<<" sunt "<<endl;
for(i=1; i<=n; i++)
if(sqrt(i) == floor(sqrt(i)) ) cout<<i<<" ";
return;
}
No 246 No 247
4.3. Probleme propuse spre rezolvare Exemplu:
1.
7.
consoane dintr-
void
2.
cerute.
e la
8.
ntr-
9.
Exemplu :
caracterul punct.
10.
4.
11.
Exemplu: ile
ca -
12.
5.
-un
6. aspect de munte
No 248 No 249
14.
-
x
mare cantita x.
15.
notate a b a u prefixul lui b. 22.
16. - plu, de la
-
18. -
caractere notat
24.
20.
struct lista
int nr; - pentru un cerc: raza;
float nota; ; -
No 250 No 251
imaginare. De 33.
numere.
26. 34.
ru a calcula valoarea expresiei (a+b)4, unde a cele n
b
27. -un
tablou de numere. 35. -
n
28. ntru
a b p, respectiv q elemente
- a
29.
36. - a, cu l c
dreapta fiecare linie i cu i
30. cifra(n,m) care are ca rezultat valoarea celei de-a m-
n
exemplu: cifra(7283, 3) are valoarea 2. 37. -se doi vectori x y p, respectiv q componente rea
31. n
c. vector b n componente.
39.
(2k+1)2k+3 + (2k+3)2k+1 k
No 252 No 253
Exemplu: 16561 este palindrom.
parametri.
44. -
40. 45.
ca parametru.
Exemplu: .
Exemplu:
40,42,45,48,50.
47. Se cite
42.
Exemplu:
23, 25, 27, 29. Exemplu: Pentru matricea
43.
48.
a) un parametru de tip int a) suma componentelor din vectorul x
b) un parametru de tip b) num pare din x
c) elementul maxim din vector
No 254 No 255
Exemplu:
Exemplu: Pentru x= {2,9,15, 6,3,12 ,66,8,5} => a) 126; b) 4; c) 66. A U B={1,5,2,9,12,3,4,6,33,99,64}.
49. 53.
1, p2, ..., pm e ale celor
50.
numere prime 54.
X
a) C = A B sau egale c
b) C = A U B n+2n+...+nn, pentru n num t de la
c) C = A - B
Exemplu: a) x=15 => 8;
b) a=3, b=9 => 3;
-un vector sau nu. c) a=11 => 4;
d) a=123, b=547 => 7;
Exemplu: e) n=11 => 6.
B={5,3,4,6,33,99,12,64} atunci:
a) C={5,12}; 55.
b) C={1,5,2,9,12,3,4,6,33,99,64}; 2, A3, ..., An.
c) C={1,2,9}.
56. Pentru codificar
52. tablouri bidimensionale 5x5, generate prin program.
se determine reuniunea celor doi vectori folosind:
No 256 No 257
nspuse a matricei A,
tabel se permu c
Exemplu: P
-
11, a12,...,
a1n, a21,..., a2n,..., ann
58.
cu p elemente nenule. Matricea est
No 258 No 259
4.4. Teste gril 4.4.4.
4.4.1.
c) Variabilele de tip tablou nu se pot transmite ca p
d)
v[0] ,v[1],...,v[n-
e)
a) void calcul (int v[n], 25) b) void calcul (int v[25] , int n)
4.4.5. -un program sunt:
c) void calcul (int v[ ] , int n) d) void calcul (int v[ ] , n)
e) void calcul (int v, int n)
a) ariabilelor
d)
e) Nici unul dintre avantajele de mai sus
a) demo(int a, int b, int c); b) demo(int a; int b; int c);
c) demo (a, b, c); d) demo(a;b;c);
4.4.6.
e) demo (int a, b, c); #include <stdio.h>
int s, f;
int sf (int a)
4.4.3. {
f -=a ;
return (a*a) ;
}
a) 100,10,10000,10,10000,10 int main()
a) b) c) d) {
int D (int a); int D (int a) { int D (int a) ; int D (int a) b) 100, 0, 100, 0, 100, 0 f =10; s = sf (f) ;
{ D=(a+2); } D=a+2; } { return(a+2) ; } { return a+2; } c) 0, 0, 0, 0, 0, 0, -10 printf ("%6d%6d", s, f) ;
f=10; s=sf(10); s*=sf(f);
d) 100, 0, 10000, 0, 16960, 0 printf ("%6d%6d", s, f) ;
e) Nici una dintre variantele anterioare
e) 100, 0, 0, 0, 10000, -10 f=10; s=sf(f); s*=sf(10);
printf ("%6d%6d", s, f) ;
}
No 260 No 261
4.4.7. 4.4.9.
jos:
#include<stdio.h>
int x, y;
int T(int m, int n) //Programul P1 //Programul P2
{ #include <stdio.h> #include <stdio.h>
a) 43, 22, 10 m=n+x; void apel(int &m, int n) void apel (int &ia, int &n)
n+=1; { {
b) 43, 12, 10 return (n+y+m); m=m+n; m=m+n ;
c) 47, 10, 12 } n=(m-n)/2; n=(m-n)/2;
int main() } }
d) 44, 22, 11 { int main() int main()
y=10; { {
e) 44, 12, 11
x=12 ; int x,y; x=11; int x,y;
printf("%3d ",T(x,y)); y=3; x=11; y=3;
printf("%3d%3d ",x,y); do{ while ( cond )
} apel(x,y) ; {
printf("x=%d y=%d", x, y); apel(x,y);
}while ( cond ) ; printf("%3d%3d", x, y) ;
} }
#include<stdio.h>
4.4.8. Fie }
void F (.......)
programul: {
a+=2;
b--;
c=a+b;
}
int main ()
{ a) gramul P1
int x,y,z;
-un ciclu infinit
x=2;
y=4; P2
F(x,y,z);
va
printf("%3d%3d%3d",x,y,z);
}
vor produce ace
d) P1,
ordine, valorile 447? x
e) P2,
a) void F (int a, int b, int c)
b) void F (int a, int &b, int &c)
c) void F (int&a, int b, int &c)
d) void F (int &a, int b, into)
e) void F (int &a, int &b, int &c)
No 262 No 263
4.4.10. t
4.4.12.
#include <stdio.h>
a) 12 void F(int &nr, int x)
{
b) 13 do{ #include <iostream.h>
c) 14 x=x/2; void main()
nr++; {
d) 15 } while (x>0); int v[20],i,n;
e) 16 int main() ......
{ calcul (v,2.5,10);
int m,n; }
scanf ("%d", &m) ; void calcul (int v[], float x, int a)
n=0; {
F(n,m) ; ......
printf ("%d", n) ; }
}
4.4.11.
4.4.13.
c) d)
int p (int x) int p (int x)
{ {
int i , ok=1 ; int i;
for(i=2;i<x;i++) return 1; a) -3 2 7 -1 0 1
if (x%i==0) ok=0; for (i=2; i<x; i++) b) 0 0 0 -1 0 1
return ok; if (x%i==0) return 0 ;
} } c) -3 2 7 0 0 0
d) -1 0 1 -3 2 7
e)
e) 0 0 0 -3 2 7
No 264 No 265
#include <iostream.h>
int u[5], v[5], w[5], t[5], i; 4.4.15.
void calcul (int *w, int *t)
{ int f(int x, int y=5)
for(i=0;i<3;i++) {
{ static int m=3;
w[i] = 0; m+=x;
t[i] = v[i] - u[i]; return m>=y ? m : -1;
} }
} int main()
int main () {
{ int a,b,c;
for (i=0 ; i<3 ; i++) a = f(4);
{ b = f(1,7);
u[i] = 2*i-1; c = f();
v[i] = 3*i-2; }
w[i] = u[i] + v[i];
t[i] = 0;
} Care dintre cele
calcul (w, t) ;
for(i=0;i<3;i++) cout<<" "<<w[i] ;
for(i=0;i<3;i++) cout<<" "<<t[i] ; a)
}
fi a=7, b=8
b)
4.4.14. fi a=7, b=-1
c) Numai al doi
#include <iostream.h> d) -
int f(int a=5, int b=2)
{ 1
a) 7
return --a + 2*b++; e) Toate cele trei apeluri sunt corecte
b) 8 }
int main()
c) 9 { 4.4.16.
d) 10 cout<<f();
} int * F (int *a, int *b, int c)
e) 11
{
d=(*a+*b+c)/3;
return &d ;
}
No 266 No 267
c) le nu este
a) b)
scanf("%d %d %d",x,y,&z); cin>>*x>>*y>>z;
d)
printf("\n%d",*F(x,y,z)); cout<<*F(x,y,z);
e)
c) d)
*m = *F(x,y,z); n=*F(x,y,z); 4.4.18. Care
cout<<*m; cout<<n;
#include <iostream.h>
a) n va avea valoarea -3 int *intreg (float *p)
e)
cout<<*F(2,3,4); b) n va avea valoarea -4 {
return (int *)p;
c) }
de la a) sau b) int main()
{
d) n va avea valoarea -3.56 int n;
4.4.17. e) Pro float x=-3.56;
n=x;
void afis1(int v[]) n=*intreg(&x) ;
{ }
int i=0 ;
while (i<4)
cout<<v[i++]<<" ";
}
4.4.19.
#include <iostream.h>
int q;
int *A(int *m, int *n)
1 a) programul este eronat {
b) *n=*m+1;
*m=*n+1 ;
void afis2(int v[4]) void afis3(int v[4]) q=*m-1 ;
{ { d) 5 return &q;
int i=0; int i,*x[4]; }
do for (i=0;i<4;i++) void B(int *p)
cout<<*(v+i++)<<" "; { {
while (i<4); x[i]=&v[i]; int y=4 ;
} cout<<*x[i]<<" "; y=*A(&y,p) ;
} int main()
} {
int y=9,x;
a) Ambele func B(&x) ;
cout<<x<<" "<<y;
b) }
No 268 No 269
4.4.20.
void f1 (int (*p) [8]); 4.4.22. Fie programul:
void f2 (int p [4] [8]);
#include<iostream.h>
int plus (int x)
int main () {
{ return x++;
int m[4] [8] , (*q) [8],*r[8]; }
f1(m); f2(m); int minus (int x)
f1(q); f2 (q); {
f1(r); f2 (r); return --x;
} }
void test (int p, int q,int (*F1) (int) ,int (*F2) (int))
a) Numai primele patru apeluri sunt corecte {
if (p && q) cout<<F1(p);
b) Numai pr else cout<<F2(q) ;
c) Numai pr int main()
{
d) Toate apelurile sunt g int a=2, b=5;
e) Toate apelurile sunt corecte test (a, b, plus, minus);
test (3, 0, plus, minus);
test (a, b, plus (a) , minus (b) );
4.4.21. test (3, 0, plus (3) , minus (0) );
}
int *(*f) (int *);
a)
b) test realizate din main ?
c) Pointer a) ,
d) Pointer pointer respectiv, -1,
pointer b) ,
e) b), c) d) respectiv, -1,
c) Ul
respectiv, -1, iar primel
d)
respectiv, -1
e) Toate cele patru apeluri sunt eronate
No 270 No 271
4.4.23.
4.4.25.
#include <iostream. h>
a) 21 int f (int n, . . .) #include <stdio.h>
b) 39 { char &f(char *p,int n)
int *a=&n+1, *b=a+2; a) Programul nu va af {
c) 18 return n*(*a+*b); return *(p+n);
d) 30 } }
int main() b) "aac" int main()
{ {
cout<<f(3, 2, 11, 5, 8); c) "abc"
char *s="abc"; f(s,1)='a';
} d) "aba" printf("%s",s);
}
e) "aabc"
4.4.24. XXX
4.4.26.
argumente, precizat la apel prin valoarea lui n?
valoarea lui n?
#include <stdio.h>
double f(int n,...) #include <stdio.h>
{ int *f (int &n)
double min=*(double *)(&n+1); {
for(int i=1;i<n;i++) a) Ambele return &n;
if (XXX<min) min=XXX; }
return min; b) Nici una
int main()
} c) I {
int main() int n=7;
{ d) II f(n) =2; // (I)
int n=3; e) *f(n)=3; // (II)
float a=2,b=8,c=-1; }
printf("%f",f(n,a,b,c));
printf("%f",f(n,2.0,8.0,-1.0));
printf("%f", f (3,2.0,8.0,-1.0));
}
4.4.27.
false.
a) *(double *) (&n+1+i)
b) *((double *)(&n+1)+i)
c) * (double *)(&n+(1+i))
d) * (double *) (& (n+1)+i)
e)
No 272 No 273
int &f1(int &x)
{
return x=1;
} a)
int *f2 (int *p)
{ b)
int a=2; c) Al doilea program este core
f1(a);
*p=3; d) Am
return p; e) Ambele programe sunt corecte, dar
}
int main()
{
int b=4;
f1(b); 4.4.29.
f1(b)=5; programului:
f2(&ib);
*f2(&b)=6; int f (char a[2])
} {
int i=0;
while (a[i++]>; return i;
valoarea variabilei b va fi 4 }
int main()
b) (b) =5, valoarea variabilei b va fi 5 {
c) , valoarea variabilei b va fi 3 int n=f("abcdefgh");
}
, valoarea variabilei b va fi 6
e) n a) 0
meca b) 2
c) 9
d) Corpul fun
4.4.28. e)
// (I) // (II)
char &f (char &a) char &f(char &a)
{ {
if (a>96) return a=a-32; if (a>96) return a-32;
else return a=a+32; else return a+32;
} }
int main() int main()
{ {
char x=' x';
f(x)=x; f(x)=x;
} }
No 274 No 275
4.5. CAPITOLUL
4.5.1.
4.5.2. c)
4.5.3.
4.5.4.
4.5.5.
4.5.6. e)
Pointeri
4.5.7. b)
4.5.8. c)
4.5.9. 5.1. Declarare
4.5.10.
4.5.11. c)
4.5.12. d)
4.5.13. b) n pointer
4.5.14. b)
4.5.15. a)
4.5.16. e)
4.5.17. b)
4.5.18. c) Ast
4.5.19. b)
4.5.20. a) prin r
4.5.21. d) ctive.
4.5.22. a)
4.5.23. a) Declararea unei variabile de tip pointer se face astfel:
4.5.24. b)
tip *nume_pointer;
4.5.25. b)
4.5.26. d)
4.5.27. a) Unde:
4.5.28. b) - tip
4.5.29. c)
- nume_pointer entru a identifica
pointerul respectiv
No 276 No 277
- *
de tip registru.
void *nume_pointer;
&
nume_pointer = &variabila;
adresa
1. #include<stdio.h>
int main(void)
adresa acelei variabile. {
int indice = 1;
int *p_indice;
p_indice = &indice;
printf("Valoarea lui p_indice %x\nValoarea lui indice
%d\n Adresa lui indice este %x\n", p_indice, indice, &indice);
#include<stdio.h> }
int main(void)
{
int indice=1;
float salariu_dolari=20000.0;
long salariu_lei=30000000L; Valoarea lui p_indice fff4
printf("Adresa variabilei indice este %x\n",&indice);
printf("Adresa variabilei salariu_dolari este %x\n", Valoarea lui indice 1
&salariu_dolari); Adresa lui indice este fff4
printf("Adresa variabilei salariu_lei este
%x\n",&salariu_lei);
}
2.
No 278 No 279
tribuie pointerului adresa unei variabile de tip variabile de tip int, atu
float
#include<stdio.h>
5.3.1.
int main(void)
{
int indice = 100;
int *p_indice;
p_indice = &indice;
printf("Adresa lui p_indice %x\nValoarea la p_indice pointeri.
%d\n", p_indice, *p_indice);
*p_indice = 50;
printf("Valoarea variabilei indice este %d\n", indice); fapt adresa primului element al tabloului.
} Exemplu:
int a[20], *p; p:
p: p+1 p+i
a:
a[0] a[1]
00 a
ct ( tip_obiect *p ), atunci p+i va fi
unei variabile de tip char
-
char
Numele unei variabile de tip tablou este de fapt adresa primului
No 280 No 281
Deci, p = &a[0]; p = a; cp-cq = 1
ip-iq = 1
lp-lq = 1
p = &a[i] q = &a[j] ), at fp-fq = 1
dp-dq = 1
p == q
p != q
p<q
5.
p <= q
p>q
p >= q
2) p q
p = &a[0] p=a
p +1 &a[1]
*(p+1) a[1]
p+i &a[i]
teri. a +1 &a[1]
*(a+1) a[1]
a+i &a[i]
#include <stdio.h> *(a + i) a[i]
int main(void)
{ Deci, putem scrie:
int tab_i[]={1 ,2, 3, 4}, *ip, *iq;
a[i] *(a+i) *(i +a) i[a]
long tab_l[]={5, 6, 7}, *lp, *lq;
float tab_f[]={1.2, 3.44, 5.43, 6.890, 2.33}, *fp, *fq;
double tab_d[]={1.11, 2.222, 3.333, 4.44}, *dp, *dq;
cp=cq=s;
- -cq);
ip=iq=tab_i; Din echiva r
- -iq);
lp=lq=tab_l;
- -lq); -o expresie
fp=fq=tab_f; *(a+i) un pointer un deplasament
- -fq);
dp=dq=tab_d;
- -dq);
}
a[i] i[a].
No 282 No 283
#include<stdio.h> 5.3.3. Folosirea pointerilor de tip void*
int main(void)
{
int tablou_i[10] = {0,1,2,3,4,5,6,7,8,9}; Limbajul C++ permite folosirea pointerilor de tip void*, pe post de
int i = 7;
printf("%d\n", tablou_i[i]);
printf("%d\n", i[tablou_i]); cast.
} Adresa 0 d NULL pentru pointeri.
void*.
7
7 #include<stdio.h>
int main(void)
&* {
int a=10,b=5;
deplasament are
void *pa,*pb,*temp;
(int*)pa=&a; (int*)pb=&b;
*(int*)temp=*(int*)pa;
*& *(int*)pa=*(int*)pb;
*(int*)pb=*(int*)temp;
printf("\na = %d si b = %d\n",a,b);
}
#include<stdio.h>
int main(void)
{ a= 10 si b = 5
int tablou_i[10] = {0,1,2,3,4,5,6,7,8,9};
int *p = tablou_i;
printf("%x %x\n", tablou_i+3, &*(tablou_i+3)); 5.3.4. Expresii compacte cu pointeri
printf("%x %x\n", p+3, &*(p+3));
}
incrementare ( ++ ) decrementare ( -- ).
ffe8 ffe8
ffe8 ffe8
No 284 No 285
EXPRESIA OPERATIA CE SE
Expr
- 5.3.5. Tablouri de pointeri
asupra pointerului. Deci, nu putem uti
-i astfel:
#include <stdio.h>
int main(void)
{
Exemple:
char *tpc[10];
int a = 1, b = 2, c = 0;
int *x = &a,*y = &b; float *tpf[25]; // tablou de
printf("%d\t", ++(*x));
printf("%d\t", (*y)--);
printf("%d\n", ++c); Acest
a++; b=2; c-=(*x) + b++;
printf("%d\t", ++(*x));
printf("%d\t", (*y)--);
printf("%d\n", ++c);
x=y;
printf("%d\t", ++(*x));
printf("%d\t", (*y)--);
printf("%d\n", ++c);
printf("%d\t%d\t%d\n", a, b, c);
}
No 286 No 287
#include <stdio.h>
#include <string.h>
int main(void) ABCDE
{ C/C++
char *tp[10] = {"1234567890", "abcde", "ABCDE", "info",
"INFO", "limbaj", "Programare", "C/C++", "Pascal", INFO
"nota10"}; Pascal
int i,inv;
char *t; Programare
printf("Afisarea sirului de pointeri dat\n"); abcde
for(i=0;i<=9;i++)
if(*tp[i]!=NULL) printf("%s\n",tp[i]); info
do limbaj
{
inv=0; nota10
for(i=0;i<9;i++)
if(strcmp(tp[i],tp[i+1])>0)
{
t=tp[i];tp[i]=tp[i+1];tp[i+1]=t;
inv=1;
}
}while(inv==1);
printf("Sirul de pointeri ordonat alfabetic\n");
for(i=0;i<=9;i++)
if(*tp[i]!=NULL) printf("%s\n",tp[i]);
}
rea
No 288 No 289
5.4. Probleme rezolvate Pentru a se rul diferit de zile ale lunilor anului se va defini
un tablou de constante nd anul este
nd 29 de zile.
5.4.1. Enun uri
No 290 No 291
5.4.2. Solu ii propuse puncte. inerea celor 6 coeficien i a1, b1, c1 i a2, b2, c2, vom avea
cazurile:
r dintr-o baz n baza 10. a1*c2=a2*c1, atunci dreptele sunt confundate, altfel dreptele sunt paralele.
Functia strtol este folosita pentru a face conversia unui r dintr-o - nd dreptele sunt perpendiculare atunci conform defini iei
No 292 No 293
Problema 3: Problema 4:
un program de determinare a unei date de Se dau n numere reale ce reprezint se
pornire r de zile trecute. Pentru a se i rul diferit de determine coeficien ii acestui polinom.
zile ale lunilor anului, se va defini un tablou de constante Solu ie:
nd anul nd 29 de zile. Fie a1, a2 n r cinile reale ale polinomului P:
P = (x-a1)* (x-a2)*...* (x-an)
#include<stdio .h>
#include<conio .h> Fie polinomul P de forma:
const int t[13] ={ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
P = bn*xn + bn-1*xn-1 + . . .+ b1*x + b0
void calcul (int z, int an, int nr_zile, int *zi, in t*luna, int *a){
int i; Coeficien ii b0, b1, . . ., bn se pot calcula fie cu ajutorul rela iilor lui
for(i=1;i<=12;i++)
if ( (i==2) && (an%4==0) ) Viete nd produsul descompunerea.
if( nr_zile>29 ) nr_zile-=29; :
else break;
else Q = cm *xm +cm-1 * xm-1 + . . . + c1 *x+ c0 si R=Q*(x-am+1)
if( nr_zile>t[i]) nr_zile-=t[i]; unde R = dm+1*xm+l +dm*xm +... + d1* x + d0 vom avea rela iile:
else break;
*a=an;
do{ dm+1 = cm
if( (*an%4==0) && (i==2) ) {
z-=29-nr_zile; dk = ck-1 - ck * am+1, 1 <= k <= m
nr_zile=0; d0 = -c0 * am+1
i++;
if(zi<=0) { i--; z+=29; break; }
}
else{ #include <stdio.h>
if(i>12) { (*a)++; i++; } #include <stdlib.h>
z-=t[i]-nr_zile; nr_zile=0; i++;
if(z<=0) { i--; z+=t[i]; break; } int cit_date(float **rad)
} {
}while(z>0); *luna=i; *zi=z; int n, i;
}
int main(void)
{ *rad = malloc((n+1) * sizeof(float));
int nr_zile, zi, an, z, luna, a, i; for (i=1; i <=n ; i++)
printf("\nIntroduceti data (an luna zi) : "); {
scanf("%d%d%d", &an, &luna, &z);
for (a=0,i=2;i<luna;i++) a+=t[ i]+(an%4==0 && i==2);
if(luna<1 || luna>12 || z>t[luna] +(an%4==0 && i==2)) }
{ printf("Data gresita");return;} return n;
z+=a; }
scanf("%d",&nr_zile);
calcul(z, an, nr_zile, &zi, &luna, &a);
\t Luna: %d \
}
No 294 No 295
float* polinom(float *a, int n) d, c ial
{
float *b; c2, nlocul
int m, k; nr, nlocuiri
b = malloc((n+1) * sizeof(float));
b[1]=1;
b[0]= - a[n]; #include <stdio.h>
for( m = 2; m <= n; m++) #include <string.h>
{ #include <stdlib.h>
b[m] = b[m-1]; char *inlocuiri(char *,char *,char'*,int );
for(k=m-1; k>0; k--) int main(void)
b[k]=b[k-1] b[k] * a[m]; {
b[0] = -b[0] * a[m]; int nr;
} char sir[255], c1[200], c2[200] ;
return b; puts("Introduceti sirul:"); gets(sir);
} puts("Introduceti cuvantul care va fi inlocuit:"); gets(c1);
void afis_polinom(float *coef, int grad) puts("Introduceti cuvantul inlocuitor:"); gets(c2);
{ puts("Numarul maxim de inlocuiri:"); scanf("%d",&nr);
int i; puts("\nNoul sir:"); puts(inlocuiri(sir,c1,c2,nr));
}
for(i=grad; i>0 ; i++) char *inlocuiri(char *sir,char *c1,char *c2,int nr)
if(coef[i] != 0) {
printf( i); char *m,* p, q[100], a[100];
if(coef[0] != 0 || grad == 0) int n, poz, i=0;
m=sir;
\ do{
} p=strstr(m,c1);
int main(void) n=strlen(sir) ;
{ if (p != NULL)
float *a; {
float *b; nr--;
int n = cit_date(&a); poz=n-strlen(p);
b = polinom(a,n); for(i=0; i<poz; i++)
afis_polinom(b,n); *(q+i)=*(sir+i);
} for(i=poz; i<=n-strlen(c1); i++)
q[i]=sir[i+strlen(c1)];
for(i=0; i<poz; i++)
*(a+i)= *(q+i);
for(i=poz; i<=poz+strlen(c2);i++)
a[i]=c2[i-poz];
Problema 5: for(i=poz+strlen(c2); i<=strlen(c2)+n+1; i++)
Fiind dat un ir de caractere reprezent nd un text, se scrie un program a[i]=q[i-strlen(c2)];
\
care r de ori a apari nt cu altul. m=p+1;
ir f ile func iilor din biblioteca sir=strdup(a);
}
-un ir se va face definind func ia inlocuiri }while(p && nr);
care are parametrii: return a;
}
sir, textul ini ial
No 296 No 297
5.5. Probleme propuse spre rezolvare 7.
8.
1. (1<=n<=100)
baza b (b
11.
3. scrie un program care
unidimensional (vector) folosind ca instrument de lucru pointeri.
12. sort3
4. crie un
13. Numim linii gemene -
-
-
caractere ",", ".", "
Pentru fiecare astfel de pereche, se vor
5. l mult 20 de caractere,
6.
comune tuturor numerelor.
No 298 No 299
14. Exemplu: Pentru vectorul x= {5,9,2,8,18,3} suma ceruta este s=10.
coloanele
19.
-
a unei linii dintr- -o matrice.
scrierea
15.
mult 255 caractere, format din litere mici ale alfabetului englez. Textul x se 20.
16. 21.
prin: suma de control. Grupele
Grupa 1: 156,12,822,75
retu Grupa 2: 10081
Grupa 3: 91
18. -
22.
No 300 No 301
-un grup de 26.
-1, ... , 3, 2, 1 iar cel care are cei
-se de d ori.
Exemplu: re 12 divizori.
23. toare la un concurs de
- 27.
astfel:
A
cere -
Alegerea
mic "meniu".
28. Numerele puternice
24.
-
n fiind puternic (n<70).
Exemplu:
30. perm2
- e ord
perm2.
determinarea minimului va realiza stabilirea celui de- ui 31. -
No 302 No 303
38. -o matrice
vor fi numerotate de la 0 la 6
32.
33.
Exemplu:
Exemplu:
34. 39.
cmmdc(fn, fm) = fcmmdc(n,m)
ie cu toate elementele pozitive k s-a notat al k-
numerele mai 2=
No 304 No 305
are proprietatea 5.6.
-
5.6.1. area a doi pointeri x
Care dintre ele nu sunt corecte?
43. x[1]+2x[2]+...+2x[n]
a) typedef int* intreg; b) typedef int intreg;
intreg x,y; intreg *x,*y;
Observa ie : 100
c) int *x,*y; d) int &x,&y;
cifre.
e) typedef intreg int;
intreg *x,*y;
Exemplu:
34363937824.
5.6.2.
int a = 2, b, c = 5; int *x, *y;
44.
5.6.3.
int a, b, c; int *x, *y, *z;
mai jos. a = 3;
y = &c;
*y = a++;
a) 510 z = &a;
b) 410 x = y;
cout<<*x++;
c) 400 if (*x = *y) cout<<1;
else cout<<0;
d) 300
*z = *y;
e) 301 if (z == y) cout<<1;
else cout<<0;
No 306 No 307
#include <stdio.h>
5.6.4. #include <stdlib.h>
int main ()
{
int *a,*b;
float x;
a) x = (int)malloc(sizeof(int*)); a= (int*) malloc (sizeof (int));
b) x = (int*)malloc(sizeof(int*)); b= (int*) malloc (sizeof (int));
scanf("%d %d", &a, &b);
c) x = (int*)malloc(sizeof(int)); printf ("\n%f", x) ;
d) *x = (int*)malloc(sizeof(int)); free (a);
free (b);
e) *x = (int)malloc(sizeof(int*)); }
a) Declara
5.6.5. b) Alocarea d
int *x,*y, z; float m; c) rect
d) Atribuire
tre e)
a) b)
scanf(%d %d %d", x, y, z); scanf(%d %d %d", x, y, &z); 5.6.7.
m = (x + y + z) / 3; m=(*x + *y + z) / 3;
printf("%f", m); printf("%f", m); int **a, *b, c;
c) d)
scanf(%d %d %d",*x,*y,z); cin>>*x>>*y>>z ; a) a=&(&c) ; b) b=&(**a) ;
printf("%f",(*x+*y+z)/3); printf("%f",(*(x+y)+z)/2);
c) *a=&c; d) **a=&b;
e) *b=**a+c;
e)
cin>>*x>>*y>>z;
cout<<*x/3+*y/3+z/3; 5.6.8. Pentru s
5.6.6.
#include <iostream.h>
int main ()
{
int x,y;
x=y=0;
int &n=2 ;
for (int &i=x;i<n;i++)
cout<<y++;
}
No 308 No 309
a) ciclului nu poate fi un 5.6.12.
pointer
b) Instru int a, &b=a; b=1;
c) -o i
a) b) 0 c) 1
d) d) e) dimensiunea tipului int
e)
5.6.13. C
5.6.9. int **p; valoare:
p=&q; #include<stdio.h>
a) int main()
{
b) int a=2, *p=&a;
a) int q; b) int *q; c) int ***q; d) int &q; e) nici una. c) printf ("%d\n",*p+1) ;
printf ("%d\n",*&p+1 ;
d) nici una printf ("%d\n" , * (p+1) ) ;
5.6.10. e) programul este eronat printf ("%d\n ",*(&p+1) ;
}
a) l int main() a) 1, 2, 3
{
b) II int a=1, b=2; b) 1, 3, 2
c) ambele float x; c) 2, 3, 1
x=a / * &b; // (I)
d) nici una x= (float) a/b; // (II) d) 1,1, 1
e) pr } e)
printf
No 310 No 311
5.6.15. 5.7.
#include <iostream.h>
int main() 5.7.1.
{
const int x=2,y=3; 5.7.2. c)
*(int*) &x=8; 5.7.3. d)
*(int*) &y=9;
cout<<"\n"<<x+y; 5.7.4. c)
cout<<"\n"<<*(int*)&x+y; 5.7.5.
cout<<"\n"<<x+*(int*)Sy;
cout<<"\n"<<*(int*)&x+*(int*)&y; 5.7.6. c)
} 5.7.7.
5.7.8. d)
a) prima 5.7.9. b)
b) a doua 5.7.10. c)
c) a treia 5.7.11. a)
d) a patra 5.7.12. c)
e) nici una 5.7.13. d)
5.7.14. e)
5.7.15. c)
No 312 No 313
CAPITOLUL
6.1.
separate pri
header ) -
ormat intern, iar
6.1.
1.
2.
3.
4. consu
5.
6.
7.
8.
No 314 No 315
acces -
1. Nivelul inferior de prelucrare se face apel
operare MS-DOS
VALOARE SEMNIFICATIE
2. Nivelul superior de prelucrare O_RDONLY deschis doar pentru citire
O_WRONLY deschis doar pentru scriere
O_RDWR
O_APPEND
O_TEXT
O_BINARY
a testa
io.h fcntl.h>
int df;
a) \ O_RDONLY)) == -1)
df]. {
prin \
exit(1);
DENUMIRE SEMNIFICATIE VALOARE }
FISIER DESCRIPTOR
stdin tastatura 0
stdout monitor 1
stderr 2
stdprn 3 -
stdaux 4
b) creat, care are
open
No 316 No 317
mod respectiv: 6.1.3 ierelor la nivel superior
VALOARE SEMNIFICATIE
S_IREAD creat pentrucitire
S_IWRITE creat pentru scriere Entitatea FILE
S_EXEC
O
a) citire (read)
>0,
b) scriere (write)
-1
c) append)
d) replace/update)
a testa
df
buf.
fopen()
stdio.h
No 318 No 319
FILE. Ceea La
newline (NL CR-LF (carriage return
line feed nare
fclose() erii programului, conversie.
fclose() NULL
cauze) sau pointerul la FILE
fclose() a tuturor fluxurilor (stream
specialitate flushing
mode este w sau a (cu variantele w+ eliberarea zonei de memorie astfel rezervate.
a+ mode este r
(nu pot citi dintr-
cu mode w flushing of buffer).
t la 0 EOF (End Of File).
variantele mode existente. De exemplu: wt sau a+t sau at+
b (de exemplu rb, wb sau w+b
sau ab+). freopen()
decizia pe baza valorii variabilei globale _fmode (cu valori O_BINARY sau
O_TEXT) din headerul fcntl.h. fopen() A B, atunci prin apelul
No 320 No 321
freopen() se poate asocia fluxul B A
- freopen() binare:
- deoarece EOF este codif , iar un fi
mul
freopen() va feof() pentru
- ot
fluxurilor standard stdin EOF
(tastatura), stdout stderr ferror() pentr
getc()
Sintaxa este: fgetc().
No 322 No 323
fgets() a:
-
fread() mod text
No 324 No 325
fprintf()
Func feof()
,
.
0 zero
binar) s- -un ciclu, pe baza
printf().
No 326 No 327
Observa : Exemplul 1:
feof() este util fi Lucrul cu fi - anume deschiderea unui flux asociat unui fi -
EOF este , pe o pozi ), este studiat urmator.
caracterului de control . mod text mod binar. Con prealabil
stabilit de programator. Pentru ca opera , atributul
ferror() read-only al fi erului este setat) trebuie dezactivat. Aceasta se face
cu ajutorul comenzilor Windows , apoi
Sintaxa este: alegerea comenzii Properties, dup -bifarea op Read-only (din
zona Attributes Read-only
int ferror(FILE *flux);
de programare.
No 328 No 329
Exemplul 2: Exemplul 3:
stream este analizat urmator. Se Schimbarea asocierii unui flux existent este exemplificat
observ fclose() este prezent . Pe linia 38 tor. Unul dintre fluxurile ini e este atribuit celuilalt, dup se
fclose() efectueaz
HDD
eroare. A nchiderii explicite a unui flux: eliberarea zonei de memorie [Link] [Link] toate
No 330 No 331
// scriere in fisierul 1 Exemplul 4:
printf("\n Se scrie in fisierul [Link]... \n") ;
while((ch = getchar()) != 'q'){
fputc((int)ch, pFis1) ; u tor se studiaz comportamentul func fgetc() pentru
nrCh1++ ;
un stream creat de programator.
}
printf("\nNumarul caracterelor scrise in fisierul >> [Link] <<: EOF) tip text tip binar.
%i", nrCh1) ;
// citire din fisierul 2. Acesta este un fisier de proba existent apriori
// la locatia anuntata. Trebuie sa contina cel putin 20 caractere (!). concluziile pe car
printf("\n\n\n Se citeste din fisierul [Link] ...\n") ;
while(contor){ // lucrul cu fisierele: citirea dintr-un fisier cu ajutorul functiei fgetc()
printf("%c", fgetc(pFis2)) ; -
nrCh2++ ; // incrementare a numarului de caractere citite.
#include<stdio.h>
contor-- ; // decrementare la fiecare carcter citit.
#include<conio.h>
} #include<stdlib.h> // pentru functia exit()
printf("\nNumarul caracterelor citite din fisierul >> [Link]
<<: %i", nrCh2) ;
int main(void){
char ch, *sirEroare = "Eroare la deschidere fisier" ;
// Inchiderea fluxului 2. Schimbarea asocierii fluxului 1, cu fluxul 2.
int nrCharT = 32 , nrCharB = 32; // numarul caracterelor ce vor
fclose(pFis2) ; fi citite
pFis2 = freopen("c:\\[Link]", "at+", pFis1) ; int contorT = 0, contorB = 0 ; // contoare de citire pentru
// asociez pFis1 fisierului '[Link]'. Acesta nu mai este asociat
fiecare dintre fluxuri
// fisierului [Link] (!) FILE *pFisT, *pFisB ; // pointerii la fisier;
// scriu in fisierul 2, in mod adaugare, dupa schimbarea atribuirii.
// numele fluxurilor: text si binar
nrCh1 = 0 ; // reset pe contorul de caractere pe care l-am stabilit,
// conventional, fisieurlui '[Link]'
pFisT = fopen("c:\\[Link]", "rt") ;
printf("\n\n\n Se scrie in fisierul [Link], dupa reatriuirea // deoarece urmeaza o citire din acest fisier se presupune ca el exista
fluxurilor. \n") ; // deja pe HDD, la locatia anuntata. Altfel sunt generate erori de
while((ch = getchar()) != 'q'){ // compilator. Un caracter Enter la intrare se traduce in perechea CR-
fputc((int)ch, pFis2) ; // LF la scriere in fisier.
nrCh1++ ; pFisB = fopen("c:\\[Link]", "rb") ; // citire in mod binar
}
printf("\nNumarul caracterelor scrise in fisierul >> [Link] << if (pFisT == NULL){ // eroare la deschidere fisier?
dupa \ reatribuire: %i", nrCh1) ;
if(ferror(pFisT)) {
perror(sirEroare) ;
// inchiderea definitiva a fluxurilor
exit(1) ; // iesire din program
fclose(pFis1); fclose(pFis2); }
getch() ; }
} if (pFisT == NULL){ // eroare la deschidere fisier?
if(ferror(pFisB)) {
perror(sirEroare) ;
exit(1) ; // iesire din program
}
}
No 332 No 333
HDD se poate observa cum caracterul '\n
de text sau
// urmeaza operatiile specifice fisierelor binar.
// pentru fisierul text
printf("\nCitire din fisierul [Link] ...") ; Pentru ca opera read-only al
fi erului st cu ajutorul
while(nrCharT){
if(ferror(pFisT)) perror(sirEroare) ; comenzilor Windows: click , apoi alegerea
printf("%c", fgetc(pFisT)) ; comenzii Properties, dup -bifarea op Read-only. Apply
// citesc din fisierul [Link], prin
// intermediul fluxului asociat pointerului 'pFisier' OK (sau direct OK).
nrCharT-- ; // cat mai raman in bucla?
contorT++ ; // cate caractere am scris pana acum? // lucrul cu fisierele: scrierea intr-un fisier cu ajutorul functiei fputc()
} -
printf("\n\nNumarul caracterelor citite: %i", contorT) ; #include<stdio.h>
#include<conio.h> // pentru functia getch()
// pentru fisierul binar #include<stdlib.h> // pentru functia exit()
printf("\n\nCitire din fisierul [Link] ...") ; #include<math.h> // pentru functia pow()
No 334 No 335
// lucrul cu fisierele: citirea intr-un fisier cu ajutorul functiei fgets() -
else { // incep scrierea in fisiere text si binar
ULI i ; // variabila locala corpului de instructiuni 'else' #include<stdio.h>
ULI contor = 0 ; #include<conio.h> // pentru functia getch()
printf("\n Se scrie in fisiere...\n") ; #include<stdlib.h> // pentru functia exit()
while(*pCh++ != '\0') { typedef unsigned long int ULI; // tip de data 'intreg lung fara semn'
i = (ULI) pow(2, 25) ; // poate contine valori in gama [0 232-1]
// numar natural posibil pentru acest tip de data (ULI) int main(void)
// 2^25 = 32 Mega {
fputc(*pCh, pFisT) ; char *sirEroare = "Eroare la deschidere fisier";
fputc(*pCh, pFisB) ; char sirCititT[32], sirCititB[32]; // sirurile citite sunt copiate in
acesti vectori de caractere (text, respectiv binar)
printf(" %i", contor) ; const int nrMax = 30; // numarul maxim de caractere ce urmeaza
contor++ ; sa fie citit
for(; i>0; i--) ;// delay FILE *pFisT, *pFisB; // pointerii la fisier;
} // numele fluxurilor: text si binar
} pFisT = fopen("c:\\[Link]", "rt+") ; // citire in mod text.
// Un caracter Enter la intrare se traduce in perechea CR-LF la
// inchiderea fluxurilor // scriere in fisier
fclose(pFisT) ; pFisB = fopen("c:\\[Link]", "rb+"); // citire in mod binar
fclose(pFisB) ;
if (pFisT == NULL){ // eroare la deschidere fisier?
printf("\n\n Dati un caracter alfa-numeric... "); if(ferror(pFisT)) {
getch() ; perror(sirEroare);
} exit(1); // iesire din program
}
}
No 336 No 337
// operatia efectiva asupra fisierelor
Exemplul 7: else { // nu este eroare => incep scrierea in fisiere.
Func fgets() este fputs(). Utilizarea acesteia este ULI lenT = strlen(sirDeScrisT), lenB = strlen(sirDeScrisB) ;
// lungimile celor doua siruri de scris.
studiat u tor. Ca fgets() indicatorul de pozi fpos_t pozT, pozB ;
fi .
printf("\n Lungimile celor doua siruri ce urmeaza sa fie scrise:
Observa diferen actere \ text = %i, binar = %i", lenT, lenB) ;
No 338 No 339
// test eroare indicator fisier text: dupa scriere
if(!fgetpos(pFisT, &pozT)) // lucrul cu fisierele: scrierea intr-un fisier cu ajutorul functiei
printf("\n Indicatorul de pozitie al fisierului text (dupa): fwrite()
%u", pozT) ; // urmarirea indicatorilor de pozitie inainte si dupa scriere. -
else { binar
if(ferror(pFisT)) { #include<stdio.h>
perror(sirEroare) ; #include<conio.h> // pentru functia getch()
exit(1) ; // iesire din program #include<stdlib.h> // pentru functia exit()
} #include<string.h> // pentru functia strlen()
}
typedef unsigned long int ULI ;
// test eroare indicator fisier binar: dupa scriere
if(!fgetpos(pFisB, &pozB)) int main(void){
printf("\n Indicatorul de pozitie al fisierului binar char *sirEroare = "Eroare la operatie asupra fisier" ;
(dupa): %u", pozB) ; char *sirDeScrisT = " Un mesaj de proba, in mod text." ;
else { char *sirDeScrisB = " Un mesaj de proba, in mod binar." ;
if(ferror(pFisB)) {
perror(sirEroare) ; const int nrObiecte = 8 ; // voi scrie/citi 8 obiecte ...
exit(1) ; // iesire din program const int dimObiect = 2 ; // ... de lungime 2 octeti, fiecare.
}
} FILE *pFisT, *pFisB ; // pointerii la fisier;
} // end_else // numele fluxurilor: text si binar
No 340 No 341
// aceleasi operatii pentru fisierul binar
// operatia efectiva asupra fisierelor if((scriseB = fwrite((char*)sirDeScrisB, dimObiect, nrObiecte,
else { // nu este eroare => incep scrierea in fisiere. pFisB)) == nrObiecte)
ULI lenT = strlen(sirDeScrisT), lenB = strlen(sirDeScrisB) ; printf("\n Succes! Numarul efectiv de caractere scrise (binar):
// lungimile celor doua siruri de scris. %u", scrise B*dimObiect) ;
fpos_t pozT, pozB ;
else {
printf("\n Lungimile celor doua siruri din care urmeaza sa se if(ferror(pFisB)) {
scrie: \ text = %i, binar = %i", lenT, lenB) ; perror(sirEroare) ;
exit(1) ; // iesire din program
// test eroare indicator fisier text: inainte de scriere }
if(!fgetpos(pFisT, &pozT) ) }
printf("\n Indicatorul de pozitie al fisierului text
(inainte): %u", pozT) ; // test eroare indicator fisier text: dupa scriere
else { if(!fgetpos(pFisT, &pozT))
if(ferror(pFisT)) { printf("\n\n Indicatorul de pozitie al fisierului text
perror(sirEroare) ; (dupa): %u", pozT) ;
exit(1) ; // iesire din program else {
} if(ferror(pFisT)) {
} perror(sirEroare) ;
exit(1) ; // iesire din program
// test eroare indicator fisier binar: inainte de scriere }
if(!fgetpos(pFisB, &pozB) ) }
printf("\n Indicatorul de pozitie al fisierului binar
(inainte): %u", pozB) ; // test eroare indicator fisier binar: dupa scriere
else { if(!fgetpos(pFisB, &pozB))
if(ferror(pFisB)) { printf("\n Indicatorul de pozitie al fisierului binar
perror(sirEroare) ; (dupa): %u", pozB) ;
exit(1) ; // iesire din program else {
} if(ferror(pFisB)) {
} perror(sirEroare) ;
exit(1) ; // iesire din program
// scrierea efectiva, impreuna cu testele de eroare aferente legate de }
functia folosita. }
{ } // end_else
ULI scriseT, scriseB ;
// numarul obiectelor scrise efectiv - raportat de functia fwrite() } // end_scriereEfectiva
printf("\n\n Se scrie in fisiere...\n") ; // inchiderea fluxurilor
if((scriseT = fwrite((char*)sirDeScrisT, dimObiect, nrObiecte, fclose(pFisT) ;
pFisT)) == nrObiecte) fclose(pFisB) ;
printf("\n Succes! Numarul efectiv de caractere scrise
(text): %u", scrise T*dimObiect) ; // sfarsit
printf("\n\n Dati un caracter alfa-numeric... ");
else { getch() ;
if(ferror(pFisT)) { }
perror(sirEroare) ;
exit(1) ; // iesire din program
}
}
No 342 No 343
Exemplul 9:
// operatia efectiva asupra fisierelor
else { // nu este eroare => incep citirea din fisiere.
Complementara lui fread() este fwrite() fpos_t pozT, pozB ; // indicatorii de pozitie ai celor doua tipuri de
programul u tor. Efectele sunt acelea fisiere.
// test eroare indicator fisier text: inainte de scriere
se modific ier, iar conversiile de caractere de if(!fgetpos(pFisT, &pozT) )
de tip text. printf("\n Indicatorul de pozitie al fisierului text
(inainte): %u", pozT) ;
else {
// lucrul cu fisierele: citirea dintr-un fisier cu ajutorul functiei fread() if(ferror(pFisT)) {
// urmarirea indicatorilor de pozitie inainte si dupa scriere. - perror(sirEroare) ;
binar exit(1) ; // iesire din program
#include<stdio.h> }
#include<conio.h> // pentru functia getch() }
#include<stdlib.h> // pentru functia exit()
#include<string.h> // pentru functia strlen() // test eroare indicator fisier binar: inainte de scriere
typedef unsigned long int ULI ; if(!fgetpos(pFisB, &pozB) )
void finalSir(const char*, ULI*, const ULI) ; printf("\n Indicatorul de pozitie al fisierului binar
(inainte): %u", pozB) ;
int main(void){ else {
char *sirEroare = "Eroare la operatie asupra fisier" ; if(ferror(pFisB)) {
void *sirCititT[32], *sirCititB[32] ; perror(sirEroare) ;
// cele doua zone tampon (buffer) in care exit(1) ; // iesire din program
// se salveaza textul citit din fisiere (text respectiv binar). }
}
const int nrObiecte = 8 ; // voi citi 8 obiecte ...
const int dimObiect = 3 ; // ... de lungime 2 octeti, fiecare. // citirea efectiva, impreuna cu testele de eroare aferente legate de
FILE *pFisT, *pFisB ; // pointerii la fisier; functia folosita.
// numele fluxurilor: text si binar { // un nou corp de instructiuni
// deschiderea fluxurilor, impreuna cu testele de eroare aferente ULI cititeT, cititeB ; // numarul obiectelor citite efectiv -
pFisT = fopen("c:\\[Link]", "rt") ; raportat de functia fread()
// mod citire si actualizare, in mod text. char *pVar ;
// Un caracter Enter la intrare se traduce in perechea CR-LF la int contor ;
scriere in fisier.
pFisB = fopen("c:\\[Link]", "rb") ; printf("\n\n Se citeste din fisiere...\n") ;
// mod citire si actualizare, in mod binar.
if((cititeT = fread((char*)sirCititT, dimObiect, nrObiecte,
if (pFisT == NULL){ // eroare la deschidere fisier? pFisT)) == nrObiecte)
if(ferror(pFisT)) { {
perror(sirEroare) ; printf("\n Succes! Numarul efectiv de caractere citite
exit(1) ; // iesire din program (text): %u",
}
} cititeT*dimObiect) ;
if (pFisB == NULL){ // eroare la deschidere fisier? finalSir((const char*)sirCititT, &cititeT, dimObiect) ;
if(ferror(pFisB)) { printf("\n Ceea ce s-a citit (text): %s", (char*)sirCititT) ;
perror(sirEroare) ; }
exit(1) ; // iesire din program
}
}
No 344 No 345
else { // inchiderea fluxurilor
if(ferror(pFisT)) { fclose(pFisT) ;
perror(sirEroare) ; fclose(pFisB) ;
exit(1) ; // iesire din program
} // sfarsit
} printf("\n\n Dati un caracter alfa-numeric... ");
getch() ;
// aceleasi operatii pentru fisierul binar }
if((cititeB = fread((char*)sirCititB, dimObiect, nrObiecte,
pFisB)) == nrObiecte) // implementarea functiei declarate local (functie proprie
{ programatorului).
printf("\n\n Succes! Numarul efectiv de caractere citite // Se marcheza explicit sfarsitul sirului tampon, deoarece fread() nu
(binar): %u", citite B*dimObiect) ; face acest lucru automat.
finalSir((const char*)sirCititB, &cititeB, dimObiect) ; void finalSir( const char *sirCitit,
printf("\n Ceea ce s-a citit (binar): %s", (char*)sirCititB) ; /* text sau binar, nu conteaza din cauza apelului referinta*/
} ULI *citite,
const ULI dimObiect) {
else { char *pVar ; // pointer variabil, pentru deplasarea in interiorul
if(ferror(pFisB)) { // sirului preluat ca argument.
perror(sirEroare) ; int contor ; // variabila locala
exit(1) ; // iesire din program
} // instructiunile proprii functiei
} contor = *citite*dimObiect ;
pVar = (char*) sirCitit ;
// test eroare indicator fisier text: dupa scriere
if(!fgetpos(pFisT, &pozT)) while(contor--) pVar++ ;
printf("\n\n Indicatorul de pozitie al fisierului text // variabila contor se decrementeaza dupa ce se testeaza valoarea de
(dupa): %u", pozT) ; adevar a conditiei logice.
else { *pVar = '\0' ; // marchez explicit sfarsitul sirului
if(ferror(pFisT)) { }
perror(sirEroare) ;
exit(1) ; // iesire din program
}
}
Exemplul 10:
// test eroare indicator fisier binar: dupa scriere
if(!fgetpos(pFisB, &pozB))
Func fprintf() fscanf() u tor. Dup
printf("\n Indicatorul de pozitie al fisierului binar
(dupa): %u", pozB) ; cum se cunoa te de la func printf() scanf(), comportamentul
else {
celor dedicate fi lor lor este similar. Observa
if(ferror(pFisB)) {
perror(sirEroare) ; de pozi . fscanf()
exit(1) ; // iesire din program
ifice
}
} 3
} // end_else
2 [Link]
} // end_citireEfectiva pe prima linie valori valide.
No 346 No 347
// lucrul cu fisierele: citirea/scrierea formatate intr-un/dintr-un fisier // operatia efectiva asupra fisierelor
// cu ajutorul functiilor pereche fprintf() / fscanf(). else { // nu este eroare => incep citirea din fisiere.
// urmarirea indicatorilor de pozitie inainte si dupa scriere. - fpos_t pozT, pozB ; // indicatorii de pozitie ai celor doua tipuri de
binar fisiere.
No 348 No 349
[Link] [Link] um
citirea din acesta, fie are atributul read-only activ // pFisB = fopen("c:\\[Link]", "wb") ;
// pFisB = fopen("c:\\[Link]", "ab") ;
-se
pFisB = fopen("c:\\[Link]", "rb") ;
dimensiunea acestuia (atingerea s EOF).
No 350 No 351
// Deschidere in mod adaugare, sau scriere sau citire. Ramane sa // operatiile efective, impreuna cu testele de eroare legate de functiile
// modificati pe rand aceste moduri de deschidere si sa observati // folosite.
// efectele, vizualizand de fiecare data continutul fisierelor. {
// Stabiliti pentru fisierul de pe HDD atributul read-only pe ON. int nrObiecte = 4 ; // numarul de obiecte ce urmeaza sa fie citite
// Compilatorul va genera erori grave si se va blocha. (variabila locala)
// Dezactivati apoi atributul read-only pentru a obtine o functionare int dimObiect = 2 ; // numarul de octeti al unui obiect (variabila
// normala a programului. Sau schimbati modul de deschidere al locala)
// fisierului, astfel incat acesta sa fie compatibil cu atributul read- printf("\n\n Se citeste din fisierul text...") ;
// only. printf("\n S-au citit efectiv %u obiecte", fread(bufferText,
// Daca modul de deschidere este 'append' si se doresc operatii de dimObiect, nrObiecte, pFisT)) ;
// citire acestea nu se executa cu succes.
if(feof(pFisT)) perror(sirEroareT) ; // test de EOF.
if (pFisT == NULL){ // eroare la deschidere fisier?
if(ferror(pFisT)) { int i = 0 ;
perror(sirEroareT) ; while(i < nrObiecte*dimObiect) i++ ;
exit(1) ; // iesire din program bufferText[i] = '\0' ; // marcarea explicita a sfarsitului de sir.
}
} // puts(bufferText) ;
if (pFisB == NULL){ // eroare la deschidere fisier? printf("\n Buffer-ul contine sirul: %s", bufferText) ;
if(ferror(pFisB)) {
perror(sirEroareB) ; // operatie improprie modului de deschidere ales
exit(1) ; // iesire din program fprintf(pFisT, "\n Operatie interzisa, conform modului de
} deschidere ales") ;
} // aceasta operatie este ignorata (!)
// operatia efectiva asupra fisierelor }
else { // nu este eroare => incep operatiile pe fisiere.
fpos_t pozT, pozB ; // indicatorii de pozitie ai celor doua tipuri de
fisiere. // operatiile pentru fisierul binar
// test eroare indicator fisier text: inainte de scriere {
if(!fgetpos(pFisT, &pozT) ) int nrObiecte = 24 ; // numarul de obiecte ce urmeaza sa fie citite
printf("\n Indicatorul de pozitie al fisierului text (variabila locala)
(inainte): %u", pozT) ; int dimObiect = 4 ; // numarul de octeti al unui obiect (variabila
else { locala)
if(ferror(pFisT)) {
perror(sirEroareT) ; printf("\n\n Se citeste din fisierul binar...") ;
exit(1) ; // iesire din program
} // o citire cu un numar de caractere peste dimensiunea fisierului,
} // considerand fisierul initializat cu mai putine caractere decat
// test eroare indicator fisier binar: inainte de scriere // valoarea nrObiecte*dimObiect din acest moment.
if(!fgetpos(pFisB, &pozB) ) // O rulare multipla a programului va schimba continutul fisierului
printf("\n Indicatorul de pozitie al fisierului binar // si deci si valoarea logic a conditiei din if(feof()) de mai jos.
(inainte): %u", pozB) ; fread(bufferBin, dimObiect, nrObiecte, pFisB) ;
else { if(feof(pFisB)) perror(sirEroareB) ; // test de EOF.
if(ferror(pFisB)) { int i = 0 ;
perror(sirEroareB) ; while(i < nrObiecte*dimObiect) i++ ;
exit(1) ; // iesire din program bufferText[i] = '\0' ; // marcarea explicita a sfarsitului de sir.
}
} printf("\n Buffer-ul contine sirul: %s", bufferBin) ;
No 352 No 353
6.2. Probleme rezolvate
// o scriere fara modificarea indicatorului de pozitie, dar cu
// schimbarea fluxului asociat
fclose(pFisT) ;
pFisT = freopen("c:\\[Link]", "ab", pFisB) ;
6.2.1. Enun uri
// reatribui pFisB lui pFisT
// voi modifica acum fisierul [Link], cu ajutorul fluxului 'pFisT'
No 354 No 355
for(i=0; i<nr; i++)
if((pf1=fopen(nume1,"r")) == NULL)
{
{
printf("x[%d] = ",i+1);
printf("\n EROARE LA DESCHIDERE %s\n",nume1);
scanf("%d", &x[i]);
exit(1);
}
}
pf=fopen("[Link]","w");
printf("\n DATI NUMELE CELUI DE AL DOILEA
for(;n<nr;n++)
FISIER:\n");
{
scanf("%s", nume2);
a = x[n] + x[n+1];
if((pf2=fopen(nume2,"r")) == NULL)
fprintf(pf,"%d %4.2f %d\n", x[n], a, x[n+1]);
{
}
printf("\n EROARE LA DESCHIDERE %s\n",nume2);
fclose(pf);
exit(1);
getch();
}
}
while( !feof(pf1) && !feof(pf2) )
{
fgets(sir1,99,pf1);
fgets(sir2,99,pf2);
Problema 3:
if(strcmp(sir1,sir2)!=0)
{ scrie un p -
printf("\nprima linie diferita a celor doua fisiere este:%s\n",
sir1);
exit(1);
}
}
}
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<io.h>
Problema 2:
scrie u typedef struct inreg{
int nr;
linie, char nume[20];
char prenume[20];
char tel[7];
}elev;
#include<stdio.h> elev el;
#include<conio.h> FILE *pf;
#include<stdlib.h> unsigned int i, x, n;
#include<io.h> long int ofs;
FILE *pf;
int i, n, x[30], y[30], nr; int main()
double a, b; {
int main() clrscr();
{ pf = fopen("[Link]","w+");
clrscr(); printf("\ncate inregistrari introduceti n = ");
printf("\ndati nr. de elemente : "); scanf("%d", &nr); scanf("%d", &n);
No 356 No 357
if((f=fopen("[Link]","r"))==NULL)
for(i=0;i<n;i++) {
{ printf("\n nu se poate deschide fisierul [Link]");
printf("Numarul elevului : "); exit(1);
scanf("%d",&[Link]); }
printf("Numele elevului : "); do
scanf("%20s",&[Link]); {
printf("Prenumele elevului : "); ch=fgetc(f);
scanf("%20s",&[Link]); if(islower(ch)) p++;
printf("[Link] telefon : "); if(isupper(ch)) b++;
scanf("%7s",&[Link]); if(isdigit(ch)) d++;
fflush(stdin); if(!isprint(ch)) g++; // daca ch nu este afisabil
fwrite(&el,sizeof(elev),1,pf); }while(ch!=eof(f));
puts("\n"); fclose(f);
} printf("\n numarul de litere mici : %d", p);
// citire pozitie inregistare printf("\n numarul de litere mari : %d", b);
printf("\n ce inregistrare cautam ? "); printf("\n numarul de cifre : %d", d);
scanf("%u", &x); printf("\n numarul de caractere neafisabile : %d", g);
getch();
// deplasare }
ofs=(x-1)*sizeof(elev);
fseek(pf,ofs,0); // 0 = SEEK_SET - inceputul fisierului
Problema 4:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
int main()
{
FILE *f;
int p, b, d, g;
char ch;
clrscr();
p=b=d=g=0;
No 358 No 359
6.3. Probleme propuse spre rezolvare , punct,
-o
-
-).
1.
7.
astfel modificat.
2. :
8. Dintr- de caractere,
NUME, PRENUME, MEDIA1, MEDIA2, MEDIA3
(identificat printr-
caractere din care este compus).
3.
9. feritoare la un grup
4.
scrie un program care
magnetic, -
numere sunt prime, Numerele sunt
-
5. - :
A
AA
de nume.
AAA
........
10.
notate a, b, c, d
6. -
(a - b) U (c - d)
No 360 No 361
(a - b) - (c - d)
11.
17. Pentru f
tip real.
12. f
produsele firmei
g
13. f x
h f
pen y
14. 18.
ei
15. tregi. valoare manoper
n.
16. Se consid
enume student, media 19.
No 362 No 363
22.
va denumirea
-se apoi
-se
actualizarea stocului pentru fiecare pr
la fiecare ap
a 23.
No 364 No 365
9 32.
utul celui de-
34. 9 i
Exemplu: :
triunghiului folosind formul 0 1 4 9 16 25 36 49 64
35.
(
29. linie un caracter A
var pe linia a t lin ie a
-a
30. :
de coloane ale matricii Exemplu: :
duri, elementele unei linii a A
matrici, AA
-se matricea AAA
AAAA
36.
31. mici mult 2
BAC.
Numerele singur car
Exemplu:
No 366 No 367
Exemplu: , 40.
c
natural
37. k
fo - ori.
prin s - "NU", In caz contrar.
numere n rele de pe a doua linie sunt valori Exemplu: d
intervalul [- EXAMEN DE BACALAUREAT LA INFORMATICA
No 368 No 369
6.4.
Exemplu :
6.4.1. -un
12 18
a) Modificarea unor va
50 20
structuri de date
: 1 3
b) Testare
2 3
c)
5 2
d) Deschiderea pentru citire
7 2
e)
6.4.2.
y, ale
a) fprintf(f,"%d\n%d", x, y);
b) fprintf("%d\n%d", x, y, f);
c) fprintf(f,"\n%d%d\n", x, y);
d) fprintf ("\n%d%d\n", x, y, f);
e) fprintf("\n%d%d\n", x, y, *f);
6.4.3. f cu ur
50 2
1.4 3
8
No 370 No 371
#include <stdio.h>
int main()
{
FILE *f; ?
4 6 3 2 6 15 1
int a, b;
float x, y;
f=fopen("[Link]","r"); a) nici unul b) unul c) d) trei e) patru
fscanf(f,"%d %f\n", &a, &x);
fscanf(f,"%f\n", &y);
fscanf(f,"%d", &b); 6.4.5.
printf("\na=%d x=%f y=%f b=%d", a, x, y, b);
fclose(f);
} #include <stdio.h>
int main ()
{
a) a=50 x=2.000000 y=1.400000 b=8
int v[9]={0,l,0,0,2,3,0,4,5},i;
b) a=50 x=2.000000 y=1.400000 b=3 FILE *f;
f=fopen("[Link]","w");
c) a=50.000000 x=2.000000 y=1.4 b=3.000000
i=0;
d) a=50.000000 x=2.000000 y=1.4 b=8.000000 while (i<9)
{
e)
while (v[i])
{
i++;
6.4.4. }
fprintf (f,"%3d", 99) ;
# include <stdio.h> i++;
int main() }
{ f close (f) ;
FILE *f, *g; }
int a, x, S;
f = fopen ("[Link]", "r");
g = fopen ("[Link]", "w"); a) 4 b) 5 c) 8 d) 9 e)10
scanf ("%d", &a);
while (!feof(f))
{ 6.4.6. pe hard-
S=0;
while ( S < a && !feof(f))
{ AbCdEfGhI
fscanf (f ,"%d", &x); j
S+=x;
}
fprintf (g,"%d ",S); 66, etc.), iar literele mici au coduri
}
fclose (f);
fclose (g);
printf ("\nS=%d", S);
}
No 372 No 373
#include <stdio.h>
int main () 6.4.8.
{
char c1,c2;
FILE *f,*g;
a) bdfhj f=fopen("[Link]","r");
g=fopen("[Link]","w"); #include <stdio.h>
b) BDFHJ c1=96; int main()
c) acegi while (!feof(f)) {
{ FILE *f , *g;
d) ACEGI c2=fgetc(f); char s [101];
printf("%c",c2); f=fopen("[Link]","a");
e) abcdefghij
if (c2>cl) fputc(c2-32,g); g=fopen("2. txt", "r");
c1=c2; while (!feof(g))
} {
fclose(f); fgets(s,100,g);
fclose(g); fputs (s, f);
} }
fclose (f);
fclose (g);
6.4.7. }
a) nl
1 3 0 0 2 -3 0 -4 -1 b)
#include <stdio.h> c)
#include <math.h> d)
int main ()
a) 1 { e) Nici unul dintre cazurile anterioare
b) 72 FILE *f;
int s=1, i=0, a[20];
c) -12 f=fopen ( "numere . txt" , "r");
d) Pro while ( ! feof (f) ) 6.4.9.
{
i++;
e) Nu se pot citi corect fscanf(f,"%d ", &a[i]);
if (a[i]) s*=abs(a[i]); 33
} 123
printf ("\n%d", s); 456
fclose (f ); 789
}
No 374 No 375
#include <stdio.h> a) fseek(f ,11,0) ;
int main ()
{ b) fseek(f ,-2,2) ;
FILE *f; c) f seek (f, 3,1) ;
int i, j ,m,n,S=0,a[20] [20] ;
d) fseek(f,2,1) ;
fscanf(f,"%d %d", &m, &n); e) fseek(f,-3,2);
for (i=0; i<m; i++)
{
for(j=0; j<n; j++) 6.4.11.
{
fscanf (f,"%d ",&a[i][j]);
if ((i+j)%2) S+=a[i][j];
} #include <stdio.h>
} #include <string.h>
fclose (f) ; int main()
printf ("%d",S) ; {
} FILE *f;
int i = 0, j, k;
char *aux;
a) 0 char *a[9]={"Marius", "Claudiu" , "3rei-Sud-Est",
"Daniel" , "Vasile" , "Dan" , "Sinacdu" , "2Pac"} ;
b) 8 while (a[i]) i++;
c) 20 for (k=j +1; k<i; k++)
if ( strcmp(a[j],a[k]) > 0 )
d) 25 {
e) programul este eronat aux=a[j]; a[j]=a[k]; a[k]=aux;
}
k = 0;
6.4.10. f = fopen("propus . txt","w");
while (a[k])
fprintf (f,"%s\n", a[k++]);
33 1 -45 18 6
fclose(f);
}
..................
No 376 No 377
#include <stdio.h>
#include <math.h>
int main()
{ CAPITOLUL
FILE *f,*g;
int v[10];
f=fopen("[Link]", "r");
g=fopen("[Link]","w");
fread(v,8,1,f);
fwrite(v,6,1,g);
fclose(f);
fclose(g);
}
a) 11 2 13 4 15 6 b) 1 2 1 4 1 6
c) 11 2 13 d) 11 2 1
e)
iblioteca
standard a sistemului;
Unul propriu limbajului C++, orientat pe obiecte.
6.5. R spunsuri
Sistemul de I/O orientat pe obiecte al limbajului C++ trate
6.5.1. b)
6.5.2. a)
6.5.3. b)
6.5.4. e) e I/O;
6.5.5. e) conceptul de stream (stream-
6.5.6. b) orice flux
6.5.7. b) ie re), la un consumator. Sursa poate fi tastatura (intrarea standard), un
6.5.8. c)
6.5.9. c) .1).
6.5.10. a), b) si e)
6.5.11. d)
6.5.12. d)
No 378 No 379
Fluxuri din clasa Fluxuri din clasa
istream ostream ios streambuf
Memoria intern
ifstream ofstream
fstream filebuf
Figura 7.1. Stream-ul - baza sistemului de I/O
stream-urilor sunt:
azul includerea
headerului iostream.h.
Clasa ios
No 380 No 381
Clasele cu sufixul _withassign fluxurile
predefinite
a
1. cout
date de x
intrare
sir
2. cin
Figura 7.3. Rolul buffere-
4. clog: - -o
intermediar).
Exemplu
primul blank), se transfer
int main()
{
int a; double x; char sir[20];
cout<<a<<' '<<x<<endl;
cout<<sir<<endl; 1. Stream-
} 2.
No 382 No 383
3. 7.1. ui flux
zon
Clasa ios
4.
-uri.
Starea unui stream (rezultatul ultimului
sistemul de operare.
, care este
te erorilor
-
class ios{
protected:
int state; // ile indicatorilor de stare
public:
enum io_state{
goodbit=0x00, //
eofbit=0x01, // s- -
intrare (lipsa caracterelor disponibile pentru citire)
failbit=0x02, //
-
I/O p
badbit=0x04, //
-ului este posibil ca stream-
utilizat
hardbit=0x08
};
};
No 384 No 385
Exemplu:
cu ajutorul metodelor: if (!cin) //echivalent cu if (![Link]())
int good(); // stare!\n";
este 0 else cin>>a;
int eof(); //
int fail(); // Operatorul void* - -un pointer generic. Conversia
:
int bad(); // Fun operator void *();
failbit. Exemplu: cin>>s;
stream-
asociat unui stream se if (cin>>s). . .
metodelor: Pentru scoaterea unui stream din starea de eroare, fie dispare cauza
void clear(int i=0);
S e
-ului hardfail.
Exemplu: [Link](ios::badbit);
da
rdstate.
Exemplu: [Link]([Link]()|val_f);
-le nemodificate pe celelalte; val_f are una
din valorile definite de enumerarea io_state.
int rdstate();
oarea
datei membru state).
Exemplu: [Link](ios::badbit | [Link]()); 7.2. Format
metoda fail).
No 386 No 387
este
adjustfield, basefield, floatfield) un
singur bit poate fi activ.
protected:
long flag_x; //
int x_width;
unei valori pe ecran
skipws
left
intern
hex
oct
dec
right
showpoint
upperca
showbase
unitbuf
fixed
showpos
scientifi
public:
enum
{skipws = 0x0001,
left = 0x0002,
right = 0x0004, // aliniere la dreapta la iesire
internal = 0x0008, 1. Cu ajutorul manipulatorilor
bazei la ie
2. Cu ajutorul unor ale claselor istream sau ostream.
dec = 0x0010,
oct = 0x0020,
hex = 0x0040,
showbase = 0x0080, 7.2.1. Formatarea prin manipulatori
showpoint = 0x0100, umere reale
Manipulatorii sunt
uppercase = 0x0200, -
-
showpos = 0x0400,
No 388 No 389
7.2 [Link]. Manipulatori cu parametri
l 7.2.) este:
Tabelul 7.1
Manipul Intrare/ setiosflags (long f) I/O
ator Ie
dec I/O
flush O -
No 390 No 391
Exemplificarea modului de folosire a manipulatorilor pentru 7.2.2. Formatarea prin metode
Formatarea metode
ale clasei ios.
#include <iostream.h> setf
#include <iomanip.h>
int main()
{ long setf (long);
int a,b,c;double alfa,x,y;long ll;char xx,yy;
float u,v; unsigned int w; unsigned char ab,db;
a=125,b=10;ll=100*a*b;
cout<<"100*a*b="<<ll<<endl; //100*a*b=-6072
alfa=75.50;y=1.345678; -urile care nu fac parte dintr-
xx=35;yy=6; x=y/alfa-xx/yy;
cout<<"x="<<x<<endl; //x=-4.982176
Exemplu: cout. setf (ios:: showpos); //
cout<<"x="<<setw(8)<<x<<endl; //x=-4.982176 long setf (long flags, long field);
cout<<"x="<<setw(20)<<x<<endl; //x= -4.982176
cout<<"x="<<setw(20)<<setfill('*')<<x<<endl;
//x=***********-4.982176
// precizie
cout<<"x="<<setw(8)<<setprecision(2)<<x<<endl; Exemple:
//x=***-4.98
cout<<"x="<<setw(8)<<setprecision(0)<<x<<endl; cout. setf (ios:: showpos | ios :: uppercase | ios:: internal) // r fi
//x=-4.982176
// afisarea octetului semnificativ var & 0377 si a celui mai
putin semnificativ (var>>8) & 0377
w=34; ab='34' & 0377; db=('34'>>8)&0377; basefield
cout<<"w="<<w<<" ab="<<ab<<" db="<<db<<endl;
u=2579.75; v=12345.567E+10; cout. setf (ios :: skipws | ios :: hex | ios:: showbase, ios :: basefield)
//formatare in octal si hexa fill permite testarea sau modificarea caracterului de
cout<<"a in baza 10="<<a<<" in octal="<<oct<<a<<"
in hexa="<<hex<<a<<endl; u
//a in baza 10=125 in octal=175 in hexa=7d int fill ( );
cout<<"b="<<dec<<b<<endl; //b=10
} Exemplu: [Link] ( );
int fill (char);
caracter de umplere.
Exemplu:
precision permite testarea sau modificarea preciziei.
No 392 No 393
int precision ( ); width care
#include <iostream.h> friend istream & operator >>(istream &, clasa &);
int main()
{ int i=123, j=456;
double x=1234.567890123456, y=5678; Metoda get
[Link](5); cout<<i<<' '<<j<<endl; //123 456
cout<<i; //toate metodele sunt persistente, cu istream & get (char &);
M
[Link](5); cout<<j<<endl; //123 456
[Link](ios::showpos); //afis. +
cout<<i<<' '<<j<<endl; //+123 +456 Exemplu: char c; [Link](c);
[Link](ios::hex, ios::basefield);
[Link](20); [Link](15); [Link]('*');
[Link](ios::showpos | ios::showpoint); int get ( );
cout<<x<<' '<<y<<endl;
//***+1234.56789012346 +5678.00000000000 Extrage din fluxul de
cout<<i<<' '<<j<<endl; //7b 1c8
[Link](ios::dec, ios::basefield);
[Link](ios::showpos); [Link](' '); -1).
cout<<i<<' '<<j<<endl; //123 456
cout<<x<<' '<<y<<endl;
//1234.56789012346 5678.00000000000 \ ;
}
No 394 No 395
Metoda peck -l
de intrare). R citire.
int peck( );
Metoda getline Exemplu: c = [Link] ( );
Metoda gcount r
caractere preluat prin getline.
-o
int gcount();
-
Metoda read
u
-
istream & read (char *
Primul argument este implicit (this). Al doilea argument este o
Exemplu: char t[30]; [Link](t, 20);
No 396 No 397
Exemple: 7.5.
char c='S'; cout . put ( c ); // echivalent cu cout << c;
char c1='A',c2='B',c3='C';[Link](c1).put(c2).put(c3);
Manipul
// echivalent cu: [Link](c1);[Link](c2); [Link](c3);
// echivalent cu cout<<c1<<c2<<c3;
Metoda write
ametri
ostream &nume_manipulator (ostream &);
ostream & write (char * tablou, int lungime);
istream &nume_manipulator (istream &); //pentru un flux de intrare
Exemplu: char t[ \n"; [Link](t, 4);
4 caractere,
Crearea manipulatorilor cu parametri
No 398 No 399
fstreambase
#include <iostream.h>
#include <iomanip.h>
ostream &convhex (ostream &ies)
{
Pentru a asocia un flux de intrare
[Link](ios::hex,
ios::basefield); unui obiect de tipul ifstream. Clasa ifstream este din clasele istream
[Link](ios::showbase);
-un flux de
return ies;
} fstreambase privitoare la asocierea
ostream &indentare (ost
{
for (int i=0; i<nr_spatii; i++)
ies<<' ';
Pentru crearea unor obiecte din clasele ifstream sau ofstream se
return ies;
} impune includerea headere-lor iostream.h fstream.h.
ostream &init (ostream &ies)
{
[Link](10); Constructorii clasei ofstream sunt:
[Link](4);
[Link]('$'); ofstream();
return ies;
}
ofstream(const char *nume_fisier, int mod_acces=ios:out);
{ Parametrii
return omanip <int> (
}
int main() ofstream (int fd, char *buffer, int lung_buffer);
{
cout<<712<<' '<<convhex<<712<<endl;
cout<<indentare(10)<<"Linia1
text\n"<<indentare(5)<<"Linia2 text\n";
cout init<<123.123456;
} Constructorii clasei ifstream sunt:
ifstream();
No 400 No 401
Exemplu: ios::app mod append (de scriere la sf
ios::trunc
ios::nocreate
- ios::binary
le" clasei ostream. ios::noreplace
ofstream fis_ies("[Link]", ios::out); //sau: ofstream fis_ies("[Link]");
fis_ies<< . . . << . . .; Modul de deschidere este definit printr-
fis_ies.write(. . . );
Pentru examin if (fis_ies) . . .; class ios{
public:
enum open_mode{
rintr- in=0x01, out=0x02, ate=0x04,
app=0x08, trunc=0x10, nocreate=0x20,
ifstream fis_intr("[Link]", ios::in); //sau: ifstream fis_intr("[Link]"); noreplace=0x40, binary=0x80
fis_intr>> . . . >> . . .; };
rul asociat: fis_intr.read(. . . ); };
if (fis_intr) . . .;
Exemple: ifstream f1("[Link]", ios::in|ios::nocreate);
fstream f2("[Link]", ios::in|ios::out);
rotec=filebuf::openprot); open);
No 402 No 403
Metoda close
void close(); -
fstream fis_ies; fis_ies.open("[Link]", ios::out); fis_ies.close();
fstream fis_in; fis_in.open("[Link]", ios::in); fis_in.close();
Exemplu:
i, o serie de
desti
ir,
#include <iostream.h>
#include <fstream.h> #include <process.h>
#include <iomanip.h> #include <fstream.h>
int main() void semn_er(char *c)
{ { cerr<<"\n\n Eroare la deschiderea fisierului "<<c<<endl;
ofstream fis_ies("[Link]"); exit(1); }
[Link] void copiere(ofstream &dest, ifstream &sursa)
if (!fis_ies){ { char C;
\n"; while (dest && [Link](C))
return 1; } [Link](C);
fis_ies<<"Scrierea unui text \ \n"; }
fis_ies<<100<<hex<<setw(10)<<100<<setw(20)<<setpre int main()
cision(12); {
cout<<123.456789012356789<<endl; char nume_sursa1[14], nume_sursa2[14], destinatie[14];
fis_ies.close(); ifstream f1, f2;
ifstream fis_intr("[Link]"); //deschiderea fis. ptr. citire ofstream dest;
if (!fis_intr) cout<<"Numele celor 3 fisiere:"<<"Destinatie Sursa1
{ Sursa2\n";
cout<<"Eroare la deschiderea fis. ptr. [Link](destinatie,13);
citire!\n"; [Link](nume_sursa1,13);
return 1; } [Link](nume_sursa2,13);
char sir[100]; destinatie[13]=nume_sursa1[13]=nume_sursa2[13]='\0';
for (int k=0; k<9; k++) [Link](nume_sursa1, ios::nocreate);
if (!f1) semn_er(nume_sursa1); //utiliz operator ! redefinit
{ fis_intr>>sir; cout<<sir<<'\n'; }
cout<<endl; [Link](nume_sursa2, ios::nocreate);
int i, j; if (!f2) semn_er(nume_sursa2); //utiliz operator ! redefinit
double u; [Link](destinatie);
if (!dest) semn_er(destinatie); //utiliz operator ! redefinit
fis_intr>>i>>hex>>j>>u;
cout<<i<<' '<<j<<' '<<u<<endl; copiere (dest, f1);
fis_intr.close(); copiere(dest, f2);
return 0; [Link]();
} [Link]();
[Link]();
}
No 404 No 405
7.7.
xt.
#include <fstream.h>
#include <iostream.h>
int main()
{
ofstream fisierout("[Link]"); // Deschide fisierul text
[Link].
fisierout << " Teste fisiere "; //Scrie un text in fisier
[Link](); // Inchide fisierul terminatorul '\ \0'). Deoarece nu exist
// Deschide un alt fisier text si scrie in acesta niste numere
(numerele sunt separate prin spatii) un
[Link]("[Link]");
fisierout <<15<<" "<<42<<" "<<1;
[Link]();
// Deschide fisierul [Link] pentru citire. Metoda write
ifstream fisierin;
[Link]("[Link]"); ostream &write(const char * tab, int n);
char p[50]; // Stabileste o zona de memorie folosita pentru Metoda read
citirea textului.
fisierin >>p; // Citeste si afiseaza primele doua cuvinte din istream &read (const char * tab, int n);
fisier.
cout <<p<<" ";
fisierin >>p; -
cout <<p<<endl;
[Link](); // Inchide fisierul.
int numar;
[Link]("numere.c");
// Deschide fisierul text numere.c pentru citirea numerelor intregi
// Citeste numere din fisier pana cand ajunge la sfarsitul fisierului.
while (![Link]())
{
fisierin >> numar; // Citeste un numar intreg.
if (![Link]()) cout<<numar<<endl;
Clasele ifstream ofstream au ca metode f seekg
// Daca nu a ajuns la sfarsitul fisierului afiseaza numarul.
} clasei istream), respectiv seekp
[Link](); // Inchide fisierul.
// se citeste textul din fisierul [Link] cuvant cu cuvant. modificarea valorii pointerului.
[Link]("[Link]"); istream & seekg(long);
while (![Link]())
// Citeste cuvinte din fisier pana ajunge la sfarsitul fisierului. istream & seekg(long, seek_dir);
{ // Citeste cuvant cu cuvant. ostream & seekp(long);
fisierin >>p;
cout <<p<<endl; ostream & seekp(long, seek_dir);
}
}
No 406 No 407
Ambele metode primesc doi parametri:
#include <fstream.h>
#include <iomanip.h>
class student
{
char nume[20];
int grupa, note[3];
public:
void citire_date();
class ios{ friend ostream &operator<<(ostream &, const student &);
friend class fisier_stud;
//. . .
};
public:
class fisier_stud:public fstream
enum seek_dir{ student
beg=0, {
public:
cur=1, fisier_stud(){;};
end=2 fisier_stud(const char*num_f,int mod,int
};
}; void open(const char *num_f, int mod, int
protectie=filebuf::openprot)
{
fstream::open(num_f,mod|ios::binary,protectie);}
Pentru aflarea valorii pointerului, clasa ifstream are metoda tellg, iar //apelul met. open din cls. fstream
clasa ofstream are metoda tellp, cu prototipurile: int citeste_f(student &);
int scrie_f (const student &);
long istream::tellg(); };
long ostream::tellp();
void student::citire_date()
{
Exemplu: int gr, OK;
for (int k=0; k<21; k++) nume[k]=0;
implemen [Link](1000, '\n');
se real Datorit cout<<"Numele studentului:";
[Link](nume, 21);
[Link](1000, '\n');
do{
cout<<"Grupa:";
cin>>gr;
class fstream OK=(cin && gr>0 && gr<8000);
if (!OK)
clase prietene {
\n";
class student class fisier_stud
[Link]();
}
Figura 7.5. Ierarhia de clase else { grupa=gr; [Link](1000, '\n'); }
}while (!OK);
No 408 No 409
do{
for (int k=0; k<3; k++){
int n;
rasp=toupper([Link]());[Link](1000, '\n');
do{
cout<<"nota "<<k+1<<":"; CAPITOLUL
{ cin>>n; OK=cin && n>0 && n<=10; }
do{ if (!OK){
\n";
[Link](); \n');
[Link](1000, '\n');
} gata=1;
} }while (!OK);
[Link]();note[k]=n;[Link](1000, '\n');
//citire }
}
[Link](Nume_Fis, ios::in);
ostream
if (!fs){ &operator << (ostream &ies, const student &stud)
{ -lui "<<Nume_Fis<<"
ies<<"Student:"<<[Link]<<"
ptr. citire\n"; return 1; }
Grupa:"<<[Link]<<" Note:"; n acest capitol su
for (int k=0; k<3; k++) \n"; int k=0;
while (![Link]()) ies<<[Link][k]<<' ';
{ ies<<endl;
return
if (!fs &&ies;![Link]()){ cout<<"Eroare la citire\n";
}return 1; }
if (![Link]()) { cout<<s<<endl; cout<<"Poz în
typedef union {student s; char sbin[sizeof(student)];} stud;
cout<<endl;k++; }
}int fisier_stud::scrie_f(const student &s) Nume
{cout<<"S-au citit din \n";
[Link]();stud s1; s1.s=s; write([Link], sizeof(student)); calloc, malloc, realloc -
return bad();
free -
}
[Link](Nume_Fis, ios::in | ios::out); //deschidere fisier
actualizare (intr/ies)
int fisier_stud::citeste_f(student &s)
if (!fs){
{ stud s1; read([Link],
cout<<"Eroare sizeof(student));
la deschidere fis. "<<Nume_Fis<<"s=s1.s; ptr.
return bad();
citire/ scriere\n"; return 1;}
} void *calloc(unsigned nel, unsigned size);
int main() -lui pentru void *malloc(unsigned size);
{
datele:"; char Nume_Fis[]="Stud_bin.bin";
cin>>k; void *realloc(void *ptr, unsigned size);
[Link](1000, s; fisier_stud fs; int gata;
student '\n');
void free(void *ptr);
[Link](k*sizeof(stud)); s.citire_date(); fs.scrie_f(s); [Link](0);
k=0; [Link] (Nume_Fis, ios::out);
if (!fs){
while(![Link]()){ Descriere
fs.citire_f(s);
"<<Nume_Fis<<"
if (!fs && ptr. scriere\n";
![Link]()){cout<<"Eroare la citirea din calloc
return 1;} return 1; }
if (![Link]()){
cout<<s<<endl;
gata=0; c k++;}
} while(!gata)
{char rasp; malloc
cout<<"S- \n";
[Link]();cout<<"Datele
return 0; studentului:\n";s.citire_date();
} cout<<"Date introduse:"<<s<<endl;
No 410 No 411
free
Descriere
qsort
precedent malloc, calloc sau realloc.
Elementele tabloului su
Valori returnate
Pentru calloc malloc argumente car
t, egal cu, sau mai mare dec t
t, egal cu,
free respectiv mai mare dec elemente comparate sunt
Fu realloc
bsearch -un tablou de nel elemente, fiecare de
realloc
- nu este nici eliberat nici mutat. C
Nume
qsort -
bsearch - -un tablou sortat
coincide cu obiectul indicat de key, sau NUL
No 412 No 413
8.3. Func ii de clasificare iscntrl
Nume
isdigit
isalnum, isalpha, isascii, iscntrl, isdigit,
isgraph, islower, isprint, ispunct, isspace,
isupper, isxdigit - rutine de clasificare
isgraph
tolower -
ui.
toupper -
islower
#include <ctype.h>
int isalnum(int c); int islower(int c); isprint
int isalpha(int c); int isprint(int c);
int isascii(int c); int ispunct(int c);
int iscntrl(int c); int isspace(int c);
int isdigit(int c); int isupper(int c); ispunct
int isgraph(int c); int isxdigit(int c);
-alfanumeric.
int tolower(int c); int toupper(int c);
isspace
Descriere
unsigned cha
isupper
mai sus.
isalnum
isxdigit
isdigit(c)).
a b c d e f A B C D E F.
isalpha
tolower
islower(c)).
isascii
No 414 No 415
toupper Nume
memcmp -
Descriere
s2.
Valoare
Nume
memset -
Declar
#include <string.h>
s cu constanta c pe un octet.
void *memcpy(void *dest, const void *src, unsigned n);
void *memmove(void *dest, const void *src, unsigned n);
Descriere
Nume
memchr -
No 416 No 417
Descriere
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, unsigned n);
Descriere
imi copia.
memorie.
8 lungimea lu
valoarea null.
#include <string.h>
Nume
strdup -
Nume
strlen -
Descriere
terminator null.
Nume
Nume
strcpy, strncpy -
strcat, strncat -
No 418 No 419
char *strcat(char *dest, const char *src); char *strchr(const char *s, int c);
char *strncat(char *dest, const char *src, unsigned n); char *strrchr(const char *s, int c);
Descriere Descriere
null
c
i primele n
Nume
Nume strstr -
strcmp -
s2.
Nume
Nume strspn, strcspn - -
strchr, strrchr -
No 420 No 421
unsigned strcspn(const char *s, const char *rej); Fu
-aleatoare care vor fi returnate de rand.
Descriere
n acc.
#include <time.h>
srand(time(NULL));
Valori returnate
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
Nume
j=1+(int)(1000000.0*rand())%10;
rand, srand - generarea numerelor pseudo-aleatoare
int rand(void);
void srand(unsigned int seed);
int abs(int i);
long labs(long i);
Descriere
int atoi(char *s);
-
long atol(char *s);
double atof(char *s); precizie
sistemului de calcul).
2) F
No 422 No 423
double fabs(double x); 8.7. Programe demonstrative
double floor(double x);
double ceil(double x);
double sqrt(double x);
lul [0, M
double sin(double x); sin(x)
double cos(double x); cos(x)
double tan(double x); tg(x)
double asin(double x); arcsin(x)
double acos(double x); arccos(x)
double atan(double x); arctg(x) [- /2, /2]
#include <stdlib.h>
double atan2(double y, double x); arctg(y/x) , ] #include <stdio.h>
double exp(double x); ex #include <time.h>
int cmp(const void *A, const void *B)
double log(double x); ln(x) {
double pow(double x, double y); xy return *(int *)A-*(int *)B;
}
double sinh(double x); sinh(x) int main(int ac, int **av)
double cosh(double x); cosh(x) {
int *X,*p,M,n,k,i,v;
double tanh(double x); tgh(x) if (ac!=4) {
double ldexp(double x, int e); x 2e fputs("Trei argumente!\n",stderr);
return 1;
double fmod(double x, double y); x modulo y }
n=atoi(av[1]);
k=atoi(av[2]);
f x a y f a M=atoi(av[3]);
x/y) |f | < y; f are semnul lui x. X=(int *)malloc(n*sizeof(int));
if (!X) return 1;
srand(time(NULL));
for (i=0; i<n; i++)
X[i]=rand()%M;
argument de tip pointer la int respectiv double. qsort(X,n,sizeof(int),cmp);
for (i=0; i<k; i++)
double frexp(double x, int *e);
{
x v=rand()%M;
p=(int *)bsearch(&v,X,n,sizeof(int), cmp);
f e x este 0 atunci f e 0.
if (p)
f. printf("Val: %d Pos: %d\n",v,p-X);
}
double modf(double x, double *n);
free(X);
x return 0;
}
f n. Valorile f n x. Valoarea
f.
No 424 No 425
int main(int ac, char **av)
{
int na,ne,i;
StEl *El;
FILE *fi;
e if (ac!=2) {
fputs("Un argument!\n",stderr);
return 1;
}
fi=fopen(av[1],"rt");
if (!fi) {
perror("Eroare la deschidere");
selectare a membrilor unei structuri cu ajutorul macrourilor. Macroul Fld return 1;
}
na=NA; ne=0;
tip void, El=(StEl *)malloc(na*sizeof(StEl));
while (fscanf(fi,"%s %d %d %d",
i un cast pentru a preciza tipul concret al acesteia. El[ne].nm,&El[ne].na,&El[ne].nb, &El[ne].nc)!=EOF)
{
if ((El[ne].na>=5) && (El[ne].nb>=5) &&
Deoarece te l (El[ne].nc>=5))
su ntru El[ne].ar='A';
else El[ne].ar='R';
El[ne].md=(El[ne].na+El[ne].nb+El[ne].nc)/3.0;
ne++;
if (ne==na)
{
na+=NA;
mare de elemente. Desigur, de fie
El=(StEl *)realloc(El,na*sizeof(StEl));
alocat. }
#include <stdlib.h>
}
#include <string.h>
fclose(fi);
#include <stdio.h>
qsort(El,ne,sizeof(StEl),comp);
#define NA 32
for (i=0; i<ne; i++)
typedef struct {
printf("%-12s c%6.2lf\n", El[i].nm,El[i].ar,El[i].md);
char nm[10], ar;
free(El);
float na, nb, nc, md;
return 0;
} StEl;
}
#define Fld(P,f) ((StEl *)P)->f
int comp(const void *A, const void *B) {
float w; int d;
if (d=Fld(A,ar)-Fld(B,ar)) return d; - i
if (Fld(A,ar)=='A') {
w=Fld(B,md)-Fld(A,md);
if (w>0) return 1;
if (w<0) return -1;
}
return strcmp(Fld(A,nm),Fld(B,nm)); }
No 426 No 427
cuvintele din
CAPITOLUL
No 428 No 429
j=j/10
Scrie c;
a) Ce valoare va fi n=5 22, 235, 233, 6, 221?
1) b)
#include <iostream.h> 0.
int a[5], b[5], i; c)
void main() prezentat.
{ d) i dat.
for(i=0;i<5;i++)
if(i%2==0) a[i]=1; 3) Fie x
else a[i]=i+2; a)
for(i=0;i<5;i++) b[i]=a[i]*2;
for(i=0;i<5;i++) b)
modificat.
}
a) 1 6 1 10 1 b) 2 6 2 10 2
c) 2 2 6 2 2 d) 2 4 6 8 10
2)
; max=0
Pentru i=0,9 executa
nr[i]=0;
x=j%10;
nr[x]=nr[x]+1;
daca max<nr[x] atunci
max=nr[x]; c=x;
No 430 No 431
a) Ce valori vor fi afi ate pentru n=7 2,2, 34, 5, 6, 78, 8?
b)
}
a) 10 20 30 40 40 b) 0 10 20 30 40
c) 10 10 10 10 10 d) 10 10 20 20 30
2)
; max=1;
Pentru i=1, n executa
[i]
Scrie a[1]
Pentru i=2, n executa
Daca a[i]<a[i-1] atunci
max=max+1
Scrie max
No 432 No 433
| |
| | y=[y/10]
|
TESTUL NUM RUL 3
| n=n*10+c
|
Scrie n
1) a)
i=0; numerele 12, 7, 354, 9, 1630, 0
while(i+j<=10) {i=i+1; j=j-2;} b)
Valoarea minim tru variabila j 752.
c) ului dat.
a) 1 b) 5 c) 6 d)
d) 17 e) 10 f) 2
2) 1
x (-2,2)? 5)
a) x*x-4<=0 b) 4-x*x>0 corespun
c) (2<x)&&(x<-2) d) (x-2)*(x+2)>0
Euclid.
3) Variabilele x y x 8, iar y 6) n
valoarea 6. Care dintre expresiile de mai jos are valoarea 0? rului dat.
a) 3*x-4*y= =0 b) (x+y)/2>x%y+1
c) !(x/2+2= =y) d) x-y+3!=0 Exemplu:
Pentru n=1235 30.
4)
n=0
c
| y=x; c=0
| c
| | dac y%10>c atunci
| | | c=y%10
No 434 No 435
| | p=p*10
| | altfel
| | k=k-1
TESTUL NUM RUL 4
|
| n=[n/10]
Scrie nr
1) a)
p=1; n valoarea 23456 k valoarea 3.
do { b)
p*=2; pentru n k
cout<<p; oarea 234.
} while(p%10!=6); c)
a) 2 4 8 6 b) 2486 d)
c) 2 4 8 16 d) 24816
final.
2) Variabila x
valoarea 1 x nu 5)
intervalului (2,9]?
a) (x>2)&&(x<=9) b) (x<=2)&&(x>9)
c) (x<=2)||(x>9) d) (x<2)||(x>9)
6) >100 r
3) 1 n.
variabilele x y Exemplu:
a) (x-y= =2)&&(y-x= =2) b) (x= =2)&&(y= =4) Pentru n=12345 se va 3.
c) x-y= =2 d) ((x-y= =2)||(y-x= =2)) && (x%2= =0)
4) Se c
nr=0; p=1;
| dac
| | nr=nr+[n/10]%10*p
No 436 No 437
2. Consideram urmatoarea secventa de program in care v este un vector
format din n numere intregi, iar n, i si aux sunt trei variabile de tip
intreg:
TESTUL NUM RUL 5
for(i=1;i<=n/2;i++)
{ aux=v[i];
v[i]=v[n/2+n%2+i];
v[n/2+n%2+i]=aux;
1. }
{num >1} Daca n=7 si v=(10, 20, 30, 40, 50, 60, 70) atunci dupa rularea
ok=0; secventei de mai sus vectorul v va avea urmatorul continut:
c >0 exe a) v=(40, 50, 60, 70, 10, 20, 30) b) v=(40, 50, 60, 10, 20, 30, 70)
| c=n%10; c) v=(50, 60, 70, 40, 10, 20, 30) d) v=(10, 20, 30, 70, 60, 50, 40)
| 1 atunci
| | ok=1 3. Se da o matrice patratica de ordinul n. Sa se formeze un vector cu n
| | altfel componente, in care componenta i a vectorului sa fie egala cu raportul
| | ok=0 dintre suma elementelor de pe linia i si suma elementelor de pe
| coloana i. Daca suma elementelor de pe coloana i este nula atunci
| componenta a i-a din vector va fi 0.
| | Exemplu: Daca matricea este
| | ok=1 5 0 6 1
| 2 -5 8 3
| n=[n/10] 2 0 4 0
-1 5 2 7
Se va obtine vectorul: 1.5, 0, 0.3, 1.1818
a) =9458
b) 3 cifre, care poate fi citi
9 7.
c)
d)
un alt tip.
No 438 No 439
Exemplu:
Daca matricea A este:
TESTUL NUM RUL 6
1 3 6 2 9
7 4 0 3 8
5 2 1 47 6
Si vectorul este: 5, 2, 1, 47, 6 atunci se va afisa valoarea 3.
1. Daca matricea A este:
{numere naturale} 1 3 6 2 9
c=0; d=0; p=1; 7 4 0 3 8
c >0 execut 5 2 1 47 6
| c=a%10+b%10+c; d=d+(c%10)*p; p=p*10; Si vectorul este: 2, 2, 1, 47, 6 atunci se va afisa valoarea matricea
| a=[a/10]; b=[b/10]; c=[c/10]; modificata:
1 3 6 2 9
Scrie d
7 4 0 3 8
a) Scrie =493
5 2 1 47 6
b=1836.
2 2 1 47 6
b)
c)
alt tip.
d) NU
No 440 No 441
Cat timp n>=10 executa
| s=0
|
TESTUL NUM RUL 7
| | s=s+n%10
| |_ n=[n/10]
|_ n=s
Scrie n
a) Ce se va afisa daca valoarea citita pentru n este 989736?
1) Stiind ca variabilele a, b si c de tip intreg memoreaza valorile a=2, b) Stabiliti doua numere diferite, de 5 cifre fiecare care, atribuite initial lui
b=30, c=3, stabiliti care este rezultatul evaluarii expresiei aritmetice n, au ca efect afisarea valorii1
a+b+c+b/a/c? c) Scrieti programul C++ corespunzator algoritmului dat.
a) 95 b) 80 d) Scrieti un algoritm echivalent cu algoritmul dat, dar care sa utilizeze un
c) 38 d) 40 alt tip de structura repetitive
2) Ce se va afisa in urma executarii secventei de instructiuni urmatoare?
i=1; j=1; 5) Se dau n numere naturale (n numar natural nenul dat). Se cere sa se
while (i<=7) calculeze si sa se afiseze suma numerelor care au suma cifrelor divizibila cu
{ 7.
cout<<j; Exemplu
i=i+3; Pentru n=4 si numerele 15, 601, 815, 0 se va afisa 1416
}
a) 1 1 1 b) 1 2 3 4 5 6 7
c) 1 4 7 d) 1 1 1 1 1 1 1
3) De cate ori se va executa instructiunea de decizie din secventa de
program urmatoare, daca valoarea variabilei intregi n este 8?
int i,j;
for (i=1;i<n;i++)
for(j=i;j<n;j++)
if(j%i= =0) cout<<i<<j;
a) 16 b) 38
c) 28 d)36
No 442 No 443
4) Fie urmatorul algoritm pseudocod:
Citeste a,b (numere naturale)
c=a%10
TESTUL NUM RUL 8
pentru i=1,b-1 executa
| c=c*a
|_ c=c%10
Scrie c
a) Ce valoare afiseaza algoritmul pentru a=28 si b=10?
1) Care dintre urmatoarele expresii are valoarea 1 stiind ca variabilele a, b) Scrieti o pereche de valori de cate doua cifre pentru a si b astfel
b si c de tip intreg au valorile a=1, b=2, c=3, d=2? incat algoritmul sa afiseze valoarea 8.
a) (a= =c) && (b||d) b) (b>c) || (c>3) c) Scrieti programul C++ corespunzator algoritmului dat.
c) ((b= =d)&&(a!=0))||(b<=c) d) (b>c) && a d) Scrieti algoritmul pseudocod care sa fie echivalent cu cel dat si care
2) Care trebuie sa fie valoarea initiala a variabilei i de tip intreg pentru ca sa contina un alt tip de structura repetitive.
in urma executarii instructiunii urmatoare, pe ecran sa fie afisata
secventa de caractere *****? 5) Se dau n numere naturale (n numar natural nenul dat). Se cere sa se
while(i*5<1000) calculeze si sa se afiseze produsul numerelor care au un numar impar
{ de cifre.
Exemplu
i=i*2+10; Pentru n=4 si numerele 1590, 6, 105, 0 se va afisa 0
}
a) 3 b) 11
c) 13 d) 5
3) Ce se va afisa pe ecran in urma executarii urmatoarelor instructiuni,
daca pentru variabila intreaga a se citesc, in ordine, numerele: 1234,
234, 52, 25, 5432, 819?
for(i=1;i<=6;i++)
{
cin>>a;
if (i%2= =0) cout<<a/100%10;
else cout<<a/10%10;
}
a) 230241 b) 432221
c) 220241 d) 325038
No 444 No 445
Exemplu:
x=(10, 24, 467, 23, 140).
TESTUL NUM RUL 9
Se va afisa 3.
4) Fie x
1)
Exemplu:
x=(100, 2116, 4670, 1423, 40).
int x=a[1];
for(int i=1;i<6;i++) a[i]=a[i+1]; a=(2116, 1423) b=(100, 4670, 40).
a[6]=x;
for(int i=1;i<=6;i++) cout<<a[i]/10<<endl;
2)
#include<iostream.h>
int a[6],i;
int main()
{
for(i=1;i<=5;i++) a[i]=i-1;
a) 1 0 1 b) 1 1 1
c) 1 2 0 d) 1 0 0
3)
No 446 No 447
3)
dat care sunt palindroame si au cel putin 2 cifre.
4) Fie x
1)
2)
#include<iostream.h>
int a[5], b[5], i;
int main()
{
for(i=0;i<5;i++)
if(i%2==0) a[i]=1;
else a[i]=i+2;
for(i=0;i<5;i++) b[i]=a[i]*2;
a) 1 6 1 10 1 b) 2 6 2 10 2
c) 2 2 6 2 2 d) 2 4 6 8 10
No 448 No 449
| daca c>0 atunci
| | c=c-1
|
TESTUL NUM RUL 11
| m=m+c*p; p=p*10;
| n=[n/10]
Scrie m
a) Scrie n=5172.
1) Fiecare dintre variabilele x, y t b)
natural de cel mult 4 x<y c)
expresii are valoarea 1 cat timp...executa cu o structura repetitiva
variabila t nu (x,y)? de un alt tip.
a) (t<=x) || (t>=y) b) (t>x) || (t<y) d) 4 cifre, care pot
c) (t<=x) && (t>=y) d) (t>x) && (t<y) fi citite pentru variabila n 2008
pentru fiecare dintre acestea.
2) 1
x de tip int este divizibil cu 5) imine din
100?
a) x%10+x/10%10==0 b) x/100==0
c) x%10+x/10==0 d) x%10+x%10/10==0 Exemplu
Pentru sirul 45 60 201 102 78 89 se vor afisa
3) Variabilele x y 2 cifre. 45 60 201 102 78 89
Care este valoarea expresiei x-y 102 78
rea 1?
x/10==y%10 y/10==x%10 x/10==x%10+1 6)
a) 0 b) 9
c) 1 d)11
Exemplu
4) -90, 31, -7, -6, 0, 23 se va afisa 31 23 3
No 450 No 451
[Link]
TESTUL NUM RUL 12
Exemplu
[Link] [Link]
3 4 2 0 4
34 2 9 67 1)
1 3 19 7
2 6 20 2 executare?
x=y+z; z=x-z; y=z; z=x-y;
a) numai x b)
c) d)
2) Stabi 1
x nu (-10,-2) [50,100].
a) x<= -10 || (x<50 &&x>= -2) || (x>100)
b) x<= -10 || (x<=50 &&x>= -2) || (x>=100)
c) x< -10 || (x<50 &&x> -2) || (x>100)
d) x<= -10 || (x<=50 ||x>= -2) || (x>100)
3) Variabilele n, z u n
n este:
a) n=(n/100*10+n%10)*10+n%100/10;
b) u=n%10; z=n/100%10; n=n/100+u*10+z;
c) n=(n/100*10+n%10)*10+n/100%10;
d) u=n%10; z=n/100%10; n=n/100*100+z*10+u;
4) Fie ur
Citeste n, d (numere naturale)
b=0; v=0;
pentru i=1,n executa
| citeste x (numar natural nenul)
No 452 No 453
| a=0; Exemplu
| aux=x; -90, 31, -7, -6, 0, 23 se va afisa -7 3 23 31
| cat timp x%d=0 executa
| | a=a+1 7) [Link]
| | x=[x/d] m n ale unei
|
| daca a>b atunci
| | b=a;
| | v=aux; [Link]
|
Scrie v, b Exemplu
[Link] [Link]
a) Scrie n=3, d=2, iar valorile citite pentru x 3 4 1 3 171 469
sunt, 40, 19, 56. 34 2 9 67
b) Pentru n=3 d=2 3 1 3 19 7
pentru x 0 0. 2 6 20 2
c)
d)
structura cat ti
cu test final.
5)
Exemplu
Pentru sirul 4 6 20 1 8 9 se vor afisa
4 6 20 1 8 9
4 2 6 2 20 1 1 1 8 1 9
6)
e
No 454 No 455
4) Fie G un graf orientat cu 10
i j
minim de arce pe care le poate avea graful.
TESTUL NUM RUL 13
a) 90 b) 45
c) 20 d) 10
No 456 No 457
a) Scrie n
123611.
b)
TESTUL NUM RUL 14
pot fi citite pentru variabila n
10.
c)
d)
1) 13 [1,4],
[2,5], [3,8], [4,7], [4,9], [4,11], [6,3], [6,10], [6,12], [8,6], [13,2]}.
8) Se d Identifica
a) 3, 6, 8, 10, 12 b) 2, 5, 3, 6, 8, 10, 12
c) 1, 4, 7, 9, 11 d) 2, 5
9) , vectorii S D. Se cere
T 2) Pentru un arbore cu r 9
DESC. vectori ar
a) (4,3,0,3,9,9,6,6,9) b) (4,3,0,3,9,9,6,6,3)
10) c) (4,3,2,3,9,9,6,6,3) d) (4,3,2,3,9,9,6,6,0)
a) 1 b) 0
c) 3 d) 2
un ciclu?
a) b)
c) 0 d) 1
No 458 No 459
5) Se consider 8 noduri numerotate de la 1 la 8, dat prin lista a) n 6, iar pentru
de muchii: (1,2), (1,3), (3,4), (3,5), (3,6), (4,8), (4,7). Care dintre x 2008, 1965, 2727, 1861,
11021, 165.
b) n este 4
distincte, numere naturale cu exact 3 cifre, care trebuie citite pentru
a) 1 b) 2 variabila x
c) 4 d) 3 itite pentru x.
c)
6) 8 16 arce este
test final.
d)
a) Fiecare nod al grafului are gradul interior diferit de gradul exterior
b) Fiecare nod al grafului are gradul interior egal cu gradul exterior
c) Nu 1 8)
d)
arbore.
7)
Citeste n (numar natural nenul) 9) , vectorii T DESC. Se
Pentru i=1,n executa
| Citeste x (numar natural) vectorii S D.
| nr=0
| cat timp x>0 executa 10)
| | nr=nr*100+x%10
| | x=[x/100]
|
| cat timp nr>0 executa
| | x=x*10+nr%10
| | nr=[nr/10]
|
| Scrie x
No 460 No 461
TESTUL NUM RUL 15
Exemplu:
4)
e
1) Se
Exemplu:
con
3)
No 462 No 463
cu litere mici.
LAPTOPMOUSE
laptopmouse
1) Se 4)
toate sufixe iar fiecare c
a) de la sufixul cel mai mare la cel mai mic
MASCA
ASCA Exemplu:
SCA 5 vocale; textul modificat va fi i&&o&&a&i&a
CA
A
b) de la sufixul cel mai mic la cel mai mare
A
CA
SCA
ASCA
MASCA
Exemplu:
pare
3)
No 464 No 465
- Functie pentru citirea matricei;
- Functie care returneaza suma elementelor pare de pe diagonala
principala a matricei
TESTUL NUM RUL 17
- Functie care returneaza numarul de elemente strict negative din
matrice.
Exemplu:
Pentru matricea
1) Fie x un sir cu n valori naturale. Se cere sa se calculeze produsul 3 -4 60 -18
numerelor din sir care sunt palindroame. Se vor folosi urmatoarele 2 2 2 2
subprograme: 9 9 3 3
- Functie pentru citirea sirului; 1 1 -1 2
- Functie care are ca parametru o variabila de tip intreg si care Se vor afisa valorile 4 3
returneaza 1 daca valoarea variabilei este palindrom si 0 in caz
contrar.
Exemplu: Pentru x=(2,13,44, 20) se va afisa 88
No 466 No 467
3) Fie o matrice cu numere intregi. Se cere sa afiseze numarul
elementelor strict negative de pe diagonala secundara a matricei si
produsul elementelor din matrice care sunt strict pozitive si au exact o
TESTUL NUM RUL 18
cifra. Se vor folosi urmatoarele subprograme:
- Functie pentru citirea matricei;
- Functie care returneaza numarul elementelor strict negative de pe
diagonala secundara a matricei
1) Fie x un sir cu n valori naturale. Se cere sa se calculeze suma - Functie care returneaza produsul elementelor din matrice care sunt
elementelor din sir care sunt numere prime. Se vor folosi urmatoarele strict pozitive si au exact o cifra.
subprograme:
- Functie pentru citirea sirului; Exemplu:
- Functie care are ca parametru o variabila de tip intreg si care Pentru matricea
returneaza 1 daca parametrul este numar prim si 0 in caz contrar. 3 -4 60 -18
2 2 2 2
Exemplu: 9 9 3 3
Pentru x=(2,13,44, 20) se va afisa 15 -1 1 -1 2
Se vor afisa valorile 2 69984
2) Se da o matrice cu numere intregi. Se cere sa se afiseze cate numere
impare sunt pe fiecare coloana a matricei. Se vor folosi urmatoarele
subprograme:
- Functie pentru citirea matricei;
- Functie care are ca parametru un indice de coloana si returneaza
numarul de elemente impare de pe coloana respectiva.
Exemplu:
Pentru matricea
3 4 60 1
2 2 2 25
9 9 3 3
Se vor afisa valorile 2 1 1 3
No 468 No 469
5)
strcpy(a, );
TESTUL NUM RUL 19
for(i=0;i<strlen(a);i++)
a[i]=a[i]-1;
cout<<a;
6) Fie a Ce se va afi
1) Variabila s
expresii are valoare for (int i=1;i<=3;i++)
strcpy(a+1,a+2);
a) strlen(s)<10 b) strlen(s,10)<0 cout<<a;
c) leng(s)<10 d) s- a) Pavara b) ara
c) rim d) Para
2) -
succesiunea de caractere EXAMEN 7)
memorat de variabila s? Variabilele x p
x=strlen(s); strcpy(x, );
for(i=0;i<x/2;i++) x[0]=x[0]-32;
cout<<s[i]<<s[x-i-1];
a) ENXAME b) EAENMX cout<<x[0]<<p[0]<<x[strlen(x)-1];
c) NEEXMA d) NEMAXE a) aaa b) AaA
c) Aaa d) AAA
3) Care este valoarea variabilei s
strcpy(s,strcat(strchr(
a) BAC2012 b) laureat12
c) bac201212 d) aur2012
4) Variabila s
No 470 No 471
4) s executarea
strncpy(s, \
TESTUL NUM RUL 20
a) info b) infoBAC
c) BACinfo d) informaticaBAC
5)
1) variabila c mem i
i este de tip char?
for(i )
for(i=0;i<3;i++) c[i]=c[i+1];
cout<<c;
2) x s
caractere, iar i x s 6)
absolvent x strcpy(x,
if(strcmp(x,y)>0) cout<<x;
No 472 No 473
a) 989736?
b)
lu
TESTUL NUM RUL 21
c)
d)
4) n m coloane
1) Care este valoarea pe care trebuie s x ( )
:
HHHHHH? [Link]
while (x!=3) {x=x-
a) 0 b) 4 [Link]
c) 6 d) 5
2) Variabilele n, z u n
Exemplu:
: 173 devine 345
a) n=(n/100*10+n%10)*10+n%100/10; 456 789
b) u=n%10; z=n/100%10; n=n/100+u*10+z; 789 456
c) n=(n/100*10+n%10)*10+n/100%10; 345 173
d) u=n%10; z=n/100%10; n=n/100*100+z*10+u;
3)
Citeste n (numar natural cu cel mult 9 cifre)
Cat timp n>=10 executa
| s=0
|
| | s=s+n%10
| |_ n=[n/10]
|_ n=s
Scrie n
No 474 No 475
4) n
) apoi construie 2*n 2*n
coloane, numerotate de la 1 la 2*n,
TESTUL NUM RUL 22
1, 4*n2
1) Variabilele a, b y sunt reale, iar exemplu.
are valoarea 1 z
a b? ma
a) (z>a || z>b) b) (z<a) || (z>b)
c) z<a && z>b d) z>=a && z<=b
Exemplu:
2) t valoarea Pentru n=2 se ob :
-1 a b 1 3 5 7
diferite? 8 6 4 2
a) if ((a>0)||(b<0)) t= -1; b) if ((a>0)&&(b<0)) t= -1; 9 11 13 15
c) if(a*b<0) t= -1; d) if (a*b>0) t= -1; 16 14 12 10
3)
Citeste a,b (numere naturale)
c=a%10
pentru i=1,b-1 executa
| c=c*a
|_ c=c%10
Scrie c
a) a=28 b=10?
b)
c)
d)
No 476 No 477
b)
c)
TESTUL NUM RUL 23
d)
4) n m coloane
( )
1) Care este valoarea pe care trebuie s x l
: [Link]
HHHHHH?
while (x!=3) {x=x- [Link]
a) 0 b) 4
c) 6 d) 5
Exemplu:
2) Variabilele n, z u regi, iar n 173 devine 345
456 789
: 789 456
a) n=(n/100*10+n%10)*10+n%100/10; 345 173
b) u=n%10; z=n/100%10; n=n/100+u*10+z;
c) n=(n/100*10+n%10)*10+n/100%10;
d) u=n%10; z=n/100%10; n=n/100*100+z*10+u;
3)
Citeste n (numar natural cu cel mult 9 cifre)
Cat timp n>=10 executa
| s=0
|
| | s=s+n%10
| |_ n=[n/10]
|_ n=s
Scrie n
a) 989736?
No 478 No 479
n
) apoi construie 2*n 2*n coloane,
numerotate de la 1 la 2*n,
TESTUL NUM RUL 24
c)
d)
No 480 No 481
[16] Maria Codrina, Dana Lica, Doru Popescu Anastasiu, Radu Boriga, Adrian
No 482 No 483