Анимация
JavaScript
|
Главная Библионтека Упражнения Ответы к упражнениям приведены в приложении А. 1. Напишите программу, которая читает список строковых значений, стоящих в отдельных строках, и выводит этот список в обратном порядке. Если вы читаете список на экране, то вам, вероятно, нужно будет выделить конец списка, нажав комбинацию клавиш "конец файла" (в UNIX или Plan 9 это, наверное, [Ctrl+D], а в других системах чаще всего [Ctrl+Z]). 2. Напишите программу, которая читает число, затем список строковых значений (находящихся в отдельных строках), после чего выводит одну из строк списка в соответствии с указанным числом. 3. Напишите программу, которая читает список строк, а затем выбирает и выводит на экран случайную строку из этого списка. Чтобы выбрать случайный элемент массива gsomearray, поместите в начало программы функцию srand; (она инициализирует генератор случайных чисел), а затем используйте rand(@somearray) там, где требуется случайное значение, меньшее размера массива @зог1,о- аггау. в этой /лаве: • Блоки операторов • Оператор if/unless • Оператор wfiile/until • Оператор for • Оператор foreach • Упражнения Управляющие структуры Блоки операторов Блок операторов -- это последовательность операторов, заключенная в парные фигурные скобки. Блок операторов выглядит следующим образом; первый оператор; второй оператор,-третий оператор; последний оператор; Perl выполняет операторы по очереди, начиная с первого и кончая последним. (Позднее вы узнаете о том, как можно изменять порядок выполнения в блоке, но пока достаточно и этого.) Синтаксически блок операторов принимается вместо любого одиночного оператора, но обратное не верно. Заверщающая точка с запятой, стоящая за последним оператором, не обязательна. Таким образом, вы можете разговаривать на языке Perl с С-акцентом (точка с запятой присутствует) или с паскалевским акцентом (точка с запятой отсутствует). Чтобы облегчить последующее добавление операторов, мы обычно рекомендуем опускать точку с запятой лишь в том случае, если блок занимает целую строку. Сравните примеры этих стилей в следующих двух блоках if: if ($ready) ( $hungry++ ) if (Stired) ( $sleepy = ($hungry +1) * 2; Оператор if/unless Следующей по сложности управляющей структурой является оператор 1 f. Эта конструкция состоит из управляющего выражения (проверяемого на истинность) и блока. В ней также может быть часть, начинающаяся оператором else, за которой следует еще один блок операторов. Другими словами, все это выглядит так: if (выражение) { оператор 1 ; оператор 2; оператор 3; ] else { оператор 1; оператор 2; оператор 3; (Если вы любите программировать на С и Java, то для вас должна быть вполне очевидной обязательность фигурных скобок. Они устраняют необходимость в применении правила "путающего зависщего else".) Во время выполнения Perl-программы вычисляется управляющее выражение. Если оно истинно, то выполняется первый блок операторов в приведенном выше примере. Если выражение ложно, то выполняется второй блок. Что же такое "истина" и "ложь"? В Perl эти правила несколько странноваты, но, тем не менее, дают ожидаемые результаты. Управляющее выражение вычисляется как строковая величина в скалярном контексте (если это уже строка, ничего не изменяется, а если это число, то оно преобразуется в строку*). Если данная строка либо пуста (т.е. имеет нулевую длину), либо состоит из одного символа "О" (цифры нуль), то значение выражения - "ложь". Все остальное автоматически дает значение "истина". Почему же в Peil столь забавные правила? А потому, что это облегчает условный переход не только по нулю (в противоположность ненулевому числу), но и по пустой (в противоположность непустой) строке, причем без необходимости создания двух версий интерпретируемых значений "истина" и "ложь". Вот несколько примеров интерпретации этих значений. 0 # преобразуется в "О", поэтому "ложь" 1-1 # дает в результате О, затем преобразуется в "О", поэтому "ложь" 1 # преобразуется в "1", поэтому "истина" "" # пустая строка, поэтому "ложь" "1" # не "" или "О", поэтому "истина" "00" # не "" или "О", поэтому "истина" (это странно, поэтому будьте настороже) "0.000" # "истина" - будьте внимательны, по той же причине undef # дает в результате "", поэтому "ложь" Внутренне все трактуется несколько иначе, но внешне все выполняется так, будто именно это и происходит. 90 Итпшс.м 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 |