Перейти к содержимому



Начал изучать - вот возникают вопросы

#1 bestolloch

bestolloch
  • Пользователь
  • 224 сообщений
  • Репутация: 1
0

Отправлено 02 Сентябрь 2010 - 21:09

Здравствуйте, просто попалась задача.

1.Создать программу "шулерская кость", которая будет выбрасывать 1 в половине случаев и какое-либо другое значение - в другой половине.

я решил

<?
$roll = rand(1,6);
if ($roll<4) {
print "vashe 4islo 1";
} else {
print "vashe 4islo 6";
}
?>

Может есть более правильные, или альтернативные, только путем if, else, switch. Желательно "switch".

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 02 Сентябрь 2010 - 21:46

bestolloch, раз со свичем, так со свичем:
<?php

switch( $rand = rand(1,8) ) // возвращаем в переменную $rand случайное число от 1 до 8 и передаем его оператору выбора switch
{
// если случайное число - 1 или 2 или 3
case 1:case 2:case 3:
echo "Выпало число 1";
break;

// если случайное число - 4 или 5 или 6
case 4:case 5:case 6:
echo "Выпало число 2";
break;

// если случайное число - любое другое (отличное от предыдущих вариантов)
default:
echo "Поменяйте кости! Они у вас {$rand}-ребровые;)";
}

?>

  • 0

#3 bestolloch

bestolloch
    Topic Starter
  • Пользователь
  • 224 сообщений
  • Репутация: 1

Отправлено 02 Сентябрь 2010 - 22:43

Насчет ребер нормас ) то думал к чему 8.
Не закрывайте я по ходу прочтения буду вопросы задавать,)
  • 0

#4 DioNiR

DioNiR
  • Пользователь
  • 11 сообщений
  • Репутация: 2

Отправлено 03 Сентябрь 2010 - 21:09

А в чём сложность задействовать 2 round ?
Типо:
<?php
$num1 = rand(1,2);
if( $num1 == 1 )
{
echo 'Выпало чило 1';
}
else
{
$num2 = rand(2,6);
echo 'Выпало число: '.$num2;
}
?>


Но функция rand() не гарантирует что сейчас выпадет 2, а в следующий раз 1.
  • 0

#5 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 04 Сентябрь 2010 - 11:05

Тут с помощью rand процент не просчитаешь. =)
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 04 Сентябрь 2010 - 13:58

DioNiR, у вас в решении теряется оформление задачи игральных костей.
  • 0

#7 bestolloch

bestolloch
    Topic Starter
  • Пользователь
  • 224 сообщений
  • Репутация: 1

Отправлено 14 Сентябрь 2010 - 00:19

<? 
print stroka(1);
print kuplet();
print stroka(2);
print kuplet();
print stroka(3);
print kuplet();
print stroka(4);
print kuplet();

function stroka($peremenaya) {
switch ($peremenaya) {
case 1:
$place = "дом";
break;
case 2:
$place = "дом2";
break;
case 3:
$place = "дом3";
break;
case 4:
$place = "дом4";
break;
default:
$place = "чето странное и не известное";
}
$output = <<<HERE
Сейчас будет $peremenaya<br>
а сейчас $place<br><br>
HERE;
return $output;
}

function kuplet() {
$output= <<<HERE
...а вот аля куплет<br><br>
HERE;
return $output;
}
?>

смотрите еще не разобрался че к чему - значение $output чет шалит - почему - в коде еще не разобрался так сказать,)
верней даже понял но почему не пашет?)

Сделал точо такой же код но заново и с другими переменными - и заработало - веселье...
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Сентябрь 2010 - 10:27

bestolloch, ваша проблема не в названии переменных, а в неправильном использовании конструкции <<<

На данный способ вывода на экран накладываются некоторые ограничения:

Строка MARKER может быть любым алфавитно-цифровым идентификатором, не
встречающимся в тексте here-документа в виде отдельной строки. Синтаксис накла-
дывает 2 ограничения на here-документы:
  • после <<<MARKER и до конца строки не должны идти никакие непробельные символы;
  • завершающая строка MARKER; должна оканчиваться точкой с запятой, после которой до конца строки не должно быть никаких инструкций.
<?php

$a = <<<MARKER
Далее идет какой-то текст,
возможно, с переменными, которые интерполируются:
например, $name будет интерполирована здесь.
MARKER;

?>


У вас же я обнаружил пробельный символ после <<<HERE
  • 0

#9 bestolloch

bestolloch
    Topic Starter
  • Пользователь
  • 224 сообщений
  • Репутация: 1

Отправлено 14 Сентябрь 2010 - 12:25

<?

printPrivetstvie ();
printCenter ();
printForm ();

function printPrivetstvie () {
global $vipalo, $nabil;
if (empty($nabil)) {
print "<h3>Brosti kosti</h3>";
} else if ($vipalo == $nabil) {
print "<h3>!!!WIN!!!</h3>";
} else {
print <<<HERE
<h3>Vi ne ugadali</h3>
vipalo: $vipalo,<br>
a ne $nabil.<br>
HERE;
}
}

function printCenter () {
global $vipalo;
print "<h3>NEW ROLL:</h3>";
$vipalo = 0;

$roll1 = rand(1,6);
$roll2 = rand(1,6);
$roll3 = rand(1,6);
$roll4 = rand(1,6);
$roll5 = rand(1,6);

img($roll1);
img($roll2);
img($roll3);
img($roll4);
img($roll5);

print "<br>";

s4et($roll1);
s4et($roll2);
s4et($roll3);
s4et($roll4);
s4et($roll5);

function img($value) {
print <<<HERE
<img height="100" width="100" border="8"
src = "roll$value.jpg">
HERE;
}

function s4et($value) {
global $vipalo;
switch ($value) {
case 3:
$vipalo += 2;
break;
case 5:
$vipalo += 4;
break;
}
}
}

function printForm () {
global $vipalo;
print <<<HERE
<h3>Skolko po vashemu lipeskov u ros?</h3>
<form method="post"
<input type="text"
name="nabil"
value="0">
<input type="hidden"
name="vipalo"
value="$vipalo">
<br>
<input type="submit">
</form>
<br>
HERE;
}

?>

а тут почему выводит только до "new roll?" ВЧЕРА ТОЖЕ СИДЕЛ может както лучше можно этоткод написать вообще - не стоит сильно разбирать -)))
  • 0

#10 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Сентябрь 2010 - 23:33

bestolloch, а у вас фатальная ошибка не появляется? Если нет, то у вас все ошибки глушатся, вам надо php.ini сконфигурировать нормально. В инете всё можно найти.
Вообщем ваша проблема в том, что вы функции img и s4et поместили внутрь функции printCenter. Вас кто так научил. Функция это отдельная конструкция и её нужно определять в основном коде программы, а не внутри другой функции.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru