Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по PHP.doc
Скачиваний:
198
Добавлен:
04.06.2015
Размер:
2.76 Mб
Скачать

Вариант 2 – с использованием операции конъюнкции

s = z; $s = $z;

ЕСЛИ (x > y) & (x > z) if (($x > $y) && ($x > $z))

ТО s = x; $s=$x;

ЕСЛИ (y > x) & (y > z) if (($y > $x) && ($y > $z))

ТО s = y; $s=$y;

2.по заданной дате (день, месяц, год) определить день недели, приходящийся на нее:

<?php

$day=19;

$month=9;

$year=1949;

$kl=0;

$c=0;

$y1=$year/100;

$y2=$year-$y1*100;

if (($y2==0) && ($y1%4==0))

$c=1;

if (($y2!=0) && ($y2%4)==0))

$c=1;

if (($c==1) && ($month==1) ||($month==2))

$kl=1;

if (($c==0) && ($month==1) || $month==2))

$kl=2;

$c=ceil(365.25*$y2) + ceil(30.56*$month) + $day + $kl;

$c %= 7;

$c += 3;

if ($c==1)

echo “<BR>Это понедельник<BR>”;

if ($c==2)

echo “<BR>Это вторник<BR>”;

if ($c==3)

echo“<BR>Это среда<BR>”;

if ($c==4)

echo “<BR>Это четверг<BR>”;

if ($c==5)

echo “<BR>Это пятница<BR>”;

if ($c==6)

echo “<BR>Это суббота<BR>”;

if ($c==7)

echo “<BR>Это воскресенье<BR>”;

?>

По принятому в PHPсоглашению, ветвьelseвсегда относится к ближайшему предшествующему ему незанятомуif:

if ($n > 0)

if ($m % $n > 2)

$m -= $n;

else $m += $n;

else $m %= $n;

В данном случае ветвь else $m += $nотносится кif ($m % $n > 2),а ветвьelse $m %= $nотносится кif ($n > 0).

При переходе с ПаскалянаPHPпрограммисты часто допускают ошибки при формировании условия в оператореif,путая две операции:

=присваивания и

==сравнения:

if ($a==$b)

echo “<BR>Эти величины равны между собой<BR>”;

else echo “<BR>Эти величины не равны между собой<BR>”;

Это правильное сравнение значений двух переменных.

Перепишем это сравнение с ошибкой (интерпретатором не определяется):

if ($a = $b)

echo “<BR>Эти величины равны между собой<BR>”;

else echo “<BR>Эти величины не равны между собой<BR>”;

В этом случае сначала переменной $aбудет присвоено значение переменной$b, а потом будет проверено, какое именно значение присвоено. Если это значение отлично от нуля (неложь), то выведется сообщение:

Эти величины равны между собой

Если это значение равно нулю (ложь) – то сообщение:

Эти величины не равны между собой

Хотя и в этом случае обе переменные будут иметь одинаковые значения.

Часто встречающиеся ошибки программирования:

1.Использование else без первой ветви:

if ($n > $m)

else . . .

2. Использование открывающей фигурной скобки{ без закрывающей}и наоборот.

3.Отсутствие точки с запятой перед словомelse:

if ($n > $m)

$a=1

else $a=0;

4. Точка с запятой после условия:

if ($n > $m);

$a=1;

else $a=0;

  1. Отсутствие точки с запятой перед закрывающей фигурной скобкой }или наличие точки с запятой после нее:

if ($c < 2.5)

{

$a=sin($c);

$b=abs($c);

};

else

{

$a=cos($c);

$b=1.0/$c

}

Пример: задан график функцииf(x)– полуокружность радиусаR=1:

Определить:

  1. Значение функции yпри заданном значении аргументаx.

  2. Площади фигур слева и справа от линии разреза.

По теореме Пифагора:

Площадь фигуры слева от линии разреза определяется суммой площадей прямоугольного треугольника:

s1 = 0,5 x y

и сектора:

s2 = 0,5 R2 (αsin α),гдеα– центральный угол в радианах,

причем

α = arcsin(y/R).

Площадь всей фигуры (полукруга) определяется выражением:

S = π R2/2.

Программа решения задачи:

<?php

$x = 0.5;

if ($x <= 1.0) //первый участок

{

$y = sqrt(1.0 - ($x - 1.0 ) * ($x - 1.0 ));

if ($x <= 0.0)

$y=0.0;

}

else

{ //второй участок

$y = $sqrt(1.0-($x-floor($x)) * ($x-floor($x)));

if ($x >= $2.0)

$y=0.0;

}

if ($x == 1.0) //двойной знак равенства!

{

$s_left=0.7854;

$s_right=0.7854;

}

if ($x < 1.0) //первый участок

{

$sin_alfa = $y;

if ($sin_alfa != 1.0)

$alfa = atan($sin_alfa/sqrt(1.0-$sin_alfa*$sin_alfa));

else $alfa = M_PI/2.0;

$segment = 0.5*($alfa - $sin_alfa);

$s_left = $segment + 0.5*$x*$y;

$s_right = M_PI/2.0 - $s_left;

} // $x<1.0

if ($x > 1.0) //второй участок

{

$x = 2.0 - $x;

$sin_alfa = $y;

if ($sin_alfa != 1.0)

$alfa = atan($sin_alfa/sqrt(1.0 - $sin_alfa*$sin_alfa));

else $alfa = M_PI/2.0;

$segment = 0.5*($alfa - $sin_alfa);

$s_left = $segment + 0.5*$x*$y;

$s_right = M_PI/2.0 - $s_left;

} // $x>1.0

echo “<BR>y = $y<BR>”;

echo “<BR>s_left = $s_left<BR>”;

echo “<BR>s_right = $s_right<BR>”;

?>