Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2011, 17:07   #1
Maksim_14
 
Регистрация: 02.05.2011
Сообщений: 6
Вопрос в чем ошибка???

PHP код:
<?php
//if(isset($_FILES['fupload'])){
if($_FILES['fupload']['tmp_name']){
$file file($_FILES['fupload']['tmp_name']);
  
$c count($file);
  
$file2 fopen('rts.txt''w');
  
$arr = array();
  for(
$i 0$i $c$i++){
    
$arr[$i] = explode(' '$file[$i]);
    
$arr[$i][1] = $arr[$i][1]*0.01;
   
// $arr[$i][1] = $arr[$i][1]*$c; 
////////////////////////////////////////////////////////////////////////////
    
for($k=0$k<$c$k++)
{
if (
$k==0)
{
$sum=0;
    for (
$i=0$i<$c$i++)
    {
    
$sum=+$arr[$i][1]*($arr[$i][1]-1);
$arr[$i][1]=$sum/$c;
}
}
else
{
    
$sum=0;
    for (
$i=0$i<$c-$i+1$i++)
    {
        
$sum=+$arr[$i][1]*$arr[$i+$k-1][1];
    
$arr[$i][1]=$sum/($c-$k+1);
    }
}
}

    
// $arr[$i][1] - исходное число из второго столбца, умноженное на 0.001. В этой строке умножается на количество строк в исходном файле. Вы можете написать любую другую формулу.
fwrite($file2$arr[$i][0].' '.$arr[$i][1]."\n"); // пишем результат в файл
  
}
  
fclose($file2);
  echo 
'Данные записаны.';
  echo 
"<center><br><a  href='int.php'>Intensity</a></center>";
}
else echo 
"Ошибка чтения файла";
?>
когда ничинаю считать...вроде все нормально(хотя проверить тоже можно)! но когда записываю в файл....начинаются проблемы Записываются в новый файл только одни нули! где ошибки?
Maksim_14 вне форума Ответить с цитированием
Старый 03.05.2011, 12:27   #2
Maksim_14
 
Регистрация: 02.05.2011
Сообщений: 6
По умолчанию

никто не знает? может я что-то не так считаю? почему нули?

Беру из файла второй столбец и считаю по формулам(первый элемент по первой формуле, а все остольные - по второй)! а в новый файл записываю первый столбец из исходного файла, а во второй столбец то что посчитали...
Maksim_14 вне форума Ответить с цитированием
Старый 03.05.2011, 14:18   #3
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
Радость

Сходу - использована $i во второй раз как счётчик внутри цикла со счётчиком в $i.

Дальше не знаю, почините, проверьте, если не заработает, будем ещё посмотреть.
graymaster вне форума Ответить с цитированием
Старый 03.05.2011, 14:20   #4
Maksim_14
 
Регистрация: 02.05.2011
Сообщений: 6
По умолчанию

а сейчас?
Код:
<?php
 
//if(isset($_FILES['fupload'])){
if ($_FILES['fupload']['tmp_name']) {
  
  $file = file($_FILES['fupload']['tmp_name']);
  $c = count($file);
  $file2 = fopen('rts.txt', 'w');
  $arr = array();
  for($i = 0; $i < $c; $i++){
    $arr[$i] = explode(' ', $file[$i]);
    $arr[$i][1] = $arr[$i][1]*0.001; // $arr[$i][1] - исходное число из второго столбца, умноженное на 0.001. 
    }
	for ($k = 0; $k < $c; $k++) {
    if ($k == 0) {
        $sum = 0;
        for ($i = 0; $i < $c; $i++) {
          $sum += $arr[$i][1] * ($arr[$i][1] - 1);
          $arr[$k][1] = $sum / $c;
        }
      } 
	  else {
        $sum = 0;
        for ($i = 0; $i < ($c - $i + 1); $i++) {
          $sum += $arr[$i][1] * $arr[$i + $k - 2][1];
          $arr[$k][1] = $sum / ($c - $k + 1);
		}
      }
    }

	for($i = 0, $k = 0; $i < $c, $k < $c; $i++,  $k++)
	fwrite($file2, $arr[$i][0] . ' ' . $arr[$k][1] . "\n"); // пишем результат в файл

  
  fclose($file2);
 echo 'Данные записаны.';
 echo "<center><br><a  href='int.php'>Intensity</a></center>";
}
else
  echo "Ошибка чтения файла";
?>
Maksim_14 вне форума Ответить с цитированием
Старый 03.05.2011, 16:17   #5
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

Теперь вроде как должно быть всё нормально (что за формулы - не понимаю, не знаю, может ли в них быть ошибка)

что показывает вардамп $arr до записи в файл ?


единственное что (но это не может вызвать баг)

Код:
for ($i = 0, $k = 0; $i < $c, $k < $c; $i++, $k++)
		fwrite($file2, $arr[$i][0] . ' ' . $arr[$k][1] . "\n"); // пишем результат в файл
можно упростить

Код:
for ($i = 0; $i < $c; $i++)
		fwrite($file2, $arr[$i][0] . ' ' . $arr[$i][1] . "\n"); // пишем результат в файл

Последний раз редактировалось graymaster; 03.05.2011 в 16:18. Причина: stylefix
graymaster вне форума Ответить с цитированием
Старый 04.05.2011, 00:01   #6
Maksim_14
 
Регистрация: 02.05.2011
Сообщений: 6
По умолчанию

мне нужно следующее:
1. Считать с файла второй столбец(файл тхт) и умножить его на 0.001
2. Затем первый элемент(второй столбец) посчитать по первой формуле, а все остольные по второй формуле.
3. записать в новый файл в первый столбец первый столбец из исходного файла, а во второй столбец - то что мы насчитали.
4. Построить график(по двум столбцам из нового файла)
Maksim_14 вне форума Ответить с цитированием
Старый 04.05.2011, 00:09   #7
Maksim_14
 
Регистрация: 02.05.2011
Сообщений: 6
По умолчанию

а формула это подсчет АКФ
Maksim_14 вне форума Ответить с цитированием
Старый 04.05.2011, 15:28   #8
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
Сообщение

Несколько замечаний по коду

небольшой рефакторинг привел к этому:

Код:
//if(isset($_FILES['fupload'])){
if ($_FILES['fupload']['tmp_name']) {
	
	$file = file($_FILES['fupload']['tmp_name']);
	$cf = count($file);
	$arr = array ();
	$c = 0;
	for ($i = 0; $i < $cf; $i++) {
		$a = explode(' ', $file[$i]); // Добавил несколько косолапую проверку правильности введённых данных, как минимум - у нас гарантированно есть 2 столбца :)
		if (count($a) == 2) $arr[$c++] = array (
			0=>$a[0], 
			1=>$a[1] * 0.001); // исходное число из второго столбца, умноженное на 0.001.
	}

	for ($k = 0; $k < $c; $k++) {
		$sum = 0;
		if ($k == 0) {
			for ($i = 1; $i < $c; $i++) 
				$sum += $arr[$i][1] * ($arr[$i][1] - 1);
			$arr[$k][1] = $sum / $c; // Тут не стоит теребить эту переменную в цикле, всё равно нас интереснует только конечное значение
		} else {
			for ($i = 0; $i < ($c - $k + 1); $i++) // Вот тут вот было странное условие с участием $i в двух частях неравенства $i < ($c - $i + 1), 
								 // которое сводилось к $i < ($c+1)/2, но судя по рассчёту суммы, должно было быть немного другим
				$sum += $arr[$i][1] * $arr[$i + $k - 2][1]; // Тут тоже есть ошибка, потому что при $i==0, $k==1 
								  // мы пытаемся использовать значение $arr[-1][1] что не существует
			$arr[$k][1] = $sum / ($c - $k + 1); // Тут, наверное, тоже, хотя у меня возникли некоторые сомнения в том,  
								// что в процессе расчёта значения $arr должны динамически меняться 
								// (т.е. следующие рассчитываются на уже пересчитанных предыдущих, 
								// Возможно, стоило бы раскидать их в разные массивы ?
		}
	}
	
// Зачем держать файл открытым всё время, лучше это сделать сразу перед записью.
	$file2 = fopen('rts.txt', 'w');
	for ($i = 0; $i < $c; $i++)
		fwrite($file2, $arr[$i][0] . ' ' . $arr[$i][1] . "\n"); // пишем результат в файл
	fclose($file2);

	echo 'Данные записаны.';
	echo "<center><br><a  href='int.php'>Intensity</a></center>";
} else
	echo "Ошибка чтения файла";

В результате при проверке (не включая запись в файл, а только дамп), получились ненулевые значения при вводе второго столбца со значениями в районе 1000+-100
graymaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чем ошибка? Benderbej PHP 4 23.02.2011 00:50
В чем ошибка? Кинельски Общие вопросы Delphi 17 24.05.2010 23:08
В чем ошибка? olegnaum Общие вопросы C/C++ 7 03.02.2010 12:58
В чем ошибка... Эдвин Галстук Паскаль, Turbo Pascal, PascalABC.NET 3 25.10.2009 20:01
В ЧЕМ ОШИБКА? salmanbaz Общие вопросы C/C++ 5 11.01.2009 13:21