Автор Тема: Алгоритм.  (Прочитано 5765 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Pacher

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
Алгоритм.
« : 21 Мая 2002, 14:45:58 »
Я написал скрипт для вставления новостей .
Это можно сказать было первое творение на ПХП .
Он разбит на несколько скриптов , первый пишет новости в файл , второй забирает их из файла .
Так вот с этим вторым и проблема :
он работает , но он очень громоздкий , там сплошный if , elseif итд
Он сначала загоняет новости из файла в массив , считает сколько их , а потом проверяя кол-во новостей
с помощью if elseif , выводит результат .
Нельза сделать алгоритм посложнее , может с циклом как-нить ?
Вот код скрипта :



News Script<br />


$fz=fopen("na_na.txt","r");
$links_to_news=fread($fz,4096);
$data=explode("|",$links_to_news);

//ПЕРЕМЕННЫЕ ПЕРЕМЕННЫЕ

$bla1=sizeof($data)-1;
$bla2=sizeof($data)-2;
$bla3=sizeof($data)-3;
$bla4=sizeof($data)-4;
$bla5=sizeof($data)-5;
$bla6=sizeof($data)-6;
$bla7=sizeof($data)-7;
$bla8=sizeof($data)-8;
$bla9=sizeof($data)-9;
$bla11=sizeof($data)-10;
$bla22=sizeof($data)-11;
$bla33=sizeof($data)-12;
$bla44=sizeof($data)-13;
$bla55=sizeof($data)-14;
$bla66=sizeof($data)-15;
$bla77=sizeof($data)-16;
$bla88=sizeof($data)-17;
$bla99=sizeof($data)-18;
$bla_1=sizeof($data)-19;
$bla_2=sizeof($data)-20;
$bla_3=sizeof($data)-21;
$bla_4=sizeof($data)-22;
$bla_5=sizeof($data)-23;
$bla_6=sizeof($data)-24;
$bla_7=sizeof($data)-25;
$bla_8=sizeof($data)-26;
$bla_9=sizeof($data)-27;
$bla_11=sizeof($data)-28;
$bla_22=sizeof($data)-29;
$bla_33=sizeof($data)-30;
$bla_44=sizeof($data)-31;
$bla_55=sizeof($data)-32;
$proch=" | ";

//КОНЕЦ ПЕРЕМЕННЫХ

if (sizeof($data)<=2)
{
print "$data[$bla2] $proch $data[$bla1]
";
}

elseif (sizeof($data)==4)
{
print "$data[$bla2] $proch $data[$bla1]
";
print "$data[$bla4] $proch $data[$bla3]
";
}

elseif (sizeof($data)==6)
{
print "$data[$bla2] $proch $data[$bla1]
";
print "$data[$bla4] $proch $data[$bla3]
";
print "$data[$bla6] $proch $data[$bla5]
";
}

 ИТД



fclose($fz);



?>



Понимаю , что это код первоклассника , но что есть то есть .
P.S. Мне 16 .

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Алгоритм.
« Ответ #1 : 21 Мая 2002, 17:50:08 »
Вот это

$bla1
=sizeof($data)-1
$bla2=sizeof($data)-2
$bla3=sizeof($data)-3
$bla4=sizeof($data)-4
$bla5=sizeof($data)-5
$bla6=sizeof($data)-6
$bla7=sizeof($data)-7
$bla8=sizeof($data)-8
$bla9=sizeof($data)-9
$bla11=sizeof($data)-10
$bla22=sizeof($data)-11
$bla33=sizeof($data)-12
$bla44=sizeof($data)-13
$bla55=sizeof($data)-14
$bla66=sizeof($data)-15
$bla77=sizeof($data)-16
$bla88=sizeof($data)-17
$bla99=sizeof($data)-18
$bla_1=sizeof($data)-19
$bla_2=sizeof($data)-20
$bla_3=sizeof($data)-21
$bla_4=sizeof($data)-22
$bla_5=sizeof($data)-23
$bla_6=sizeof($data)-24
$bla_7=sizeof($data)-25
$bla_8=sizeof($data)-26
$bla_9=sizeof($data)-27
$bla_11=sizeof($data)-28
$bla_22=sizeof($data)-29
$bla_33=sizeof($data)-30
$bla_44=sizeof($data)-31
$bla_55=sizeof($data)-32

Заменяем на:

for($i=0;$i<33;++$i)
  {
  eval(
"\\$bla_".$i."=sizeof(\\$data)-".$i.";");
  }
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Алгоритм.
« Ответ #2 : 21 Мая 2002, 17:50:23 »
Записывай новости построчно. Одна новость на строку. Тогда сможешь прочитать при помощи file в массив и обработать строку так, как тебе необходимо.

<?
$data file("news.txt");
for (
$step=0;$step<sizeof($data)$step++)
{
//ToDo
// Делаем все, что нужно.
}
?>


З.Ы.
Сколько тебе лет - значения не имеет. :)
AS IS...

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Алгоритм.
« Ответ #3 : 21 Мая 2002, 17:51:30 »
ThE0ReTiC
Ты понимаешь зачем ему все вот эти переменные $bla ?
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Алгоритм.
« Ответ #4 : 21 Мая 2002, 18:00:21 »
AlieN
Понимаю. Только ему надо было не от переменных избавляться, а от if-else коснтрукций.
AS IS...

Оффлайн Pacher

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
Алгоритм.
« Ответ #5 : 21 Мая 2002, 19:00:20 »
AlieN
Блин , ну чёж я то не догадался :)
Какой из меня програмёр после этого ...
Спасибо :)
У меня там был пост про задачи по програмированию , так вот для того они мне и нужны чтобы не совершать таких глупых ошибок .

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Алгоритм.
« Ответ #6 : 27 Мая 2002, 19:07:56 »
хм тогда всё просто:

if (sizeof($data)%2==0

for(
$i=0;$i<sizoef($data);++$i)
{
for(
$h=1;$h<$i;++$h)
   {
    
$j=$h-1;$g=$h*2;
    print 
"<a href=\\"nius_file.php?show=$h\\">$data[$g] $proch $data[$j]</a>
"

    }
}


PSЖ код не тестил но вроде пахать должно
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Алгоритм.
« Ответ #7 : 28 Мая 2002, 14:50:05 »
твой первый скрипт уже был в форуме.
http://forums.webscript.ru/showthread.php?s=&postid=24930#post24930
с уважением,
магистр белой магии.

Оффлайн Pacher

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
Алгоритм.
« Ответ #8 : 06 Июня 2002, 01:28:05 »
AlieN
Я так и не понял , что как работает в твоем примере и на фига столько переменных ...
Чето не доходит ;[

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Алгоритм.
« Ответ #9 : 06 Июня 2002, 11:10:32 »
Pacher

[OFF]Думай голова!!![/OFF]
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Алгоритм.
« Ответ #10 : 07 Июня 2002, 17:51:20 »
Pacher
Собираем код вместе...
Смотри:

<?
for(
$i=0;$i<33;++$i)
  {
  eval(
"\\$bla_".$i."=sizeof(\\$data)-".$i.";");
  }
// НЕ знаю зачем тебе столько одинаковых переменных
if (sizeof($data)%2==0#Если кол-во элементов $data кратно двум

for(
$i=2;$i<=sizeof($data);$i+=2)//выполняем цикл с прибавкой по два
{
    
$h=$i/2;
    
$j=$i-1;
 
/* грубо говоря размер массива - 8
$i=2 $h=1 $j=1;
$i=4 $h=2 $j=3;
$i=6 $h=3 $j=5;
$i=8 $h=4 $j=7;
*/
     
print "<a href=\\"nius_file.php?show=$h\\">$data[$i] $proch $data[$j]</a>
"

/*
По аналогии с твоей ссылкой
print "<a href=\\"nius_file.php?show=3\\">$data[$bla6] $proch $data[$bla5]</a>
"; 
*/
}
}
?>
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Алгоритм.
« Ответ #11 : 09 Июня 2002, 18:09:35 »
Pacher
По-моему, ты сильно загнул.
Тебе нужен алгоритм? прекрасно.
Весь скрипт делается в 5 строчек.
Во-первых, как абсолютно правильно сказал Теоретик, но его никто не послушал: писать надо по принципу - одна новость - один файл.
Итак:
При добавлении новости переводы строк в тексте надо заменить на

    $text 
str_replace("\\r""",$text);
    
$text str_replace("\\n""
"
,$text);

Ну а выводим с легкостью необычайной:
<?
if (!isset(
$show)) {
  
$data file("news.txt");
  for (
$step=0;$step<sizeof($data);$step++) {
    
//допустим, новость имеет такой формат: заголовок|текст
    
list($title,$text)=explode("|",$data[$step]);
    echo 
"<a href=\\"$PHP_SELF?show=$step\\">$title</a>
"
;   
  }
} else {
  
$data file("news.txt");
  list(
$title,$text)=explode("|",$data[$show]);
  echo 
"<b>$title</b>
$text
"
;
}
?>


Из приведенного примера очень хорошо видно, что огромное значение в программировании имеет формат исходных данных.

Оффлайн Pacher

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
Алгоритм.
« Ответ #12 : 09 Июня 2002, 23:14:02 »
Не , не быть мне програмером :)
Ни че не шарю ...... хотя может я просто лентяй ........

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Алгоритм.
« Ответ #13 : 09 Июня 2002, 23:39:38 »
Совсем-совсем непонятно?
Тебе построчно объяснить, как оно работает?
(вот почему я люблю писать короткие скрипты :-))))

Оффлайн Pacher

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
Алгоритм.
« Ответ #14 : 10 Июня 2002, 00:13:57 »
RomikChef
Да меня сам факт , что я ни в чем разобратся не могу бесит ...
Не знаю как ещё учится програмированию......

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28