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ă:
Răspunsuri la întrebare
#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();
}