22
Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи Управляющие структуры в ruby: циклы Информатика 10-11 классы 20 октября 2011 г. Информатика 10-11 классы

Ruby: управляющие структуры — циклы

Embed Size (px)

Citation preview

Page 1: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Управляющие структуры в ruby: циклы

Информатика10-11 классы

20 октября 2011 г.

Информатика 10-11 классы

Page 2: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Описание

Итак, вернёмся к квадратному уравнению. Напишемпрограмму, высчитывающую все корни (если таковыеимеются) квадратного уравнения ax2 + bx + c = 0.Если a 6= 0, то:

1 Вычислим дискриминант уравнения по формуле:D = b2 − 4ac .

2 Если дискриминант меньше нуля, то решений нет.3 Если дискриминант равен нулю, то корень — один. Он

равен: −b

2a.

4 Если дискриминант больше нуля, то существует двавещественных корня:

x1,2 =− b ±

√b2 − 4ac

2a

В случае a = 0 уравнение из квадратного превращается влинейное, которое мы уже умеем решать.

Информатика 10-11 классы

Page 3: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Блок–схема

Ввести a, b, c

a == 0

D = b2 − 4ac

D? x = − b2a

x1,2 =− b ±

√D

2a

решений нет

b = 0

x = − cb

c = 0

любое xрешений нет

нет да

да

данет

нет

D = 0

D > 0

D < 0

Информатика 10-11 классы

Page 4: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Программа

Listing 1: Квадратное уравнение

a = 2 .0b = 4 .0c = 2 .0i f ( a == 0)

i f ( b == 0)i f ( c == 0)

put s "any␣x"e l s e

put s "no␣ s o l u t i o n s "end

e l s ex = −c/bput s x

ende l s e

Ввести a, b, c

a == 0

b = 0

x = − cb

c = 0

любое xрешений нет

да

да

данет

нет

Информатика 10-11 классы

Page 5: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Программа

Listing 2: Квадратное уравнение

e l s eD = b∗b−4∗a∗ci f (D > 0)

x1 = (−b+D∗∗0 . 5 ) / ( 2 . 0∗ a )x2 = (−b−D∗∗0 . 5 ) / ( 2 . 0∗ a )put s x1 , x2

e l s i f (D == 0)x = −b/(2∗ a )put s x

e l s eput s "no␣ s o l u t i o n s "

endend

a == 0

D = b2 − 4ac

D? x = − b2a

x1,2 =− b ±

√D

2a

решений нет

нет

D = 0

D > 0

D < 0

Информатика 10-11 классы

Page 6: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Основы

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

Listing 3: 5 последовательных чисел

put s " 1 ,2 ,3 ,4 ,5 "

А если чисел — 100? 1000? 10000?

Информатика 10-11 классы

Page 7: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Основы

На помощь приходят циклы.Цикл — управляющая структура в алгоритме/программе,позволяющая повторять какую-либо операцию несколькораз.Два основных типа циклов:

1 с заданным количеством шагов–итераций (явный цикл)2 без явно заданного количества итераций (неявный цикл)

Первый тип состоит из начала цикла, номера итерации,тела цикла (что делаем), конца цикла.Второй тип — из начала цикла, условия выхода из цикла,номера итерации (опционально), тела цикла, конца цикла.

Информатика 10-11 классы

Page 8: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Пример цикла

1

1Где здесь цикл и какому типу он принадлежит?Информатика 10-11 классы

Page 9: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

For и while

Двум типам циклов соответствует два оператора: for иwhile.Напишем программу, выводящую на экран числа от 1 до100.

Listing 4: for

f o r i i n 1 . . 1 0 0put s i

end

Listing 5: while

i = 0wh i l e ( i < 100)

i = i+1put s i

end

Информатика 10-11 классы

Page 10: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

For и while

Рассмотрим программы более детально.Оба оператора образуют следующую структуру:

1 Ключевое слово (for или while).2 Условие повторения (явное или неявное).3 Конец (оператор end).

В определении цикла for используется специальнаяпеременная i, которая указывает на номер итерации.Она “пробегает” значения в заданном интервале:for i in 1..100 последовательно пробегает значения 1, 2, 3,... 99, 100.В цикле while с помощью оператора присваивания(i = i+1) мы эмулируем такую переменную.

Информатика 10-11 классы

Page 11: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Суммирование чисел: алгоритм

Посчитаем сумму чисел от 1 до 100000 с помощью циклов.

For

по i от 1 до 100000

sum:=sum+i

While

i<=100000

i:=i+1

sum:=sum+i

да

нет

Информатика 10-11 классы

Page 12: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Программа

Listing 6: for

sum = 0f o r i i n 1 . . 100000

sum = sum + iendput s sum

Listing 7: while

i = 0sum = 0wh i l e ( i < 100000)

i = i+1sum = sum + i

endput s sum

Информатика 10-11 классы

Page 13: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Логарифмирование

Задача: найти наименьшее целое число, для котороговыполнено неравенство:

2x > 1000000

Цикл for здесь не поможет, ведь мы заранее не знаем,сколько итераций будет.Решаем через while. Как?Пробежим все степени двойки, начиная с нулевой,фиксируя на каждом шаге значение показателя степени.Если текущее значение меньше 1000000, увеличимпоказатель на 1.Когда-нибудь наступит ситуация, когда 2 в какой-либостепени станет больше, чем 1000000.Последнее значение показателя степени и будет искомымчислом.

Информатика 10-11 классы

Page 14: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Логарифмирование

Listing 8: Вычисление наименьшей степени

num = 0i = 0while (num <= 1000000)

i = i+1num = 2∗∗ i

endput s i

Задание: дан алфавит, состоящий из N букв. Написатьпрограмму, которая считает, сколько бит занимает одинсимвол этого алфавита.

Информатика 10-11 классы

Page 15: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Выход из цикла

Может возникнуть ситуация, когда нам нужно прекратитьвыполнение до цикла даже несмотря на то, что не всеитерации пройдены.Для окончания цикла нужно вызвать оператор break.Пример: если бы в задаче 2x > 1000000 мы использовалицикл for, то нам следовало бы остановиться в ситуации,когда 2i стало бы больше 1000000, где i — номер итерации.

Listing 9: Break

f o r i i n 1 . . 1000000. . .break i f (2∗∗ i > 1000000)

end

Для перехода к следующей итерации без выполнениядальнейшего кода из тела цикла — оператор next.

Информатика 10-11 классы

Page 16: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Оператор times

Оператор times (англ. кол-во раз) очень похож на for. Онповторяет определённое заданное количество разопределённое действие.Его зачастую используют, когда цикл — очень простой исодержит всего одно действие.Приведём пример: выведем на экран квадраты чисел от 0до 9.

Listing 10: Вычисление наименьшей степени

10 . t imes { | i | pu t s i ∗∗2 }

Лаконично, не правда ли?NB! Нумерация начинается с 0, а не с 1!

Информатика 10-11 классы

Page 17: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Числа Фибоначчи

Числа Фибоначчи задаются рекуррентной формулой:

ϕn = ϕn−1 + ϕn−2

где ϕ0 = 1, ϕ1 = 1.Первые несколько чисел Фибоначчи:ϕ0 ϕ1 ϕ2 ϕ3 ϕ4 ϕ5 ϕ6 ϕ7 ϕ8 ϕ9 ϕ10

1 1 2 3 5 8 13 21 34 55 89Числа Фибоначчи встречаются и в природе: филлотаксис(листорасположение) у растений описываетсяпоследовательностью Фибоначчи.Зерна подсолнуха, сосновые шишки, лепестки цветковрасполагаются также по числам Фибоначчи.

Информатика 10-11 классы

Page 18: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Числа Фибоначчи

Информатика 10-11 классы

Page 19: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Числа Фибоначчи

Информатика 10-11 классы

Page 20: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Вычисление 100 числа Фибоначчи

Итак, чтобы вычислить число Фибоначчи, нужно знатьдва предыдущих.Пойдём последовательно. Нам известны значения двухпервых чисел: ϕ0 = 1, ϕ1 = 1.Чтобы вычислить второе число, надо сложить первое инулевое.Прибавив к полученному числу первое — получим третье:

ϕ3 = ϕ2 + ϕ1 = (ϕ1 + ϕ0) + ϕ0.

Для вычисления четвёртого числа воспользуемсязначениями третьего и второго.Итого: нам надо хранить два последних числа. Складываяих, мы получаем новое число. “Сдвигаемся” на единицудальше.

Информатика 10-11 классы

Page 21: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

Программа

Listing 11: 100 число Фибоначчи

a0 = 1a1 = 1a_new = 0fo r i in 2 . . 1 0 0

a_new = a0 + a1a0 = a1a1 = a_new

endput s a_new

Задание: подготовить блок–схему программы.Задание: сделать аналогично с циклом while.

Информатика 10-11 классы

Page 22: Ruby: управляющие структуры — циклы

Квадратное уравнение Циклы Задачи на циклы Числа Фибоначчи

References

Все презентации доступны на http://school.smirik.ru!Вопросы, предложения, д/з: [email protected]

Информатика 10-11 классы