SlideShare a Scribd company logo
1 of 16
Download to read offline
Разбор задач      Динамическое программирование   Функции   Задачи




               Динамическое программирование

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


                              17 ноября 2011 г.




               Информатика 10-11 классы
Разбор задач               Динамическое программирование   Функции      Задачи



Разбор задач: средняя длина слова

               Найдём среднюю длину слова в три этапа:
                1   Вычислим количество слов в строке.
                2   Найдём длину всей строки без пробелов (сумма длин
                    слов).
                3   Поделим одно на другое.


      Listing 1: Средняя длина слова
                s = " T h i s i s a sample s t r i n g "
                words = s . s p l i t ( " " )
                s i z e = words . s i z e
                res = 0.0
                w o r d s . e a c h do | e l e m |
                    r e s = r e s + elem . s i z e
                end
                medium = r e s / s i z e
                p u t s medium


                       Информатика 10-11 классы
Разбор задач                Динамическое программирование               Функции   Задачи



Разбор задач: слова, длиннее следнего


               Найдём среднюю длину строки в два этапа:
                 1   Посчитаем среднюю длину слова.
                 2   Найдём слова, чья длина больше средней.
               ... пропустим кусок, связанный с п.1.

      Listing 2: Длиннее среднего
                ...
                medium = r e s / s i z e
                w o r d s . e a c h do | e l e m |
                   p u t s e l e m i f ( e l e m . s i z e > medium )
                end




                       Информатика 10-11 классы
Разбор задач             Динамическое программирование   Функции            Задачи



Динамическое программирование: принципы


               Решая предыдущие задачи, мы столкнулись с тем, что:
                1   Очень удобно разбивать задачу над несколько небольших
                    подзадач.
                2   Зачастую, одна программа использует результаты,
                    полученные другой программой.
                3   А в некоторых случаях подзадачи нескольких задач
                    совпадают.
               Такой подход называется динамическим
               программированием.
               Динамическое программирование способ решения
               сложных задач путём разбиения их на более простые
               подзадачи (Википедия).



                      Информатика 10-11 классы
Разбор задач            Динамическое программирование   Функции      Задачи



Инструменты


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



                     Информатика 10-11 классы
Разбор задач          Динамическое программирование            Функции      Задачи



Пример чёрного ящика




               Рис.: Источник: http://g0l.ru/blog/imgs/gai/caricatura.jpg

                  Информатика 10-11 классы
Разбор задач                  Динамическое программирование                     Функции   Задачи



Функции
               Как уже было указано, простейшей реализацией чёрного
               ящика является функция.
               Функция подпрограмма внутри программы,
               выполняющая некоторую функцию и имеющая входные
               данные, тело (код) функции, выходные данные (что
               функция возвращает)
               Приведём простейший пример функции: перевод из
               градусов Цельсия в градусы по Кельвину.

      Listing 3: Цельсии в Кельвины
                def c e l s i u s _ t o _ k e l v i n ( c e l s _ v a l u e )
                  kelv_value = cels_value + 273.15
                  return kelv_value
                end

                sample = c e l s i u s _ t o _ k e l v i n (20)
                p u t s "20 by C e l s i u s = #{sample } by K e l v i n "

                         Информатика 10-11 классы
Разбор задач            Динамическое программирование   Функции     Задачи



Функция в разрезе
               def название_функции(аргументы)
               В начале задания функции пишется ключевое слово def
               (англ. definition определение).
               Затем пишется название функции. Оно должно понятным
               и на английском языке без пробелов и спецсимволов.
               Далее, в скобках перечисляются входные данные, которые
               называются аргументы функции.
               Аргументы функции это несколько переменных, которые
               нужны функции для её вычислений.
               В конце функции пишется ключевое слово return (англ.
               возврат). После return указывается, что возвращает
               функция.
               В самом конце ставится end.
               В нашем случае функция возвращала значение
               температуры в градусах по Кельвину.
                     Информатика 10-11 классы
Разбор задач      Динамическое программирование          Функции   Задачи



Функции для чайников




                  Рис.: Источник: http://www.dialektika.com/

               Информатика 10-11 классы
Разбор задач             Динамическое программирование    Функции       Задачи



Ещё немного о функциях


               Для вызова функции достаточно написать её имя, а затем
               перечислить в скобках аргументы.
               Например puts celsius_to_kelvin(20) выведет на экран
               значение 20 градусов цельсия по шкале Кельвина.
               Можно и через дополнительную переменную:

      Listing 4: Функции
               ...
               c e l s i u s _ v a l u e = 20
               in_kelvin = celsius_to_kelvin ( celsius_value )
               puts in_kelvin




                      Информатика 10-11 классы
Разбор задач      Динамическое программирование             Функции   Задачи



И ещё чуть-чуть




                      Рис.: Источник: где-то в Интернетах
               Информатика 10-11 классы
Разбор задач               Динамическое программирование                Функции    Задачи



И ещё чуть-чуть

               Важно! Все переменные внутри функции локальные. То
               есть, если в программе есть переменная res, внутри
               функции её НЕ БУДЕТ. И наоборот.
               Такая программа вызовет ошибку, так как переменная
               внутри функции не определена:

      Listing 5: Ошибка с локальными переменными

               elem = 5
               def v e r y _ u s e f u l _ f u n c t i o n ( s o m e t h i n g )
                  p u t s elem
                  puts something
                  r e t u r n elem
               end

                       Информатика 10-11 классы
Разбор задач             Динамическое программирование   Функции         Задачи



Задача о палиндромоме


               Палиндромом называют слово (или буквосочетание),
               одинаково читающееся в обоих направлениях: топот, А
               роза упала на лапу Азора (Фет).
               Задача: вывести на экран все палиндромы–слова,
               встречающиеся в строке.
               Решим задачу методом динамического программирования:

                1   Разделим предложение на слова.
                2   Проверим каждое слово, является ли оно палиндромом
                    (функция).
                3   Если является, то выведем его на экран.




                      Информатика 10-11 классы
Разбор задач              Динамическое программирование                   Функции             Задачи



Задача о палиндромоме



      Listing 6: Задача о палиндроме
           def palindrome ?( s )
             i f ( s == s . r e v e r s e )
                return true
             else
                return f a l s e
             end
           end

           s = " I s a i d to madam a f t e r p a r t y : W W    O "
           words = s . s p l i t ( " " )
           w o r d s . e a c h { | word | p u t s word i f p a l i n d r o m e ? ( word ) }




                      Информатика 10-11 классы
Разбор задач            Динамическое программирование              Функции   Задачи



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

               Выведем на экран первые N чисел Фибоначчи.

      Listing 7: Числа Фибоначчи
        def f i b o n a c c i ( n )
          a0 = 1
          a1 = 1
          a_new = 0
          for i in 2 . . n
              a_new = a0 + a1
              a0 = a1
              a1 = a_new
          end
          r e t u r n a1
        end
        n = 5
        for i in 0 . . n
          p u t s "#{ i } число Фибоначчи = #{f i b o n a c c i ( i )} "
        end

                     Информатика 10-11 классы
Разбор задач             Динамическое программирование   Функции      Задачи



References




               Все презентации доступны на http://school.smirik.ru!
               Вопросы, предложения, д/з: smirik@gmail.com




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

More Related Content

What's hot

этапы написания программы
этапы написания программыэтапы написания программы
этапы написания программы
Ирина Чернова
 
Михаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделированиеМихаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделирование
Lidia Pivovarova
 
паскаль. часть1
паскаль. часть1паскаль. часть1
паскаль. часть1
igorm9so
 
программирование на Maple. Лекция 1
программирование на Maple. Лекция 1программирование на Maple. Лекция 1
программирование на Maple. Лекция 1
Andrei V, Zhuravlev
 
программирование на Maple. Лекция 2
программирование на Maple. Лекция 2программирование на Maple. Лекция 2
программирование на Maple. Лекция 2
Andrei V, Zhuravlev
 
19 pascal urok_3
19 pascal urok_319 pascal urok_3
19 pascal urok_3
Ann Eres
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
Technopark
 
лабораторная работа 3
лабораторная работа 3лабораторная работа 3
лабораторная работа 3
Gulnaz Shakirova
 
элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данных
Елена Ключева
 

What's hot (19)

Ruby: основы ООП
Ruby: основы ООПRuby: основы ООП
Ruby: основы ООП
 
этапы написания программы
этапы написания программыэтапы написания программы
этапы написания программы
 
Михаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделированиеМихаил Александров, Индуктивное моделирование
Михаил Александров, Индуктивное моделирование
 
Запись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка ПаскальЗапись вспомогательный алгоритмов на языка Паскаль
Запись вспомогательный алгоритмов на языка Паскаль
 
паскаль. часть1
паскаль. часть1паскаль. часть1
паскаль. часть1
 
Лекция 10 NP-полнота
Лекция 10 NP-полнотаЛекция 10 NP-полнота
Лекция 10 NP-полнота
 
программирование на Maple. Лекция 1
программирование на Maple. Лекция 1программирование на Maple. Лекция 1
программирование на Maple. Лекция 1
 
программирование на Maple. Лекция 2
программирование на Maple. Лекция 2программирование на Maple. Лекция 2
программирование на Maple. Лекция 2
 
Программирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмовПрограммирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмов
 
лек13 4
лек13 4лек13 4
лек13 4
 
Типы переменных Pascal
Типы переменных PascalТипы переменных Pascal
Типы переменных Pascal
 
19 pascal urok_3
19 pascal urok_319 pascal urok_3
19 pascal urok_3
 
Конструирование алгоритмов
Конструирование алгоритмовКонструирование алгоритмов
Конструирование алгоритмов
 
паскаль
паскальпаскаль
паскаль
 
Python
PythonPython
Python
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
лабораторная работа 3
лабораторная работа 3лабораторная работа 3
лабораторная работа 3
 
элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данных
 
Document
DocumentDocument
Document
 

Similar to Динамическое программирование на ruby

Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8
Technopark
 
лекция1
лекция1лекция1
лекция1
shagore
 
04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции
Fedor Tsarev
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
SECON
 
Сила парадигмы: обзор парадигм программирования
Сила парадигмы: обзор парадигм программированияСила парадигмы: обзор парадигм программирования
Сила парадигмы: обзор парадигм программирования
Vasiliy Sabadazh
 
C++ теория
C++ теорияC++ теория
C++ теория
tank1975
 
презентация Microsoft power point
презентация Microsoft power pointпрезентация Microsoft power point
презентация Microsoft power point
P_Arthur
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
Dmitri Soshnikov
 

Similar to Динамическое программирование на ruby (20)

Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8
 
Задачи по ruby
Задачи по rubyЗадачи по ruby
Задачи по ruby
 
лекция1
лекция1лекция1
лекция1
 
04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
 
Урок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графовУрок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графов
 
106170
106170106170
106170
 
106170
106170106170
106170
 
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
206297
206297206297
206297
 
Ruby: инкапсуляция и полиморфизм
Ruby: инкапсуляция и полиморфизмRuby: инкапсуляция и полиморфизм
Ruby: инкапсуляция и полиморфизм
 
Сила парадигмы: обзор парадигм программирования
Сила парадигмы: обзор парадигм программированияСила парадигмы: обзор парадигм программирования
Сила парадигмы: обзор парадигм программирования
 
Lec 15
Lec 15Lec 15
Lec 15
 
Подпрограммы
ПодпрограммыПодпрограммы
Подпрограммы
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
презентация Microsoft power point
презентация Microsoft power pointпрезентация Microsoft power point
презентация Microsoft power point
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
 

More from Evgeny Smirnov

Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2
Evgeny Smirnov
 
Мастер-класс: Anki карточки
Мастер-класс: Anki карточкиМастер-класс: Anki карточки
Мастер-класс: Anki карточки
Evgeny Smirnov
 
Мастер-класс: Quiz up
Мастер-класс: Quiz upМастер-класс: Quiz up
Мастер-класс: Quiz up
Evgeny Smirnov
 
Мастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox AlgebraМастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox Algebra
Evgeny Smirnov
 
Мастер-класс: начало
Мастер-класс: началоМастер-класс: начало
Мастер-класс: начало
Evgeny Smirnov
 
LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)
Evgeny Smirnov
 
Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42
Evgeny Smirnov
 
Введение в алгоритмы
Введение в алгоритмыВведение в алгоритмы
Введение в алгоритмы
Evgeny Smirnov
 
Построение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицамПостроение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицам
Evgeny Smirnov
 

More from Evgeny Smirnov (20)

Внедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатикиВнедряем MOOC'и на уроке информатики
Внедряем MOOC'и на уроке информатики
 
Инновации которые не мешают
Инновации которые не мешаютИнновации которые не мешают
Инновации которые не мешают
 
Мобильные приложения в школе
Мобильные приложения в школеМобильные приложения в школе
Мобильные приложения в школе
 
Порядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системеПорядок и хаос в Солнечной системе
Порядок и хаос в Солнечной системе
 
Объектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyОбъектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в ruby
 
Мобильные приложения в образовании
Мобильные приложения в образованииМобильные приложения в образовании
Мобильные приложения в образовании
 
Newtonew Media
Newtonew MediaNewtonew Media
Newtonew Media
 
NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.NumBuster! Почему связи между данными важнее самих данных.
NumBuster! Почему связи между данными важнее самих данных.
 
Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2Мастер-класс: LMS42, ч.2
Мастер-класс: LMS42, ч.2
 
Мастер-класс: Anki карточки
Мастер-класс: Anki карточкиМастер-класс: Anki карточки
Мастер-класс: Anki карточки
 
Мастер-класс: Quiz up
Мастер-класс: Quiz upМастер-класс: Quiz up
Мастер-класс: Quiz up
 
Мастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox AlgebraМастер-класс: Dragonbox Algebra
Мастер-класс: Dragonbox Algebra
 
Мастер-класс: начало
Мастер-класс: началоМастер-класс: начало
Мастер-класс: начало
 
LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)LMS42: основы (для мастер-класса)
LMS42: основы (для мастер-класса)
 
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...
 
Образовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методистуОбразовательные и игровые платформы в помощь учителю и методисту
Образовательные и игровые платформы в помощь учителю и методисту
 
Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42Педагогический клуб 18.10: LMS42
Педагогический клуб 18.10: LMS42
 
Блок-схемы
Блок-схемыБлок-схемы
Блок-схемы
 
Введение в алгоритмы
Введение в алгоритмыВведение в алгоритмы
Введение в алгоритмы
 
Построение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицамПостроение диаграмм по электронным таблицам
Построение диаграмм по электронным таблицам
 

Динамическое программирование на ruby

  • 1. Разбор задач Динамическое программирование Функции Задачи Динамическое программирование Информатика 10-11 классы 17 ноября 2011 г. Информатика 10-11 классы
  • 2. Разбор задач Динамическое программирование Функции Задачи Разбор задач: средняя длина слова Найдём среднюю длину слова в три этапа: 1 Вычислим количество слов в строке. 2 Найдём длину всей строки без пробелов (сумма длин слов). 3 Поделим одно на другое. Listing 1: Средняя длина слова s = " T h i s i s a sample s t r i n g " words = s . s p l i t ( " " ) s i z e = words . s i z e res = 0.0 w o r d s . e a c h do | e l e m | r e s = r e s + elem . s i z e end medium = r e s / s i z e p u t s medium Информатика 10-11 классы
  • 3. Разбор задач Динамическое программирование Функции Задачи Разбор задач: слова, длиннее следнего Найдём среднюю длину строки в два этапа: 1 Посчитаем среднюю длину слова. 2 Найдём слова, чья длина больше средней. ... пропустим кусок, связанный с п.1. Listing 2: Длиннее среднего ... medium = r e s / s i z e w o r d s . e a c h do | e l e m | p u t s e l e m i f ( e l e m . s i z e > medium ) end Информатика 10-11 классы
  • 4. Разбор задач Динамическое программирование Функции Задачи Динамическое программирование: принципы Решая предыдущие задачи, мы столкнулись с тем, что: 1 Очень удобно разбивать задачу над несколько небольших подзадач. 2 Зачастую, одна программа использует результаты, полученные другой программой. 3 А в некоторых случаях подзадачи нескольких задач совпадают. Такой подход называется динамическим программированием. Динамическое программирование способ решения сложных задач путём разбиения их на более простые подзадачи (Википедия). Информатика 10-11 классы
  • 5. Разбор задач Динамическое программирование Функции Задачи Инструменты Для разбиения программы на подпрограммы в языках программирования существует специальный инструмент, называемый функциями. В общем случае, функция это небольшая программа, реализующая парадигму чёрного ящика. Парадигма чёрного ящика предлагает разделение сущности на составляющие. Каждая составляющая имеет вход, сам, собственно, чёрный ящик и выход. Чёрный ящик универсальная концепция, применимая не только в программировании, но и в жизни. Информатика 10-11 классы
  • 6. Разбор задач Динамическое программирование Функции Задачи Пример чёрного ящика Рис.: Источник: http://g0l.ru/blog/imgs/gai/caricatura.jpg Информатика 10-11 классы
  • 7. Разбор задач Динамическое программирование Функции Задачи Функции Как уже было указано, простейшей реализацией чёрного ящика является функция. Функция подпрограмма внутри программы, выполняющая некоторую функцию и имеющая входные данные, тело (код) функции, выходные данные (что функция возвращает) Приведём простейший пример функции: перевод из градусов Цельсия в градусы по Кельвину. Listing 3: Цельсии в Кельвины def c e l s i u s _ t o _ k e l v i n ( c e l s _ v a l u e ) kelv_value = cels_value + 273.15 return kelv_value end sample = c e l s i u s _ t o _ k e l v i n (20) p u t s "20 by C e l s i u s = #{sample } by K e l v i n " Информатика 10-11 классы
  • 8. Разбор задач Динамическое программирование Функции Задачи Функция в разрезе def название_функции(аргументы) В начале задания функции пишется ключевое слово def (англ. definition определение). Затем пишется название функции. Оно должно понятным и на английском языке без пробелов и спецсимволов. Далее, в скобках перечисляются входные данные, которые называются аргументы функции. Аргументы функции это несколько переменных, которые нужны функции для её вычислений. В конце функции пишется ключевое слово return (англ. возврат). После return указывается, что возвращает функция. В самом конце ставится end. В нашем случае функция возвращала значение температуры в градусах по Кельвину. Информатика 10-11 классы
  • 9. Разбор задач Динамическое программирование Функции Задачи Функции для чайников Рис.: Источник: http://www.dialektika.com/ Информатика 10-11 классы
  • 10. Разбор задач Динамическое программирование Функции Задачи Ещё немного о функциях Для вызова функции достаточно написать её имя, а затем перечислить в скобках аргументы. Например puts celsius_to_kelvin(20) выведет на экран значение 20 градусов цельсия по шкале Кельвина. Можно и через дополнительную переменную: Listing 4: Функции ... c e l s i u s _ v a l u e = 20 in_kelvin = celsius_to_kelvin ( celsius_value ) puts in_kelvin Информатика 10-11 классы
  • 11. Разбор задач Динамическое программирование Функции Задачи И ещё чуть-чуть Рис.: Источник: где-то в Интернетах Информатика 10-11 классы
  • 12. Разбор задач Динамическое программирование Функции Задачи И ещё чуть-чуть Важно! Все переменные внутри функции локальные. То есть, если в программе есть переменная res, внутри функции её НЕ БУДЕТ. И наоборот. Такая программа вызовет ошибку, так как переменная внутри функции не определена: Listing 5: Ошибка с локальными переменными elem = 5 def v e r y _ u s e f u l _ f u n c t i o n ( s o m e t h i n g ) p u t s elem puts something r e t u r n elem end Информатика 10-11 классы
  • 13. Разбор задач Динамическое программирование Функции Задачи Задача о палиндромоме Палиндромом называют слово (или буквосочетание), одинаково читающееся в обоих направлениях: топот, А роза упала на лапу Азора (Фет). Задача: вывести на экран все палиндромы–слова, встречающиеся в строке. Решим задачу методом динамического программирования: 1 Разделим предложение на слова. 2 Проверим каждое слово, является ли оно палиндромом (функция). 3 Если является, то выведем его на экран. Информатика 10-11 классы
  • 14. Разбор задач Динамическое программирование Функции Задачи Задача о палиндромоме Listing 6: Задача о палиндроме def palindrome ?( s ) i f ( s == s . r e v e r s e ) return true else return f a l s e end end s = " I s a i d to madam a f t e r p a r t y : W W O " words = s . s p l i t ( " " ) w o r d s . e a c h { | word | p u t s word i f p a l i n d r o m e ? ( word ) } Информатика 10-11 классы
  • 15. Разбор задач Динамическое программирование Функции Задачи Числа Фибоначчи Выведем на экран первые N чисел Фибоначчи. Listing 7: Числа Фибоначчи def f i b o n a c c i ( n ) a0 = 1 a1 = 1 a_new = 0 for i in 2 . . n a_new = a0 + a1 a0 = a1 a1 = a_new end r e t u r n a1 end n = 5 for i in 0 . . n p u t s "#{ i } число Фибоначчи = #{f i b o n a c c i ( i )} " end Информатика 10-11 классы
  • 16. Разбор задач Динамическое программирование Функции Задачи References Все презентации доступны на http://school.smirik.ru! Вопросы, предложения, д/з: smirik@gmail.com Информатика 10-11 классы