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

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

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

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

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

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;

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

if ($c < 2.5)

{

$a=sin($c);

$b=abs($c);

};

Else

{

$a=cos($c);

$b=1.0/$c

}

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

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

Определить:

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

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

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

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

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

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>”;

?>

Переключатель

Часто приходится делать выбор не между двумя, а между несколькими путями решения задачи. Такую ситуацию называют переключателем:

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

В языке PHP переключатель реализуется оператором:

Switch (селектор)

{

case метка-1: оператор-1;

break;

case метка-2: оператор-2;

break;

case метка-3: оператор-3;

break;

. . . . . . . . . . . . . . . . .

default: оператор-n;

}

где switch - служебное слово переключатель,

case - служебное слово вариант,

селектор - переменная или выражение целого типа (обязательно ставится в скобках);

метка-1, метка-2,… - метки вариантов – значения селектора –

целые числа, символы или имена констант,

break - служебное слово прервать,

default - служебное слово по умолчанию (не обязательно).

Действия оператора:

1. вычисляется значение селектора,

2. это значение отыскивается среди меток вариантов,

3. выполняется оператор, стоящий за найденной меткой,

4. если далее стоит оператор break, то осуществляется выход из переключателя, иначе выполняется следующий оператор в нем,

5. если метка не найдена, то выполняется оператор, стоящий за словом default.

В любой ветви оператора swith могут стоять несколько меток вариантов, разделенных двоеточием:

Switch (селектор)

{

case метка-1: case метка-2: case метка-3: оператор-1;

break;

case метка-4: case метка-5: оператор-2;

break;

case метка-6: оператор-3;

break;

. . . . . . . . . . . . . . . . .

default: оператор-n;

}

Эту структуру можно представить в следующем виде:

Switch (селектор)

{

case метка-1:

case метка-2:

case метка-3: оператор-1;

break;

case метка-4:

case метка-5: оператор-2;

break;

case метка-6: оператор-3;

break;

. . . . . . . . . . . . . . . . .

default: оператор-n;

}

Внимание! Метки вариантов не должны повторяться!

Если в переключателе убрать операторы break, то после выполнения оператора, стоящей за найденной меткой вариантов, выполняются все оставшиеся операторы, в том числе и оператор после слова default:

$i = 5;

switch ($i)

{

case 0: echo “<BR>Это цифра ноль”;

case 1: case 2: echo “<BR>Это цифра один или два”;

default: echo “<BR>Это неизвестная цифра”;

}

При вводе цифры 0 на экран будут выведены сообщения:

Это цифра ноль

Это цифра один или два

Это неизвестная цифра

Для того, чтобы после выполнения нужной ветви оператора switch другие операторы не выполнялись, каждая ветвь должна заканчиваться оператором break:

$i = 5;

switch ($i)

switch ($i)

{

case 0: echo “<BR>Это цифра ноль”;

break;

case 1: case 2: echo “<BR>Это цифра один или два”;

break;

default: echo “<BR>Это неизвестная цифра”;

}

В этом случае после ввода цифры 0 на экран будет выведено только одно сообщение:

Это цифра ноль

Если в каждой ветви switch стоит не по одному, а по нескольку операторов, то необходимо брать их в фигурные скобки:

Switch (селектор)

{

case метка-1:

{

оператор;

оператор;

оператор;

break;

}

case метка-2:

{

оператор;

оператор;

break;

}

. . . . . . . . . . . . . . . . .

default:

{

оператор;

оператор;

}

}

Для улучшения читаемости программы необходимо использовать сдвиг операторов.

Можно использовать вложенные операторы switch, при этом в разных операторах могут быть одинаковые метки вариантов:

switch ($n)

{

case 0: оператор;

break;

case 1: switch ($m)

{

case 0: оператор;

break;

case 1: оператор;

break;

default: оператор;

}

case 3: оператор;

break;

. . . . . . . . . . . . . . . . .

default: оператор;

}

Пример:по заданному номеру месяца года определить количество дней в нем. В этом переключателе всего три ветви:

<?php

$month = 5;

switch ($month)

{

case 1: case 3: case 5:

case 7: case 8: case 10:

case 12: echo “<BR>31 день”;

break;

case 4: case 6: case 9:

case 11: echo “<BR>30 дней”;

break;

case 2: echo “<BR>28 дней”;

break;

default: echo “<BR>Такого месяца нет<BR>”;

}

?>

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

1. Точка с запятой после скобок селектора:

switch ($n);

{

case 0: оператор;

break;

. . . . . . . . . .

2. Отсутствие фигурных скобок после слова switch :

switch ($n)

case 0: оператор;

break;

. . . . . . . . . .

3. Перечисление меток вариантов без слов case:

switch ($n)

{

case 0, 1, 2: $n++;

break;

. . . . . . . . . .

4. Перечисление меток вариантов через запятые:

switch ($n)

{

case 0, case 1, case 2: $n++;

break;

. . . . . . . . . .

5. Отсутствие оператора break после ветвей переключателя:

switch ($n)

{

case 0: case 1: case 2: $n++;

case 3: $n--;

. . . . . . . . . .

Циклы

Одним из самых ценных свойств компьютеров является их способность многократно повторять последовательность одинаковых или похожих действий - циклов.

Являясь наиболее мощными структурами алгоритмических языков, циклы подразделяются на:

1. бесконечные циклы,

2. циклы с предусловием (циклы типа ПОКА),

3. циклы с постусловием (циклы типа ДО),

4. циклы с параметром (циклы типа ДЛЯ).

Бесконечные циклы

Бесконечный цикл может быть представлен следующей схемой:

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

Как правило, появление в программе бесконечных циклов вызвано логическими ошибками, допущенными программистом при разработке алгоритма и кодировании (написании операторов программы) с использованием оператора безусловного перехода goto. Поэтому в современных алгоритмических языках этот оператор практически не используется, а заменяется циклами. Бесконечные циклы не выявляются транслятором при синтаксическом контроле и проявляются только после запуска программы на выполнение следующим образом:

1. длительное время (десятки секунд) программа не выводит на устройство вывода никакой информации – программа зависает,

2. на устройство вывода постоянно выводится одна и та же информация.

Таким образом, бесконечные циклы – это логические ошибки программиста. С ними сталкивается любой программист, и поэтому необходимо овладеть методами их поиска.

Циклы с предусловием

Как правило, некоторую цепочку операторов необходимо повторять не бесконечно, а до тех пор, пока выполняется некоторое условие:

ПОКА (условие) ВЫПОЛНЯТЬ

цепочка;

Эти величины равны между собой - student2.ru Такой цикл называется циклом с предусловием (циклом ПОКА) и изображается следующей схемой:

Условие – это логическое выражение, зависящее от переменных, входящих в цепочку. Цикл повторяется до тех пор, пока условие истинно. Значит, данное условие является условиемпродолжения цикла. Выполнение цикла заканчивается, если операторы цепочки изменяют значения переменных, входящих в условие, и оно становится ложным.

Цикл не выполняется ни разу, если условие было ложным с самого начала.

Цикл ПОКА превращается в бесконечный, если условие подобрано так, что оно всегда истинно.

В PHP цикл с предусловием реализуется оператором цикла while:

While (условие)

оператор;

или

While (условие)

{

оператор;

оператор;

. . . .

оператор;

}

Операторы, находящиеся между фигурными скобками, называются телом цикла.

Внимание!Условие всегда заключается в скобки и после него точка с запятой не ставится!

Если поставить точку с запятой после условия, то этот цикл, как правило, превращается в бесконечный, потому что в этом случае условие изменяться не будет.

Фигурные скобки используются в том случае, если после условия должна следовать цепочка операторов.

Действия оператора while:

1. проверяется выполнение условия,

2. если оно истинно, то выполняется оператор (цепочка), стоящий после него,

3. после его выполнения снова проверяется условие, и если оно снова истинно, то цикл повторяется,

4. если условие становится ложным, то цикл заканчивает работу.

Примеры:

1. вычислить сумму ста первых натуральных чисел:

s = 1 + 2 + 3 + … + 98 + 99 + 100

Пусть s – искомая сумма,

i – очередное число (изменяется от 1 до 100).

Тогда алгоритм решения задачи можно описать следующим образом:

a. обнуляем сумму s = 0,

b. берем первое число: i = 1,

c. добавляем в сумму это число: s = s + i,

d. увеличиваем очередное число на единицу: i = i+ 1,

e. если оно не больше 100, то снова добавляем его в сумму и повторяем цикл.

Представим этот алгоритм так:

s = 0;

i = 1;

ПОКА (i ≤ 100)

НАЧАЛО

s = s + i;

i = i + 1;

КОНЕЦ;

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

Программа:

$i = 1;

$s = 0;

while ($i <= 100)

{

$s += $i;

$i++;

}

echo “<BR>s = $s i = $i<BR>”;

Результат решения задачи:

s = 5050 i = 101

Таким образом, выходим из этого цикла со значением i не 100, а 101.

Вместо цепочки:

$s += $i;

$i++;

можно использовать один оператор:

$s += $i++;

Этот цикл можно превратить в бесконечный, если после условия поставить точку с запятой:

$i = 1;

$s = 0;

while ($i <= 100);

{

$s += $i;

$i++;

}

echo “<BR>s = $s i = $i<BR>”;

Значение переменной $i в этом случае меняться не будет – она останется равной единице.

2. вычислить сумму s всех цифр заданного натурального числа n

Пусть s – искомая сумма,

i – очередная цифра числа.

Тогда алгоритм решения задачи можно описать следующим образом:

1. обнуляем сумму s=0,

2. берем последнюю цифру числа, для чего определяем остаток от деления исходного числа на 10: i = n % 10,

3. добавляем в сумму найденную цифру: s = s + i,

4. уменьшаем число в 10 раз: n = n / 10,

5. повторяем цикл до тех пор, пока n > 0 – это и будет условием продолжения цикла.

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

Программа:

$s = 0;

$n = 12345;

while ($n > 0)

{

$i = $n % 10;

$s += $i;

$n /= 10;

}

echo “<BR>s = $s”;

3. ввести с клавиатуры по одному последовательность целых чисел (конец последовательности – число 0). Определить их сумму, максимальное и минимальное число, количество введенных чисел и их среднее арифметическое.

Пусть s – искомая сумма,

min, max – минимальное и максимальное из введенных чисел,

count – количество введенных чисел,

sred – среднее арифметическое,

n – очередное число.

Тогда алгоритм решения задачи можно описать следующим образом:

1. обнуляем сумму s = 0,

2. вводим первое число n,

3. если оно не равно нулю, то

4. принимаем его значение за min и max

5. количество введенных чисел count = 1

6. увеличиваем сумму на введенное число s = s + n

7. входим в цикл ввода:

8. вводим очередное число n,

9. если оно не равно нулю, то

10. количество введенных чисел увеличиваем на 1: count = count+1

11. увеличиваем сумму на введенное число s = s + n

12. если оно меньше min, то min = n,

13. если оно больше max, то max = n,

14. повторяем цикл до тех пор, пока n # 0 – это и будет условием продолжения цикла.

Создадим интерфейс этой задачи – взаимодействие программы с пользователем, то есть что должно выводиться на экран:

Первое число: 3

Очередное число: 8

Очередное число: 1

Очередное число: -2

Очередное число: 0

Сумма = 10

Количество чисел = 4

min = -2

max = 8

Среднее арифметическое = 2.50

Эти величины равны между собой - student2.ru Схема алгоритма:

Программа:

$count = 0;

$s = 0.0;

echo “<BR>Введите первое число:”;

// ввод $n

if ($n==0)

return 0;

$min = $n; // за минимум и максимум принимаем

$max = $n; //первое введенное число

$count = 1; //введено одно число

$s += $n;

while ($n != 0)

{

echo “<BR>Введите очередное число:”;

// ввод очередного $n

if ($n == 0)

break;

$count++;

$s += $n;

if ($n > $max)

$max = $n;

if ($n < $min)

$min = $n;

}

echo “<BR>Сумма = $s”;

echo “<BR>Количество чисел = $count”;

echo “<BR>min = $min”;

echo “<BR>max = $max”;

$sred = $s / $count;

echo “<BR>Среднее арифметическое = $sred”;

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

1. Использование после условия точки с запятой, которая, как правило, приводит к появлению бесконечного цикла:

$i = 1;

$s = 0;

while ($i <= 100);

{

$s += $i;

$i++;

}

2. Условие не заключено в скобки:

$i = 1;

$s = 0;

while $i <= 100

{

$s += $i;

$i++;

}

3. Отсутствие фигурных скобок, в которые заключается тело цикла:

$i = 1;

$s = 0;

while ($i <= 100)

$s += $i;

$i++;

4.Отсутствие в теле цикла оператора, изменяющего условие:

$i=1;

$s = 0;

while ($i <= 100)

{

$s += $i;

}

Циклы с постусловием

У циклов с постусловием (циклов типа ДО) проверка условия продолжения цикла производится после выполнения операторов, составляющих тело цикла:

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

ВЫПОЛНЯТЬ

Цепочка

ДО (условие);

Такой цикл повторяется до тех пор, пока условие истинно. Выполнение цикла заканчивается, если операторы цепочки изменяют значения переменных, входящих в условие, и оно становится ложным.

В любом случае этот цикл выполняется хотя бы один раз. Цикл с постусловием превращается в бесконечный, если условие подобрано так, что оно всегда истинно.

Таким образом, условие в данном цикле является условием его продолжения, как и в цикле с предусловием.

В PHP цикл с постусловием реализован оператором цикла do:

do

{

оператор;

оператор;

оператор;

. . . . . .

оператор;

}

while (условие);

где do – служебное слово выполнять,

while – служебное слово пока.

Внимание! После слова do точка с запятой не ставится!

Перед закрывающей фигурной скобкой }поставить точку с запятой!

Действия оператора do:

1. выполняется оператор (цепочка),

2. проверяется выполнение условия, стоящего после слова while,

3. если оно истинно, то цикл повторяется,

4. если условие становится ложным, то цикл заканчивает работу.

Примеры:

1. вычислить сумму ста первых натуральных чисел:

s = 1 + 2 + 3 + … + 98 + 99 + 100

Пусть s – искомая сумма,

i – очередное число (изменяется от 1 до 100).

Тогда алгоритм решения задачи можно описать следующим образом:

a. обнуляем сумму s = 0 ,

b. берем первое число: i = 1,

c. добавляем в сумму очередное число s = s + i,

d. как только очередное число станет больше ста, цикл заканчивает работу.

Представим этот алгоритм так:

s = 0; Эти величины равны между собой - student2.ru

i = 1;

ВЫПОЛНЯТЬ

s = s + i;

i = i + 1;

ПОКА (i <= 100);

Программа:

$i=1;

$s=0;

do

{

$s += $i;

$i++;

}

while ($i <= 100);

echo “<BR>s = $s i = $i”;

Результат решения задачи:

s = 5050 i = 101

Второй вариант решения задачи:

do

$s += $i++;

while ($i <= 100);

2. вычислить сумму s всех цифр заданного натурального числа n

Пусть s – искомая сумма,

i – очередная цифра числа.

Тогда алгоритм решения задачи можно описать следующим образом:

1. обнуляем сумму s = 0 ,

2. берем последнюю цифру числа, для чего определяем остаток от деления исходного числа на 10: i = n % 10,

3. добавляем в сумму найденную цифру: s = s + i,

4. уменьшаем число в 10 раз: n = n / 10,

5. повторяем цикл до тех пор, пока n != 0 .

Схема алгоритма:

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

Программа:

$s = 0;

echo “<BR>Введите целое положительное число:”;

// ввод $n

do

{

$i = $n % 10;

$s += $i;

$n /= 10;

}

while ($n != 0);

echo “<BR>s = $s”;

3. ввести с клавиатуры по одному последовательность целых чисел (конец последовательности – число 0). Определить их сумму, максимальное и минимальное число, количество введенных чисел и их среднее арифметическое.

Пусть s – искомая сумма,

min, max – минимальное и максимальное из введенных чисел,

count – количество введенных чисел,

sred – среднее арифметическое,

n – очередное число.

Тогда алгоритм решения задачи можно описать следующим образом:

1. обнуляем сумму s = 0,

2. вводим первое число n,

3. если оно не равно нулю, то

4. принимаем его значение за min и max

5. количество введенных чисел count = 1

6. увеличиваем сумму на введенное число s = s + n

7. входим в цикл ввода:

8. вводим очередное число n,

9. если оно не равно нулю, то

10. количество введенных чисел увеличиваем на 1: count = count+1

11. увеличиваем сумму на введенное число s = s + n

12. если оно меньше min, то min = n,

13. если оно больше max, то max = n,

14. повторяем цикл до тех пор, пока n # 0 – это и будет условием продолжения цикла.

Создадим интерфейс этой задачи – взаимодействие программы с пользователем, то есть что должно выводиться на экран:

Первое число: 3

Очередное число: 8

Очередное число: 1

Очередное число: -2

Очередное число: 0

Сумма = 10

Количество чисел = 4

min = -2

max = 8

Среднее арифметическое = 2.50

Программа:

$count = 0;

$s = 0.0;

echo “<BR>Введите первое число:”;

// ввод $n

if ($n == 0)

return 0;

$min = $n; // за минимум и максимум принимаем

$max = $n; // первое введенное число

$count = 1; // введено одно число

$s = $n;

do

{

echo “<BR>Введите очередное число:”;

// ввод $n

if ($n == 0)

break;

$count++;

$s += $n;

if ($n > $max)

$max = $n;

if ($n < $min)

$min = $n;

}

while ($n != 0);

echo “<BR>Сумма = $s”;

echo “<BR>Количество чисел = $count”;

echo “<BR>min = $min);

echo “<BR>max = $max);

$sred = $s / $count;

echo “<BR>Среднее арифметическое = $sred);

Схема алгоритма:

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








4. вычислить s – сумму членов бесконечного ряда:

s = 1 + x/ 1! + x2 / 2! + x3 / 3! + … + xk / k! + …

с погрешностью ε0.

Каждый последующий член ряда можно определить через предыдущий, используя рекуррентную формулу:

yk+1 = yk·x / k

Текущая погрешность вычислений ε определяется последним просуммированным членом ряда:

ε =|yn|

Эту погрешность необходимо сравнить с заданной погрешностью ε0 для реализации условия окончания суммирования:

- если ε > ε0 , то заданная точность еще не достигнута, и суммирование ряда необходимо продолжить, прибавив к имеющейся сумме еще один член,

- если ε <= ε0 , то заданная точность достигнута, и суммирование необходимо прекратить.

Пусть s – искомая сумма,

y – очередной член ряда,

k - номер члена ряда,

eps_0 – заданная точность вычислений,

x – вводимый аргумент.

Схема алгоритма:

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

Программа:

$eps_0 = 0.001;

$k = 0;

echo “<BR>x =”;

// ввод $x

$y = 1.0;

$s = $y;

do

{

$k++;

$y *= $x / $k;

$s += $y;

}

while (abs($y) > $eps_0);

echo “<BR>Сумма = $s”;

Циклы с постусловием обычно используются в фильтрах входных данных – исходные данные вводятся до тех пор, пока они не будут корректными, а некорректные исходные данные отвергаются.

Пример: по введенному месяцу года определить количество дней в нем.

Эти величины равны между собой - student2.ru Программа: Схема фильтра (month – номер месяца)

do

{

echo “<BR>Введите номер месяца: ”;

// ввод $month);

}

while (($month < 1)||($month > 12));

switch ($month)

{

case 1: case 3: case 5:

case 7: case 8: case 10:

case 12: echo “<BR>31 день”;

break;

case 4: case 6: case 9:

case 11: echo “<BR>30 дней”;

break;

case 2: echo “<BR>28 дней”;

break;

default: echo “<BR>Такого месяца нет<BR>”;

}

Циклы с пред- и постусловиями используются тогда, когда заранее неизвестно количество их повторений (итераций). Если количество итераций известно заранее, то используются циклы с параметром.

Циклы с параметром

Управление работой циклов с параметром осуществляется не только условием, но и значением специальной переменной – параметра цикла (счетчика).

Циклы этого типа получили наиболее широкое распространение в алгоритмических языках.

Схему цикла с параметром можно представить в следующем виде:

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

где x – параметр цикла – любая переменная,

x_нач – его начальное значение,

x_кон – его конечное значение,

x_шаг – шаг его изменения (не только целое число).

В PHP циклы с параметром реализуются оператором цикла:

Наши рекомендации