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


Obserwator

Przykład 1
#include "proces.h"

#include <iostream>

int main () {
	Alarm * alarm = new Alarm (10);
	Proces * proces = new Proces (4, 0.1, 20, 0.1, alarm);

	for (unsigned int i = 0; i < 5; ++i)
		proces->symuluj(5);
	
	for (unsigned int i = 0; i < 10; ++i)
		proces->symuluj(15);

	delete proces;
	delete alarm;

	return 0;
}
#ifndef __ALARM_H__
#define __ALARM_H__

class Alarm {
public:
	Alarm (double wartGraniczna);
	void sprawdz (double wartosc) const;
private:
	double s_wartGraniczna;
};

#endif
#include "alarm.h"
#include <cstdlib>
#include <iostream>

Alarm::Alarm (double wartGraniczna) 
	: s_wartGraniczna(wartGraniczna)
{
}
	
void Alarm::sprawdz (double wartosc) const {
	if (std::abs(wartosc) > std::abs(s_wartGraniczna))
		std::clog << " ALARM! - przekroczono wartosc graniczna |" << s_wartGraniczna << "|" << std::endl;
}
#ifndef __PROCES_H__
#define __PROCES_H__
#include "proces.h"
#include "alarm.h"

class Proces {
public:
	Proces (double zmianaJedn, double sinAmp, int sinOkres, double maxLos, Alarm * alarm);
	double symuluj (double wej);
private:
	double s_zmianaJedn;
	double s_sinAmp;
	int s_sinOkres;
	double s_maxLos;
	Alarm * s_alarm;
	
	double s_skladnikLiniowy;
	int s_t;
};

#endif
#include "proces.h"
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>

Proces::Proces (double zmianaJedn, double sinAmp, int sinOkres, double maxLos, Alarm * alarm) 
	: s_zmianaJedn(zmianaJedn), s_sinAmp(sinAmp), s_sinOkres(sinOkres), s_maxLos(maxLos), s_alarm(alarm), s_skladnikLiniowy(0), s_t(0)
{
	std::srand(static_cast<unsigned int> (std::time(0)));
}

double Proces::symuluj (double wej) {
	if (s_skladnikLiniowy < wej)
		s_skladnikLiniowy = (s_skladnikLiniowy + s_zmianaJedn > wej) ? wej : (s_skladnikLiniowy + s_zmianaJedn);
	else if (s_skladnikLiniowy > wej) 
		s_skladnikLiniowy = (s_skladnikLiniowy - s_zmianaJedn < wej) ? wej : (s_skladnikLiniowy - s_zmianaJedn);

	double skladnikSinusoidalny = s_sinAmp*std::sin((static_cast<double>(s_t % s_sinOkres) / s_sinOkres) * 6.28);
	double skladnikLosowy = (((std::rand() % 1000) / 500.0) - 1.0) * s_maxLos;
	double wyj = s_skladnikLiniowy + skladnikSinusoidalny + skladnikLosowy;

	std::clog << "Symulujacja procesu, wej: " << wej << ", " << wyj << std::endl;
	
	if (s_alarm)
		s_alarm->sprawdz(wyj);

	++s_t;
	return wyj;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11