Fişierul atestat.in conţine două linii. Pe prima linie se găsește un număr natural nenul n, (n<1000), iar pe cea
de-a doua linie un şir de n numere întregi, de cel mult 4 cifre fiecare, separate prin câte un spaţiu.
Să se scrie un program care:
a) să afişeze pe ecran, în linie, valorile absolute ale numerelor din şir, separate prin câte un spaţiu;
b) să afişeze pe ecran, în linie, numărul de divizori pozitivi proprii pentru fiecare număr din şir, separaţi prin
câte un spaţiu;
c) să scrie în fişierul atestat.out toate numerele impare din şir, în ordine crescătoare, separate prin câte un
spaţiu.
Notă: Programul va conţine cel puţin un subprogram definit de utilizator.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAX_N = 1000;
int nr_div(int n) {
int cnt = 0;
for (int i = 2; i <= sqrt(abs(n)); i++) {
if (n % i == 0) {
if (n / i == i) {
cnt++;
} else {
cnt += 2;
}
}
}
return cnt;
}
int main() {
ifstream fin("atestat.in");
ofstream fout("atestat.out");
int n;
fin >> n;
int v[MAX_N];
for (int i = 0; i < n; i++) {
fin >> v[i];
}
for (int i = 0; i < n; i++) {
cout << abs(v[i]) << " ";
}
cout << endl;
for (int i = 0; i < n; i++) {
cout << nr_div(v[i]) << " ";
}
cout << endl;
sort(v, v + n);
for (int i = 0; i < n; i++) {
if (v[i] % 2 == 1 || v[i] % 2 == -1) {
fout << v[i] << " ";
}
}
fin.close();
fout.close();
return 0;
}