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

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

 

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

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

тема: Ответ 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($img255255255);
    
imagefill($img11$white);
    
$background imagecolorallocate($img240240240);
    
$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)
 

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования