Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ

Warning: Trying to access array offset on false in /home/u98739/softtime.ru/www/utils/currentforum.php on line 18

Warning: Trying to access array offset on false in /home/u98739/softtime.ru/www/utils/currentforum.php on line 19

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 001 на задачу N 16
 
 автор: SoftTime   (13.04.2006 в 19:56)   письмо автору
 
 

Ответ 001 на задачу N 16.
С условиями задачи можно ознакомится по ссылке.

<?php
$fileN = "data.dat";
$h = $w = 300;
//Цвета секторов (всего 15).
$r[] = 72; $g[] = 209; $b[] = 204;
$r[] = 199; $g[] = 21; $b[] = 133;
$r[] = 25; $g[] = 25; $b[] = 112;
$r[] = 245; $g[] = 255; $b[] = 250;
$r[] = 255; $g[] = 228; $b[] = 225;
$r[] = 255; $g[] = 228; $b[] = 118;
$r[] = 255; $g[] = 222; $b[] = 173;
$r[] = 0; $g[] = 0; $b[] = 128;
$r[] = 253; $g[] = 245; $b[] = 230;
$r[] = 255; $g[] = 165; $b[] = 0;
$r[] = 218; $g[] = 112; $b[] = 114;
$r[] = 205; $g[] = 133; $b[] = 63;
$r[] = 255; $g[] = 0; $b[] = 0;
$r[] = 0; $g[] = 255; $b[] = 0;
if (is_file($fileN))
{
  $fd = fopen($fileN, "r");
  $sum = 0;
  while (!feof($fd))
  {
    $a = trim(fgets($fd));
    //Отбрасываю пустые строки
    if (!empty($a))
    {
      //В $exp[1] - название, в $exp[0] - кол-во.
      $exp = explode(" ", $a);
      $sector[$exp[1]] = $exp[0];
      $sum += $exp[0];
    }
  }
  fclose($fd);
  //или рисуем диаграмму
  if (isset($_GET['img']))
  {
    $img = imagecreatetruecolor($w+1,$h+1);
    if (!$img) exit;
    $white = imagecolorallocate($img, 255, 255, 255);
    imagefill($img, 1, 1, $white);
    $background = imagecolorallocate($img, 240, 240, 240);
    $cx = $cy = $h/2;
    imagefilledellipse($img ,$cx, $cy, $w ,$h, $background);
  }
  //или выводим таблицу
  else
  {
    $table = "<html><head><title>диаграмма</title></head>
<body>
<img src=".$_SERVER['PHP_SELF']."?img=diagram>
<table border=1 cellpadding='3' cellspacing='0'>
  <tr align='center'>
    <td> цвет </td>
    <td> кол-во </td>
    <td> % </td>
    <td> пояснение </td>
  </tr>";
  }
  $start = 0;      //Начальный угол
  $ostatok = 0;    //Здесь размер непрорисованных секторов.
  $i = 0;          //Сётчик
  // В $key - название, в $val - кол-во.
  foreach ($sector as $key =>$val)
  {
    $ugol = $val / $sum * 360;
    //Сектор < 2% (2% от 360 = 7.2).
    if ($ugol > 7.2)
    {
      //или рисуем диаграмму
      if  (isset($_GET['img']))
      {
        $color =  imagecolorallocate($img, $r[$i], $g[$i], $b[$i]);
        $angle_sector = $start + $ugol + $ostatok;
        imagefilledarc($img ,$cx, $cy, $w, $h, $start, $angle_sector, $color, "IMG_ARC_PIE");
        $start += $ugol;
      }
      //или выводим таблицу
      else
      {
        $table .= "
  <tr align='center'>
    <td bgcolor='".sprintf("#%02x%02x%02x", $r[$i], $g[$i], $b[$i])."'></td>
    <td> $val </td>
    <td> ".sprintf("%.2f",($val/$sum*100))." % </td>
    <td> $key </td>
  </tr>";
      }
      $i++;
    }
    else
    {
      //Не прорисованный сектор
      $ostatok += $ugol;
      $table .= "
  <tr align='center'>
    <td> нет </td>
    <td> $val </td>
    <td> ".sprintf("%.2f",($val/$sum*100))." % </td>
    <td> $key </td>
  </tr>";
    }
    //Если секторов >= 15.
    if ($i >= 15) break;
  }
  //или рисуем диаграмму
  if (isset($_GET['img']))
  {
    header ("Content-type: image/jpeg");
    imagejpeg($img);
  }
  //или выводим таблицу
  else
  {
     $table .="
</table>
</body>
</html>";
     echo $table;
  }
}
else {echo "файл data.dat не найден";exit;}
?>


Пустые строки в data.dat игнорируются.
Одинаковые названия вида
...
8 сливы
...
12 сливы
не допускаются.
Сектор < 2% объединяется со следующим.

http://www.softtime.ru/info/task.php?id_article=88

   
 
 автор: cheops   (17.04.2006 в 02:10)   письмо автору
 
   для: SoftTime   (13.04.2006 в 19:56)
 

Просто волшебно... Я в восхищении! скрипт работает как надо, так как вы единственный осилили эту задачу вам достаются все баллы и почести :)))