Písemka - maturanti

Jste programátorem simulace života dinosaurů. V libovolném programovacím jazyce vytvořte třídu Dinosaurus. Každý dinosaurus má věk, výšku a metodu: sezer(co). Chování této metody je upřesněno podtřídami dinosaura: Velociraptor a Brontosaurus.

Brontosaurus má navíc vlastnost váha a při zavolání metody sezer(co) se váha zvýší o jedna. Brontosaurus žere pouze řetězce „trava“.

Velociraptor má navíc vlastnost obsah žaludku a při zavolání sezer(co) přidá do svého žaludku svoji oběť.

Ukázkové řešení - Ruby

class Dinosaurus
	def initialize(vek, vyska)
		@vek = vek
		@vyska = vyska
	end
end

class Velociraptor < Dinosaurus
	def initialize(vek, vyska)
		super(vek, vyska)
		@zaludek = []
	end
	def sezer(co)
		@zaludek.push(co)
	end
end

class Brontosaurus < Dinosaurus
	def initialize(vek, vyska, vaha)
		super(vek, vyska)
		@vaha = vaha
	end
	def sezer(co)
		if co != "trava" then
			raise ArgumentError, "Brontosaurus žere jenom trávu"
		end
		@vaha += 1
	end
end

karel = Brontosaurus.new(30, 5, 9000)
for i in 1..1000
	karel.sezer("trava")
end
alois = Velociraptor.new(25, 3)
begin
	karel.sezer(alois)
rescue ArgumentError => err
	puts "Chyba: " + err
end
alois.sezer(karel)

Ukázkové řešení - C++

#include <string>
#include <vector>
#include <iostream>

using namespace std;

class Dinosaurus {
	int vek, vyska;
public:
	Dinosaurus(int zadany_vek, int zadana_vyska) {
		vek = zadany_vek;
		vyska = zadana_vyska;
	}
};

class Brontosaurus:Dinosaurus {
	int vaha;
public:
	Brontosaurus(int zadany_vek, int zadana_vyska, int zadana_vaha):
		Dinosaurus(zadana_vyska, zadana_vaha) {
		vaha = zadana_vaha;
	}
	void sezer(string co) {
		if (co == "trava") {
			vaha += 1;
		}
		else {
			throw 1;
		}
	}
};

class Velociraptor:Dinosaurus {
	vector<string> zaludek; //vector<libovolný typ> se chová jako pole proměnlivé velikosti libovolného typu
public:
	Velociraptor(int zadany_vek, int zadana_vyska):
		Dinosaurus(zadany_vek, zadana_vyska) {
		zaludek = vector<string>();
	}
	void sezer(string co) {
		zaludek.push_back(co);
	}
};

int main() {
	Brontosaurus karel = Brontosaurus(30, 5, 9000);
	for (int i=0; i<1000; i++){
		karel.sezer("trava");
	}
	try {
		karel.sezer("punčový dort");
	}
	catch (int err) {
		cout << "Brontosaurus nerad sladké" << endl;
	}
	Velociraptor alois = Velociraptor(25, 3);
	alois.sezer("zajíc");
	alois.sezer("vlk");
	alois.sezer("medvěd");
	alois.sezer("koblížek");
	
	return 0
}