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

Форум PHP

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

 

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

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

тема: Скрипт неработает с разными видами чисел, подскАжите?
 
 автор: Na100yashyi   (15.05.2008 в 17:46)   письмо автору
 
 

Проблема в том, что скрипт не понимает числа вида 21.21 и 123.12, а вот с числами формата 12.1234 работает нормально. В первом и втором случаях начинает выводить все подряд на пол страницы, а должно быть две строки, в каждой по 4-10 значений. Подскажите пожалуйста, что нужно переделать? Также буду рад выслушать косяки по коду самой сортировки!
Вот сам скрипт:
<?
$file
=fopen("C:\WebServers\home\localhost\www\levels.txt","r");
  
$i=1;
   
$p2=0;
$tekkotir=fgets($file55);
while(!
feof($file))  
    {
     
$masw=fgets($file55); 
    
$mast=explode(' ',$masw);
    
$mass1[$i][0]=$mast[0];
          
$mass1[$i][1]=$mast[1];

      
$i=$i+1;
      
$n=$i;
    }
$z=1;$f=0;
while(
$z<=$n
    {
        for(
$i=$z;$i<=$n;$i++)
        {
        if((
abs($mass1[$i][0]-$mass1[$i+$f+1][0]))<0.005)
            {
             
$f=$f+1;
             
$mass[$f][0]=$mass1[$z+1+$f][0];
                     
$mass[$f][1]=$mass1[$z+1+$f][1];
         }
         }
            for (
$j=2$j<=$f$j++)
            { 
            for (
$i=1$i!=$j$i++)
                 {
             if (
$mass[$i][1]<$mass[$i+1][1])
                  {
                     
$p=$mass[$i][0];$p1=$mass[$i][1];
                      
$mass[$i][0]=$mass[$i+1][0];$mass[$i][1]=$mass[$i+1][1];
                      
$mass[$i+1][0]=$p;$mass[$i+1][1]=$p1;
                  }
            }
            }
                
$p2=$p2+1;
                
$msort[$p2]=$mass[1][0];
        
$z=$z+$f;
        
$f=0;
    }
$srednee $tekkotir;
echo (
'Понижение: ');
$p=0;
for(
$j=1$j<$p2$j++)
{
if(
$srednee>$msort[$j]) echo ($msort[$j].', ');
if(
$srednee<$msort[$j])
{
if(
$p==0) echo('<br><br>Повышение:');
$p=1;
echo(
$msort[$j].', ');
}
}
 
?>


А вот сам файл из которого считываются данные, правда в оригинале значений примерно в 2 - 2.5 раза больше:
2.0438
1.9606
1.9607
1.9608
1.9609
1.961
1.9611
1.9612
1.9613
1.9614
1.9615
1.9616
1.9617
1.9618
1.9619
1.962
1.9621
1.9622
1.9623
1.9624
1.9625
1.9626
1.9627
1.9628
1.9629
1.963
1.9631
1.9632
1.9633
1.9634
1.9635
1.9636
1.9637
1.9638
1.9639
1.964
1.9641
1.9642
1.9643
1.9644
1.9645
1.9646
1.9647
1.9648
1.9649
1.965
1.9651
1.9652
1.9653
1.9654
1.9655
1.9656
1.9657
1.9658
1.9659
1.966
1.9661
1.9662
1.9663
1.9664
1.9665
1.9666
1.9667
1.9668
1.9669
1.967
1.9671
1.9672
1.9673
1.9674
1.9675
1.9676
1.9677
1.9678
1.9679
1.968
1.9681
1.9682
1.9683
1.9684
1.9685
1.9686
1.9687
1.9688
1.9689
1.969
1.9691
1.9692
1.9693
1.9694
1.9695
1.9696
1.9697
1.9698
1.9699
1.97
1.9701
1.9702
1.9703
1.9704
1.9705
1.9706
1.9707
1.9708
1.9709
1.971
1.9711
1.9712
1.9713
1.9714
1.9715
1.9716
1.9717
1.9718
1.9719
1.972
1.9721
1.9722
1.9723
1.9724
1.9725
1.9726
1.9727
1.9728
1.9729
1.973
1.9731
1.9732
1.9733
1.9734
1.9735
1.9736
1.9737
1.9738
1.9739
1.974
1.9741
1.9742
1.9743
1.9744
1.9745
1.9746
1.9747
1.9748
1.9749
1.975
1.9751
1.9752
1.9753
1.9754
1.9755
1.9756
1.9757
1.9758
1.9759
1.976
1.9761
1.9762
1.9763
1.9764
1.9765
1.9766
1.9767
1.9768
1.9769
1.977
1.9771
1.9772
1.9773
1.9774
1.9775
1.9776
1.9777
1.9778
1.9779
1.978
1.9781
1.9782
1.9783
1.9784
1.9785
1.9786
1.9787
1.9788
1.9789
1.979
1.9791
1.9792
1.9793

   
 
 автор: Trianon   (15.05.2008 в 19:49)   письмо автору
 
   для: Na100yashyi   (15.05.2008 в 17:46)
 

проблема в том, что Вы не написали, что собственно, этот скрипт должен делать.

   
 
 автор: Na100yashyi   (15.05.2008 в 20:14)   письмо автору
 
   для: Trianon   (15.05.2008 в 19:49)
 

Вот результат работы скрипта с чисами вида "1.1234"

Понижение: 1.9608 , 1.966 , 1.9712 , 1.9764 , 1.9816 , 1.9868 , 1.992 , 1.9972 , 2.0024 , 2.0076 , 2.0128 , 2.018 , 2.0232 , 2.0284 , 2.0336 , 2.0388 , 

Повышение: 2.044 , 2.0492 , 2.0544 , 2.0596 , 2.0648 , 2.07 , 2.0752 , 2.0804 , 2.0856 , 2.0908 , 2.0939 , 2.0954 , 2.0962 , 


Тоже самое должно получатся и с числами форматов "12.12" и "1.123" но работать он с такими числами отказывается, и начинает выводить на всю страницу все числа подряд, что может быть не так?

   
 
 автор: Trianon   (15.05.2008 в 20:52)   письмо автору
 
   для: Na100yashyi   (15.05.2008 в 20:14)
 

Вопрос был не в том, какой результат (тем более, что исходных данных Вы не привели. )
А в том, какая задача им решается.

Соображений два.
1. Чем писать собственную сортировку, едва тянущую на школьный уровень, имеет смысл воспользоваться одной из стандартных функций. sort или usort к примеру.
2. Чтобы сравнивать числа, нужно числа и хранить. А вовсе не текстовые строки. Это, наверняка, является причиной того, что '12.12' у Вас меньше, чем '2.038'

   
 
 автор: Na100yashyi   (20.05.2008 в 16:14)   письмо автору
20.8 Кб
 
   для: Trianon   (15.05.2008 в 20:52)
 

Пожалуй начну по другому.
На данном скриншоте: http://liteforex.liteforex.net//test/1.gif изображена цена - зеленая линия, которая несколько раз подряд пересекает разноцветные горизонтальные линии (5 штук) - это наиболее максимальные скопление цен, тоесть цена в этих местах была больше всего, даже невооруженным глазом на скрине это видно. Задача состоит в том, чтобы найти эти уровни программно.
Есть также текстовый файл http://liteforex.liteforex.net//test/FindLevels.txt, первой строчкой идет текущая цена, далее в нем содержатся колонка цен и напротив каждой цены количество раз - сколько она находилась на этом уровне. Нужно с помощью РНР обработать этот файл и ивлечь наиболее максимальные скопления этих цен. Подскажите как это можно осуществить, я это делал вот таким вот методом, но может быть есть что-то лучше ))
<?
$ysrednenie
=0.005;
$file=fopen("C:\files\Levels.txt","r");
  
$i=1;
   
$p2=0;
$tekkotir=fgets($file55);
while(!
feof($file))  
    {

     
$masw=fgets($file55); 
    
$mast=explode(' ',$masw);
    
$mass1[$i][0]=$mast[0];
        
$mass1[$i][1]=$mast[1];

      
$i=$i+1;
      
$n=$i;
    }
$z=1;$f=0;
while(
$z<=$n
    {
        for(
$i=$z;$i<=$n;$i++)
        {
        if((
abs($mass1[$i][0]-$mass1[$i+$f+1][0]))<$ysrednenie)
            {
             
$f=$f+1;
             
$mass[$f][0]=$mass1[$z+1+$f][0];
                     
$mass[$f][1]=$mass1[$z+1+$f][1];
         }
         }


            for (
$j=2$j<=$f$j++)
            { 
            for (
$i=1$i!=$j$i++)
                 {
             if (
$mass[$i][1]<$mass[$i+1][1])
                  {
                     
$p=$mass[$i][0];$p1=$mass[$i][1];
                      
$mass[$i][0]=$mass[$i+1][0];$mass[$i][1]=$mass[$i+1][1];
                      
$mass[$i+1][0]=$p;$mass[$i+1][1]=$p1;
                  }
            }
            }

                
$p2=$p2+1;
                
$msort[$p2]=$mass[1][0];
        
$z=$z+$f;
        
$f=0;
        
    }
$srednee $tekkotir;
echo (
'Понижение: ');
$p=0;
for(
$j=1$j<$p2$j++)
{
if(
$srednee>$msort[$j]) echo (trim($msort[$j]).', ');
if(
$srednee<$msort[$j])
{
if(
$p==0) echo('<br><br>Повышение: ');
$p=1;
echo(
trim($msort[$j]).', ');
}
}
 
?>

   
 
 автор: SiM(R)   (20.05.2008 в 18:08)   письмо автору
 
   для: Na100yashyi   (20.05.2008 в 16:14)
 

Если я правильно понял, то надо взять данные с файла, загнать их в одни двухмерный массив, причем первый уровень - это количество раз, сколько цена находилась на этом уровне. Потом этот массив отсортировать по "количеству раз" и вывести цены. Тем самым мы увидим наиболее "популярные" цены.

Или надо сделать что-то другое?

   
 
 автор: Na100yashyi   (20.05.2008 в 19:21)   письмо автору
 
   для: SiM(R)   (20.05.2008 в 18:08)
 

Впринципе, да, это и нужно, просто я плохо соображаю сколько чисел будет выводится, вообще по сути из такого файла должно получатся где-то 20-30 уровней-чисел, но как отобрать наиболее популярные путем не соображу :)

   
 
 автор: vitali   (21.05.2008 в 10:29)   письмо автору
 
   для: Na100yashyi   (20.05.2008 в 19:21)
 

Посмотрите библиотеку jpgraph-2.1.1 (может уже есть более свежая). Отлично документирована, масса готовых шаблонов. Всю свою аналитику мы делаем с помощью этой библиотеки.

   
Rambler's Top100
вверх

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