Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Wtorek, 17 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


Iterator

Przykład 1
#include "proces.h"
#include "modeldanych.h"

#include <iostream>

int main() {
	Proces proces(0.1, 0, 0.1, 10, 0.01);
	ModelDanych model;

	// zapis danych procesowych do modelu
	for (unsigned int t = 0; t < 100; ++t) model.dodajDane(t, proces.symuluj());
	for (unsigned int t = 100; t < 150; t += 2) model.dodajDane(t, proces.symuluj());

	// odczyt danych z modelu
	for (unsigned int t = 0; t < 150; ++t) {
		try {
			std::cout << t << " " << model.pobierzPomiar(t) << std::endl;
		} catch (const std::exception & e) {
			std::clog << e.what() << std::endl;
		}
	}
	
	return 0;
}
#ifndef __MODELDANYCH_H__
#define __MODELDANYCH_H__
#include <map>

class ModelDanych {
public:
	ModelDanych ();
	void dodajDane (int t, double y);
	void wyczysc ();
	
	bool czyIstniejePomiar (int t) const;
	double pobierzPomiar (int t) const;
private:
	std::map<int, double> s_impl;
};

#endif
#include "modeldanych.h"
#include <exception>

ModelDanych::ModelDanych () {

}
	
void ModelDanych::dodajDane (int t, double y) {
	s_impl[t] = y;
}
	
void ModelDanych::wyczysc () {
	s_impl.clear();
}
	
bool ModelDanych::czyIstniejePomiar (int t) const {
	return (s_impl.count(t) != 0) ? true : false;
}
	
double ModelDanych::pobierzPomiar (int t) const {
	if (!czyIstniejePomiar(t))
		throw std::exception ("Brak pomiaru z danej chwili czasu");
	else 
		return s_impl.find(t)->second;
}
#ifndef __PROCES_H__
#define __PROCES_H__

class Proces {
public:
	Proces (double a, double b, double sinAmp, int sinOkres, double maxLos);
	double symuluj ();
private:
	double s_a;
	double s_b;
	double s_sinAmp;
	int s_sinOkres;
	double s_maxLos;
	int s_t;
};

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

Proces::Proces (double a, double b, double sinAmp, int sinOkres, double maxLos) 
	: s_a(a), s_b(b), s_sinAmp(sinAmp), s_sinOkres(sinOkres), s_maxLos(maxLos), s_t(0)
{
}

double Proces::symuluj () {
	double skladnikLiniowy = s_a*s_t + s_b;
	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;

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