Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by Marcin ( 14 years ago )
//Kolokwium 2008Z (plik PrObi_Egzam_2008Z_A3.pdf)
//Zadanie 1
#include <iostream>
#include <math.h>
template<size_t N, typename T>
class Vn
{
public:
T tab[N];
Vn();
Vn(const Vn& src);
Vn operator+ (const Vn& b) const;
Vn operator- (const Vn& b) const;
T operator* (const Vn& b) const;
T length() const;
};
//konstruktor
template<size_t N, typename T>
Vn<N, T>::Vn()
{
for (size_t i = 0; i<N; i++)
tab[i] = 0;
}
//konstruktor kopiujacy
template<size_t N, typename T>
Vn<N, T>::Vn(const Vn& src)
{
for (size_t i = 0; i<N; i++)
tab[i] = src.tab[i];
}
//suma wektorów
template<size_t N, typename T>
Vn<N, T> Vn<N, T>::operator+ (const Vn& b) const
{
Vn<N, T> temp;
for (size_t i = 0; i<N; i++)
temp.tab[i] = tab[i] + b.tab[i];
return temp;
}
//iloczyn skalarny
template<size_t N, typename T>
T Vn<N, T>::operator* (const Vn& b) const
{
//Rzutujemy 0 (które jest int'em) na nasz typ T (który mo¿e byæ czymkolwiek).
T temp = (T)0;
for (size_t i = 0; i<N; i++)
temp += tab[i] * b.tab[i];
return temp;
}
//dlugosc wektora
template<size_t N, typename T>
T Vn<N, T>::length() const
{
T temp = (T)0;
for (size_t i = 0; i<N; i++)
temp += tab[i] * tab[i];
return sqrt(temp);
}
//k¹t miêdzy wektorami
template<size_t N, typename T>
T angle(const Vn<N,T>& a, const Vn<N,T>& b)
{
return acos((a * b) / (a.length() * b.length()));
}
//zamiana wektorow
template<size_t N, typename T>
void swap(Vn<N,T>& a, Vn<N,T>& b)
{
for (size_t i = 0; i<N; i++)
{
std::swap(a.tab[i], b.tab[i]);
}
}
//operator wyjscia
template<size_t N, typename T>
std::ostream& operator<<(std::ostream& output, const Vn<N,T>& vec)
{
output << "[";
for (int i = 0; i<N-1; i++)
output << vec.tab[i] << ", ";
output << vec.tab[N-1] << "]";
return output;
}
//operator wejscia
template<size_t N, typename T>
std::istream& operator>>(std::istream& input, Vn<N,T>& vec)
{
for (int i = 0; i<N; i++)
{
input >> vec.tab[i];
}
return input;
}
#define PI 3.14159265f
int main()
{
//deklaracja obiektow testowych
Vn<3, float> A, B;
std::cout << "Podaj wektor A:" << std::endl;
std::cin >> A;
std::cout << "Podaj wektor B:" << std::endl;
std::cin >> B;
std::cout << "---------------------" << std::endl;
std::cout << "A = " << A << std::endl;
std::cout << "B = " << B << std::endl;
std::cout << "A-B = " << A-B << std::endl;
std::cout << "A+B = " << A+B << std::endl;
std::cout << "A*B = " << A*B << std::endl;
float kat = angle(A, B);
std::cout << "Kat miedzy A i B = " << kat << " rad";
std::cout << " = " << kat / PI * 180.0f << " st" << std::endl;
std::cout << "Dlugosc A = " << A.length() << std::endl;
std::cout << "Dlugosc B = " << B.length() << std::endl;
std::cout << "swap(A, B)" << std::endl;
swap(A, B);
std::cout << "A = " << A << std::endl;
std::cout << "B = " << B << std::endl;
system("pause");
return 0;
}
Revise this Paste
Children: 49907