Buna!
Imi poate explica cineva aceasta problema?
Atasez algoritmul si cerinta. Nu inteleg de ce trebuie sa calculez while (x-floor(x))
si sa calculez b si mai apoi cmmdc pentru a si b.
Fişierul text NUMAR.TXT conţine pe prima linie un număr real pozitiv x care are cel mult
două cifre la partea întreagă şi cel mult şapte cifre după punctul zecimal..
a) Scrieţi un program C/C++ care, utilizând un algoritm eficient din punct de vedere al
timpului de executare şi al memoriei utilizate, afişează pe ecran, separate printr-un spaţiu,
două numere naturale al căror raport este egal cu x şi a căror diferenţă absolută este
minimă.
Exemplu: dacă fişierul conţine valoarea alăturată, se vor afişa pe ecran
numerele 3 8.
#include
#include
#include
using namespace std;
ifstream in("numar.txt");
int cmmdc (int a, int b)
{
while (a!=b)
{
if (a>b)
a=a-b;
else
b=b-a;
}
return a;
}
int main()
{
double x;
long a,b,c;
in>>x;
b=1;
///vom cauta cmmdc al lui x
while (x-floor(x))
{
x *=10;
b *=10;
}
a=x;
c=cmmdc(a,b);
a=a/c;
b=b/c;
cout<
return 0;
}
Multumesc!
Răspunsuri la întrebare
Răspuns de
1
In primul rand, conditia de la while este:
x-floor(x) != 0, scrisa matematic sau
In while ai x *= 10, deci se va executa o data pentru fiecare cifra dupa virgula, si in b tii minte la ce numar trebuie sa imparti x(la final) ca sa obtii x-ul initial.
Acum ti se cere sa afli o pereche de numere (a, b), cu si minim.
Cum
, rezulta ca trebuie sa cautam un y pentru care diferenta este minima, dar in acelasi timp , si atunci perechea (ya, yb) este solutia cautata.
Deci (a/cmmdc(a,b), b/cmmdc(a,b)) este solutia cautata
sikesjack1:
Multumesc pentru raspuns!
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Engleza,
8 ani în urmă
Matematică,
8 ani în urmă
Chimie,
9 ani în urmă