Shuranka Posted March 27, 2008 Report Share Posted March 27, 2008 При выполнении циклов выда?тся такая ошибка:Fatal error: Maximum execution time of 30 seconds exceeded in W:homelocalhostwwwlern.rutable.php on line 13А в браузере выводится только таблица умножения на 1. Подскажите в ч?м дело.Вот код:<html><head> <meta content="text/html; charset=Windows-1251" http-equiv="content-type"> <title>Таблица умножения.</title></head><body><?php $a=1;$b=1;while($a<=9)while($b<=10){$c=$a*$b;echo"{$a}x{$b}={$c}";$b++;}$a++;?></body></html> Link to comment Share on other sites More sharing options...
0 D.S.Denton Posted March 27, 2008 Report Share Posted March 27, 2008 дело в бесконечном цикле. первый (по a) у тебя без фигурных скобок вокруг блока, потому интерпретатор считает что в блок команд попадает только следующий while, без $a++ Link to comment Share on other sites More sharing options...
0 Shuranka Posted March 27, 2008 Author Report Share Posted March 27, 2008 Поставил фигурные скобки. Сообщение об ошибке перестало появляться, но внешний цикл по-прежнему не выполняется.<html><head> <meta content="text/html; charset=Windows-1251" http-equiv="content-type"> <title>Таблица умножения.</title></head><body><?php $a=1;$b=1;while($a<=9){while($b<=10){$c=$a*$b;echo"{$a}x{$b}={$c}";$b++;}$a++;}?></body></html> Link to comment Share on other sites More sharing options...
0 D.S.Denton Posted March 27, 2008 Report Share Posted March 27, 2008 странно, у меня все работает:<html><head> <meta content="text/html; charset=Windows-1251" http-equiv="content-type"> <title>Таблица умножения.</title></head><body><?php for($a = 1; $a <= 9; $a++) { for($b = 1; $b <= 10; $b++) { echo($a.'x'.$b.'='.($a * $b).''); }}?></body></html> Link to comment Share on other sites More sharing options...
0 Иван Шумов Posted March 27, 2008 Report Share Posted March 27, 2008 2Shuranka проверил. работает даже в представленном варианте. на чем проверяете (какой php?) Link to comment Share on other sites More sharing options...
0 Shuranka Posted March 28, 2008 Author Report Share Posted March 28, 2008 У меня установлен Denwer с PНР-5. ОС ХР(SP2) Link to comment Share on other sites More sharing options...
0 Shuranka Posted March 28, 2008 Author Report Share Posted March 28, 2008 Получилось по совету D.S. Dentona через цикл for.Вот код с небольшим оформлением:<html><head> <meta content="text/html; charset=Windows-1251" http-equiv="content-type"> <title>Таблица умножения.</title></head><body><div style="width:100%;text-align:center;margin:auto;"><h2>Таблица умножения.</h2><table width="90%" cellspassing="0" cellpadding="5" border="1"><tr><?php for($a = 1; $a <= 10; $a++) {echo"<td style='text-align:left;width:10%;'>";echo"<b>На {$a}</b>"; for($b = 1; $b <= 10; $b++) { echo($a.'x'.$b.'='.($a * $b).''); }echo"</td>";}?></tr></table></body></html>А вложенные циклы while и do-while у меня почему-то не работают. Link to comment Share on other sites More sharing options...
0 D.S.Denton Posted March 28, 2008 Report Share Posted March 28, 2008 не знаю, у меня и через while работает, просто в данном случае for практичнее. while нужен когда неизвестно количество выполнений циклаи вообще, отвыкайте нафиг от двойных кавычек в echo, товарищи... если б вы на перле писали, это понятно, но в пхп намного лучше использовать не "text{$var} more text", а 'text'.$var.' more text'преимущество раз - интерпретатор сразу понимает что это надо выводить как естьпреимущество два - это читабельнее (в нормальных редакторах с подсветкой синтаксиса переменные выделяются отдельно, строки отдельно. если же переменная в таком виде, она от строки отличаться не будет (максимум выделится полужирным), как следствие - недосмотрыпреимущество три - на большинстве сайтов итоговый хтмл-код пишется с двойной кавычкой вокруг атрибутов: src="http://..." и видя src='http://...' впадаешь в небольшой ступор, глазам это не так привычно. соответственно не надо экранировать echo('http://"'>'); как это происходит тут echo("http://"'>"); - т.е. опять код становится удобнее для взглядапреимущество четыре - используя двойные кавычки для атрибутов в хтмл-коде мы оставляем одинарные для js-кода в этих атрибутах: http://...'; return false;" />, что опять же читабельнее Link to comment Share on other sites More sharing options...
0 ZoNT Posted March 31, 2008 Report Share Posted March 31, 2008 <?php $a=1;while($a{$b=1;while($b{$c=$a*$b;echo"{$a}x{$b}={$c}";$b++;}$a++;}?>А вот так работает? Извините, самому проверить не на чем... Link to comment Share on other sites More sharing options...
0 Shuranka Posted March 31, 2008 Author Report Share Posted March 31, 2008 ZoNT. Работает, как ни странно. А первые свои два варианта по-прежнему не могу запустить. Только через For. Link to comment Share on other sites More sharing options...
0 ZoNT Posted March 31, 2008 Report Share Posted March 31, 2008 я пхп ещ? не изучал, но алгоритм то у тебя неправильный был - во вложенном цикле после установки значения Б = 10 оно так и оставалось 10... Link to comment Share on other sites More sharing options...
0 Shuranka Posted March 31, 2008 Author Report Share Posted March 31, 2008 Не согласен. Вся разница в наших кодах в том, что я задал начальные значение обеих переменных до циклов. А в стальном вс? идентично. К тому же у других, в частности Девятилап, мой первоначальный вариант работает. Link to comment Share on other sites More sharing options...
0 ZoNT Posted March 31, 2008 Report Share Posted March 31, 2008 Да он по определению не будет работать: возьми, потрейсь и увидишь, что происходит с Б... Если алгоритм неверный, от он на любом языке работать будет неверно... Если правилно выбрать алгоритм, то потом не будет вопросов "почему программа тормозит???"... Link to comment Share on other sites More sharing options...
0 Shuranka Posted March 31, 2008 Author Report Share Posted March 31, 2008 Понял!!! Спасибо!!! Получается, что после 10 итераций цикла по $b, е? значение равно 10. Для выполнения следующей итерации по $a значение $b нужно снова сбросить на 1, но сделать это нужно за пределами цикла ($, но внутри цикла ($a). Я верно рассуждаю? Link to comment Share on other sites More sharing options...
0 ZoNT Posted March 31, 2008 Report Share Posted March 31, 2008 совершенно правильно Link to comment Share on other sites More sharing options...
Question
Shuranka
При выполнении циклов выда?тся такая ошибка:
Fatal error: Maximum execution time of 30 seconds exceeded in W:homelocalhostwwwlern.rutable.php on line 13
А в браузере выводится только таблица умножения на 1. Подскажите в ч?м дело.
Вот код:
Link to comment
Share on other sites
14 answers to this question
Recommended Posts