Практикум для изучения дисциплины «Основы программирования»



Pdf көрінісі
бет28/81
Дата08.07.2020
өлшемі1,55 Mb.
#74978
түріПрактикум
1   ...   24   25   26   27   28   29   30   31   ...   81
Байланысты:
А.А. Тюгашев

ЗАМЕЧАНИЕ 
Поскольку вызов процедуры требует некоторых затрат времени процессора и 
памяти, иногда целесообразна замена некоторых процедур малого размера так 
называемыми  встроенными  (inline)  функциями.  Фактически,  процедура 
превращается  в  дублирующиеся  в  нескольких  местах  блоки  команд,  что 
позволяет повысить скорость исполнения программы. 
Иногда  в  языках  программирования  используются  так  называемые 
замыкания —  фактически,  вспомогательные  функции,  определяемые  и 
используемые  внутри  родительской  функции  и  использующие  ее 
локальные  переменные,  а  не  только  свои  переменные-параметры.  В 
программе замыкание выглядит как функция, находящаяся целиком в теле 
другой  функции.  При  этом  вложенная  функция  содержит  ссылки  на 
переменные внешней. Каждый раз при выполнении родительской функции 
происходит  создание  нового  экземпляра  внутренней  функции  с  новыми 
ссылками  на  переменные  внешней  функции.  При  этом  ссылки  на 
переменные  внешней  функции  действительны  до  тех  пор,  пока  работает 
вложенная функция, даже если внешняя функция закончила работу. 
Пример на языке PHP: 
function outer($x) //Определение внешней функции 

        
$y=2; //Локальная переменная внешней функции 


50 
 
        
$inner=function ($a) use ($x, $y) //Определение внутренней 
функции  
        { 
                
$b=4; //Локальная переменная внутренней функции 
                
/* А дальше складываются переменные внутренней и 
                 
* внешней функций, как будто все они локальные 
                 
* переменные внутренней функции 
                 */ 
                $res=$x+$y+$a+$b; 
                
echo $res; //Результат 10 в нашем примере. 
        }; 
        
$inner(3); //Вызов внутренней функции 

outer(1); 
Механизм  замыканий  тесно  связан  с  лямбда-функциями  (безымянными 
функциями, 
использующими 
текущий 
контекст 
программы). 
Первоначально  они  нашли  широкое  применение  в  функциональном 
программировании (языки Лисп — см. соответствующий раздел настоящей 
книги, Хаскелл, Scheme), но затем получили распространение и в языках 
императивной парадигмы (Ruby, PHP, Питон и др.). 
Пример на языке Питон: 
(lambda x: x*2)(3) →  6 
Контрольные вопросы и упражнения 
3. 
Как выглядит императивная программа? 
4. 
В чем назначение номеров строк в программе? В чем назначение меток? 
5. 
Что такое процедурная и декларативная секции программы? 
6. 
Что такое линейная программа? Приведите примеры. 
7. 
В чем состоят функции и какова структура оператора присваивания? 
8. 
В чем заключается назначение и какова структура условного оператора? 
9. 
В чем заключается назначение, каковы варианты и структура оператора 
выбора? 
10. 
Каким  образом  можно  организовать  повторение  одних  и  тех  же 
действий в программе? 
11. 
Что  такое  рекурсия?  В  чем  назначение  граничного  условия  в 
рекурсивных программах? 
12. 
Что  такое  итерация?  В  чем  преимущества  и  недостатки  итерации  по 
сравнению с рекурсией? 


51 
 
13. 
Какие 
виды 
операторов 
циклов 
существуют 
в 
языках 
программирования? 
14. 
В  чем  заключаются  особенности  цикла  ПОКА?  Приведите  пример 
применения. 
15. 
В  чем  заключаются  особенности  цикла  ДО?  Приведите  пример 
применения. 
16. 
В  чем  заключаются  особенности  цикла  ДЛЯ?  Приведите  пример 
применения. 
17. 
В чем заключаются особенности цикла ДЛЯ … ИЗ? Приведите пример 
применения. 
18. 
В  чем  заключаются  особенности  цикла  ПОВТОР  N  РАЗ.  Приведите 
пример применения. 
19. 
В чем заключается теорема Бома —Джакопини? 
20. 
В  чем  заключается  основная  идея  структурного  программирования? 
Согласны ли вы с ней? 
21. 
Какие  существуют  дополнительные  виды  операторов  управления  в 
программах? Приведите примеры их использования. 
22. 
Зачем нужно повторное использование кода? 
23. 
В  чем  заключается  принцип  встраиваемых  функций  (inline).  Каковы 
условия их применения? Приведите пример. 
24. 
Что  такое  исключения  в  программах?  Зачем  нужен  механизм 
исключений? Приведите пример использования механизма исключений. 
25. 
Какие  виды  исключений  в  программах  вы  знаете?  Какие 
альтернативные  способы  обработки  нештатных  ситуаций  можете 
предложить? 
26. 
Что  такое  замыкание?  Всегда  ли  создается  экземпляр  замыкания  при 
выполнении  родительской  функции?  Существует  ли  связь  между 
замыканиями и лямбда-функциями? 
Структуры данных в программировании 
Программы  =  Алгоритмы  +  Структуры 
данных. 
Никлаус Вирт 
В  этой  главе  пойдет  речь  о  таком  важном  аспекте  современных 
информационных  технологий,  как  структуры  данных  в  языках 
программирования.  Это,  если  можно  так  выразиться,  оборотная,  но 
необходимая сторона медали. Действительно, хотя алгоритмы определяют, 


52 
 
как и в каком порядке происходит обработка, структуры данных должны 
четко  описывать,  что  именно  обрабатывается, —  и  на  это  описание 
затрачивается  значительная  часть  усилий  программиста.  И  если,  как 
говорит  Никлаус  Вирт,  программы —  это  алгоритмы  плюс  структуры 
данных,  в  языках  программирования  должны  быть  средства  описания 
алгоритмов и средства описания данных.При этом то, насколько удобно и 
эффективно  можно  описать  данные,  зависит  от  встроенных  в  язык 
программирования возможностей.  
Некоторые языки программирования требуют, чтобы до их использования 
все переменные, аргументы и возвращаемые значения функций и процедур 
были  объявлены  с указанием  типа  (Алгол,  Ада,  Паскаль,  С/C++). Другие 
(Лисп,  РАПИРА,  PHP)  этого  не  требуют,  переменная  в  них  приобретает 
тип  в  зависимости  от  первого  присвоенного  ей  значения.  При  этом  в 
большинстве  языков  программирования  переменные  могут  иметь  только 
один  тип  во  все  время  их  существования.  Но  в  некоторых  тип  может 
меняться  во  время  исполнения  программы.  В  первом  случае  говорят  о 
статической, во втором — о динамической типизации
Языки  программирования  могут  быть  как  с  явной,  так  и  с  неявной 
системой  типов.  В  первом  случае  четко  фиксируется,  к  какому  типу 
относится  та  или  иная  переменная  или  константа,  во  втором  об  этом 
отдельно речь не идет, тем не менее данные обычно обрабатываются по-
разному. И у первого, и у второго подхода имеются как достоинства, так и 
недостатки.  Динамическая  неявная  типизация  расширяет  возможности 
использования  переменных  и  избавляет  программиста  от  хлопот, 
связанных  с  объявлением  и  контролем  соответствия  типов.  Кроме  того, 
данный  подход  позволяет  создавать  более  универсальные  и  проще 
интегрируемые программные модули. Однако это требует от программиста 
большей  ответственности,  поскольку  во  время  выполнения  программы 
возможны  неожиданности  вроде  попыток  перемножить  две  строки  или 

Достарыңызбен бөлісу:
1   ...   24   25   26   27   28   29   30   31   ...   81




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет