Documente Academic
Documente Profesional
Documente Cultură
Rezolvare:
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ifstream fin("numere.in");
ofstream fout("numere.out");
int n;
fin >> n;
vector<int> numbers(n);
for (int i = 0; i < n; i++) {
fin >> numbers[i];
}
vector<int> result;
for (int i = 0; i < n - 1; i++) {
int max_concatenation = max(Concatenare(numbers[i], numbers[i + 1]), Concatenare(numbers[i
+ 1], numbers[i]));
result.push_back(max_concatenation);
}
for (int i = 0; i < result.size(); i++) {
fout << result[i] << "\n";
}
fin.close();
fout.close();
return 0;
}
Bilet nr 2
Fișierul date.in conține maximum 1000 de numere naturale.
a. Să se scrie definiția completă a unui subprogram FactorPutereMax cu un
singur parametru n, număr natural. Subprogramul returnează factorul prim cu
puterea cea mai mare din descompunerea în factori primi a lui n. În cazul în care
există factori primi cu puteri egale, atunci se va returna factorul cel mai mare. De
exemplu, pentru n = 90 = 21 * 32 * 51, cea mai mare putere este 2, deci se va
returna factorul 3. Pentru n = 36 = 22 * 32, puterile fiind egale, se va returna
factorul 3.
b. Scrieți un program C++ care citește cel mult 1000 de numerele naturale din
fișierul date.in și, folosind apeluri utile ale subprogramului
FactorPutereMax, scrie în fișierul date.out: pe prima linie, pentru fiecare
număr citit, factorul prim la puterea cea mai mare, apoi pe linia următoare cel
mai mare dintre acești factori.
Rezolvare
a.
#include <cmath>
int FactorPutereMax(int n) {
// Găsește factorul prim cu puterea cea mai mare în descompunerea în factori primi a lui n.
int factorMax = 0;
int putereMax = 0;
// Dacă numărul n nu a fost redus la 1, atunci el este ultimul factor prim cu puterea 1
if (n > 1) {
factorMax = n;
putereMax = 1;
}
return factorMax;
}
B.
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int FactorPutereMax(int n) {
// Definiția funcției FactorPutereMax
// ...
int main() {
ifstream fin("date.in");
ofstream fout("date.out");
int n;
fin >> n;
vector<int> numbers(n);
for (int i = 0; i < n; i++) {
fin >> numbers[i];
}
vector<int> factors;
for (int i = 0; i < n; i++) {
int factorMax = FactorPutereMax(numbers[i]);
factors.push_back(factorMax);
}
fin.close();
fout.close();
return 0;
}
Bilet nr 3:
Fișierul atestat.in conține maximum 100000 de numere naturale.
a. Să se scrie definiția completă a unui subprogram CifraMax, cu un singur parametru
n, număr natural. Subprogramul returnează cea mai mare cifră a numărului n. De
exemplu, pentru n = 65706, se va returna 7.
b. Scrieți un program C++ care citește numerele din atestat.in și, folosind apeluri
utile ale subprogramului CifraMax, scrie în fișierul atestat.out cifra care este
maximă pentru cele mai multe numere din fișier. Dacă există mai multe astfel de cifre,
se vor afișa toate cu această proprietate, în ordine crescătoare. Proiectați un algoritm
eficient din punctul de vedere al memoriei folosite și al timpului de executare.
A.
int CifraMax(int n) {
// Găsește cea mai mare cifră a numărului n
int maxDigit = 0;
while (n > 0) {
int cifra = n % 10;
if (cifra > maxDigit) {
maxDigit = cifra;
}
n /= 10;
}
return maxDigit;
}
B.
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
int CifraMax(int n) {
// Definiția funcției CifraMax
// ...
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
int n;
fin >> n;
vector<int> numbers(n);
for (int i = 0; i < n; i++) {
fin >> numbers[i];
}
vector<int> maxDigits;
for (auto it : digitCount) {
if (it.second == maxCount) {
maxDigits.push_back(it.first);
}
}
sort(maxDigits.begin(), maxDigits.end());
fin.close();
fout.close();
return 0;
}
Bilet nr 4:
a. Să se scrie definiția completă a unui subprogram Inversez cu trei paramentrii: v –
tablou unidimensional cu maximum 100 de elemente, numere reale, si doi parametrii
întregi: p, q - două poziții din tabloul v, p < q < 100 . Subprogramul modifică
tabloul prin inversarea elementelor între poziția p și poziția q și returnează prin
același parametru tabloul modificat. (Dacă v ={1.2, 2, 3.1 ,4.25, 5, 6.3),
p = 2, q = 5, după inversare tabloul va avea conținutul: v ={1.2, 5,
4.25 ,3.1, 2, 6.3).
b. Să se scrie definiția completă a unui subprogram Stergp cu trei paramentrii: v –
tablou unidimensional cu maximum 100 de elemente, numere reale, si doi
parametrii întregi: n, p – numărul de elemente din vector și p < 100 .
Subprogramul modifică tabloul prin ștergerea elementului de pe poziția p și
returnează prin același parametru tabloul modificat.
c. Scrieți un program C++ care citește din fișierul numere.in de pe prima linie număr
natural, n (n < 100) și de pe a doua linie un șir cu maxim 100 de numere reale.
Folosind apeluri utile ale subprogramului Stergp, șterge elementul din mijlocul
șirului, în cazul în care acesta are un număr impar de elemente. Folosind apeluri utile
ale subprogramului Inversez, se vor inversa fiecare din cele două jumătăți ale
șirului, apoi afișează, în fișierul numere.out, conținutul șirului modificat.
A.
void Inversez(float v[], int p, int q) {
// Inversează elementele tabloului v între poziția p și poziția q
while (p < q) {
float temp = v[p];
v[p] = v[q];
v[q] = temp;
p++;
q--;
}
}
B.
void Stergp(float v[], int& n, int p) {
// Șterge elementul de pe poziția p din tabloul v
for (int i = p; i < n - 1; i++) {
v[i] = v[i + 1];
}
n--;
}
C.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("numere.in");
ofstream fout("numere.out");
int n;
fin >> n;
float v[100];
if (n % 2 != 0) {
Stergp(v, n, n / 2);
}
int jumatate = n / 2;
Inversez(v, 0, jumatate - 1);
Inversez(v, jumatate, n - 1);
fin.close();
fout.close();
return 0;
}
Bilet nr 5:
a. Să se scrie definiția completă a unui subprogram CifrePare cu un paramentru n,
număr natural, care returnează numărul format doar din cifrele pare ale lui n, având
cifrele în ordinea inițială. (Ex: pentru n = 12245, se returnează 224)
b. Să se scrie definiția completă a unui subprogram CifreCresc cu un paramentru n,
număr natural, care returnează 1 dacă cifrele lui n sunt în ordine crescătoare și 0
altfel. (Ex: pentru n = 12245, se returnează 1, iar pentru 12436, returnează 0)
c. Fișierul date.in conține maximum 1000000 de numere naturale, fiecare din ele
conținând cel puțin o cifră pară. Scrieți un program C++ care citește numerele din
date.in și, folosind apeluri utile ale celor două subprograme, scrie în fișierul
date.out suma formată prin adunarea numerelor obținute din cifrele pare ale
numerelor citite, dacă numerele astfel obtinute au cifrele în ordine crescătoare.
A.
int CifrePare(int n) {
int rezultat = 0;
int putere = 1;
while (n > 0) {
int cifra = n % 10;
if (cifra % 2 == 0) {
rezultat += cifra * putere;
putere *= 10;
}
n /= 10;
}
return rezultat;
}
B.
bool CifreCresc(int n) {
int cifraAnterioara = n % 10;
n /= 10;
while (n > 0) {
int cifra = n % 10;
if (cifra > cifraAnterioara) {
return false;
}
cifraAnterioara = cifra;
n /= 10;
}
return true;
}
C.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("date.in");
ofstream fout("date.out");
int n;
fin >> n;
int suma = 0;
if (CifreCresc(cifrePare)) {
suma += cifrePare;
}
}
fin.close();
fout.close();
return 0;
}
Bilet nr 6:
a. Să se scrie definiția completă a unui subprogram Cmmdc cu doi parametrii, numere
naturale a și b, care returnează cel mai mare divizor comun al numerelor a și b
(Pentru 20 și 8, returnrază 4)
b. Să se scrie definiția completă a unui subprogram Cmmmc cu doi parametrii, numere
naturale a și b, care returnează cel mai mic multiplu comun al numerelor a și b
(Pentru 20 și 8, returnează 40)
c. Fișierul atestat.in conține maximum 1000000 de numere naturale. Scrieți un
program C++ care citește numerele din atestat.in și, folosind apeluri utile al
subprogramelor Cmmdc si Cmmmc, scrie pe prima linie a fișierului atestat.out
cel mai mare divizor comun al numerelor citite din fișier, iar pe a doua, cel mai mic
multiplu comun al numerelor citite din fișier.
A.
unsigned int Cmmdc(unsigned int a, unsigned int b) {
while (b != 0) {
unsigned int temp = b;
b = a % b;
a = temp;
}
return a;
}
B.
unsigned int Cmmmc(unsigned int a, unsigned int b) {
unsigned int cmmdc = Cmmdc(a, b);
return (a * b) / cmmdc;
}
C.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
unsigned int n;
fin >> n;
if (i == 0) {
divizorComunMaxim = numar;
multipluComunMinim = numar;
} else {
divizorComunMaxim = Cmmdc(divizorComunMaxim, numar);
multipluComunMinim = Cmmmc(multipluComunMinim, numar);
}
}
fin.close();
fout.close();
return 0;
}
Bilet nr 7:
a. Să se scrie definiția completă a unui subprogram InserezP cu patru paramentrii: n –
numărul de elemente al vectorului v, v – vector cu maximum 100 de
elemente, numere întregi, p, p <=100 reprezentând o poziție în vector și val – o
valoare întreagă. Subprogramul modifică vectorul prin inserarea, pe poziția p a unui
element de valoare val și returnează prin parametrul v vectorul modificat. (Ex:
pentru n=4, v={2, 5, 6, 9}, p = 2, val = 100 , vectorul modificat este:
{2, 100, 5, 6, 9}, considerând că indexarea s-a făcut de la 1)
b. Să se scrie definiția completă a unui subprogram SumaCifre, cu un singur
parametru x, număr natural. Subprogramul returnează suma cifrelor lui x. De
exemplu, pentru n = 27, se va returna 9.
c. Fișierul numere.in conține pe prima linie n, număr natural, n<100, și pe a doua linie
maximum 100 de numere naturale. Scrieți un program C++ care citește datele din
numere.in și, folosind apeluri utile ale subprogramelor InserezP și SumaCifre,
inserează în vector, după fiecare element, suma cifrelor sale, apoi afișează în
numere.out vectorul modificat.
A.
void InserezP(int& n, int v[], int p, int val) {
if (n >= 100) {
cout << "Vectorul are deja numarul maxim de elemente!";
return;
}
if (p < 1 || p > n + 1) {
cout << "Pozitia p nu este valida!";
return;
}
v[p - 1] = val;
n++;
}
B.
int SumaCifre(int x) {
int suma = 0;
while (x != 0) {
suma += x % 10;
x /= 10;
}
return suma;
}
C.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("numere.in");
ofstream fout("numere.out");
int n;
fin >> n;
int v[100];
for (int i = 0; i < n; i++) {
fin >> v[i];
}
fin.close();
fout.close();
return 0;
}
Biletul nr. 8
A.
#include <cmath>
int EPrim(int x) {
if (x < 2)
return 0;
return 1;
}
B.
#include <iostream>
#include <fstream>
#include <unordered_map>
using namespace std;
int main() {
ifstream fin("numere.in");
ofstream fout("numere.out");
int numar;
unordered_map<int, int> primCount;
if (maxPrim != -1) {
fout << "Numar prim determinat: " << maxPrim << endl;
fout << "Numar de aparitii: " << maxCount << endl;
} else {
fout << "Nu exista" << endl;
}
fin.close();
fout.close();
return 0;
}
Biletul nr. 9
A.
#include <unordered_set>
int CifreDistincte(int n) {
std::unordered_set<int> digits;
while (n > 0) {
int digit = n % 10;
if (digits.count(digit) > 0) {
return 0;
}
digits.insert(digit);
n /= 10;
}
return 1;
}
B.
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main() {
ifstream fin("date.in");
ofstream fout("date.out");
vector<int> cifreDistincte;
vector<int> cifreNedistincte;
int numar;
if (cifreDistincte.empty()) {
fout << "Nu exista" << endl;
} else {
fout << "Numere cu cifre distincte: ";
for (int i = 0; i < cifreDistincte.size(); i++) {
fout << cifreDistincte[i];
if (i < cifreDistincte.size() - 1) {
fout << ", ";
}
}
fout << " (" << cifreDistincte.size() << ")" << endl;
}
if (cifreNedistincte.empty()) {
fout << "Nu exista" << endl;
} else {
fout << "Numere fara cifre distincte: ";
for (int i = 0; i < cifreNedistincte.size(); i++) {
fout << cifreNedistincte[i];
if (i < cifreNedistincte.size() - 1) {
fout << ", ";
}
}
fout << " (" << cifreNedistincte.size() << ")" << endl;
}
fin.close();
fout.close();
return 0;
}
Biletul nr. 10
A.
#include <iostream>
B.
void Sortpq(int n, int v[], int p, int q) {
for (int i = p; i <= q; i++) {
for (int j = i + 1; j <= q; j++) {
if (v[i] > v[j]) {
int temp = v[i];
v[i] = v[j];
v[j] = temp;
}
}
}
}
C.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("numere.in");
ofstream fout("numere.out");
int n;
fin >> n;
int v[100];
for (int i = 0; i < n; i++) {
fin >> v[i];
}
int prim, ultim;
PozitiiPare(n, v, prim, ultim);
Biletul nr. 11
Scrieți un program C/C++ care pentru un cuvânt S citit, afișează toate sufixele lui în ordine
descrescătoare a lungimii, precum și numărul de sufixe corespunzătoare cuvântului dat.
A.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ofstream fout("sufixe.out");
string S;
cin >> S;
int n = S.length();
vector<string> sufixe;
fout.close();
return 0;
}
Biletul nr. 12
Pentru un cuvânt dat se cere să se afișeze toate subșirurile centru care se pot obține,
precum și numărul acestora.
Date de intrare: Programul citeşte din fișierul cuvinte.in un şir de caractere s cu cel mult
20 de caractere şi minim un caracter, format doar din litere mici ale alfabetului englez.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ifstream fin("cuvinte.in");
ofstream fout("cuvinte.out");
string s;
fin >> s;
int n = s.length();
vector<string> subșiruri;
fin.close();
fout.close();
return 0;
}
Biletul nr. 13
Un număr natural x se numește număr vocal asociat unui șir de caractere a, dacă este
format din cifrele corespunzătoare numerelor de ordine ale vocalelor din șirul a. Numerele de ordine
ale caracterelor din șirul a se consideră numerotate de la stânga la dreapta, începând cu valoarea 1.
Dacă numărul de ordine al unei vocale este mai mare decât 9, cifra se obține scăzând din valoarea
acestuia, valoarea 10.
Scrieţi un program C/C++ care pentru un cuvânt dat, determină și afișează numărul vocal
asociat.
Date de intrare: Programul va citi din fișierul cuvant.in un şir de caractere a cu cel mult
30 caractere şi minim un caracter, format doar din litere mici ale alfabetului englez.
Date de ieșire: Programul va scrie în fișierul numar.out, numărul vocal asociat şirului
memorat în variabila a, ca în exemplu. Dacă șirul a are mai mult de 17 caractere, sau este format
doar din consoane, se va afișa mesajul Imposibil.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream fin("cuvant.in");
ofstream fout("numar.out");
string a;
fin >> a;
int n = a.length();
if (n > 17 || n == 0) {
fout << "Imposibil" << endl;
} else {
string numar;
for (int i = 0; i < n; i++) {
char ch = a[i];
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
int ordine = i + 1;
if (ordine > 9) {
numar += to_string(ordine - 10);
} else {
numar += to_string(ordine);
}
}
}
if (numar.empty()) {
fout << "Imposibil" << endl;
} else {
fout << numar << endl;
}
}
fin.close();
fout.close();
return 0;
}
Biletul nr. 14
Un număr natural x se numește număr cons asociat unui șir de caractere a, dacă este
format din cifrele corespunzătoare numerelor de ordine ale consoanelor din șirul a. Numerele de
ordine ale caracterelor din șirul a se consideră numerotate de la stânga la dreapta, începând cu
valoarea 1. Dacă numărul de ordine al unei consoane este mai mare decât 9, cifra se obține scăzând
din valoarea acestuia, valoarea 10.
Scrieţi un program C/C++ care, pentru un cuvânt dat, determină și afișează numărul cons
asociat.
Date de intrare: Programul va citi din fișierul cuvant.in un şir a cu cel mult 30 caractere
şi minim un caracter, format doar din litere mici ale alfabetului englez.
Date de ieșire: Programul va scrie în fișierul numar.out, numărul cons asociat şirului
memorat în variabila a, ca în exemplu. Dacă șirul a are mai mult de 17 caractere, sau este format
doar din vocale, se va afișa mesajul Imposibil.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream fin("cuvant.in");
ofstream fout("numar.out");
string a;
fin >> a;
int n = a.length();
if (n > 17 || n == 0) {
fout << "Imposibil" << endl;
} else {
string numar;
for (int i = 0; i < n; i++) {
char ch = a[i];
if (ch != 'a' && ch != 'e' && ch != 'i' && ch != 'o' && ch != 'u') {
int ordine = i + 1;
if (ordine > 9) {
numar += to_string(ordine - 10);
} else {
numar += to_string(ordine);
}
}
}
if (numar.empty()) {
fout << "Imposibil" << endl;
} else {
fout << numar << endl;
}
}
fin.close();
fout.close();
return 0;
}
Biletul nr. 15
Se consideră un text cu cel mult 255 de caractere (litere mici ale alfabetului englez și spații),
în care cuvintele sunt separate printr-un singur spațiu. Înaintea primului cuvânt și după ultimul
cuvânt nu există spații.
Scrieți un program C/C++ care citește un număr natural x și un text de tipul menționat mai
sus și afișează numărul de cuvinte din textul dat în care litera o apare cel puțin o dată și de cel mult x
ori, iar apoi, cuvintele ce îndeplinesc această condiție.
Date de intrare: Programul va citi din fișierul atestat.in, de pe prima linie, un număr
natural x (x≤10), apoi de pe linia următoare un text t cu cel mult 255 de caractere şi minim
un caracter, scris pe o singură linie, format doar din litere mici ale alfabetului englez și spații.
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
int x;
fin >> x;
fin.ignore();
string text;
getline(fin, text);
istringstream iss(text);
string word;
int count = 0;
fin.close();
fout.close();
return 0;
}
Biletul nr. 16
Se consideră un text cu cel mult 100 de caractere (litere mici ale alfabetului englez și spații),
în care cuvintele sunt separate printr-un singur spațiu. Înaintea primului cuvânt și după ultimul
cuvânt nu există spații.
Scrieți un program C/C++ care citește un text t de tipul menționat mai sus și o literă mică c.
Programul determină dublarea fiecărei litere c în șirul t și afișează pe ecran numărul de modificari
realizate și textul modificat în memorie.
Date de intrare: Programul va citi din fișierul atestat.in, de pe prima linie, un text t
cu cel mult 100 de caractere şi minim un caracter, scris pe o singură linie, format doar din litere mici
ale alfabetului englez și spații. De pe linia următoare se va citi un singur caracter c.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
string text;
getline(fin, text);
char c;
fin >> c;
int modifications = 0;
for (char& ch : text) {
if (ch == c) {
text.insert(text.begin() + (&ch - &text[0]) + 1, ch);
modifications++;
}
}
fin.close();
fout.close();
return 0;
}
Biletul nr. 17
Se consideră un text cu cel mult 255 de caractere (litere mici ale alfabetului englez și spații),
în care cuvintele sunt separate printr-un singur spațiu. Înaintea primului cuvânt și după ultimul
cuvânt nu există spații. Fiecare cuvânt are cel puțin o consoană.
Scrieți un program C/C++ care citește un număr natural x, un text de tipul menționat mai
sus și apoi modifică textul astfel: se vor șterge primele x vocale din fiecare cuvânt al textului. Dacă
într-un cuvânt nu există cel puțin x vocale atunci cuvântul din text va rămâne nemodificat.
Date de intrare: Programul va citi din fișierul atestat.in, de pe prima linie, un număr
natural x (x≤10), apoi de pe linia următoare un text t cu cel mult 255 de caractere şi minim
un caracter, scris pe o singură linie, format doar din litere mici ale alfabetului englez și spații.
Date de ieșire: Programul va scrie în fișierul atestat.out textul modificat conform cerinței
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
using namespace std;
int vowelCount = 0;
for (char& c : word) {
if (isVowel(c)) {
vowelCount++;
if (vowelCount <= x) {
c = ' ';
}
}
}
modifiedText += word;
return modifiedText;
}
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
int x;
fin >> x;
fin.ignore(); // Ignore newline character
string text;
getline(fin, text);
fin.close();
fout.close();
return 0;
}
Biletul nr. 18
Se consideră un text cu cel mult 255 de caractere (litere mici ale alfabetului englez și spații),
în care cuvintele sunt separate printr-un singur spațiu. Înaintea primului cuvânt și după ultimul
cuvânt nu există spații. Fiecare cuvânt are cel puțin o vocală.
Scrieți un program C/C++ care citește un număr natural x, un text de tipul menționat mai
sus și apoi modifică textul astfel: se vor șterge ultimele x consoane din fiecare cuvânt al textului.
Dacă într-un cuvânt nu există cel puțin x consoane atunci cuvântul din text va rămâne nemodificat.
Date de intrare: Programul va citi din fișierul atestat.in, de pe prima linie, un număr
natural x (x≤10), apoi de pe linia următoare un text t cu cel mult 255 de caractere şi minim
un caracter, scris pe o singură linie, format doar din litere mici ale alfabetului englez și spații.
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
using namespace std;
return modifiedText;
}
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
int x;
fin >> x;
fin.ignore(); // Ignore newline character
string text;
getline(fin, text);
fin.close();
fout.close();
return 0;
}
Biletul nr. 19
Se consideră un text cu cel mult 50 de caractere (litere mici ale alfabetului englez și spații), în
care cuvintele sunt separate prin câte un singur spațiu. Înaintea primului cuvânt și după ultimul
cuvânt nu există spații. Textul are cel puțin o vocală.
Scrieți un program C/C++ care citește un text t de tipul menționat mai sus. Programul
determină modificarea în memorie a textului prin inserarea după fiecare vocală a unui grup de două
litere format din cele două litere ce succed (urmează) vocala în alfabetul englez.
Date de intrare: Programul va citi din fișierul atestat.in, de pe prima linie un text t
cu cel mult 50 de caractere şi minim un caracter, scris pe o singură linie, format doar din litere mici
ale alfabetului englez și spații.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
string text;
getline(fin, text);
fin.close();
fout.close();
return 0;
}
Biletul nr. 20
Se consideră un text codificat cu cel mult 255 de caractere (litere mici ale alfabetului englez
și spații), în care cuvintele sunt separate prin câte un singur spațiu. Înaintea primului cuvânt și după
ultimul cuvânt nu există spații. Codificarea acestui text s-a realizat prin inserarea după fiecare vocală
a unui grup de două litere format din cele două litere ce succed (urmează) vocala în alfabetul englez.
Scrieți un program C/C++ care citește un text de tipul menționat mai sus. Programul
decodifică textul prin ștergerea grupului de două litere inserate inițial după fiecare vocală și afișează
pe ecran textul astfel modificat.
Date de intrare: Programul va citi din fișierul atestat.in, de pe prima linie un text t
cu cel mult 255 de caractere şi minim un caracter, scris pe o singură linie, format doar din litere mici
ale alfabetului englez și spații.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
string text;
getline(fin, text);
fin.close();
fout.close();
return 0;
}
Biletul nr. 21
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_set>
using namespace std;
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
int n, k;
fin >> n >> k;
// Determinăm linia k
vector<int>& linieK = tablou[k - 1];
fin.close();
fout.close();
return 0;
}
Biletul nr. 22
.
a. Scrieți definiția completă a subprogramului interschimbL cu patru parametri:
a, reprezentând un tablou bidimensional cu cel mult 200 de linii și 200 de
coloane;
m, reprezentând numărul de coloane;
k1 și k2, două numere naturale, reprezentând numărul de ordine a două linii
din tablou.
Subprogramul interschimbă elementele de pe linia k1 cu elementele de pe linia k2.
b. În fișierul atestat.in, pe prima linie se află două numere n și m (2 ≤ n, m ≤
200) reprezentând numărul de linii, respectiv de coloane ale unui tablou
bidimensional, iar pe următoarele n linii se află câte m numere naturale de maxim 9
cifre, ce reprezintă elementele tablouluiScrieți un program care citește din fișierul
atestat.in numerele n și m, apoi tabloul bidimensional cu n*m elemente și,
folosind apeluri utile ale subprogramului interschimbL, schimbă între ele
elementele liniei pe care apare prima dată valoarea minimă din tablou cu elementele
liniei pe care apare prima data valoarea maximă. Tabloul modificat se va scrie în
fișierul atestat.out, fiecare linie a tabloului se va scrie pe o linie din fișier, iar
elementele de pe aceeași linie vor fi separate printr-un spațiu. Dacă cele două valori
apar pentru prima data pe aceeași linie, tabloul nu va fi modificat.
A.
void interschimbL(int a[][200], int m, int k1, int k2) {
for (int j = 0; j < m; j++) {
int temp = a[k1][j];
a[k1][j] = a[k2][j];
a[k2][j] = temp;
}
}
B.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
int n, m;
fin >> n >> m;
int tablou[200][200];
fin.close();
fout.close();
return 0;
}
Biletul nr. 23
// Subprogramul nrpare_s
int nrpare_s(int n, int a[][100]) {
int count = 0;
for (int i = 0; i < n; i++) {
if (a[i][n - 1 - i] % 2 == 0) {
count++;
}
}
if (count > 0) {
return count;
} else {
return -1;
}
}
B.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("matrice.in");
int n;
fin >> n;
int tablou[100][100];
// Afișarea rezultatelor
if (count_p == -1 && count_s == -1) {
cout << "Nu exista" << endl;
} else {
cout << "Diagonala principala: " << count_p << " elemente pare" << endl;
cout << "Diagonala secundara: " << count_s << " elemente pare" << endl;
}
fin.close();
return 0;
}
Biletul nr. 24
b. Scrieți un program care citește din fișierul matrice.in un număr natural n și o matrice cu
n linii ți n coloane și afișează în fișierul matrice.out indicii liniilor din matrice pentru care
suma elementelor are valoare maximă. Se va folosi subprogramul definit la punctul a. Liniile
și coloanele tabloului au indicii de la 1 la n.
A.
int suma(int x[][10], int n, int p) {
int sum = 0;
for (int j = 0; j < n; j++) {
sum += x[p - 1][j];
}
return sum;
}
B.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("matrice.in");
ofstream fout("matrice.out");
int n;
fin >> n;
int matrice[10][10];
int maxSum = 0;
int liniiMaxime[10];
int count = 0;
fin.close();
fout.close();
return 0;
}
A.
int numarare(int x[][10], int n, int p) {
int count = 0;
for (int i = 0; i < n; i++) {
if (x[i][p - 1] != 0) {
count++;
}
}
return count;
}
B.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("atestat.in");
int n;
fin >> n;
int tablou[10][10];
Biletul nr. 26
Într-un tablou bidimensional, cu elemente având valori numai din mulțimea {0,1}, numim coloane
”complementare” două coloane cu proprietatea că oricare două elemente ale acestora, aflate pe
aceeași linie, sunt diferite.
B.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("atestat.in");
int n, m;
fin >> n >> m;
int tablou[200][200];
int numarColoaneComplementare = 0;
// Afișarea rezultatului
cout << "Numarul de coloane complementare cu prima coloana: " << numarColoaneComplementare <<
endl;
return 0;
}
Biletul nr. 27
B.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
int n, m;
fin >> n >> m;
int tablou[200][200];
int minColoana = 0;
int maxColoana = 0;
fin.close();
fout.close();
return 0;
}
Biletul nr. 28
return maxPar;
}
B.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("matrice.in");
ofstream fout("matrice.out");
int n;
fin >> n;
int tablou[100][100];
fin.close();
fout.close();
return 0;
}
Biletul nr. 29
La un magazin au fost aduse mai multe sortimente de produse, pentru fiecare cunoscându-
se cantitatea (exprimată în bucăţi), preţul de achiziţie şi adaosul comercial (exprimat în procent din
valoarea de achiziţie). În decursul uneisăptămâni s-a contorizat, cantitatea vândută din fiecare
produs.
Realizați un program care citește din fișierul vanzari.in numărul natural n (reprezentând
numărul de produse vândute, numerotate de la 1 la n), apoi de pe următoarele n linii cate trei
numere reale reprezentând cantitatea, prețul și adaosul comercial pentru fiecare din cele n produse
vândute. Programul afișează pe ecran valoarea totală a vânzărilor obținute pe întreaga săptămână
precum și numărul de ordine (din fișier) al celui mai vândut produs (produsul care a fost vândut în
cantitatea cea mai mare). Dacă există mai multe produse vândute în aceeași cantitate maximă se va
lua în considerare cel cu adaosul comercial mai mare.
#include <iostream>
#include <fstream>
using namespace std;
struct Produs {
int numar;
float cantitate;
float pret;
float adaos;
};
int main() {
ifstream fin("vanzari.in");
int n;
fin >> n;
Produs produse[100];
fin.close();
cout << "Valoarea totala a vanzarilor: " << vanzariTotal << endl;
cout << "Numarul produsului cel mai vandut: " << numarProdusMaxim << endl;
return 0;
}
Biletul nr. 30
Pentru elevii clasei a XII-a, profesorul diriginte are nevoie de următoarele informații,
pentru a calcula nota la purtare a unui elev: numele, prenumele, numărul total de absențe și
numărul de absențe motivate. Pentru fiecare 10 absențe nemotivate, elevul pierde un punct la
nota de la purtare. Dacă numărul absențelor nemotivate este mai mare de 50, elevul primește
media 4.
Realizați un program care citește din fișierul elevi.in de pe prima linie, numărul
natural n (reprezentând numărul elevilor din clasă), apoi de pe următoarele n linii ale
fișierului datele fiecărui elev: numele (șir de caractere fără spații), prenumele (șir de
caractere fără spații), număr_total de absențe (nr. natural) și numărul de absențe
motivate (nr. natural). Programul calculează notele la purtare ale elevilor și afișează
în fișierul elevi.out, o listă a elevilor (numele, prenumele, nota la purtare) ordonată
descrescător după nota de la purtare.
Precizări: toate numerele din fișierul de intrare sunt mai mici decât 200,
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Elev {
string nume;
string prenume;
int absenteTotale;
int absenteMotivate;
int notaPurtare;
};
int main() {
ifstream fin("elevi.in");
ofstream fout("elevi.out");
int n;
fin >> n;
vector<Elev> elevi(n);
// Citirea datelor despre elevi
for (int i = 0; i < n; i++) {
fin >> elevi[i].nume >> elevi[i].prenume >> elevi[i].absenteTotale >> elevi[i].absenteMotivate;
fin.close();
fout.close();
return 0;
}