Cerința
Fie a și b două numere naturale nenule. Cu ajutorul lor se pot forma ecuațiile matematice de tipul:
1) a+x=b
2) x+a=b
3) a-x=b
4) x-a=b
5) a*x=b (unde a divide b)
6) x*a=b (unde a divide b)
7) a:x=b (unde b divide a)
8) x:a=b
Scrieți un program care să citească din fișierul ecuatie.in o ecuaţie de tipul precizat în enunț şi care să determine:
a) tipul ecuației citite;
b) soluția ecuației obținută prin rezolvarea acestei ecuații.
Date de intrare
Fişierul ecuatie2.in conţine pe prima linie ecuația, ca în exemplu.
Date de ieșire
Fişierul de ieşire ecuatie2.out va conține pe prima linie un număr natural reprezentând tipul ecuaţiei, iar pe a doua linie, un număr natural reprezentând soluția ecuației.
Restricții și precizări
1 ≤ a ≤ 30 000
1 ≤ b ≤ 30 000
Fișierul de intrare conține o singură ecuație; soluția ecuației este un număr natural.
Exemplul 1:
ecuatie2.in
23+x=100
ecuatie2.out
1
77
Exemplul 2:
ecuatie2.in
x*20=1400
ecuatie2.out
6
70
Exemplul 3:
ecuatie2.in
15:x=3
ecuatie2.out
7
5
Explicații
Pentru primul exemplu, ecuația este de tipul 1. Soluția ecuaţiei 23+x=100 este x=77.
Pentru al doilea exemplu, ecuația este de tipul 6. Soluția ecuaţiei x*20=1400 este x=70.
Pentru al treilea exemplu, ecuația este de tipul 7. Soluția ecuaţiei 15:x=3 este x=5.
ecuatie2 pe pbinfo
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
ifstream fin("ecuatie2.in");
ofstream fout("ecuatie2.out");
int TipEcuatie(char s[21], int poz)
{
if(s[poz-1]=='+' && s[poz]=='x')
return 1;
if(s[poz+1]=='+' && s[poz]=='x')
return 2;
if(s[poz-1]=='-' && s[poz]=='x')
return 3;
if(s[poz+1]=='-' && s[poz]=='x')
return 4;
if(s[poz-1]=='*' && s[poz]=='x')
return 5;
if(s[poz+1]=='*' && s[poz]=='x')
return 6;
if(s[poz-1]==':' && s[poz]=='x')
return 7;
if(s[poz+1]==':' && s[poz]=='x')
return 8;
}
int main()
{
char s[21];
int tip,poz;
long a=0,b=0,sol;
bool ok=0;
fin.getline(s,21);
for(int i=0;s[i];i++)
{
if(s[i]>='0' && s[i]<='9' && ok==0)
a=a*10+s[i]-('0');
else if(a)
ok=1;
if(s[i]>='0' && s[i]<='9' && ok==1)
b=b*10+s[i]-('0');
if(s[i]=='x')
poz=i;
}
tip=TipEcuatie(s,poz);
switch(tip)
{
case 1 : fout<<"1"<<"\n"<<b-a;
break;
case 2 : fout<<"2"<<"\n"<<b-a;
break;
case 3 : fout<<"3"<<"\n"<<a-b;
break;
case 4 : fout<<"4"<<"\n"<<a+b;
break;
case 5 : fout<<"5"<<"\n"<<b/a;
break;
case 6 : fout<<"6"<<"\n"<<b/a;
break;
case 7 : fout<<"7"<<"\n"<<a/b;
break;
case 8 : fout<<"8"<<"\n"<<a*b;
break;
}
fin.close();
fout.close();
return 0;
}
Explicație: