Informatică, întrebare adresată de owiliams, 8 ani în urmă

Să fie în C++. Mulțumesc anticipat.
Se dă un fișier text ”multiplu.in” care conține o listă de forma :
”Nrlin a b c ”
unde: ”Nrlin- numărul de ordine al liniei; a, b și c sunt numere naturale. Să se construiască un alt fișier ”multiplu.out” care va conține lista modificată (obținută din prima listă) de forma:
”Nrlin a b c cmmmc”
și în care liniile vor fi ordonate crescător după valoarea celui mai mic multiplu comun (cmmmc) al numerelor ” a, b, c ” incluzând doar liniile cu toate 3 numere strict pozitive.
Exemplu în poză:

Anexe:

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
0

#include <fstream>

#include <algorithm>

using namespace std;

int cmmdc(int a, int b){

       int r;

       while(a != b){

               if(a > b)

                       a -= b;

               else b-=a;

       }

       return a;

}

int cmmmc(int a, int b){

       return a * b / cmmdc(a,b);

}

struct linie{

       int nrord;

       int a;

       int b;

       int c;

       int _cmmmc;

};

ifstream fin("multiplu.in");

ofstream fout("multiplu.out");

bool cmp(linie a, linie b){

       return a._cmmmc < b._cmmmc;

}

linie vec[10000];

int main(){

       int i,a,b,c;

       int final = 0,d = 0;

       while((fin >> i)){

               fin >> a >> b >> c;

               vec[d] = linie();

               vec[d].nrord = i;

               vec[d].a = a;

               vec[d].b = b;

               vec[d].c = c,

               vec[d]._cmmmc = cmmmc(cmmmc(a,b),c);

               if(i > final)

                       final = i;

               d++;

       }

       sort(&vec[1], &vec[d+1], cmp);

       for(int i = 1; i <= d; i++)

               fout << vec[i].nrord << " " << vec[i].a << " " << vec[i].b << " " << vec[i].c << " " << vec[i]._cmmmc << "\n";

       fout.close();

}

Alte întrebări interesante