Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- /**
- * Задание А
- *
- * Стандартный файл с входными данными - input.txt
- * Стандартный файл с выходными данными - output.txt
- *
- * Другие имена файлов задаются в качестве параметров констуктора класса
- */
- class Casino {
- // Кол-во ставок и игр
- private $cntStavki;
- private $cntIgri;
- // Массивы ставок и игр
- private $arStavki;
- private $arIgri;
- // Результат игры
- public $gameRes = 0;
- // Входные данные (массив строк из файла)
- private $arFileData;
- /*
- * Конструктор класса
- * $inFName - имя входного файла
- * $outFName - имя выходного файла
- */
- function __construct($inFName = 'input.txt', $outFName = 'output.txt') {
- // Считывание входных данных
- try { $this->loadDataFromFile($inFName); }
- catch (Exception $e) {
- echo "При считывание файла $inFName возникла ошибка: ".$e->GetMessage();
- exit;
- }
- // Обработка входных данных
- try { $this->procInData(); }
- catch (Exception $e) {
- echo "При обработке входных данных возникла ошибка: ".$e->GetMessage();
- exit;
- }
- // Вычисление результата
- $this->calcRes();
- // Запись результата в файл
- try { $this->saveResToFile($outFName); }
- catch (Exception $e) {
- echo "При записи в файл $outFName возникла ошибка: ".$e->GetMessage();
- exit;
- }
- }
- /*
- * Метод - чтение данных из файла
- * Параметры: $FName - имя файла
- *
- * Считывает все строки файла в массив $arFileData
- */
- function loadDataFromFile($FName) {
- // Проверка наличия имени файла
- if ( strlen($FName) == 0 )
- throw new Exception('Не задано имя файла');
- // Проверка существования самого файла
- if ( !file_exists($FName) )
- throw new Exception('Файл не существует');
- // Проверка размера файла
- if ( !filesize($FName) )
- throw new Exception('Файл пуст');
- // Считывание данных всего файла в массив
- $this->arFileData = file($FName);
- }
- /*
- * Метод - запись результата в файл
- * Параметры: $FName - имя файла
- *
- * Записывает результат игры в файл
- */
- function saveResToFile($FName) {
- // Проверка имени файла
- if ( strlen($FName) == 0 )
- throw new Exception('Не задано имя файла');
- // Создание/перезапись файла
- $fPtr = fopen($FName,'w');
- // Запись результата
- fwrite($fPtr,$this->gameRes);
- // Закрытие файла
- fclose($fPtr);
- }
- /*
- * Метод - обработка входных данных
- *
- * Обрабатывает массив $arFileData и разбивает данные по массивам
- * ставок и игр, а так же записывает их количество.
- */
- function procInData() {
- /*
- * Проверка входных данных по формуле:
- * Значение числа ставок * 2 = кол-во ставок + кол-во игр - 1 (значение числа игр)
- *
- * В коде проверяется, как: значение числа ставок * 2 = кол-во элементов массива - 2
- */
- if ( ( (int)$this->arFileData[0] * 2 ) != ( count($this->arFileData) - 2 ) )
- throw new Exception('Количество игр и/или ставок не соответствует заданному');
- // Считывание кол-ва ставок и копирование самих ставок в массив
- $this->cntStavki = (int)$this->arFileData[0];
- $this->arStavki = array();
- for($i = 1; $i <= $this->cntStavki; $i++) {
- sscanf($this->arFileData[$i], '%d %d %1s', $id, $price, $side);
- $this->arStavki[$id] = array(
- 'PRICE' => $price,
- 'SIDE' => $side,
- );
- }
- // Считывание кол-ва игр и копирование самих игр в массив
- $this->cntIgri = (int)$this->arFileData[$this->cntStavki+1];
- $this->arIgri = array();
- for($i = 1; $i <= $this->cntIgri; $i++) {
- sscanf($this->arFileData[$i + $this->cntStavki + 1],
- '%d %f %f %f %1s', $id, $L, $R, $D, $side);
- $this->arIgri[$id] = array(
- 'L' => $L,
- 'R' => $R,
- 'D' => $D,
- 'SIDE' => $side,
- );
- }
- }
- /*
- * Метод - подсчет результата выигрыша на основе массивов ставок и игр
- *
- * Результат записывается в $gameRes
- */
- function calcRes() {
- // Перебор ставок и сравнение их с результатами игр
- foreach($this->arStavki as $id => $arVal) {
- // Делаем ставку
- $this->gameRes -= (int)$arVal['PRICE'];
- // Проверяем ставку
- if ( $arVal['SIDE'] == $this->arIgri[$id]['SIDE'] )
- $this->gameRes += (int)$arVal['PRICE'] *
- (float)$this->arIgri[$id][$arVal['SIDE']];
- }
- }
- }
- $oCasino = new Casino();
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement