<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://courses.cs.taltech.ee/w/index.php?action=history&amp;feed=atom&amp;title=ITI0011RUS%3Atask_08</id>
	<title>ITI0011RUS:task 08 - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://courses.cs.taltech.ee/w/index.php?action=history&amp;feed=atom&amp;title=ITI0011RUS%3Atask_08"/>
	<link rel="alternate" type="text/html" href="http://courses.cs.taltech.ee/w/index.php?title=ITI0011RUS:task_08&amp;action=history"/>
	<updated>2026-05-14T05:18:54Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>http://courses.cs.taltech.ee/w/index.php?title=ITI0011RUS:task_08&amp;diff=2182&amp;oldid=prev</id>
		<title>Aleksandr – 24. märts 2015, kell 21:32</title>
		<link rel="alternate" type="text/html" href="http://courses.cs.taltech.ee/w/index.php?title=ITI0011RUS:task_08&amp;diff=2182&amp;oldid=prev"/>
		<updated>2015-03-24T21:32:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 24. märts 2015, kell 21:32&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;1. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;1. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Срок сдачи упражнения &amp;#039;&amp;#039;&amp;#039;14-е занятие (25 марта)&amp;#039;&amp;#039;&amp;#039;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Общая информация об упражнениях: [[ITI0011RUS_Practice]].&amp;lt;br/&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Обратно на [[ITI0011RUS|страницу предмета]].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Описание ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Описание ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aleksandr</name></author>
	</entry>
	<entry>
		<id>http://courses.cs.taltech.ee/w/index.php?title=ITI0011RUS:task_08&amp;diff=2085&amp;oldid=prev</id>
		<title>Aleksandr: Uus lehekülg: &#039;== Описание ==  Создать классы для описания объектов различной формы. Все классы должны либо напрям...&#039;</title>
		<link rel="alternate" type="text/html" href="http://courses.cs.taltech.ee/w/index.php?title=ITI0011RUS:task_08&amp;diff=2085&amp;oldid=prev"/>
		<updated>2015-03-16T19:10:22Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;== Описание ==  Создать классы для описания объектов различной формы. Все классы должны либо напрям...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Описание ==&lt;br /&gt;
&lt;br /&gt;
Создать классы для описания объектов различной формы. Все классы должны либо напрямую, либо через какой-либо другой промежуточный класс, наследовать класс &amp;lt;code&amp;gt;Shape&amp;lt;/code&amp;gt; (см. шаблон). Классы, которые следует описать:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Triangle&amp;#039;&amp;#039;&amp;#039;. Конструктор треугольников должен принимать три параметра типа целых чисел, соответсвующие длинам ребер треугольника.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ellipse&amp;#039;&amp;#039;&amp;#039;. Конструктор эллипсов должен принимать два целых числа в качестве параметров: ближайшее и наибольее расстояния от центральной точки до линии эллипса.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Rectangle&amp;#039;&amp;#039;&amp;#039;. Конструктор прямоугольников также принимает два значение в качестве аргументов: значения ширины и высоты прямоугольника. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Circle&amp;#039;&amp;#039;&amp;#039;. Должен наследовать класс &amp;#039;&amp;#039;&amp;#039;Ellipse&amp;#039;&amp;#039;&amp;#039;. Конструктор окружностей должен принимать один параметр - радиус (расстояние от центра до окружности).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Square&amp;#039;&amp;#039;&amp;#039;. Должен наследовать класс &amp;#039;&amp;#039;&amp;#039;Rectangle&amp;#039;&amp;#039;&amp;#039;. Конструктор принимает один параметр - длину стороны квадрата. &lt;br /&gt;
&lt;br /&gt;
Поскольку в классе &amp;lt;code&amp;gt;Shape&amp;lt;/code&amp;gt; описаны два абстрактных метода, все классы, которые наследуют класс &amp;lt;code&amp;gt;Shape&amp;lt;/code&amp;gt;, должны задать реализацию этих методов. Классы &amp;lt;code&amp;gt;Circle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Square&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;должны&amp;#039;&amp;#039;&amp;#039; использовать функционал непосредственного базового класса. В этих классах следует создать свои конструкторы, поскольку они отличаются от конструктора базового класса. Эти конструкторы должны вызывать конструктор базового класса. В классы &amp;lt;code&amp;gt;Circle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Square&amp;lt;/code&amp;gt; больше никакого функционала реализовывать не нужно. Например, при создании прямоугольника, требуется задать два значения, a и b. Для создания квадрата достаточно одного значения а. Таким образом, в конструкторе квадрата следует вызвать конструктор прямоугольника, в который следует передать значение а дважды (поскольку ширина квадрата равна его высоте). &lt;br /&gt;
&lt;br /&gt;
У всех фигур &amp;#039;&amp;#039;&amp;#039;следует проверять&amp;#039;&amp;#039;&amp;#039;, чтобы параметры были в допустимых пределах - тоесть чтобы фигуру можно было бы создать. Например, отрицательное значение ширины или высоты у фигуры невозможно. В случае неподходящих параметров методы &amp;lt;code&amp;gt;getArea()&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;getPerimeter()&amp;lt;/code&amp;gt; должны возвращать значение &amp;lt;code&amp;gt;Double.Nan&amp;lt;/code&amp;gt;. Было бы более корректно, если конструктор выкидывал бы исключение при попытке передать в него неподходящие параметры, например, &amp;lt;code&amp;gt;IllegalArgumentException&amp;lt;/code&amp;gt;. Если вам такое решение кажется более верным, то скрипт автоматического тестирования считает корректными оба варианта решения - тот, при котором конструктор выкидывает исключение в случае попытки передачи конструктору некорректных данных, либо методы &amp;lt;code&amp;gt;getArea()&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;getPerimeter()&amp;lt;/code&amp;gt;, возвращающие значение &amp;lt;code&amp;gt;Double.Nan&amp;lt;/code&amp;gt;, если значения полей классов выходят за допустимые пределы. &lt;br /&gt;
&lt;br /&gt;
Ниже вы найдете шаблон, который следует использовать для решения этого упражнения.&lt;br /&gt;
&lt;br /&gt;
== Методы ==&lt;br /&gt;
&lt;br /&gt;
Помимо самих классов, следует создать 4 метода:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;public static double getCircularShapesTotalArea(List&amp;lt;Shape&amp;gt; shapes)&amp;lt;/code&amp;gt;. Функция принимает список фигур в качестве параметра. Площади всех округлых фигур следует сложить и вернуть сумму их площадей. &lt;br /&gt;
* &amp;lt;code&amp;gt;public static double getNonCircularShapesTotalPerimeter(List&amp;lt;Shape&amp;gt; shapes)&amp;lt;/code&amp;gt;.&lt;br /&gt;
Периметры всех не-округлых фигур следует сложить и вернуть их сумму.&lt;br /&gt;
* &amp;lt;code&amp;gt;public static int countUniqueEllipses(List&amp;lt;Shape&amp;gt; shapes)&amp;lt;/code&amp;gt;. Функция подсчитывает все уникальные эллипсоидные объекты. Эллипсы можно определить конструкцией &amp;lt;code&amp;gt;x instanceof Ellipse&amp;lt;/code&amp;gt;. Уникальными являются объекты, которые не являются одним и тем же объектом - тоесть располагаются по разным адресам в памяти.&lt;br /&gt;
* &amp;lt;code&amp;gt;public static int countDifferentRectangles(List&amp;lt;Shape&amp;gt; shapes)&amp;lt;/code&amp;gt;. Функция подсчитывает количество различных прямоугольников. Прямоугольники можно определить конструкцией &amp;lt;code&amp;gt;x instanceof Rectangle&amp;lt;/code&amp;gt;. Прямоугольники считаются различными, если у них хотя бы одно поле отличается. Причем объекты &amp;lt;code&amp;gt;Rectangle(10, 20)&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Rectangle(20, 10)&amp;lt;/code&amp;gt; являются одинаковыми в рамках данного задания. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Шаблон ==&lt;br /&gt;
&lt;br /&gt;
Shape.java&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * General abstract class Shape. All the different&lt;br /&gt;
 * shapes in this exercise have to extend it directly&lt;br /&gt;
 * or through another class.&lt;br /&gt;
 *&amp;lt;p&amp;gt;&lt;br /&gt;
 * All the abstract methods have to implemented by the class&lt;br /&gt;
 * which extends this class (and is not abstract itself).&lt;br /&gt;
 */&lt;br /&gt;
public abstract class Shape {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Calculates the total area for the shape.&lt;br /&gt;
	 * As it is an abstract method, every class&lt;br /&gt;
	 * which extends Shape has to implement this method,&lt;br /&gt;
	 * e.g. override this method and write the body&lt;br /&gt;
	 * which actually does the calculations.&lt;br /&gt;
	 * &amp;lt;p&amp;gt;&lt;br /&gt;
	 * Note that abstract method definition doesn&amp;#039;t&lt;br /&gt;
	 * have body (no {} part).&lt;br /&gt;
	 * @return Area of the shape&lt;br /&gt;
	 */&lt;br /&gt;
	public abstract double getArea();&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Calculates the perimeter of the shape.&lt;br /&gt;
	 * For circular shapes, perimeter is also called&lt;br /&gt;
	 * circumference.&lt;br /&gt;
	 * @return Perimeter of the shape&lt;br /&gt;
	 */&lt;br /&gt;
	public abstract double getPerimeter();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EX08.java:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.HashSet;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * The main class where some static methods&lt;br /&gt;
 * which operate on shapes list are declared.&lt;br /&gt;
 */&lt;br /&gt;
public class EX08 {&lt;br /&gt;
&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		// Shape s = new Shape();&lt;br /&gt;
		// should not be allowed&lt;br /&gt;
		&lt;br /&gt;
		Circle c = new Circle(10);&lt;br /&gt;
		Ellipse e = new Ellipse(10, 5);&lt;br /&gt;
		Rectangle r = new Rectangle(10, 12);&lt;br /&gt;
		Rectangle r2 = new Rectangle(10, 12);&lt;br /&gt;
		Square s = new Square(5);&lt;br /&gt;
		Triangle t = new Triangle(3, 4, 5);&lt;br /&gt;
		&lt;br /&gt;
		List&amp;lt;Shape&amp;gt; shapes = new ArrayList&amp;lt;Shape&amp;gt;();&lt;br /&gt;
		//shapes.add(c);&lt;br /&gt;
		shapes.add(e);&lt;br /&gt;
		shapes.add(r);&lt;br /&gt;
		shapes.add(r);&lt;br /&gt;
		shapes.add(r2);&lt;br /&gt;
		shapes.add(s);&lt;br /&gt;
		shapes.add(t);&lt;br /&gt;
		System.out.println(getCircularShapesTotalArea(shapes));&lt;br /&gt;
		System.out.println(getNonCircularShapesTotalPerimeter(shapes));&lt;br /&gt;
		System.out.println(countUniqueEllipses(shapes));&lt;br /&gt;
		System.out.println(countDifferentRectangles(shapes));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Given a list of shapes, sum up the area for all the circular shapes.&lt;br /&gt;
	 * @param shapes A list of shapes.&lt;br /&gt;
	 * @return Total area of circular shapes&lt;br /&gt;
	 */&lt;br /&gt;
	public static double getCircularShapesTotalArea(List&amp;lt;Shape&amp;gt; shapes) {&lt;br /&gt;
		// TODO: implement&lt;br /&gt;
		return Double.NaN;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Given a list of shapes, sum up the perimeter for all the&lt;br /&gt;
	 * non-circular shapes.&lt;br /&gt;
	 * @param shapes A list of shapes.&lt;br /&gt;
	 * @return Total perimeter of non-circular shapes.&lt;br /&gt;
	 */&lt;br /&gt;
	public static double getNonCircularShapesTotalPerimeter(List&amp;lt;Shape&amp;gt; shapes) {&lt;br /&gt;
		// TODO: implement&lt;br /&gt;
		return Double.NaN;&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	 * Count unique ellipses in the given list of shapes.&lt;br /&gt;
	 * Every different instance of Ellipse is a unique ellipse.&lt;br /&gt;
	 * The same object instance in the list is considered as a duplicate.&lt;br /&gt;
	 * @param shapes A list of shapes&lt;br /&gt;
	 * @return Count of unique ellipses (hoe many ellipses are in the memory).&lt;br /&gt;
	 */&lt;br /&gt;
	public static int countUniqueEllipses(List&amp;lt;Shape&amp;gt; shapes) {&lt;br /&gt;
		// TODO: implement&lt;br /&gt;
		return -1;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Count different rectangles in the given list of shapes.&lt;br /&gt;
	 * Two rectangles are different if at least one of the sides&lt;br /&gt;
	 * (a or b) is not equal for both rectangles.&lt;br /&gt;
	 * @param shapes A list of shapes.&lt;br /&gt;
	 * @return Count of different rectangless.&lt;br /&gt;
	 */&lt;br /&gt;
	public static int countDifferentRectangles(List&amp;lt;Shape&amp;gt; shapes) {&lt;br /&gt;
		// TODO: implement&lt;br /&gt;
		return -1;	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aleksandr</name></author>
	</entry>
</feed>