[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Счётчик - инкременты и декременты
Valeriya12
Привет люди! Я хочу, что если пользователь вводит "5" на пример, результат будет такого


0
01
012
0123
01234
012345
01234
0123
012
01
0


И в моем коде должные быть не больше чем 2 "for loops".


Так,
Мой код теперь выводит этот результат, если пользователь вводит "5".



0
01
012
0123
01234
012345
012345
012345
012345
012345
012345



И вот сам код который я написала.


<?php
echo "Pick a number ";
$picked=trim(fgets(STDIN));
for ($b=0; $b<$picked*2+1; $b++){
echo "\n";
for ($a=0; $a<$picked+1; $a++){
echo "". $a . "" ;
if ($a>=$b)
{
break;
}
}
}

?>


Я же понимаю что надо еще другое "if" условие, но я не понимаю какое. Дело в том, что я, за несколько часов, сидела и старалась всякие варианты без успеха. Я не хотела сейчас показывать их здесь потому, что отыскивать повреждения в каждом из них не будет очень эффективно. Я хотела показать вам мою основную схему (скажем - попытка), и спросить как можно это сделать? Это вообще возможно когда в коде должные быть не больше чем 2 "for loops"? Учитель убежден, что да.
AllesKlar
Например, так:

echo "Pick a number ";
$picked=trim(fgets(STDIN));

for($i = 0; $i <= $picked * 2; $i++ )
{
if($i < $picked)
{
$idx = $i;
}
else
{
$idx = $picked * 2 - $i;
}

for($j = 0; $j <= $idx; $j++)
{
echo $j;
}

echo "\n";
}


_____________
[продано копирайтерам]
linker
Как вариант почти без условий
echo "Pick a number ";
$picked=trim(fgets(STDIN));
for($j = 0, $i = 0; $i <= $picked * 2; ++ $i, $i > $picked ? -- $j : ++ $j)
{
for($k = 0; $k <= $j; ++ $k)
echo $k;
echo "\n";
}


_____________
Gear Framework
Gear Framework на Github
AllesKlar
linker
Я специально не стал такие сложные конструкции делать.
Ладно она не поймет, а если учитель в школе не поймет? smile.gif

_____________
[продано копирайтерам]
linker
AllesKlar
Это проблемы учителя smile.gif smile.gif smile.gif

_____________
Gear Framework
Gear Framework на Github
glock18
EzPz

echo "Pick a number ";
$picked = intval(trim(fgets(STDIN)));

for ($i = 0; $i <= $picked; $i++)
{
echo implode('', range(0, $i, 1)) . "\n";
}
if ($picked > 0)
{
for ($i = $picked - 1; $i >= 0; $i--)
{
echo implode('', range(0, $i, 1)) . "\n";
}
}


Учителю стоит давать задачи на языках более низкого уровня, если они хотят избежать таких простых решений
AllesKlar
glock18
Цитата
Учителю стоит давать задачи на языках более низкого уровня, если они хотят избежать таких простых решений


smile.gif Ситуацию себе смоделируй.
Приходит такая Valeriya12 в школу и говорит: "Мне русские на форуме сказали, что Вы должны давать задачи на языках более низского уровня..."

Не могу сказать ответ учитиля, т.к. не владею матерным ивритом smile.gif

--------------
Народ, ну хватит меряться размерами. Вы уровень ТС принимайте во внимание smile.gif
Али никто не писал задач для девушек с эконома на турбопаскале? smile.gif


_____________
[продано копирайтерам]
glock18
AllesKlar
Дк это и не было руководство к действию. Просто на сях уже не получилось бы решить так же визуально просто, выполнив тем не менее, несколько неявных циклов (range, implode).

По идее задачу эту вообще без явных циклов можно решить при помощи array_walk, да range.
linker
Можно, например так:
echo "Pick a number ";
$picked = intval(trim(fgets(STDIN)));
$a = range(0, $picked * 2);
array_walk($a, function($item, $key) use ($picked)
{
echo implode('', range(0, $item > $picked ? $picked * 2 - $item : $item)), "\n";
});


_____________
Gear Framework
Gear Framework на Github
Valeriya12
Ой, спасибо! Я была так близка к решению, похожее на решение AllesKlarа ohmy.gif

Линкер, мне нравится ваш продвинутый код! smile.gif Я постараюсь поймать его. Пока все еще хочу вникать в код Allesklara. smile.gif

Цитата
Учителю стоит давать задачи на языках более низкого уровня, если они хотят избежать таких простых решений


Может быть и да, может быть нет, я избегаю вмешиваться в административные решения. Хоть, спасибо за ваш продвинутый код тоже!



Хотела писать больше, но я спешу. Буду позже!
AllesKlar
Valeriya12
Настоящая леди растет.
Прибежала всех переполошила и убежала smile.gif

_____________
[продано копирайтерам]
Zzepish
Слегка извращенно!

<?php
$r=10;
$up=Array();
$down=Array();
for($i=0;$i<=$r;$i++){
if($i===0){
$up[]=0;
$down[]=0;
}
elseif($i!==$r){

$up[]=$up[$i-1].$i;
$down[]=$down[$i-1].$i;
}
elseif($i===$r)
$up[]=$up[$i-1].$i;
}
echo implode("\r\n<br>",$up).'<br>';
echo implode("\r\n<br>",array_reverse($down));
?>
Valeriya12
Цитата
Valeriya12
Настоящая леди растет.
Прибежала всех переполошила и убежала :)


LOL

Честно хотела писать больше но не смогла :) И вот теперь время нашла.
Что-то я торможу. Я написала

for ($b=0; $b<$picked*2+1; $b++)


А Вы написали

for($i = 0; $i <= $picked * 2; $i++ ) 


Вот видите? У меня +1 а у Вас нету. Я точно что-то пропускаю потому, что не могу понимать как у нас оба есть то же самое номер рядов, если вы сделали $picked*2; пока я сделала $picked*2+1; ?

Не могу сказать ответ учитиля, т.к. не владею матерным ивритом smile.gif


Я никогда не расскажу о моем секретном оружие! ;) Но вообще курс называется PHP Webmaster (длящийся год). Я предполагаю наши почетные студенты не поймут логику такого смысла (как бы начинаться с Assembly), настолько он пригодный.

@Linker

Спасибо за предложение. Это интересно сколькими способами можно писать этот код.

@Zzepish

Спасибо Вам также.

Задание решено!
zelenuy
Valeriya12
Просто у него знак <= а у вас <, по этому вам пришлось прибавлять единицу
Valeriya12
Блин.. должна была заметить это! Мне стыдно. unsure.gif Спасибо.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.