am nevoie de ajutor

Fişierul atestat.in conţine două linii. Pe prima linie este scris un număr natural nenul n, (5
Să se scrie un program în limbajul C++, care:

a) să afişeze pe prima linie a ecranului valorile pare din fişier, separate prin câte un spaţiu;

b) să afişeze pe ecran, pe linii diferite, cel mai mic număr a şi cel mai mare număr b din şirul dat;

c) să scrie în fişierul atestat.out cel mai mare divizor comun al numerelor a şi b, determinate la punctul b).


Exemplu:


atestat.in Date de ieşire:

6

123 55 372 3465 242 44
a) 372 242 44
b) 44
3465
Fişierul atestat.out conţine:
c) 11


Răspuns :

#include <iostream>

#include <bits/stdc++.h>

#include <fstream>

#include <string>

using namespace std;

int main()

{

   

   int k=0, n, max=0, min=0;

   string line, numere;

   ifstream fileIn("atestat.in");

   if (fileIn.is_open())

 {

   while ( getline (fileIn, line) )

   {

      if(k!=1){

       n=stoi(line);

       k++;

     } else {

        numere=line;

     }

   }

     

 }

   int sirNr[n];

   

   

   istringstream ss(numere);

   int i=0;

 

   do {

       

       string number;

       ss>>number;

       if(number!="" && number!=" "){

           sirNr[i]=stoi(number);

           i++;

       }

   } while (ss);

   

   fileIn.close();

min=sirNr[0];

max=sirNr[0];

for(int i=0; i<n; i++){

   if(sirNr[i]%2==0){

       cout<<sirNr[i]<<" ";

   }

   if(sirNr[i]<min){

       min=sirNr[i];

   }

   if(sirNr[i]>max){

       max=sirNr[i];

   }

}

cout<<"\na="<<min;

cout<<"\nb="<<max;

ofstream fout("atestat.out");

       int a = max;

       int b = min;

   while(b != 0){

       int r = a % b;

       a = b;

       b = r;

   }

   fout<<a;

fout.close();

return 0;  

}

Rezultat:

Vezi imaginea Howardax