Главная » Просмотр файлов » И.Г. Головин, И.А. Волкова - Языки и методы программирования

И.Г. Головин, И.А. Волкова - Языки и методы программирования (1160773), страница 3

Файл №1160773 И.Г. Головин, И.А. Волкова - Языки и методы программирования (И.Г. Головин, И.А. Волкова - Языки и методы программирования) 3 страницаИ.Г. Головин, И.А. Волкова - Языки и методы программирования (1160773) страница 32019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

Далее объявляется функция main, с вызова которой начинаетсявыполнение программы на С. В теле этой функции объявлены пере­менные current (для ввода очередного элемента последовательности)и count (для хранения числа элементов). Следующий далее операторцикла while соответствует подготовительному шагу и вводит в мас­сив Input всю входную последовательность. Функция getchar вводитодин символ из входной последовательности.Заметим, что в языке С присваивание «=» является операцией.Эта операция выполняется так же, как и оператор присваиванияв классических ИЯП, но отличается от последнего тем, что при­своенное значение является одновременно и значением операцииприсваивания.

Таким образом, операция присваивания не тольковычисляет значение (как и любая другая операция), но и меняетзначение переменной из своей левой части. Такие операции назы­ваются операциями с побочным эффектом. Как и другие, операцияприсваивания может комбинироваться с другими операциями в вы­ражении.В нашем примере выражение в заголовке цикла(current = getcharO) !=EOFвызывает функцию getchar и затем присваивает ее значение перемен­ной current, после чего сравнивает это же значение (т. е. введенныйсимвол) с признаком конца ввода EOF (заметим, что EOF — это неособое значение символа, а лишь признак конца, вырабатываемыйдрайвером ввода операционной системы).

Если значение введенногосимвола не совпадает с признаком конца, то цикл продолжается.Отметим, что операция присваивания — это не единственнаяоперация с побочным эффектом. Так операция ++ в выраженииcount++ обладает побочным эффектом, состоящим в увеличениина 1 значения переменной count, а само значение операции равнозначению count до выполнения этой операции. Поэтому оператор11Input[count++] = current;как присваивает значение current очередному элементу массива, таки увеличивает значение счетчика count на 1.Аналогично операция — в выражении i— уменьшает значение iна единицу.В случае если символов слишком много, то в специальный каналвывода сообщений об ошибках (stderr) функция fprintf выво­дит текст "Слишком много символов".

После этого выполнениепрограммы завершается оператором return ] (возврат из функцииmain).Последний цикл for выводит элементы последовательности, на­чиная с конца. Так как индексы элементов массива всегда начинаютсяс 0, то последний введенный элемент будет иметь индекс count-1, апервый — 0, поэтому параметр цикла i последовательно уменьшаетсяс count-1 до 0.Последний оператор программы — возврат из функции main.Объектная парадигмаОбъектная парадигма основана на понятии объекта. Объектобладает состоянием и поведением.

Поведение состоит в посылкесообщений себе и другим объектам. Для каждого вида сообщения су­ществуют «обработчики», которые могут модифицировать состояниеобъекта и посылать сообщения другим объектам. Объекты с одина­ковым поведением и набором состояний объединяются в классы.Между классами могут существовать следующие отношения:• включение — «объект—подобъект» — включение объекта класса Xв объект другого класса Y, т.е. говоря т, ч то объект класса Y владеетобъектом класса X;• наследование — «суперкласс — подкласс» — объект подклассаDerived обладает всеми свойствами объекта суперкласса Base, атакже, возможно, дополнительными свойствами (специфичнымидля класса Derived).

Таким образом, все объекты класса Derivedодновременно принадлежат и классу Base, по не наоборот;• ссылка — объект класса w содержит (но не владеет) ссылку наобъект класса Ref.Также существуют и другие отношения.Объектная парадигма достаточно просто сочетается с императив­ной парадигмой. Состояние описывается набором переменных, аобработчики сообщений представляют собой процедуры или функ­ции, имеющие доступ к состоянию.

Посылка сообщения сводится квызову соответствующего обработчика.В результате большинство современных языков индустриальногопрограммирования сочетает в себе обе парадигмы. Мы будем гово­рить об объектно-императивной парадигме программирования.12Одно их основных достоинств объектного подхода — это воз­можность создания достаточно гибких и универсальных иерархийклассов, которые могут быть использованы во многих прикладныхзадачах почти без изменения.

Неслучайно все индустриальныеобъектно-ориентированные языки программирования (ООЯП)включают в себя большой набор классов из стандартных библиотек.В случае если этих классов недостаточно, то ООЯП позволяют срав­нительно легко (по сравнению с чисто императивной парадигмой)разрабатывать специализированные классы либо «с нуля», либо наоснове стандартных классов.Посмотрим, как на объектно-ориентированных языках решаетсязадача о реверсировании входной последовательности. Сначала рас­смотрим решение на языке С#.Все рассуждения из предыдущего пункта по ходу решения за­дачи остаются справедливыми и здесь (ведь объектная парадигма вязыке C# расширяет, но не отменяет императивную).

Отличие объ­ектного подхода в том, что здесь уже имеются готовые классы, по­зволяющие быстро решить поставленную задачу. В языке C# есть нетолько понятие массива, но и набор контейнеров как универсальных(вектор, список и т.д.), так и специализированных (динамическаястрока произвольной длины). Используем строки и массивы языкаС#:using System;class Program{static void Main(string[] args){string s = Console.In.ReadToEnd();char[] seq = s .ToCharArray();Array.Reverse(seq) ;Console.Write(seq);}}Первая строка программы сообщает об использовании стандарт­ной библиотеки System, в которой нам понадобятся классы Consoleдля ввода-вывода и Array для операций с массивами.Далее следует объявление класса Program, содержащего описаниеединственной функции Main.

Эта функция играет такую же роль, чтоодноименная функция в языке С: с ее вызова начинается выполнениеконсольных программ.В первой строке мы объявляем строку s и сразу же вводим в неецеликом всю входную последовательность. Класс Console обладаетобъектом In класса TextReader, представляющим собой стандарт­ный канал ввода. Объекты этого класса позволяют ввести целикомвсю входную последовательность. Заметим, что мы уже не нуждаемся13во введении ограничения на максимальную длину входной строки.Объем ввода лимитируется только размерами свободной виртуальнойпамяти, доступной процессу.Далее из введенной строки с помощью функции ToCharArrayконструируется массив из символов (char [] seq), составляющихстроку.

Функция Reverse из класса Array обращает массив (т.е.решает нашу задачу). После чего осталось только вывести реверси­рованный массив.Теперь можно сделать несколько очевидных выводов. Во-первых,объектное решение и проще для понимания, и короче. Во-вторых,объектное решение позволяет обрабатывать последовательностибольшей длины. Конечно, мы можем и в первом решении на языкеС отказаться от ограничения и использован, либо динамическиймассив, либо двунаправленный список и тому подобное. Однакотакое решение существенно длиннее и сложнее для понимания, чемпростой вариант.

Причина в том, что в императивных языках типа Сдостаточно сложно создавать гибкие и одновременно универсальныеконтейнеры. В каждом конкретном случае приходится создавать такиесущности с нуля. Это одна из причин популярности ООЯП. При про­граммировании в объектном стиле существенно проще использоватьуже готовые объекты. Да и создавать новые объекты проще, чем вимперативном языке.Однако императивный стиль программирования тоже обладаетнекоторыми достоинствами. Например, в приведенной программена языке C# не совсем очевиден тот факт, что оперативная памятьиспользуется в ней расточительно.

Входная последовательностьхранится в двух экземплярах: в строке s первый экземпляр, а в мас­сиве seq — второй. Конечно, первое решение все равно хуже, но вимперативном стиле можно разработать довольно сложное решение,которое будет работать с памятью лучше, чем объектное решение наязыке С#. Однако легкость программирования на ООЯП в большин­стве случаев перевешивает.

Кроме того, и па языке типа C# можнопрограммировать в императивном стиле. И пашем примере можноиспользовать тот факт, что строки, как и массивы, допускают индек­сирование, и сделать вывод в стиле языка С:using System;class Program{static void M ain(string[] args){string s = Console.In.ReadToEnd() ;for (int i = s.Length-1; i>=0;i— >Console.Write (s [i]);}14}Заметим, что некоторые ООЯП, например C++, в дополнение кклассическому объектному механизму обладают весьма мощными ивыразительными средствами обобщенного программирования.Функциональная парадигмаОсновные понятия функциональных языков — функция и вы­ражение.

Выражение — это комбинация вызовов функций. На­ряду с большим числом стандартных (встроенных в язык) функ­ций программист может определять свои функции. Определениеновой функции включает в себя имя функции, список аргументови выражение—тело функции. Вызов функции состоит из именифункции и списка выражений — фактических параметров.

Каждыйиз фактических параметров соответствует аргументу в определениифункции.Основная операция — вызов функции. При вызове функциисначала вычисляются выражения — фактические параметры, а затемих значения подставляются вместо соответствующих им аргументовв выражение—тело функции. Наконец, вычисляется значение тела,которое и будет значением вызова.Приведем одно из решений нашей задачи на языке Лисп [34] —первом языке программирования, в котором была реализованафункциональная парадигма.Будем использовать один из самых популярных диалектов Ли­спа — Коммон Лисп.Прежде чем рассматривать решение, сделаем несколько заме­чаний о представлении программ на языке Лисп. Вызов функцииимеет вид(имя-функции список-фактических-параметров)Например,(+2 3)Определение функции имеет вид(defun имя-функции (список-имен-аргументов) выраже­ние)Например,(defun plusl (х) (+ х 1))Обращение к стандартной функции ввода следующее:(read)Однако эта функция возвращает не последовательность литер, аболее сложную структуру — Лисп-выражение.

Характеристики

Тип файла
PDF-файл
Размер
3,27 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6547
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее