Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ответы на вопросы из уроков по php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (5): [1] 2 3 4 5 » 

> Без описания
valenok Модератор
Отправлено: 16 Января, 2009 - 19:31:46
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Урок № 1. Переменные


Вопросы и задания на усвоение материала:

1. $a = '22'; Какого типа является сейчас переменная $a ?
2. $b = $a = 7; чему равно $b ? не забудьте что читается в лева на право.
3. $a = '46'; $b = '32'; Что больше, а или б ?
4. Какой тип переменной лучше всего подойдёт для хранения результата деления 2 на 4?
5. $a = 5; $b=2.5; Какого типа данных будет результат деления А на Б ?
6. Попробуйте присвоить переменной значение +214748364900000000000000.
7. Выясните сколько это 2B в шестнадцатеричной системе ? ( Присвойте переменной значение и выведите )
7. Можно ли переменной присвоить переменную ? Если да - покажите как. Если нет, объясните почему нет.
9. $a='Вася'; $b = 'Петя'; Поменяйте местами значения переменных .

10. Создайте одномерный числовой массив с одним элементом.
Добавьте туда еще один элемент.
Добавьте туда третий элемент представляющий из себя ассоциативный массив с одним элементом.
Добавьте в этот ассоц. массив еще один элемент.
Замените первый элемент в родительском массиве на второй элемент из ассоц. массива.

11. Создайте переменную типа Resource



Ответы и решения

1. $a = '22'; Переменная является строкой, о чём свидетельствуют кавычки.

2. $b = $a = 7; - $b = 7; Несмотря на то, что читается с лева на право, интерпретатор присваивает переменной b то выражение которое находится с права от знака равно, и именно поэтому оно сначала проверят выражение справа. А потом подставляет $b = $a , где $a в свою очередь уже равен семи.

3. $a = '46'; $b = '32'; переменные а и б являются строками и сравнить их не получится.
С таким же успехом вы могли бы сравнивать $a='автобус'; и $b='троллейбус';

Замечание: Сравнить "автобус" и "троллейбус" можно, к строкам применимо сравнение. Только сравнится оно с учетом типа данных, то есть, в случае со строками, в порядке следования символов в таблице ASCII.

4. результатом деления 2 на 4 будет половина - дробь. А значит тип будет float

5. результатом деления 5 на 2,5 будет float. Несмотря на то, что результат деления будет целым числом - в делении участвует дробь по этому результатом деления будет нечто вроде 2/1 (дробь две первых).

6. При присвоении -214748364900000000000000 переменной, переменная принимает тип float так как его точность и диапазон больше и на экране вы увидите 2.147483649E+23

7. <?php $a = 0x2B; echo $a; ?> вывело 43. Заметьте что формат числа в шестнадцатеричной системе 0x__

8. Можно. Как в вопросе 2 или <?php $a = 1; $b = $a; echo $b; ?> выведет 1

9. <?php $a='Вася'; $b = 'Петя'; $c = $a; $a = $b; $b = $c; ?> Теперь $a='Петя'; $b = 'Вася';
Альтернативное решение предложенное Eugen'ом - не используя третьей переменной:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $a=$a ^ $b;
  4. $b=$a ^ $b;
  5. $a=$a ^ $b;
  6. ?>
  7.  

Предлагается читателям самим понять, почему код сработает и даст тот же результат.

10.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // Создайте одномерный числовой пустой массив с одним элементом.
  3. $a = Array('element'); // $a[0] = element
  4.  
  5. // Добавьте туда еще один элемент.
  6. $a[] = 'elem2'; // $a[1] = elem2
  7.  
  8. // Добавьте туда третий элемент представляющий из себя ассоциативный массив с одним элементом.
  9. $a[] = Array( 'key' => 'val' ); //  $a[2] = array(...)
  10.  
  11. // Добавьте в этот ассоц. массив еще один элемент.
  12. $a[2]['integer'] = 45; // $a[2] = Array( 'key' => 'val' , 'intege' => 45 );
  13.  
  14. // Замените первый элемент в родительском массиве на второй элемент из ассоц. массива.
  15. $a[0] = $a[2]['integer'];


11. Создать переменную типа Resource просто так не получится. Переменная этого типа представляет из себя указатель на другой внешний ресурс и нам пока неизвестно с каким ресурсом и какой памятью работать. Тип данных Ресурс существует, но о нём полностью заботится php .


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 16 Января, 2009 - 22:34:29
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Урок № 2 - Немного управления.

Здесь я привожу ответы на вопросы. Надеюсь, сначала вы попробовали ответить на них самостоятельно.
0. Никогда не обязательно. else - часть, которая выполняется в случае ложности условия в if, либо если пройдены все ветки elseif и все условия там тоже были ложны. Но часть else никогда не является обязательной для определения.
1. case 2. Мы попадем в часть else, так как 5%5 равно 0, и, значит, ложно. Далее, 5>0, то есть выполнится код, стоящий после ":".
2.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. for($iData=1; $iData%1024; $iData*=2)
  4. {
  5. echo($iData%1024);
  6. }
  7. ?>
  8.  

3. Код не выполнится до конца никогда, так как условие в while будет всегда истинно. Связано это с тем, что внутри тела цикла никак не меняется переменная, которая проверяется в условии цикла. И, значит, цикл будет повторяться бесконечное число раз, так как изначально его условие истинно.
4. break(3)
5. Необходимость в break есть тогда, когда нужно, чтобы выполнялся код только для одного case - для того, который соответствует значению выражения switch. Напомню, что если нет break, то выполнится не только этот case, но и все нижестоящие.
6.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //в предположении, что $rgData - исходный массив.
  4. $rgResult=array();
  5. foreach($rgData as $key=>$value)
  6. {
  7.    $rgResult[$value]=$key;
  8. }
  9. ?>
  10.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Champion Супермодератор
Отправлено: 17 Января, 2009 - 10:58:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




УРОК № 3. Знакомство с функциями.
1. В каком варианте (вариантах) функция объявлена синтаксически не верно? Почему?
-a- function my_func() {} - верно, всё без подвоха
-b- function _qwerty($a) {} - тоже верно
-c- function 4func($a = 4) {} - начинается с цифры, а это неправильно
-d- function func($a = 4) {} - верно
-e- function func.my($a) {} - имя функции содержит точку - неправильно
-f- function func-my($a = 4) {} - имя функции содержит минус (или тире - не важно) - неправильно
-g- function int($a = 4) {} - int - зарезервированное слово, тем не менее, такое объявление функции синтаксически верно и она будет работать
-h- function return($a = 4) {} - return также зарезервированное слово, но это оператор. Поэтому так объявлять функцию нельзя.

2. В каком варианте функция function func($a, $b = 4, &$c, $d = 5, $e = 6) вызвана неправильно? Почему? (все переменные имеют значение, функция возвращает значение)
-a- call func(1, 3, $d) - неправильно
-b- $d = func(1, 3, 5) - неправильно, потому, что третий параметр должен передаваться по ссылке, т.е. это должна быть переменная, а не константа.
-c- $d = func(1, 3, $f, 6) - верно
-d- echo func($s) - неправильно. Не все остальные параметры имеют значение по умолчанию.
-e- func(1, func(1, 3, $d), $d) - правильно.
-f- func(1, $d, func(1, 3, $d)) - неправильно по той же причине, что и в пункте b. По ссылке передаваться должна переменная
 
 Top
Dastar
Отправлено: 23 Января, 2009 - 00:47:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Янв. 2008  
Откуда: Израиль


Помог: -6 раз(а)




Урок 0. "Уххты! А что это?" - ответы

1. Фразу "Hello World" нужно заключить в кавычки (одинарные ['] или двойные ["])


3. Перед коменнарием дожны стоять две косые черты (//)


-----
Не знаешь - молчи.
 
 Top
valenok Модератор
Отправлено: 26 Января, 2009 - 20:38:49
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Урок № 16. Работа с изображениями

Вопросы и задания на усвоение материала:

1. Наложение печати
Уверен дописать на картинке пару слов у тебя труда не составит. ПОэтому попробуем пририсовать графическую подпись. Открываем пэинт и делаем свой автограф. Получилось? Отлично.
Теперь сохраняем из гугла две фотки Памеллы Андерсон и пририсовываем к ним свою подпись.
( Подсказка: наверное полезно знать что у изображения есть такой параметр как Альфа - обозначающее прозрачность. Уверен Ctrl F по списку функций что нибудь бросит вам в глаза, хотя это вовсе не обязательно.)


2. Captcha
Сложную мы делать не будем, сделаем простую. Каждый раз выводится случайные 4 цифры.
В чём прикол? Для этого будем использоваться особый шрифт
А еще после того как наше изображение будет белого цвета с чёрным текстом , мы применим к нему фильтр негатива и на экране сделаем так чтобы оно отображалось наоборот, с чёрным фоном и белым цветом и оба изображение выводились на экран.(И всё в одном скрипте)

3. логотип php
Это заданее попроще и подлинее - нарисуйте логотип php


Решения:

1. Штамп
http://ru2.php.net/manual/ru/ima...es-watermark.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // Загружаем картинку и печать
  3. $stamp = imagecreatefrompng('stamp.png');
  4. $im = imagecreatefromjpeg('photo.jpeg');
  5.  
  6. // Выбираем позции нашей печати на новом изображении. 10 пикселей от левого правого угла
  7. // что делают две других функции я уверен ты знаешь из документации
  8. $marge_right = 10;
  9. $marge_bottom = 10;
  10. $sx = imagesx($stamp);
  11. $sy = imagesy($stamp);
  12.  
  13. // Копируем печать на исходное изображение
  14. // Какие параметры и их значения ты поймёшь пролистав доку. =)
  15. imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
  16.  
  17. // Выводим новое изображение и очищаем память
  18. header('Content-type: image/png');
  19. imagepng($im);
  20. ?>
  21.  




2. captcha
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. if( !isset($_GET['generate_image']) )
  4. {
  5.  ?>
  6.   <img src='?generate_image'><br>
  7.   <img src='?generate_image&inverted'>
  8.  <?PHP
  9.  die();
  10. }
  11.  
  12.  
  13.  
  14. $captcha = rand(1000,9999); // наше случайное четырёх-значное число
  15. $img = imagecreatetruecolor(88,44);
  16.  
  17. $black = imagecolorallocate($img, 0, 0, 0);
  18. $white = imagecolorallocate($img, 255,255,255);
  19.  
  20. imagefill  ( $img  , 0  , 0  ,$white  );
  21. imagefttext  ( $img  , 16  , 0  , 5  , 15  , $black  , 'arial.ttf'  , $captcha  );
  22.  
  23. if( isset($_GET['inverted']) ) imagefilter  ( $img  , IMG_FILTER_NEGATE );
  24.  
  25. header('Content-Type: image/png');
  26. imagepng($img);
  27.  

На тот случай если у вас не работает imagefilter http://ru2.php.net/manual/ru/fun...filter.php#79551

3. логотип
Ну самый простой вариант, ну или после протрезвения

Рисовать я пока не буду, но расскажу этапы.

Создаём рисунок
закрашиваем в белый
рисуем овал
рисуем на нём текст белого цвета большого размера
в том же месте со смещением на пиксель ниже и правее рисуем тот же текст двумя размерами меньше, чёрным
Дорисовываем пару серых дуг слева вверху от овала
и парочку тёмно фиолетовых справа.
( Можно было сначала нарисовать тёмно фиолетовый овал, а на нём светлый, чтоб его закрыл
и оставил лишь немного срава, вместо рисования дуги.)


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 05 Мая, 2009 - 12:20:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Урок № 5. Математические функции


0. Вернет true, если принять, что такие числа допустимы. Если читатель знает предмет вопроса (или не поленился заглянуть в википедию), то он знает, что трансцедентные числа - обычные вещественные числа. Но являются они корнями многочлена с иррациональными коэффициентами. Единственное что - их представление в типе float языка php сделает их уже не трансцентными вовсе. Так что - с точки зрения float функция is_nan вернет true. Если же считать, что трансцедентные числа нельзя записать представлением float, то и вообще ничего не вернет (агрумента то и не будет)
1.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class Converter
  4. {
  5.         protected $cipherSet;
  6.         protected $rgCiphers;
  7.    
  8.         protected $inputSet;
  9.         protected $outputSet;
  10.         protected $fromBase;
  11.         protected $toBase;
  12.  
  13.        
  14.         protected $iErrorCode;
  15.         protected $sErrorMessage;
  16.        
  17.         /*Submit only full cipher set*/
  18.         function __construct($strSet)
  19.         {
  20.                 $this->cipherSet=$strSet;
  21.                 $this->iErrorCode=0;
  22.                 $this->sErrorMessage="";
  23.         }
  24.         /*multiplication with non-decimal base*/
  25.         protected function baseArithmeticMult($num)
  26.         {
  27.                 $currentResultLen=count($this->rgCiphers);
  28.                 if ($currentResultLen==0)
  29.                 {
  30.                         return;
  31.                 }
  32.                 $rgMods=array();
  33.                 $currentPos=0;
  34.                 $div=0;
  35.                 do
  36.                 {
  37.                         $divided=0;
  38.                         if ($currentResultLen>$currentPos)
  39.                         {
  40.                                 $divided=$this->rgCiphers[$currentPos]*$num;
  41.                         }
  42.                         $divided+=$div;
  43.                         $rgMods[$currentPos]=$divided%$this->toBase;
  44.                         $div=(int)($divided/$this->toBase);
  45.                         $currentPos++;
  46.                 }
  47.                 while($currentResultLen>$currentPos||$div!=0);
  48.                 $this->rgCiphers=$rgMods;
  49.         }
  50.         /*addition with non-decimal base*/
  51.         protected function baseArithmeticPlus($num)
  52.         {
  53.                 $currentPos=0;
  54.                 $divided=$num;
  55.                 do
  56.                 {
  57.                         $divided+=(int)($this->rgCiphers[$currentPos]);
  58.                         $this->rgCiphers[$currentPos]=$divided%$this->toBase;
  59.                         $divided=(int)($divided/$this->toBase);
  60.                         $currentPos++;
  61.                 }
  62.                 while ($buf>0);
  63.         }
  64.         /*error's getters*/
  65.         public function getErrorCode()
  66.         {
  67.                 return $this->iErrorCode;
  68.         }
  69.        
  70.         public function getErrorMessage()
  71.         {
  72.                 return $this->sErrorMessage;
  73.         }
  74.         /*main function*/
  75.         public function baseConvert($num, $fromBase=0, $toBase=0)
  76.         {
  77.                 $num=(string)($num);
  78.                 $totalCiphers=strlen($num);
  79.                 $this->inputSet=substr($this->cipherSet, 0, $fromBase);
  80.                 $this->outputSet=substr($this->cipherSet, 0, $toBase);
  81.                 $this->toBase=$toBase;
  82.                 $this->rgCiphers=array();
  83.                 for ($currentPos=0; $currentPos<$totalCiphers; $currentPos++)
  84.                 {
  85.                         $currentCipher=$num[$currentPos];
  86.                         $cipherSign=substr_count($this->inputSet, $currentCipher);
  87.                         if($cipherSign==0)
  88.                         {
  89.                                 $this->iErrorCode=255;
  90.                                 $this->sErrorMessage="Cipher '".$currentCipher."' was not found in cipher set: ".$this->inputSet;
  91.                                 return null;
  92.                         }
  93.                         elseif($cipherSign>1)
  94.                         {
  95.                                 $this->iErrorCode=255;
  96.                                 $this->sErrorMessage="Cipher '".$currentCipher."' was found more than once in cipher set: ".$this->inputSet;
  97.                                 return null;
  98.                         }
  99.                         if ($currentPos!=0)
  100.                         {
  101.                                 $this->baseArithmeticMult($fromBase);
  102.                         }
  103.                         $this->baseArithmeticPlus(strpos($this->inputSet, $currentCipher));
  104.                 }
  105.                 $convertedNum='';
  106.                 $totalCiphers=count($this->rgCiphers);
  107.                 for ($currentPos=0; $currentPos<$totalCiphers; $currentPos++)
  108.                 {
  109.                         $convertedNum=$this->outputSet[$this->rgCiphers[$currentPos]].$convertedNum;
  110.                 }
  111.                 return $convertedNum;
  112.         }
  113. }
  114. ?>
  115.  

2. Некоторые примеры:
is_nan(sqrt(-1)) и is_finite(sqrt(-1))
is_nan(acos(2)) и is_finite(acos(2))


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Delovoy
Отправлено: 12 Ноября, 2010 - 14:09:22
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Подскажите, есть ли ответы на урок №8 ?
 
 Top
nichtraucher
Отправлено: 26 Ноября, 2010 - 16:44:19
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Цитата:
1. $a = '22'; Переменная является строкой, о чём свидетельствуют кавычки.


Тогда почему код:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $a = '22';
  3. $b = '43';
  4. $c = $a + $b;
  5. echo $c;
  6. ?>

выводит число 65? Разве строки могут додаваться?
Вопрос: $a = '22'; переменная точно строка?
 
 Top
Мелкий Супермодератор
Отправлено: 26 Ноября, 2010 - 16:50:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




nichtraucher пишет:
выводит число 65?

+ - математический оператор. Поэтому PHP выполняет приведение типов к числу. Вот на JS вы бы получили строку 2243, т.к. там конкатенация строк плюсом работает.


-----
PostgreSQL DBA
 
 Top
ALEN
Отправлено: 03 Декабря, 2010 - 13:24:05
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




nichtraucher
в php при математических выражениях , интерпретатор сам пытается перевести строку в число - поэтому результат правильный.
 
 Top
Dmitrij
Отправлено: 29 Ноября, 2011 - 16:59:43
Post Id



Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Нояб. 2011  
Откуда: Запорожье, Украина


Помог: 0 раз(а)




В задании номер 6 второго урока в цикле foreach перед $rgResult[$value]=$key; необходимо
написать unset($rgResult[$key]); Иначе в массив просто добавится еще 3 элемента.
 
 Top
vbnm
Отправлено: 19 Января, 2012 - 21:35:23
Post Id


Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




ALEN пишет:
nichtraucher
в php при математических выражениях , интерпретатор сам пытается перевести строку в число

операторы "<",">" так же приводят к такому поведению?
Однако
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2. $a="vbnm";
  3. if ($a === 4)
  4.         {echo 'четыре';}
  5. elseif ($a<4)
  6.         {echo 'меньше 4';}
  7. elseif ($a>4)
  8.         {echo 'больше 4';}
  9.        
  10.        
  11. else {echo $a."это не число!";}
  12. ?>


если так, то подскажите, как правильно оформить данный код, чтобы он различал числа и строки.

(Отредактировано автором: 20 Января, 2012 - 00:00:25)

 
 Top
etoYA
Отправлено: 20 Января, 2012 - 01:19:10
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




vbnm, неуверен, но попробуйте так:

PHP:
скопировать код в буфер обмена
  1. <?
  2. $a = 'asdd';
  3. if (is_numeric($a)) echo 'Это число';
  4. else echo 'Это строка';
  5. ?>
 
 Top
vbnm
Отправлено: 20 Января, 2012 - 20:14:05
Post Id


Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




etoYA
пасибо за подсказку, сделал два скрипта на этой основе,
Спойлер (Отобразить)


Спойлер (Отобразить)


но мне непонятно, как сделать скрипт на онове этого условия?
Однако
ведь по факту, тут идет сравнение и по значению и по типу

(Отредактировано автором: 20 Января, 2012 - 20:31:49)

 
 Top
etoYA
Отправлено: 11 Февраля, 2012 - 04:19:45
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




vbnm, тут не нелучится сделать такое условие.

2 варианта, либо true, либо false
 
 Top
Страниц (5): [1] 2 3 4 5 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Уроки php »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB