Documente Academic
Documente Profesional
Documente Cultură
Subprograme
1 Prelucrări numerice
2 Prelucrarea tablourilor unidimensionale
3 Prelucrarea tablourilor bidimensionale
1 Prelucrări numerice
6. Să se scrie definiţia subprogramului cifra, care primeşte prin intermediul celor doi parametri
ai săi două numere întregi n şi k (1≤n≤1000000), (1≤k≤5) şi returnează cifra de rang k a
numărului n. Rangul unei cifre este numărul său de ordine, numerotând cifrele de la dreapta
la stânga; cifra unităţilor are rangul 1. Dacă numărul k este mai mare decât numărul de cifre a
lui n atunci funcţia returnează valoarea -1.
Exemplu: în urma apelului calcul(9748, 3) se va returna 7
Să se scrie un program care citeşte două numere naturale x şi y mai mici sau egale cu
1000000 şi determină dacă au un prefix comun (o secvenţă de cifre identice începând cu
cifra din stânga).
Exemplu: pentru x=2794563 şi y=279421 se afişează: 2794
8. Se numeşte cifra de control a unui număr cifra care se obţine din însumarea cifrelor unui
număr, apoi suma cifrelor acestei sume, ş.a.m.d. până se obţine un număr format dintr-o
singură cifră. Spre exemplu pentru numărul 589 cifra de control este 4, astfel: 5+8+9=22,
apoi 2+2=4
Să se definească un subprogram sumacif care primeşte prin parametrul a un număr natural cu
cel mult nouă cifre şi care returnează suma cifrelor numărului a.
Folosind apeluri utile ale subprogramului sumacif:
a. să se determine cifra de control a unui număr x citit.
b. să se afişeze numerele dintr-un tablou unidimensional v care memorează cel mult 100
de numere întregi de cel mult nouă cifre fiecare, pe grupe având aceeaşi cifră de
control.
Exemplu: pentru v=(23, 8, 98, 116, 5, 401, 96, 78783) se afişează:
23, 5, 401
8, 98, 116,
96, 78783
10. Un număr natural se numeşte palindrom dacă parcurgând cifrele de la stânga la dreapta se
obţine acelaşi număr parcurgând cifrele de la dreapta la stânga. Spre exemplu, numărul
25152 este palindrom. Însumând la un număr a inversul său şi repetând operaţia de un număr
de ori se obţine întotdeauna un număr palindrom. Spre exemplu: dacă a=78 şi se aplică
operaţiile de însumare repetată se obţine numărul palindrom 4884 ca mai jos:
78
78+87= 165
165+561=726
726+627=1353
1353+3531=4884
Să se definească un subprogram invers care primeşte prin parametrul a un număr natural cu cel
mult nouă cifre şi care returnează prin parametrul x inversul numărului a (numărul obţinut prin
parcurgerea cifrelor lui a de la dreapta la stânga). Folosind apeluri utile ale subprogramului
invers să se genereze un număr palindrom după modelul de mai sus.
11. Să se definească un subprogram prim care primeşte ca parametru un număr natural x de cel
mult 4 cifre şi care returnează valoarea 1 daca x este număr prim altfel întoarce valoarea 0.
Folosind apeluri utile ale subprogramului prim să se afişeze:
a. Numerele prime dintr-un tablou unidimensional v care prelucrează 100 de numere
naturale de cel mult patru cifre fiecare
b. Numerele prime dintr-un tablou bidimensional a cu 20 de linii şi 30 de coloane
c. Numerele prime din fişierul date.in
d. Primul şi ultimul număr prim din fişierul numere.in. În cazul în care sunt mai puţin de
două numere prime în fişier se va afişa un mesaj.
e. Primele n numere prime
f. Cel mai mare număr prim mai mic sau egal decât un număr natural nenul x citit
g. Cel mai apropiat număr prim de un număr natural nenul x citit
12. Două numere prime impare consecutive se numesc prime gemene. Să se definească un
subprogram prim care primeşte ca parametru un număr natural x de cel mult 4 cifre şi care
returnează valoarea 1 daca x este număr prim altfel întoarce valoarea 0. Folosind apeluri utile
ale subprogramului prim să se afişeze primele n perechi de numere prime gemene.
Exemplu: pentru n=4 se afişează: (3,5), (5,7), (11,13), (17,19)
13. Să se definească un subprogram suma_div care primeşte ca parametru un număr natural
nenul cu cel mult 8 cifre. Subprogramul returnează suma divizorilor numărului n.
Două numere m şi n se numesc numere prietene dacă suma divizorilor lui m (mai puţin
valoarea m) este egală cu valoarea lui n şi invers. Exemplu m=220 şi n=284 sunt prietene
pentru că m=1+2+71+142 (suma divizorilor lui 284) şi
n=1+2+4+5+10+11+20+22+44+55+110 (suma divizorilor lui 220). Folosind apeluri ale
subprogramului suma_div să se afişeze primele n perechi de numere prietene.
14. Să se definească un subprogram invers care primeşte ca parametru un număr natural x de cel
mult 9 cifre şi care returnează inversul lui x. Folosind apeluri utile ale subprogramului invers
să se afişeze:
a. Numerele palindrom dintr-un tablou unidimensional v care prelucrează 100 de numere
naturale de cel mult 9 cifre fiecare
b. Numerele palindrom dintr-un tablou bidimensional a cu 20 de linii şi 30 de coloane
c. Numerele palindrom din fişierul date.in
d. Primul şi ultimul număr palindrom din fişierul numere.in. În cazul în care sunt mai
puţin de două numere palindrom în fişier se va afişa un mesaj.
15. Scrieţi definiţia completă a unui subprogram sub, cu un parametru, subprogram care:
- primeşte prin intermediul parametrului a un număr natural cu cel mult 4 cifre (a>1)
- returnează cel mai mare divizor prim al valorii parametrului a.
Exemplu: pentru a=26 subprogramul va returna valoarea 13.
Folosind apeluri utile ale subprogramului sub să se afişeze numerele prime din fişierul
date.in care memorează numere întregi de cel mult 4 cifre fiecare
16. Să se definească un subprogram calcule care primeşte prin parametrul a un număr natural cu
cel mult nouă cifre şi care returnează prin parametrii x şi z cea mai mare respectiv cea mai
mică dintre cifrele numărului a. Folosind apeluri utile ale subprogramului calcule să se
determine:
a. Dacă un număr a are toate cifrele identice
b. Pentru n numere citite intervalul de valori care include toate cifrele numerelor citite.
Exemplu: pentru n=5 si valorile: 6767, 56373, 45755, 333, 774 se afişează perechea 3, 7
20. Să se definească:
a. un subprogram poz care primeşte ca parametri: un tablou unidimensional v care
memorează 100 de numere întregi de cel mult patru cifre fiecare, un număr natural n
(n≤100) reprezentând numărul de componente al tabloului şi un număr întreg x de cel
mult patru cifre. Subprogramul returnează indicele primei componente din v mai mare
ca x sau -1 dacă toate componentele din v au valori mai mici decât x.
b. Un subprogram inserare care are ca parametri: un tablou unidimensional v care
memorează 100 de numere întregi de cel mult patru cifre fiecare, un număr natural n
(n≤100) reprezentând numărul de componente al tabloului, un număr întreg p (p≤n)
reprezentând indicele unei componente din v şi un număr întreg x de cel mult patru
cifre. Subprogramul inserează valoarea x pe poziţia p în tabloul v actualizând numărul
de componente n.
Scrieţi un program care citeşte cele n numere întregi de cel mult patru cifre fiecare şi care
folosind apeluri utile ale subprogramelor poz şi inserare le memorează ordonat crescător în
componentele unui tablou v.
23. Să se definească:
a. un subprogram sub1 care primeşte ca parametri: un tablou unidimensional v care
memorează 100 de numere întregi de cel mult patru cifre fiecare şi un număr natural n
(n≤100) reprezentând numărul de componente al tabloului. Subprogramul returnează
prin parametrul p indicele primei valori pare din tabloul v.
Exemplu: daca v=(11,24,3,4,51,6) şi n=6 după apel p=2
b. un subprogram sub2 care primeşte ca parametri: un tablou unidimensional v care
memorează 100 de numere întregi de cel mult patru cifre fiecare şi un număr natural n
(n≤100) reprezentând numărul de componente al tabloului. Subprogramul returnează
prin parametrul q indicele ultimei valori impare din tabloul v.
Exemplu: daca v=(11,24,3,4,51,6) şi n=6 după apel q=5
Folosind apeluri utile ale subprogramelor sub1 şi sub2 să se mute la începutul unui tablou v
numerele impare iar la sfârşit valorile pare.
Exemplu: pentru v=(11,24,3,4,51,6,8,33) o soluţie poate fi: v=(11,33,3,51,6,8,4,24)
25. Scrieţi definiţia completă a subprogramului prelucrare, care primeşte prin cei 6 parametri v,
w, p1, p2, q1, q2:
- v, w două tablouri unidimensionale cu maximum 100 de elemente întregi din intervalul [-
1000;1000] fiecare
- p1, p2, q1, q2 numere naturale din intervalul [1,100] şi returnează valoarea 1 dacă
valorile componentelor din v cu indici cuprinşi intre p1 şi p2 sunt egale cu valorile
componentelor din w cu indici cuprinşi intre q1 şi q2 altfel returnează valoarea 0.
Folosind apeluri utile ale subprogramului prelucrare să se determine dacă există o secvenţă
de valori consecutive dintr-un tablou unidimensional a cu m componente (m≤100) egale cu
elementele unui tablou unidimensional b cu n componente (n≤m). Se va afişa DA sau NU.
Exemplu: pentru a =(2, 4, 5, 1, 9, 7, 8, 2, 10) şi b=(5, 1, 9, 7) se afişează DA.
26. Scrieţi definiţia subprogramului sterge, care primeşte prin cei 3 parametri v, n, p:
- v, un tablou unidimensional cu maximum 100 de elemente întregi din intervalul [-
1000;1000]
- n, un număr natural reprezentând numărul de elemente din tabloul v
- p o valoare naturală cu 1≤p≤n şi elimină din tabloul v elementul de indice p actualizând
valoarea parametrului n
Fie un tablou a unidimensional care memorează maximum 100 de elemente întregi din
intervalul [-1000;1000] ordonate crescător. Scrieţi un program care utilizează apeluri utile ale
subprogramului sterge pentru a elimina din tablou un număr minim de elemente astfel încât
să nu existe două elemente alăturate cu aceeaşi valoare. Elementele tabloului obţinut se
afişează pe ecran, separate prin câte un spaţiu.
Exemplu: pentru v=(1, 2, 2, 2, 7, 7, 8, 9, 9, 9) se va afişa: 1, 2, 7, 8, 9
27. Să se definească:
a. un subprogram calcule care primeşte prin parametrul a un număr natural cu cel mult
nouă cifre şi care returnează prin parametrii x şi z cea mai mare respectiv cea mai mică
dintre cifrele numărului a.
b. un subprogram modific care primeşte prin parametrul a un număr natural cu cel mult
nouă cifre şi două cifre c1 şi respectiv c2. Subprogramul înlocuieşte cifra c1 cu cifra c2
şi returnează rezultatul prin parametrul a.
Fie un tablou v care poate memora până la 100 de numere naturale cu cel mult 9 cifre
fiecare. Folosind apeluri utile ale subprogramelor calcule şi modific să se genereze tabloul
w care se obţine din componentele tabloului v pentru care pentru fiecare componentă s-au
înlocuit cifrele cu cea mai mică valoare cu cifra cu cea mai mare valoare.
Exemplu: pentru n=5 si valorile: v =(16767, 5632273, 45755, 3313, 774) se obţine
w=(76767, 5637773, 75755, 3333, 777)
28. Să se definească:
Un subprogram cmmdc cu parametrii x şi y numere naturale nenule de cel mult 4 cifre
fiecare. Subprogramul returnează cel mai mare divizor comun al valorilor x şi y
Un subprogram cmmmc cu parametrii x si y numere naturale nenule de cel mult 4 cifre
fiecare. Subprogramul returnează cel mai mic multiplu comun al valorilor x şi y
Fie un tablou unidimensional v care memorează cel mult 100 de numere naturale de cel
mult 4 cifre fiecare. Folosind apeluri utile ale subprogramelor cmmdc şi cmmmc să se
determine:
a. Cel mai mare divizor comun al componentelor tabloului v
b. Cel mai mic multiplu comun al componentelor tabloului v
c. Să se afişeze perechile de numere prime între ele din tabloul v
3 8 9 2
2 1 5 4
Pentru: a şi x=2, după ordonarea valorilor de pe linia 2 se obţine:
1 8 9 2
4 2
8 9
8 3 2 9
1 2 4 5
a
8 1 2 9
8 9
4 2
38. Să se definească un subprogram patrat care primeşte ca parametri: o matrice pătratică a cu
20 de linii şi 20 de coloane care memorează numere întregi de cel mult patru cifre, şi un
număr natural c(c≤20) reprezentând numărul de ordine al unui pătrat concentric al tabloului.
Spre exemplu daca c=1 atunci pătratul concentric memorează elementele de pe prima şi
ultima linie, respectiv de pe prima şi ultima coloană. Pentru c=2 se prelucrează elementele de
pe cea de a doua linie, a doua coloana, penultima linie, respectiv penultima coloană, ş.a.m.d.
Subprogramul returnează suma valorilor componentelor de pe coloana pătratul concentric c.
Folosind apeluri utile ale subprogramului patrat să se afişeze valorile componentelor
pătratului concentric cu cea mai mare sumă dintr-o matrice pătratică a cu n linii şi n coloane
care prelucrează numere întregi de cel mult patru cifre fiecare. În cazul în care sunt mai
multe astfel de pătrate se va afişa cel cu numărul de ordine cel mai mic. Elementele pătratului
concentric se vor afişa în sensul arcelor de ceasornic începând cu elementul din stânga sus.
Exemplu:
1 2 1 2
5 9 8 1
Pentru: a=
3 34 9 1
3 3 2 1
39. Fie un tablou bidimensional a cu m linii şi n coloane (1≤m, n≤20) având componente binare.
Fiecare linie constituie reprezentarea unui număr natural în baza 2. Se cere să se afişeze
aceste numere, numărul cel mai mare şi indicele liniei (liniilor) care determină numărul cu
cea mai mare valoare. Se va defini un subprogram care primeşte ca parametri: un tablou
bidimensional a ca cel descris anterior, numărul de coloane n, indicele unei linii L şi care
întoarce numărul zecimal asociat.
Exemplu:
0 1 0 1
1 0 1 1
Pentru: a= se va afişa:
0 0 1 1
0 1 0 0
5 11 3 4 - cele patru numere
11 - cea mai mare valoare
2 - linia care determină cea mai mare valoare
1 2 3 4 5 3 4 5 1 2
pentru a= 1 2 3 4 5 şi p=2 se obţine a= 3 4 5 1 2
1 2 3 4 5 3 4 5 1 2
41. Să se definească:
a. un subprogram calcul1 care primeşte ca parametri un tablou bidimensional a cu 20 de
linii şi 30 de coloane care memorează numere întregi, un număr n reprezentând
numărul efectiv de coloane şi un număr natural L (L≤20). Subprogramul returnează
suma elementele de pe linia L.
b. un subprogram calcul2 care primeşte ca parametri un tablou bidimensional a cu 20 de
linii şi 30 de coloane care memorează numere întregi, un număr m reprezentând
numărul efectiv de linii şi un număr natural C (C≤30). Subprogramul returnează suma
elementele de pe coloana C.
Folosind apeluri utile ale subprogramelor calcul1 şi calcul2 să se bordeze matricea cu
linia m+1 şi coloana n+1 unde a[m+1,j] reprezintă suma elementelor de pe coloana j iar
a[i,n+1] suma elementelor de pe linia i a unui tablou bidimensional cu m (m≤20) linii şi n
(n≤30) coloane.
Exemplu:
1 5 7 13
1 5 7
pentru a= se obţine a= 2 9 6 17
2 9 6 3 14 13 30
1 0 3 4 5
0 2 0 0 0
pentru a= se va afişa 1, 3.
3 7 0 1 2
0 0
0 0 1
4 5 5 6 7
1 2 2 2 2
pentru a= se va afişa 1, 3.
3 2 6 6 1
4 1
1 1 1
44. Fie un tablou bidimensional a cu 20 de linii şi 30 de coloane care memorează numai valori
binare (0 şi 1). Două linii se numesc complementare daca suma valorilor de pe aceeaşi
coloana este egală cu 1. Să se definească un subprogram complement care primeşte ca
parametri un tablou bidimensional a cu 20 de linii şi 30 de coloane care memorează valori
binare, un număr n reprezentând numărul efectiv de coloane şi două numere naturale L1 şi
L2 (L1,L2≤20). Subprogramul returnează 1 dacă liniile L1 şi L2 sunt complementare.
Folosind apeluri utile ale subprogramului complement să se afişeze perechile de linii
complementare ale unui tablou a cu m linii şi n coloane. În cazul în care nu există linii
complementare se va afişa un mesaj.
Exemplu:
1 0 0 1
1 1 0 0
pentru a= 0 1 1 0 se va afişa: (1,3), (1,5), (2,4)
0 0 1 1
0 1 1 0
47. Fie un tablou bidimensional cu m linii şi n coloane (m,n≤50) care memorează numere întregi.
Să se determine dacă tabloul are puncte şa. Un punct se numeşte şa dacă este minim pe linia
pe care se situează şi maxim pe coloana pe coloana pe care se situează.
Exemplu: pentru m=3, n=4 şi tabloul:
5612
8879
4532
se afişează valoarea 7.