[ Milanotye @ 11.05.2009. 14:44 ] @
Zdravo. Pocetnik sam u c++ pa vas zato molim za pomoc. Imam da resim jedan zadatak.
Napisati program kojim se za N tacaka u ravni zadatih koordinatama x i y odredjuje koliko se njih nalazi u oblasti 1, 2, 3 i 4. Ove oblasti odredjene su presekom kruga cija je jednacina (x + 2)² + (y + 2)² = 1 i prave cija je jednacina x + y = -4.
Na izlazu stampati.
OBLAST BROJ TACAKA
1
2
3
4
Ovo sam ja radio, mada ne vunkcionise, nije dobro :(. Treba definisati jednacine oblasti.

#include<iostream>
#include<cmath>
using namespace std;
int main(){
double x,y;
int n, i, ob1, ob2, ob3, ob4;
ob1 = ob2 = ob3 = ob4 = 0;
cout<< "Unesite broj tacaka n \n";
cin>> n;
for(i=1;i<=n;i++){
cout<< "Unesite koordinate"<<i<<".tacke:"<<"\n";
cout<<"x=";
cin>> x;
cout<<"y=";
cin>> y;
if(pow(x + 2,2) + pow(y + 2,2)<1)
if(x + y > -4)
ob4++;
if(x + y >= -4)
ob3++;
if(x + y < -4)
ob2++;
if(x + y <= -4)
ob1++;
}
cout<< "OBLAST \t BROJ TACAKA \n";
cout<< "1\t"<<ob1<<"\n2\t"<<ob2<<"\n3\t"<<ob3<<"\n4\t"<<ob4;

return 0;
}


A evo i slike
[ Mihajlo Cvetanović @ 11.05.2009. 15:14 ] @
Code:

if(pow(x + 2,2) + pow(y + 2,2)<1)
  if(x + y > -4)
    ob4++;
if(x + y >= -4)
  ob3++;
if(x + y < -4)
  ob2++;
if(x + y <= -4)
  ob1++;


Imas dve nejednacine, i imas 4 moguća slučaja koji te dve nejednačine mogu da stvore. Najelegantnije bi bilo da uvedeš dve bool promenljive koje ti govore da li su nejednačine zadovoljene:

bool u_krugu = ((x + 2) * (x + 2) + (y + 2) * (y + 2) < 1);
bool iznad_prave = (x + y > -4);

Sada inkrementiraš jednu od četiri promenljive u zavisnosti od kombinacije ova dva bool flaga (tebi je ovaj deo malo promašen):

Code:

if (u_krugu)
{
  if (iznad_prave)
    ...
  else
    ...
}
else
{
  if (iznad_prave)
    ...
  else
    ...
}
[ Milanotye @ 11.05.2009. 17:39 ] @
Ja sam vec tako bio uradio i nije bash htelo. Profesor mi reko da radim samo u if petljama i da jednacine kruznice i prave postavim dobro.
[ Mihajlo Cvetanović @ 11.05.2009. 20:31 ] @
Prosto, treba bukvalno da zameniš te dve promenljive u if delovima odgovarajućim izrazima, i to je to. Namerno ne želim na ti dam kompletno rešenje, jer nije valjda u tome poenta.
[ Milanotye @ 17.05.2009. 20:07 ] @
Ja zaboravio da postavim. Uradio sam tj. lepo sam definisao jednacine oblsti
Oblast broj 1: (x + 2)² + (y + 2)² > 1.......i.......x + y < -4
Oblast broj 2: (x + 2)² + (y + 2)² ≤ 1.......i.......x + y < -4
Oblast broj 3: (x + 2)² + (y + 2)² ≤ 1.......i.......x + y ≥ -4
Oblast broj 4: (x + 2)² + (y + 2)² > 1.......i.......x + y ≥ -4

#include<iostream>
#include<cmath>
using namespace std;
int main(){
double x,y;
int n, i, ob1, ob2, ob3, ob4;
ob1 = ob2 = ob3 = ob4 = 0;
cout<< "Unesite broj tacaka n \n";
cin>> n;
for(i=1;i<=n;i++){
cout<< "Unesite koordinate"<<i<<".tacke:"<<"\n";
cout<<"x=";
cin>> x;
cout<<"y=";
cin>> y;
if(((x + 2) * (x + 2)) + ((y + 2) * (y + 2)) < 1)
if(x + y < -4)
ob2++;
else
ob4++;
else if(x + y < -4)
ob1++;
else
ob3++;
}
cout<< "OBLAST \t BROJ TACAKA \n";
cout<< "1\t"<<ob1<<"\n2\t"<<ob2<<"\n3\t"<<ob3<<"\n4\t"<<ob4;

return 0;
}
Hvala vam.