• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed [Zadanie domowe] Winda - PHP - brak pomysłu na rozwiązanie

Object Storage Arubacloud
+1 głos
519 wizyt
pytanie zadane 3 października 2017 w PHP przez Krzysztof Trybuś Mądrala (5,280 p.)
zamknięte 3 października 2017 przez Krzysztof Trybuś

Cześć mam zadanie do zrobienia, ale potrzebuję pomocy...

Treść zadania:  Zaprojektuj skrypt który w zależności od obciążenia windy wyświetli stosowny komunikat:

*Jeżeli winda jest przeciążona(maksymalne obciążenie 500KG) to wyświetl komunikat:: Winda została przeciążona! Odciąż windę, by mogła ruszyć. 

*Jeżeli waga obciążenia windy jest mniejsza lub równa 500 KG to wyświetl komunikat: Trwa zamykanie drzwi... Winda rusza.

Wyświetl lączną wagę obciążenia windy po wejściu wszystkich osób. Wyświetl ile osób weszło do windy oraz która osoba weszła do windy jako pierwsza, a która weszła jako ostatnia.

Zrobiłem taki kawałek i utknąłem:

<?php

    class Osoba {
        public $waga;
        public function __construct($waga)
        {
            $this->waga = $waga;
        }

        }

        $piotr = new Osoba(70);
        $kasia = new Osoba(70);
        $wojtek = new Osoba(150);
        $agata = new Osoba(150);

        $winda = 500;

        function obliczWaga() {

           $wagaO = func_get_args();
            return array_sum();
        }


         echo "Maksymalne obciążenie windy $winda KG" . '<br/>';

         echo 'Obciążenie windy w KG: ' . 
            obliczWaga($piotr->waga, $kasia->waga, $wojtek->waga, $agata->waga);
            

W jaki sposób mogę przypisać wynik zwrócony z funkcji obliczWaga do jakiejś nowej zmiennej np. $lacznaWaga, by móc stworzyć warunek sprawdzający typu if($lacznaWaga>$winda)?

Do klasy obiektów przypisałem na razie tylko wagę, ale chcę przypisać jeszcze "id" i "name", żeby móc to wykorzystać do wyświetlenia informacji o tym kto wszedł do windy i za pomocą max i min wyświetlić informację, która osoba weszła pierwsza i ostatnia.

Nie wiem, czy obiekty to był dobry pomysł, ale nie wiem jak się zabrać za to zadanie... Ktoś może mnie jakoś nakierować? Jakiś inny pomysł? Może w C++ zadanie będzie prostsze, nie wiem... C++ daje możliwość operowania na danych wprowadzonych z klawiatury. 

komentarz zamknięcia: Uzyskano odpowiedż odnośnie poruszanego zagadnienia.

1 odpowiedź

+4 głosów
odpowiedź 3 października 2017 przez Assasz Nałogowiec (30,460 p.)
wybrane 3 października 2017 przez efiku
 
Najlepsza

Obiekty to bardzo dobry pomysł. Pozwoliłem sobie rozszerzyć Twoje rozwiązanie:


class Person
{
	private $name;
	private $weight;
	
	public function __construct(string $name, int $weight)
	{
		$this->name = $name;
		$this->weight = $weight;
	}
	
	public function getName()
	{
		return $this->name;
	}
	
	public function getWeight()
	{
		return $this->weight;
	}
}

class Elevator
{
	private const LIMIT = 500;
	private $occupiers;
	private $weight;
	
	public function __construct()
	{
		$this->occpiers = [];
	}
	
	public function enter(Person $person)
	{
		$this->occupiers[] = $person;
		$this->weight += $person->getWeight();
	}
	
	public function getWeight()
	{
		return $this->weight;
	}
	
	public function getNumberOfOccupiers()
	{
		return count($this->occupiers);
	}
	
	public function getFirstOccupier()
	{
		if($this->getNumberOfOccupiers() > 0)
		{
			return $this->occupiers[0];
		}
	}
	
	public function getLastOccupier()
	{
		if($this->getNumberOfOccupiers() > 0)
		{
			return end($this->occupiers);
		}
	}
	
	public function run()
	{
		if($this->weight <= self::LIMIT)
		{
			return true;
		}
		
		return false;
	}
}

$piotr = new Person('Piotr', 50);
$adam = new Person('Adam', 60);
$pawel = new Person('Pawel', 70);

$elevator = new Elevator();

$elevator->enter($piotr);
$elevator->enter($adam);
$elevator->enter($pawel);

if($elevator->run())
{
	echo 'Trwa zamykanie drzwi... Winda rusza.';
}
else
{
	echo 'Winda została przeciążona! Odciąż windę, by mogła ruszyć.';
}

echo 'Łączna waga windy: '.$elevator->getWeight().
	', liczba osób: '.$elevator->getNumberOfOccupiers().
	', pierwsza osoba: '.$elevator->getFirstOccupier()->getName().
	', ostatnia osoba: '.$elevator->getLastOccupier()->getName();

Przeanalizuj dokładnie ten kod, a w razie problemów pytaj. Zwróć też uwagę, że kod ten wymaga PHP 7.1 do działania.

Wybacz za gotowca, ale wciągnąłem się :)

komentarz 3 października 2017 przez efiku Szeryf (75,160 p.)
Co to za gotowce ;)
Dokładnie też o tym pomyślałem, aby zrobić Windę jako formę kontenera.
Ale tam powinien być też interfejs ;)

Warunki możesz jeszcze bardziej skrócić do  1 linii robiąc wyrażenia warunkowe.

To jest bardzo dobry przykład zadania na myślenie obiektowe.
komentarz 3 października 2017 przez Krzysztof Trybuś Mądrala (5,280 p.)
edycja 3 października 2017 przez Krzysztof Trybuś

efik, mógłbyś mi wytłumaczyć te fragmenty?

 public function enter(Person $person)
    {
        $this->occupiers[] = $person;
        $this->weight += $person->getWeight();
    }
 public function getLastOccupier()
    {
        if($this->getNumberOfOccupiers() > 0)
        {
            return end($this->occupiers);
        }
    }
  public function run()
    {
        if($this->weight <= self::LIMIT)
        {
            return true;
        }
         
        return false;
    }

Byłbym wdzięczny poprostu za krótki komentarz do każdej linijki - ogólnie funkcje znam, ale jestem nowy w tym temacie i  chciałbym zrozumieć te fragmenty krok po kroku :) Reszta jest jasna.

komentarz 3 października 2017 przez Boshi VIP (100,240 p.)
Tu nie ma co tłumaczyć nawet. Zobacz co robi end i co to jest self..
komentarz 3 października 2017 przez Krzysztof Trybuś Mądrala (5,280 p.)
Dobra, już wszystko jasne :) Skrypt przeanalizowany.

efik, dzięki za podzielenie się kodem - dzięki Tobie uzupełniłem luki w wiedzy.

Zostawiamy dla potomnych.
komentarz 3 października 2017 przez efiku Szeryf (75,160 p.)

Ale to Twórcą jest Assasz.  (Widzisz? Tak kończy się dawanie gotowcaa hahah), jemu dziękuj. 

Ja bym zrobił to samo tylko w metodzie enter dodał interfejs, a klasę kontenera zrobił final.

 

komentarz 3 października 2017 przez Boshi VIP (100,240 p.)
Efik, czemu interfejs?  co miałby on robić? bo tak szczerze to nie widze go tu w ogóle ;)
komentarz 3 października 2017 przez efiku Szeryf (75,160 p.)
Bo wrzucasz tutaj osobę, a mógłbyś i worek ziemniaków.
Ale za chwilę zaczniemy budować cały ekosystem wykraczając poza zadanie ;D
komentarz 3 października 2017 przez Assasz Nałogowiec (30,460 p.)
Ale worka ziemniaków nie zrobisz w klasie Person xd

A wyrażenia warunkowe mogłyby być, ale pomyślałem, że tak będzie bardziej czytelne.
komentarz 3 października 2017 przez efiku Szeryf (75,160 p.)
Trust me, I'm engineer!
komentarz 3 października 2017 przez Krzysztof Trybuś Mądrala (5,280 p.)
Assasz, jak pisałem te podziękowania to chyba zasypiałem: ) Dzięki za skrypt - gotowiec,  ale mam dzięki Twej inicjatywie  fundament do dalszego poszerzania wiedzy z obiektòwki.

Nie wiedziałem jak dokładnie "ugryźć" to zadanie, bo mam tylko tzw. podstawy podstaw w tym temacie - na tę chwilę.
komentarz 4 października 2017 przez Boshi VIP (100,240 p.)
Efik chyba już śpie, alee przecież możesz wrzucić tylko obiekt  typu person  :p
1
komentarz 4 października 2017 przez HaKIM Szeryf (87,590 p.)
IMO to to kto może wejść do windy powinno być zależne od tego czy coś, co chce wejść do windy, mieści się w drzwiach; nie czy jest się ludziem. No bo która winda w realu waliduje wam czy wszedł człowiek czy kangur?

Inną sprawą jest czy aby nie wystąpiło przeciążenie, ale to już mamy. ^^
komentarz 4 października 2017 przez Boshi VIP (100,240 p.)
No dobra ale winda nie wykrywa czy ktoś jest psem czy kotem a może człowiekiem, A biorąc pod uwagę, że z windy korzystają zazwyczaj ludzie, z bagażem czy nie, to dalej są to ludzie więc nie widze tam interfejsu pozwalającego oszacować typ.
komentarz 4 października 2017 przez HaKIM Szeryf (87,590 p.)

Boshi, to była odpowiedź do mojego postu? Jeśli tak to chyba nie zrozumiałeś o co mi chodzi. :p

IMO to to kto może wejść do windy powinno być zależne od tego czy coś, co chce wejść do windy, mieści się w drzwiach; nie czy jest się ludziem. 

 No bo która winda w realu waliduje wam czy wszedł człowiek czy kangur? 


 

 No dobra ale winda nie wykrywa czy ktoś jest psem czy kotem a może człowiekiem

 Mam wrażenie, że mówimy o tym samym... :-:

komentarz 4 października 2017 przez Boshi VIP (100,240 p.)
Raczej do efika ;p

Podobne pytania

+1 głos
0 odpowiedzi 542 wizyt
0 głosów
2 odpowiedzi 118 wizyt
pytanie zadane 18 marca 2020 w C i C++ przez Berniak Początkujący (260 p.)
+1 głos
1 odpowiedź 340 wizyt
pytanie zadane 4 października 2017 w PHP przez sc4rface Dyskutant (7,710 p.)

92,579 zapytań

141,432 odpowiedzi

319,661 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...