Informatică, întrebare adresată de comanionut41, 7 ani în urmă

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.

Anexe:

Răspunsuri la întrebare

Răspuns de bobita25
1

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;

}


comanionut41: Mersi mult!
bobita25: Am mai făcut câteva modificări la program că erau niște probleme la numerele negative la puncte b) și c).. acum e totul OK. Daca ai întrebări, sunt dispus să-ți răspund.
Alte întrebări interesante