Sprawdzenie programu KLASa;

17monika171
Użytkownik
Użytkownik
Posty: 14
Rejestracja: 4 mar 2009, o 00:21
Płeć: Kobieta

Sprawdzenie programu KLASa;

Post autor: 17monika171 »

Mam maly problem , mam napisany program "klasa plaszczyzny" i wszystko jest ok, tylko nie moge wylapac gdzie wpisac aby wynik mozna byloby zobaczyc na ekranie, poprostu za szybko sie wylacza . Prosze o pomoc


oto kod

Kod: Zaznacz cały

#include <string>
#include <cmath>
#include <sstream>
#include <iostream>

#define PI 3,14159

using namespace std;

struct Punkt{
//moze byc uzywane jako wektor
double x;
double y;
double z;
};

class plaszczyzna{
private:
double A;
double B;
double C;
double D;

public:
plaszczyzna();
plaszczyzna(double pA, double pB, double pC, double pD);
plaszczyzna(Punkt p, Punkt q, Punkt r);
string rownanie_ogolne();
double wspolczynnik_normalizujacy();
string rownanie_normalne();
string rownanie_odcinkowe();
Punkt wektor_normalny();
bool nalezy(Punkt p);
double odleglosc(Punkt p);
string operator ||(plaszczyzna PLASZ); //polozenie dwoch plaszczyzn
//double operator +(plaszczyzna PLASZ); to byl kat miedzy dwoma plaszczyznami ale nie dziala. jak chcesz to usun, ale dziala jak jest.
};

int main()
{
double a, b, c, d;
cout<<"Podaj wspolczynniki plaszczyzny 1:"<<endl;
cin>>a>>b>>c>>d;
plaszczyzna A(a, b, c, d);
cout<<"Podaj wspolczynniki punktu 1:"<<endl;
Punkt p;
cin>>p.x>>p.y>>p.z;
cout<<"Podaj wspolczynniki punktu 2:"<<endl;
Punkt q;
cin>>q.x>>q.y>>q.z;
cout<<"Podaj wspolczynniki punktu 3:"<<endl;
Punkt r;
cin>>r.x>>r.y>>r.z;
cout<<"Plaszczyzna 2 bedzie przechodzila przez te punkty"<<endl;
plaszczyzna B(p, q, r);
cout<<"----------------------------------------"<<endl;
cout<<"Rownanie ogolne 1 prostej:"<<endl;
cout<<A.rownanie_ogolne()<<endl;
cout<<"Rownanie ogolne 2 prostej:"<<endl;
cout<<B.rownanie_ogolne()<<endl;
cout<<"----------------------------------------"<<endl;
cout<<"Wspolczynnik normalizujacy 1 prostej:"<<A.wspolczynnik_normalizujacy()<<endl;
cout<<"Rownanie normalne 1 prostej:"<<endl;
cout<<A.rownanie_normalne()<<endl;
cout<<"Wspolczynnik normalizujacy 2 prostej:"<<B.wspolczynnik_normalizujacy()<<endl;
cout<<"Rownanie normalne 2 prostej:"<<endl;
cout<<B.rownanie_normalne()<<endl;
cout<<"----------------------------------------"<<endl;
cout<<"Rownanie odcinkowe 1 prostej:"<<endl;
cout<<A.rownanie_odcinkowe()<<endl;
cout<<"Rownanie odcinkowe 2 prostej:"<<endl;
cout<<B.rownanie_odcinkowe()<<endl;
cout<<"----------------------------------------"<<endl;
cout<<"Czy punkty 1 2 i 3 (kolejno) leza na plaszczyznie 1 (0-nie, 1 - tak)?"<<endl;
cout<<A.nalezy(p)<<A.nalezy(q)<<A.nalezy(r)<<endl;
cout<<"Czy punkty 1 2 i 3 (kolejno) leza na plaszczyznie 2 (0-nie, 1 - tak)?"<<endl;
cout<<B.nalezy(p)<<B.nalezy(q)<<B.nalezy(r)<<endl;
cout<<"----------------------------------------"<<endl;
cout<<"Odleglosci punktow 1 2 i 3 od plaszczyzny 1:"<<endl;
cout<<A.odleglosc(p)<<" "<<A.odleglosc(q)<<" "<<A.odleglosc(r)<<endl;
cout<<"Odleglosci punktow 1 2 i 3 od plaszczyzny 2:"<<endl;
cout<<B.odleglosc(p)<<" "<<B.odleglosc(q)<<" "<<B.odleglosc(r)<<endl;
cout<<"----------------------------------------"<<endl;
cout<<"Plaszczyzny sa wobec siebie "<<(A||B)<<endl;
return 0;

}

plaszczyzna::plaszczyzna()
{
A=1;
B=1;
C=1;
D=0;
}

plaszczyzna::plaszczyzna(double pA, double pB, double pC, double pD)
{
A=pA;
B=pB;
C=pC;
D=pD;
}

plaszczyzna::plaszczyzna(Punkt p, Punkt q, Punkt r)
{
A=(q.y-p.y)*(r.z-p.z) - (r.y-p.y)*(q.z-p.z);
B=(r.x-p.x)*(q.z-p.z) - (q.x-p.x)*(r.z-p.z);
C=(q.x-p.x)*(r.y-p.y) - (r.x-p.x)*(q.y-p.y);
D=-p.x*A - p.y*B - p.z*C;
}

string plaszczyzna::rownanie_ogolne()
{
stringstream wyjscie;
wyjscie<<A;
wyjscie<<" x + ";
wyjscie<<B;
wyjscie<<" y + ";
wyjscie<<C;
wyjscie<<" z + ";
wyjscie<<D;
wyjscie<<" = 0";
return wyjscie.str();
}

double plaszczyzna::wspolczynnik_normalizujacy()
{
return sqrt(A*A+B*B+C*C);
}

string plaszczyzna::rownanie_normalne()
{
stringstream wyjscie;
wyjscie<<(A/wspolczynnik_normalizujacy());
wyjscie<<" x + ";
wyjscie<<(B/wspolczynnik_normalizujacy());
wyjscie<<" y + ";
wyjscie<<(C/wspolczynnik_normalizujacy());
wyjscie<<" z + ";
wyjscie<<(D/wspolczynnik_normalizujacy());
wyjscie<<" = 0";
return wyjscie.str();
}

string plaszczyzna::rownanie_odcinkowe()
{
if (A*B*C!=0)
	{
	stringstream wyjscie;
	wyjscie<<"x / ";
	wyjscie<<(-D/A);
	wyjscie<<" + y / ";
	wyjscie<<(-D/B);
	wyjscie<<" + z / ";
	wyjscie<<(-D/C);
	wyjscie<<" = 1";
	return wyjscie.str();
	}
else
	{return "Brak postaci odcinkowej";}
}

Punkt plaszczyzna::wektor_normalny()
{
Punkt p;
p.x=A;
p.y=B;
p.z=C;
return p;
}

bool plaszczyzna::nalezy(Punkt p)
{
if (p.x*A+p.y*B+p.z*C+D==0)
	return true;
else
	return false;
}

double plaszczyzna::odleglosc(Punkt p)
{
return ( (p.x*A+p.y*B+p.z*C+D) / wspolczynnik_normalizujacy() );
}

string plaszczyzna::operator ||(plaszczyzna PLASZ)
{
Punkt a, b;
a=wektor_normalny();
b=PLASZ.wektor_normalny();
if (b.x*b.y*b.z!=0)
	{
	if ((a.x/b.x == a.y/b.y)&&(a.x/b.x == a.z/b.z))
		return "rownolegle";
	else
		return "przecinajace sie";
	}
else
	{
	if ((a.x==b.x)&&(a.y==b.y)&&(a.z==b.z))
		{return "rownolegle";}
	else
		{return "przecinajace sie";}

	}

}

/*
double plaszczyzna::operator +(plaszczyzna PLASZ)
{
Punkt a=wektor_normalny();
Punkt b=PLASZ.wektor_normalny();

double a_n=wspolczynnik_normalizujacy();
double b_n=PLASZ.wspolczynnik_normalizujacy();

if ((a_n*b_n!=0)&&( ((a.x*b.x)+(a.y*b.y)+(a.z*b.z))!=0))
	{
	double cosinus= ( (a.x*b.x) + (a.y*b.y) + (a.z*b.z) ) / (a_n*b_n);
	double sinus=sqrt(1-cosinus*cosinus);
	double kat=atan(sinus/cosinus);
	return kat;
	}
else 
	{return (double)PI/2.0;}
}*/
Tomcat
Użytkownik
Użytkownik
Posty: 327
Rejestracja: 23 mar 2009, o 21:51
Płeć: Mężczyzna
Lokalizacja: Świdnica
Podziękował: 10 razy
Pomógł: 62 razy

Sprawdzenie programu KLASa;

Post autor: Tomcat »

Daj #include <conio.h> a potem przed return 0 w main() daj getch();
Krev
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 2 cze 2009, o 20:00
Płeć: Mężczyzna

Sprawdzenie programu KLASa;

Post autor: Krev »

albo bez dolaczania zadnych bibliotek proste system("pause") ;]

( nie czytalem kodu ale mniemam ze o to chodzi, jesli nie to pardon )
Tomcat
Użytkownik
Użytkownik
Posty: 327
Rejestracja: 23 mar 2009, o 21:51
Płeć: Mężczyzna
Lokalizacja: Świdnica
Podziękował: 10 razy
Pomógł: 62 razy

Sprawdzenie programu KLASa;

Post autor: Tomcat »

Krev, no albo tak, może również dać char c; std::cin >> c, albo pewnie na inne sposoby, ale po co?
Krev
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 2 cze 2009, o 20:00
Płeć: Mężczyzna

Sprawdzenie programu KLASa;

Post autor: Krev »

akurat sposob z cin jest malo "pro" ;]

po to ze getch() sluzy do czego innego niz zatrzymywanie pracy programu i jesli mozna lepiej tak tego nie uzywac ;]
Tomcat
Użytkownik
Użytkownik
Posty: 327
Rejestracja: 23 mar 2009, o 21:51
Płeć: Mężczyzna
Lokalizacja: Świdnica
Podziękował: 10 razy
Pomógł: 62 razy

Sprawdzenie programu KLASa;

Post autor: Tomcat »

pewnie, że jest mało "pro" takie rozwiązanie na "partyzanta" ale działa
ODPOWIEDZ