Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [ 15 ] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

Проведем анализ программы.

Строка 1. В этой строке указан путь к интерпретатору (измените его в соответствии с конфигурацией вашей системы) и ключ -w. Всегда включайте режим выдачи предупреждений!

Строка 3. Переменное rimes присваивается максимальное количество целых чисел, которые нужно найти.

Строка. 4. Переменная lue будет содержать значение, проверяемое на принадлежность к простым числам.

Строка 5. В переменное unt хранится счетчик найденных простых чисел.

Строка 6. Цикл while выполняется до тех пор, пока не будет найдено достаточное количество простых чисел.

Строка 7. Значение переменное lue увеличивается так начать

проверку на принадлежность к простым числам с числа 2.

Строка 8. Переменная $composite используется в цикле for как флажок. Она обозначает, что на текущей итерации исследуемое число не является простым.

Строки 9-10. Два вложенных цикла for перебирают все возможные множители числа Например, для числа 4 будут проверяться пары 2 и 2, 2 и 3, 3 и 2, 3 и 3.

Строки 11-14. Значения переменных $i и $j перемножаются. Если их произведение равно $value, для этой переменной устанавливается флаг $composite и программа выходит из обоих циклов.

Строки После циклов проверяется значение флага Если

это проверенное число является простым. В рассматриваемых строках

выводится соответствующее сообщение и увеличивается значение счетчика.


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

Резюме

В этой главе вы познакомились со многими управляющими конструкциями Некоторые из них, в частности оператор if и логические операторы, предназначены для выполнения определенных фрагментов кода в зависимости от истинности или ложности соответствующих значений. Другие операторы, такие как while, until и for, позволяют циклически выполнять фрагменты кода необходимое количество раз. Также вы узнали о логических значениях в Perl и их использовании во всех условных выражениях.

62 I. cEi Perl



Вопросы и ответы

Мне приходилось программировать на С. Существуют ли в Perl аналоги операторов

switch и case?

Нет! В Perl имеется такое огромное количество условн1х операторов, что даже

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

всего это сделать следующим образом:

if {$проверяемая пере11еввая == $звачевве1) { оператор!;

} elsei ffepeAfeHHa == $звачевие2) {

оператор2; } else {

операч!ор по укопчаййю;

>

Страница руководства по синтаксису языка Perl, доступ к которой можно получить, набрав в командной строке perdoc perlsyn, содержит большое количество удач-

н1х примеров эмуляции оператора switch, некоторые из них имеют switch-подобный синтаксис.

Какое максимальное количество вложеннгх циклов for и while, а также операторов

if допустимо?

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

Что мне делать? Perl вгдает сообщение о том, что в программе отсутствует правая закргвающая финая скобка Unmatched right bracket (или Hissing right bracket). При этом номер строки с ошибкой соответствует концу файла.

Это означает, что в программе есть открывающая скобка { без парной ей закрывающей } или наоборот. Иногда Perl может угадать, где пропущена скобка, а иногда - нет. При глубоком вложении управляющих структур Perl не может найти ошибки, пока не будет проанализирован весь текст программы до конца файла. Хорошие программные редакторы (например vi acs ил iEdit) имеют средства, помогающие легко устранить несоответствие скобок. Воспользуйтесь ими.

Семинар

Контрольные вопросы

1. Оператор while выполняет цикл, пока условие истинно. Какой оператор выполняет цикл, пока условие ложно?

if (not ... ) {}

б) while (! условие) {}

2. Истинно или ложно следующее выражение?

(О and 5) (0" or 0 or and (6 an lo")) or 1



а) истинно;

б) ложно.

3. Какое значение будет иметь переменная $i после окончания цикла?

fo $1<=10; { }

a) 10;

б) 9;

E) П.

Ответы

1. Правильным ответом будет вариант б). Цикл while (! условие) {} выполняется, пока условие ложно.

2. Правильный ответ - вариант а). Действия по упрощению этого выражения:

(нъ) ((Лень.) аг на)) ас Истина

3. Правильным является вариант в). Проверочное условие поэтому,

когда оно не выполняется, $i должно быть равно 11. Если вы ошиблись, не переживайте. Это довольно распространенная ошибка, имеющая у программистов специальное название, - ошибка на единицу, или ошибка гра-ничногоусловия.

Упражнения

Модифицируйте программу, приведенную в листинге 3.1, чтобы игра продолжалась, пока число не будет угадано.

Программа, приведенная в листинге 3.5, неэффективна. Например, она анализирует четные числа больше 2, хотя очевидно, что они не могут быть простыми. Усовершенствуйте алгоритм поиска простых чисел.

64 Часть I. ОcноEl Perl



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [ 15 ] 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122