Анимация
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

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

Глава 4 Управляющие структуры"

1. Вот один из способов решения этой задачи:

print "What temperature is it? "; chomp($temperature = <STDIN>); if (Stemperature > 72) {

print "Too hot\n"; } else {

print "Too coldXn";

Первая строка приглашает ввести температуру. Вторая строка принимает введенное значение температуры. Оператор if в последних пяти строках выбирает для вывода одно из двух сообщений в зависимости от значения переменной $temperature.

2. Вот один из способов решения этой задачи:

print "What temperature is it? "; chomp(Stemperature = <STDIN>); if (Stemperature > 75) {

print "Too hot I\n"; ) elsif (Stemperature < 68) (

print "Too coldXn"; } else {

print "Just right\n";

Здесь мы модифицировали программу, введя трехвариантный выбор. Сначала температура сравнивается со значением 75, затем со значением 68. Обратите внимание: при каждом запуске программы будет выполняться только один из трех вариантов.

3. Вот один из способов решения этой задачи:

print "Enter а number (999 to quit): "; chomp(Sn = <STDIN>); while (Sn = 999) ( Ssum += Sn;

print "Enter another number (999 to quit): "; chomp(Sn = <STDIN>);

print "the sum is Ssum\n";



Первая строка приглашает ввести первое число. Вторая строка считывает это число с терминала. Цикл while продолжает выполняться до тех пор, пока число не станет равным 999.

Операция += накапливает числа в переменной $sum. Обратите внимание: начальное значение этой переменной - undef, что очень хорошо для сумматора, потому что первое прибавляемое значение будет фактически прибавляться к нулю (помните, что при использовании в качестве числа undef равно нулю).

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

После выхода из цикла программа выводит накопленные результаты.

Если сразу же ввести 999, то значение переменной $sum будет равно не нулю, а пустой строке - т.е. значению undef в строковом контексте. Если вы хотите, чтобы профамма в этом случае выводила нуль, нужно в начале программы инициализировать значение $ sum операцией $ sum = 0.

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

print "Enter some strings, end with "D:\n"; @strings = <STDIN>; while (Ostrmgs) (

print pop strings;

Сначала программа запрашивает строки. Эти строки сохраняются в переменной-массиве @strings (по одной на элемент).

Управляющее выражение цикла while - @strings. Это управляющее выражение ищет только одно значение ("истина" или "ложь"), поэтому вычисляет выражение в скалярном контексте. Имя массива (такое как @ strings) при использовании в скалярном контексте представляет собой количество элементов, находящихся в массиве в текущий момент. Поскольку массив не пуст, это число не равно нулю и, следовательно, имеет значение "истина". Эта идиома очень широко используется в Perl, она соответствует указанию "делать это, пока массив не пуст".

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

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



5. Вот один из способов решения этой задачи без использования списка:

for ($number = 0; $number <= 32; $nuraber++) ( $square = $number * $number; printf "%5g %8g\n", $number, $square;

A вот как можно решить задачу с помоидэю списка:

foreach $number (0..32) (

$square = $number * $number;

printf "%5g %8g\n", $number, $square;

В обоих решениях применяются циклы с использованием операторов for и foreach. Тела этих циклов идентичны, потому что в обоих решениях значение переменной $number при каждой итерации изменяется от О до 32.

В первом решении использован традиционный С-подобный оператор for. Первое выражение устанавливает переменную $ number в О, второе проверяет, меньше ли $number, чем 32, атретье инкрементирует $number при каждой итерации.

Во втором решении использован оператор foreach, подобный аналогичному оператору C-shell. С помощью конструктора списка создается список из 33 элементов (от О до 32). Затем переменной $ number поочередно присваиваются значения, равные этим элементам.

Глава 5 "Хеши

1. Вот один из способов решения этой задачи:

%тар = qwfred apple green leaves blue ocean);

print "A string please: "; chomp($some string = <STDIN>};

print "The value for $some string is $map($some string}\n";

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

Этот хеш можно создать и с помощью серии отдельных операций присваивания:

Smap(red) = apple; Smap(green) = leaves; Smap(blue) = ocean;



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