Sunteți pe pagina 1din 2

Parial Programare

Nr.1

20.11.2010

1.Un numr lung are numrul de cifre nc > 100, motiv pentru care se reprezint printr-un tablou
nl cu nc componente. Scriei un program care citete un ntreg b (baza) , 2 b 16 i mai
multe linii, fiecare linie reprezentnd un numr lung n baza b; liniile sunt terminate cu marcajul de
sfrit de fiier . Programul convertete numerele corecte (care conin numai cifrele ntre 0 i b-1)
din baza b n baza 10 i afieaz numerele lungi n baza b i n baza 10, cte o pereche pe o linie.
Numerele incorecte sunt ignorate.
Indicaie: Relaia de conversie nl= b*nl +ci, cu i=0 : nc-1 nu poate fi aplicat, deoarece
rezultatul depete, motiv pentru care vom defini o funcie cu semntura:

Parial Programare

care nmulete numrul lung nl cu ntregul b i adun la acesta ntregul c, i ntoarce numrul lung
rezultat.

2.Scriei un program care citete mai multe linii, terminate cu sfrit de fiier, linii coninnd nume,
prenume i cod numeric personal (CNP) i creaz un tablou de iruri de caractere nume i un tablou
de iruri CNP.
S se sorteze lista de nume dup data naterii, afind pe fiecare linie numele, ziua naterii (2 cifre),
luna naterii (ir de caractere) i anul naterii (4 cifre).
CNP este un ir de 13 caractere cu urmtoarea structur: 0 sex (1-M/ 2-F), 1-2 ultimele 2 cifre
ale anului naterii, 3-4 luna naterii, 5-6 ziua naterii, 7-12 numr serial (care se ignor).

Indicaie: Dou CNP-uri pot fi comparate direct prin subirurile din poziiile 1-6. Pentru exemplul
de mai sus subirul este 860715, care poate fi comparat lexicografic cu subirul extras din CNP-ul
altei persoane.

Se recomand definirea unei funcii care convertete caracterele cifre ale numrului lung n valori
numerice:
void cvcarcif(int nc, char *nl);
Barem
prezen
definire funcie cvb10()
definire funcie corect()
definire funcie cvcarcif()
declaraii
citire numere lungi n bucl
verificare corectitudine, conversie, afiare 1,5p

20.11.2010

De exemplu pentru linia Popescu Ion 1860715436512 se va afia Popescu Ion 15 iulie 1986

char *cvb10(int b, int nc, char *nl, int c);

1.
2.
3.
4.
5.
6.
7.

Nr.1

0,5p
5,0p
1,0p
1,0p
0,5p
0,5p

Barem
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

prezen
definire funcie extrdinCNP()
definire funcie sortare()
definire funcie numeluna()
declaraii
citire in bucla
separare nume, prenume i CNP
alocare dinamic tablouri nume i CNP
sortare
afiare

0,5p
1,0p
2,5p
1,0p
0,5p
0,5p
1,0p
2,0p
0,5p
0,5p

Parial Programare

Nr.2

S se afieze numele persoanelor majore la data curent (20.11.2010) , afind pe fiecare linie
numele, ziua naterii (2 cifre), luna naterii (ir de caractere) i anul naterii (4 cifre).

20.11.2010

1.Un numr lung are numrul de cifre nc > 100, motiv pentru care se reprezint printr-un tablou
nl cu nc componente. Scriei un program care citete un ntreg b (baza) , 2 b 16 i mai
multe linii, fiecare linie reprezentnd un numr lung n baza 10; liniile sunt terminate cu marcajul
de sfrit de fiier . Programul convertete numerele corecte (care conin numai cifrele ntre 0 i 9)
din baza 10 n baza b i afieaz numerele lungi n baza 10 i n baza b, cte o pereche pe o linie.
Numerele incorecte sunt ignorate.
Indicaie: Se definete o funcie care mparte un numr lung nl de lungime nc cu un ntreg b i
ntoarce ca rezultat restul mpririi .Funcia nlocuiete numrul lung prin ctul mpririi lui prin b:
int div(int b, int nc, char *nl);

CNP este un ir de 13 caractere cu urmtoarea structur: 0 sex (1-M/ 2-F), 1-2 ultimele 2 cifre
ale anului naterii, 3-4 luna naterii, 5-6 ziua naterii, 7-12 numr serial (care se ignor).
De exemplu pentru linia Popescu Ion 1860715436512 se va afia
Popescu Ion 15 iulie 1986
Indicaie: |Definim o funcie int major(char *CNP), care compar data curent 101120 cu
subirul din poziiile 1-6 ale CNP-ului i stabilete vrsta, considernd n mod simplificator c
fiecare lun are 30 de zile. Dac numrul de ani este 18 avem o persoan major i funcia
ntoarce valoarea 1 (n caz contrar 0).
Barem

Funcia de conversie: char *cv10b(int b, int nc, char *nl); apeleaz n mod
repetat funcia div() pn cnd ctul devine 0.

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Se recomand definirea unei funcii care convertete caracterele cifre ale numrului lung n valori
numerice: void cvcarcif(int nc, char *nl);
Barem
1.
2.
3.
4.
5.
6.
7.
8.
1
0,5

prezen
definire funcie corect()
definire funcie cvcarcif()
definire funcie div()
definire funcie cv10b()
declaraii
citire numere lungi n bucl
verificare corectitudine, conversie, afiare 1,5p
2
1

Parial Programare

3
1

4
3

Nr.2

5
2

0,5p
1,0p
1,0p
3,0p
2,0p
0,5p
0,5p

6
0,5

1
0,5

7
0,5

8
1

20.11.2010

2.Scriei un program care citete mai multe linii, terminate cu sfrit de fiier, linii coninnd nume,
prenume i cod numeric personal (CNP) i creaz un tablou de iruri de caractere nume i un tablou
de iruri CNP.

prezen
definire funcie extrdinCNP()
definire funcie major()
definire funcie numeluna()
declaraii
citire in bucla
separare nume, prenume i CNP
alocare dinamic tablouri nume i CNP
determinare vrst
afiare
2
1

3
2,5

4
1

5
0,5

0,5p
1,0p
2,5p
1,0p
0,5p
0,5p
1,0p
2,0p
0,5p
0,5p
6
0,5

7
1

8
2

9
0,5

10
0,5

S-ar putea să vă placă și