[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Простая задача для реализации в ООП
Страницы: 1, 2
Shuriken
Цитата (Игорь_Vasinsky @ 16.08.2012 - 10:35)
Цитата
square,2

Цитата
Квадрат: Площадь = 0 Периметр = 0.

Блин, точно
Исправил


class Square extends Figure {
var $a;
function __construct($x) {
$this->a=$x;
}
function func() {
$this->area=pow($this->a,2);
echo "Квадрат: Площадь = $this->area ";
$this->perimetr=4*$this->a;
echo "Периметр = $this->perimetr.<br>";
}
}



Результат:
Круг: Площадь = 28.2743338823 Периметр = 18.8495559215.
Квадрат: Площадь = 4 Периметр = 8.
Треугольник: Площадь = 1.5 Периметр = 8.33900922451.
Игорь_Vasinsky
как то ты конкатенацией пренебрегаешь)

class Square extends Figure {
var $a;
function __construct($x) {
$this->a=$x;
}
function func() {
$this->area=pow($this->a,2);
echo "Квадрат: Площадь = ".$this->area;
$this->perimetr=4*$this->a;
echo "Периметр = ".$this->perimetr."<br>";
}
}


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Dezigo
Надо и мне как нибудь написать свой подход ))
polimer

Class Figure{

function __construct($type='',$a,$b=null,$c=null ){

if($type == 'square'){
echo $type."-Perimetr:".($a * 4).' Area:'.($a*$a);
}elseif($type == 'triangle'){
$p = ($a+$b+$c)/2;
echo $type."-Perimetr:".($a+$b+$c).' Area:'.(sqrt($p * ($p-$a) * ($p - $b) * ($p - $c)));
}elseif($type == 'circle'){
echo $type."-Perimetr:".(2 * M_PI * $a).' Area:'.(M_PI * $a * $a);
}
else{echo '';}
}
}
$file=fopen("file.txt","r+");
while (!feof($file)) {
$fig=explode (",",fgets($file));
$out=new Figure($fig[0],$fig[1],$fig[2],$fig[3]);
echo '<br>';
}


P.S Что такое полиморфизм и наследование?)
Michael
polimer, можешь свободно высунуть свою ф-цию из класса и ею пользоваться, смысла пихать ее в класс нет.

Цитата (glock18)
Постановка задачи:
Реализовать структуру классов...
Обязательные условия:
...


_____________
There never was a struggle in the soul of a good man that was not hard
xlebosol
Цитата (linker @ 28.06.2010 - 12:50)

2. Выкинуть абсолютно бесполезную конструкцию
if (!$this->type) return '';
в методах getArea, getPerimeter

Ее не выкинуть надо. Это есть безопасное программирование. А перенести в родительский класс в один метод (isNoType) и вызывать через parent.
Гость_Сергей
Ну, как-то так


<?php
class
file
{
private $file; // идентификатор файла

public function __construct($file_name)
{
$this->file = fopen($file_name, 'r');
}
// Считывает файл и заносит каждую строку с файла в массив file_str
public function read_file()
{
if($this->file){

while (!feof($this->file))
{
$file_str[] = fgets($this->file, 999); // считываем построчно файла
}
}

else
{
echo "Ошибка открытия файла";
}
return $file_str;
}

// вытаскивает из файла имя фигуры и ее параметры
public function decrypt_data()
{
foreach($this->read_file() as $str){

$parameters[] = explode(",",trim($str));
}
return $parameters;
}
}



abstract class figure
{
abstract public function P();
abstract public function S();
}
// класс квадрат
class Square extends figure
{
public $a; // длина стороны квадрата
public $type = __CLASS__;

public function __construct($a)
{
$this->a = $a;
}
// Вычисляем периметр квадрата
public function P()
{
return 4*$this->a;
}
// Вычисляем площадь квадрата
public function S()
{
return pow($this->a,2);
}
}

// класс круг
class Circle extends figure
{
public $r; // Радиус круга
public $type = __CLASS__;

public function __construct($r)
{
$this->r = $r;
}
// Вычисляем периметр круга
public function P()
{
return 2*pi()*$this->r;
}
// Вычисляем площадь круга
public function S()
{
return pi() * pow($this->r,2);
}
}

// класс треугольник
class Triangle extends figure
{
private $a; // сторона основание
private $b;
private $c;
public $type = __CLASS__;

public function __construct($a,$b,$c)
{
$this->a = $a;
$this->b = $b;
$this->c = $c;
}
// Вычисляем периметр треугольника
public function P()
{
$P = $this->a + $this->b + $this->c;
return $P;
}
// Вычисляем высоту треугольника
public function H(){
$p = $this->P()/2; // полупериметр треугольника
return (2/$this->a)*sqrt($p * ($p-$this->a) * ($p-$this->b) * ($p - $this->c));
}
// Вычисляем площадь треугольника
public function S()
{
return 0.5 * $this->a *$this->H();
}
}



$file = new file("Z:/home/localhost/www/test_for_job/figure.txt");
$file_date = $file->decrypt_data();


foreach($file_date as $str){
switch(strlen($str[0]))
{
case 7 : $figure[] = new square($str[1]); break;
case 4 : $figure[] = new circle($str[1]); break;
case 11 : $figure[] = new triangle($str[1],$str[2],$str[3]); break;
}
}


foreach($figure as $obj)
{
if ($obj instanceof Figure) { // Если мы работаем с наследниками Figure
echo $obj->type.", площадь = ".round($obj->S(),2).", периметр = ".round($obj->P(),2)."</br>";
}
}



Исходные данные:
Квадрат,22
Круг,10
Треугольник,20,10,15
Квадрат,10
Круг,100

Результат:
Square, площадь = 484, периметр = 88
Circle, площадь = 314.16, периметр = 62.83
Triangle, площадь = 72.62, периметр = 45
Square, площадь = 100, периметр = 40
Circle, площадь = 31415.93, периметр = 628.32
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.