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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2011, 20:18   #1
Русtam
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 60
По умолчанию начинающий

проверьте кто нибудь функцию . Я в учебном курсе получил ДЗ, там дана функция которую нужно проверить и исправить.


данная функция

<?php
$a = 1;
$b = 1;
$c = 0;
function mysuperfunc()
{
if ($a + $b > 100)
$c = 100;
else
$c = $a + $b;
}
mysuperfunc();
echo $c;
$a = 2;
$b = 34;
mysuperfunc();
echo $c;
$b = 99;
mysuperfunc();
echo $c;
?>

вот исправленный вариант
<?php
function mysu($A,$B,$c)
{
if ( $A + $B > 100)
{
echo $c = 100;
}
else
{
echo $c = $A + $B;
}
}
mysu (120,34,$c);
?>
там в видео есть разбор ДЗ, но все по разному сделано.

Например вот так
<?php
function addition($a,$b,)
$c= $a + $b;
if ( $c > 100)
{
echo "сумма чисел $a + $b = $c больше 100 ";
}
else
{
echo "меньше 100";
}
return;
}
addition($a,$b,);
?>
Русtam вне форума Ответить с цитированием
Старый 27.06.2011, 21:40   #2
dacorp
Пользователь
 
Регистрация: 12.06.2010
Сообщений: 48
По умолчанию

А что она делать должна? Пишите, пожалуйста, сразу, ато по кривым примерам сложно понять Я просто как-то привык, что функция возвращает значение и в неё надо передавать необходимве параметры...
Код:
 function myfunc($a,$b) {
  if ($a+$b>100) {$c=100;} else {$c=$a+$b;}
  return $c;
 }
В данном работоспособном варианте переменая $c - внутренняя.

Также я бы Вам не советовал называть одинаково внешние переменные и внутренние переменные функции, запутаетесь если будет большой код то есть:

Код:
$ValueA=1;
$ValueB=1;
Хотя в принципе вообще в этом смысла не вижу...

Общий код я бы написал так:
Код:
<?
 function myfunc($a,$b) {
  if ($a+$b>100) {$c=100;} else {$c=$a+$b;}
  return $c;
 }
 
 $ResultC=myfunc(1,1);
 Echo "ResultC";
 $ResultC=myfunc(2,34);
 Echo "ResultC";
 $ResultC=myfunc(2,99);
 Echo "ResultC";
?>
Альтернативный код с применением внешних переменных:
Код:
<?
 function myfunc($a,$b) {
  if ($a+$b>100) {$c=100;} else {$c=$a+$b;}
  return $c;
 }
 $ValueA=1;
 $ValueB=1;
 $ResultC=myfunc($ValueA,$ValueB);
 Echo "ResultC";
 $ValueA=2;
 $ValueB=34;
 $ResultC=myfunc($ValueA,$ValueB);
 Echo "ResultC";
 $ValueB=99;
 $ResultC=myfunc($ValueA,$ValueB);
 Echo "ResultC";
?>
dacorp вне форума Ответить с цитированием
Старый 28.06.2011, 10:44   #3
Русtam
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 60
По умолчанию

Спасибо за ответ!! НО наверно я не совсем хорошо понимаю логику работы функций(((((
Русtam вне форума Ответить с цитированием
Старый 28.06.2011, 16:36   #4
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

dacorp не издевайтесь над новичками, проверяйте свой код.
(если чо, вот его вывод: "ResultCResultCResultC")

Русtam остаётся только гадать о предназначении фукции, что вам дали.
Пожалуйста, напишите что именно она должна делать. Поправлять что-то, когда не знаешь, что оно должно делать - довольно сложно, а штатные телепаты и экстрасенсы форума, видимо, в отпуске. Но всё равно попробую угадать: функция должна вернуть сумму чисел, если она меньше 100 и 100, если она больше. Так ?
Если так, то варианты "починки" функции:

Просто, в лоб. Но я бы уволил такого программиста.
PHP код:
function mysuperfunc() {
global 
$a,$b,$c;    
if ((
$a $b) > 100$c 100;
else 
$c $a $b;

Если сделать функцию всё же функцией
PHP код:
function mysuperfunc($a$b) {
    if ((
$a $b) > 100$c 100;
    else 
$c $a $b;
return 
$c;
}
$a 1;
$b 1;
$c 0;

$c mysuperfunc($a,$b);
echo 
$c;
echo 
"\n";
$a 2;
$b 34;
$c mysuperfunc($a,$b);
echo 
$c;
echo 
"\n";
$b 99;
mysuperfunc();
echo 
$c
И если делать нормально:
PHP код:
function mysuperfunc($a$b) {
    
$c $a+$b;
    return 
$c<100?$c:100;
}

$a 1;
$b 1;
$c 0;

$c mysuperfunc($a,$b);
echo 
$c;
echo 
"\n";
$a 2;
$b 34;
$c mysuperfunc($a,$b);
echo 
$c;
echo 
"\n";
$b 99;
mysuperfunc();
echo 
$c
graymaster вне форума Ответить с цитированием
Старый 28.06.2011, 18:44   #5
Русtam
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 60
По умолчанию

Дело в том что в задание не написано что она должна делать, сказано лишь то что нужно проверить и переделать и задается вопрос ПОНИМАЕТЕ ЛИ ВЫ ЧТО ДЕЛАЕТ ЭТА ФУНКЦИЯ ? Выходит что моя ошибка только в том что я не объявил переменные и не передал их функции ???
Русtam вне форума Ответить с цитированием
Старый 28.06.2011, 20:31   #6
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

Да... преподавателей бы таких... Хотя нет - нет. Пускай так. В принципе - готовят к суровым будням фрилансера

Я предполагаю, что делает она скорее всего то, что я и предполагал. - возвращает сумму числел, если сумма не превышает 100 и возвращает 100, если превышает.
Ваша ошибка - (скорее всего):
Функция (как повелось издревле) - получает энное количество аргументов (или параметров) и возвращает значение (почти всегда). В принципе, как получаемы параметров, так и возвращаемого значения может и не быть, но в таких случаях функция наверняка что-то делает.
В данном случае (если ориентироваться на версию про ограниченную 100 сумму) - явно - нужны 2 аргумента, т.е. сами числа, и возвращаемое значение, т.е. результат работы - это число (которое пресловутая сумма или 100)

т.е. сначала идёт заголовок функции:
some_function - имя функции
$a,$b - аргументы

function some_function($a,$b) {

}


потом в тело функции вставляем само действие

function some_function($a,$b) {
if (($a+$b)>100) $c=$a+b; else $c=100;
}


потом - добавляем возврат значения

function some_function($a,$b) {
if (($a+$b)>100) $c=$a+b; else $c=100;
return $c;
}


Теперь, в любом месте программы мы можем вызвать её для своих каких-то конкретных нужд

...
echo some_function(5,10);
echo "\n";
...
echo some_function(5,100);
echo "\n";
...


соответственно на выходе получим
15 /*(5+10<100? -> yep, so $c=10+5=15; return 15*/
100 /*(5+100<100? -> no, so $c=100; return 100*/

PS: В PHP объявлять переменные не надо. Инициализировать - желательно, объявлять - нет.
Функции передавать можно не только переменные, но и просто значения (Обязан отметить, что тут есть исключения, но вы потом сами до них доберётесь, к тому времени всё будет выглядеть гораздо проще, я надеюсь)
И ещё у вас была какая-то неточность возможная со скобками... Я в таких случаях предпочитаю добавить лишних скобок вместо того, что бы гадать - в этом конкретном компиляторе этого конкретного языка у меня логический оператор выполнится или арифметический.

Последний раз редактировалось graymaster; 28.06.2011 в 20:37.
graymaster вне форума Ответить с цитированием
Старый 28.06.2011, 22:21   #7
Русtam
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 60
По умолчанию

Спасибо за токай полный ответ!!! ВЫ НА ПИСЬМЕ ЛУЧШЕ ОБЪЯСНИЛИ )))))))
Русtam вне форума Ответить с цитированием
Старый 28.06.2011, 22:31   #8
Русtam
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 60
По умолчанию

Извините за вопрос graymaster , вы не могли бы написать мне свой icq если он у вас есть , для того что бы была возможность задавать вам вопросы по PHP программированию. Просто спросить не кого , а на форумах ответа приходится ждать долго. ЕСЛИ ВЫ НЕ ПРОТИВ .
Русtam вне форума Ответить с цитированием
Старый 29.06.2011, 13:01   #9
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

ICQ нет, есть только скайп. skype://argen.wolf
Попросите авторизации, у меня по поводу спама сообщения от незнакомых пользователей отключены напрочь.
Но отвечать на вопросы в нём стабильно - не имею возможности (не всегда можно отвлечься от работы) - если вопрос короткий, то не возражаю ответить в скайпе, если ответ нужен достаточно развёрнутый, то лучше форум. Я этот форум (PHP) практически каждый день мониторю, разве что не всегда в пятницу-субботу онлайн - выходные, но бываю время от времени онлайн и в викэнды.
graymaster вне форума Ответить с цитированием
Старый 29.06.2011, 13:27   #10
Русtam
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 60
По умолчанию

хорошо тогда на форуме будет удобнее, и я сразу вопрос хотел задать , на счет того какую книгу лучше использовать для закрепления уроков? книга нужна такая где каждая тема изложена полностью, от А до Я , не важно как она будет построена так как я читать ее не буду от начала до конца просто закреплять пройденное. И еще скажите, можно изучать PHP и параллельно допустим CSS или java или все вместе будет мешать и создавать кашу в голове ?
Русtam вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Карты - начинающий Scheres HTML и CSS 7 22.07.2009 10:30
Я - начинающий Abuhalif Общие вопросы .NET 2 17.07.2008 05:37
Начинающий программист _Noname_ Свободное общение 3 03.03.2008 17:48