Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Poniedziałek, 16 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO



Polecenie

Przykład 3
#include "manipulator.h"

#include <iostream>

int main () {
	try {
		Manipulator manipulator(10);
		manipulator.ustawPrzesuniecie(10, 10);
		manipulator.przesun();
		manipulator.przesun();
		manipulator.przesun();

		manipulator.ustawPrzesuniecie(20, -10);
		manipulator.przesun();
		manipulator.przesun();

		manipulator.ustawPrzesuniecie(10, 10);
	} catch (const std::exception & e) {
		std::clog << e.what() << std::endl;
	}

	return 0;
}
#ifndef __MANIPULATOR_H__
#define __MANIPULATOR_H__

class Manipulator {
public:
	Manipulator (double predkosc);
	
	bool przesun ();
	bool czyPrzesunieto () const;

	void ustawPrzesuniecie (double dx, double dy);
	void ustawPredkosc (double predkosc);
private:
	void sprawdzUstawialnosc() const;

	double s_predkosc;
	double s_x;
	double s_y;
	double s_dx;
	double s_dy;

	static const double EPS;
};

#endif
#include "manipulator.h"
#include <cstdlib>
#include <cmath>
#include <exception>
#include <iostream>

Manipulator::Manipulator (double predkosc) 
	: s_predkosc(predkosc), s_x(0), s_y(0), s_dx(0), s_dy(0)
{
}
	
bool Manipulator::przesun () {
	if (czyPrzesunieto()) {
		return true;
	} else {
		double dxMax = s_dx;
		double dyMax = s_dy;
		double dxdyMax = std::sqrt (dxMax*dxMax + dyMax*dyMax);
		double dxdy = (dxdyMax > s_predkosc) ? s_predkosc : dxdyMax;
	
		double dx = (dxdy / dxdyMax) * dxMax;
		double dy = (dxdy / dxdyMax) * dyMax;

		s_dx -= dx;
		s_dy -= dy;
		s_x += dx;
		s_y += dy;

		std::clog << "Przesuniecie manipulatora na wspolrzedne (" << s_x << ", " << s_y << ")" << std::endl;
	}

	return czyPrzesunieto();
}
	
bool Manipulator::czyPrzesunieto () const {
	return ((std::fabs(s_dx) < EPS) && (std::fabs(s_dy) < EPS));
}

void Manipulator::ustawPrzesuniecie (double dx, double dy) {
	sprawdzUstawialnosc();

	s_dx = dx;
	s_dy = dy;
}
	
void Manipulator::ustawPredkosc (double predkosc) {
	sprawdzUstawialnosc();

	s_predkosc = (predkosc > 0) ? predkosc : 0;
}

void Manipulator::sprawdzUstawialnosc() const {
	if (!czyPrzesunieto())
		throw std::exception ("Blad ustawienia - Manipulator nie wykonal poprzedniego zadania");
}

const double Manipulator::EPS = 1e-3;
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11