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

Spoj proste dodawanie i błędna odpowiedź

Object Storage Arubacloud
0 głosów
208 wizyt
pytanie zadane 7 listopada 2018 w PHP przez Ambroz Obywatel (1,840 p.)
edycja 7 listopada 2018 przez Ambroz

Cześć Wszystkim.
Postanowiłem sobie porobić zadania na spoju, ale niestety dostaje ciągle błędną odpowiedź, mimo iż jak z palca wpisze w kod podane przykładowe wartości to wszystko się zgadza.

<?php
class ProsteDodawanie{  //name easy sum

  private $hi;
  private $ho;

  private $x; //zmienne wejściowe
  private $y; //zmienna przechowująca tablicę

  private $sum;

  public function __construct(){

    $this->hi = fopen('php://stdin', "r");
    // $this->ho = fopen('php://stdout', "w");
  }

  public function VariableOperations(){
    fscanf($this->hi, "%d", $this->x); //skan liczby x
    //fscanf($this->hi, "%d", $this->y); //take variable y

    $this->y = explode(" ", $this->x);
    $this->sum = 0;

    for($i=0; $i<count($this->y); $i++){
      $this->sum += $this->y[$i];
    }

    fwrite($this->ho, sprintf("%d\n", $this->sum)); //show sum
  }

  public function __destruct(){
    fclose($this->ho);
    fclose($this->hi);
  }
}

$test = new ProsteDodawanie;
$test ->VariableOperations();
?>

Link do zadania: Zadanie - Proste Dodawanie
P.S
Tak, robię to na klasach, bo chce.

UPDATE
Widzę, że problemem jest nie wczytywanie całego inputa, jedynie pierwszej liczby z przykładowego ciągu: 1 2 3 4 5. Wczytuje tylko 1

Jeśli amcie jakiś pomysł dlaczego mam błędną odpowiedź to napiszcie.

1 odpowiedź

+1 głos
odpowiedź 7 listopada 2018 przez Bosswell Nałogowiec (36,470 p.)

Skoro robisz to już na klasach. Co według mnie jest fajnym podejściem, to polecam przemyślenie architektury.

Klasa o nazwie ProsteDodawanie ? Coś samo w sobie nie brzmi dobrze. Za samo dodawanie może odpowiadać metoda w klasie np "Matematyka". Nawet pokusiłbym się o metodę statyczną do takiego typu operacji, aby nie tworzyć całego obiektu do takiego rodzaju operacji. Do otwierania i pobierania danych z pliku mógłbyś mieć klasę np "FileManager". Każdy zewnętrzny plik mógłby być wyrażony za pomocą klasy "File". W ostateczności mógłbyś się nawet pokusić o klasę "Kolekcja", która agreguje tablice klas i nią zarządza. Także widzisz. W obiektowości chodzi o atomowość. Lepiej mieć więcej klas, które są odpowiedzialne za pojedyncze rzeczy i podatne na ewentualne rozszerzenie w przyszłości. W dodatku są bardziej czytelne.

Co do twojego problemu, to zastanów się nad metodą VariableOperations.

https://secure.php.net/manual/pl/function.fscanf.php

Ta funkcja działą dla php w wersji 5. Możliwe że nie masz dla niej wsparcia. Jeżeli masz, to popatrz na przykłady.

Tutaj masz przykład pobierania linii po linii bardziej aktualną.

https://stackoverflow.com/questions/13246597/how-to-read-a-large-file-line-by-line

komentarz 8 listopada 2018 przez Ambroz Obywatel (1,840 p.)

Nazwałem tak klasę do zadania tak samo metoda VariableOperations jest czysto do zadań, gdyż tworzę za każdym razem nowy plik php do zadania w osobnym folderze.

Aby wczytać całą linię wystarczy zrobić to co jest na stronie: I/O Stream w PHP

Podczas podawania danych takich jak "1 2 3 4 5" czy "-100 100" w ideone.com, program działa dobrze, ale idzie w maliny jeśli dostaje jakieś niepotrzebne informacje typu ile będzie wejść i ile to wejście będzie miało liczbę tak jak jest to na spoju podawane.
Jak ktoś chce to może sobie sprawdzić programik na ideone pod nazwą Proste Dodawanie

Podobne pytania

0 głosów
2 odpowiedzi 458 wizyt
0 głosów
0 odpowiedzi 285 wizyt
0 głosów
2 odpowiedzi 534 wizyt
pytanie zadane 11 lutego 2019 w C i C++ przez Zydu Początkujący (340 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 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!

...