Dlaczego nie dziala tutaj srand oraz dlaczego nie wylicza mi sredniej krokow?
main
#include <iostream>
#include <cstdlib> // prototypy funkcji rand() i srand()
#include <ctime> // prototyp funkcji time()
#include "vect.h"
int main()
{
using namespace std;
using VECTOR::Vector;
srand(time(0)); // inicjalizacja generatora liczb pseudolosowych
double direction;
Vector step;
Vector result(0.0, 0.0);
unsigned long steps = 0;
double target=700;
double dstep=60;
int licznik=0;
int licz=1;
int proba;
cout << "Podaj liczbe prob (k aby zakończyć): ";
cin >> proba;
double* ps=new double[proba];
cout<<"Dystans: "<<target<<" dlugosc kroku: "<<dstep<<endl;
while (proba>0){
while (result.magval() < target)
{
direction = rand() % 360;
step.set(dstep, direction, 'p');
result = result + step;
steps++;
}
cout << "Po " << steps << " krokach, delikwent "
"osiągnął położenie: "<<result<<" - proba"<<licz<<endl;
ps[licznik]=steps;
proba--;
licz++;
licznik++;
}
double sre=0;
for (int i=0; i<proba; i++)
sre+=ps[i];
double srednia=sre/proba;
cout<<"srednia: "<<srednia<<endl;
double max = ps[0];
int i=1;
while (proba>1){
if (max<ps[i])
max = ps[i];
i++;
proba--;
}
cout<<"max: "<<max<<endl;
double min = ps[0];
i=1;
while (proba>1){
if (min>ps[i])
min = ps[i];
i++;
proba--;
}
cout<<"min: "<<min;
delete [] ps;
return 0;
}
vect..cpp
// vect.cpp -- implementacje metod klasy Vector
#include <cmath>
#include "vect.h" // włącza plik nagłówkowy <iostream>
using std::cout;
namespace VECTOR
{
const double Rad_to_deg = 57.2957795130823;
// metody prywatne
// oblicza długość wektora ze składowych x i y
void Vector::set_mag()
{
mag = sqrt(x * x + y * y);
}
void Vector::set_ang()
{
if (x == 0.0 && y == 0.0)
ang = 0.0;
else
ang = atan2(y, x);
}
// oblicza składową x ze współrzędnych biegunowych
void Vector::set_x()
{
x = mag * cos(ang);
}
// oblicza składową y ze współrzędnych biegunowych
void Vector::set_y()
{
y = mag * sin(ang);
}
// metody publiczne
Vector::Vector() // konstruktor domyślny
{
x = y = mag = ang = 0.0;
mode = 'r';
}
// konstruuje wektor o zadanych współrzędnych biegunowych (w trybie 'p')
// bądź prostokątnych (w domyślnym trybie 'r')
Vector::Vector(double n1, double n2, char form)
{
mode = form;
if (form == 'r')
{
x = n1;
y = n2;
set_mag();
set_ang();
}
else if (form == 'p')
{
mag = n1;
ang = n2 / Rad_to_deg;
set_x();
set_y();
}
else
{
cout << "Niepoprawna wartość trzeciego argumentu Vector() -- ";
cout << "zeruję wektor\n";
x = y = mag = ang = 0.0;
mode = 'r';
}
}
// ustawia wartości wektora dla zadanych współrzędnych biegunowych ('p')
// lub prostokątnych ('r' -- ryb domyślny)
void Vector::set(double n1, double n2, char form)
{
mode = form;
if (form == 'r')
{
x = n1;
y = n2;
set_mag();
set_ang();
}
else if (form == 'p')
{
mag = n1;
ang = n2 / Rad_to_deg;
set_x();
set_y();
}
else
{
cout << "Niepoprawny trzeci argument set() -- ";
cout << "zeruję wektor\n";
x = y = mag = ang = 0.0;
mode = 'r';
}
}
Vector::~Vector() // destruktor
{
}
void Vector::polar_mode() // przełącza do reprezentacji biegunowej
{
mode = 'p';
}
void Vector::rect_mode() // przełącza do reprezentacji kartezjańskiej
{
mode = 'r';
}
// przeciążone operatory
// dodawanie dwóch wektorów
Vector Vector::operator+(const Vector & b) const
{
return Vector(x + b.x, y + b.y);
}
// odejmowanie wektora b od wektora a
Vector Vector::operator-(const Vector & b) const
{
return Vector(x - b.x, y - b.y);
}
// zmienia znak wektora
Vector Vector::operator-() const
{
return Vector(-x, -y);
}
// mnoży wektor wywołujący przez n
Vector Vector::operator*(double n) const
{
return Vector(n * x, n * y);
}
// funkcje zaprzyjaźnione
// mnoży n przez wektor a
Vector operator*(double n, const Vector & a)
{
return a * n;
}
// wyświetla współrzędne wektora (prostokątne w trybie 'r',
// biegunowe w trybie 'p'
std::ostream & operator<<(std::ostream & os, const Vector & v)
{
if (v.mode == 'r')
os << "(x,y) = (" << v.x << ", " << v.y << ")";
else if (v.mode == 'p')
{
os << "(m,a) = (" << v.mag << ", "
<< v.ang * Rad_to_deg << ")";
}
else
os << "Niepoprawny tryb reprezentacji obiektu wektora";
return os;
}
} // koniec przestrzeni nazw VECTOR
vect.h
// vect.h -- klasa Vector z operatorem << i przełącznikiem trybu
#ifndef VECTOR_H_
#define VECTOR_H_
#include <iostream>
namespace VECTOR
{
class Vector
{
private:
double x; // wartość składowej poziomej
double y; // wartość składowej pionowej
double mag; // długość wektora
double ang; // kierunek wektora
char mode; // 'r' = tryb prostokątny, 'p' = tryb biegunowy
// prywatne metody ustawiające składowe
void set_mag();
void set_ang();
void set_x();
void set_y();
public:
Vector();
Vector(double n1, double n2, char form = 'r');
void set(double n1, double n2, char form = 'r');
~Vector();
double xval() const {return x;} // zwraca wartość składowej x
double yval() const {return y;} // zwraca wartość składowej y
double magval() const {return mag;} // zwraca długość
double angval() const {return ang;} // zwraca kąt
void polar_mode(); // ustawia tryb na 'p'
void rect_mode(); // ustawia tryb na 'r'
// metody przeciążające operatory
Vector operator+(const Vector & b) const;
Vector operator-(const Vector & b) const;
Vector operator-() const;
Vector operator*(double n) const;
// funkcje zaprzyjaźnione
friend Vector operator*(double n, const Vector & a);
friend std::ostream & operator<<(std::ostream & os, const Vector & v);
};
} // koniec przestrzeni nazw VECTOR
#endif