Лекции по курсу системы программирования.

По основам программирования

Учебно-методическое пособие

для студентов высших учебных заведений, обучающихся

по направлениям экономика, менеджмент

Нижний Новгород


Малыженков В.И. Информатика и вычислительная техника. Курс лекций по основам программирования: Учебно-методическое пособие – Нижний Новгород: Изд-во Нижегородского госуниверситета, 2011. – 52 с.

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

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

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

Пособие предназначено для обучения студентов экономического факультета. Кроме того, оно может быть полезно абитуриентам университета и всем, кто приступает к изучению программирования.

Рецензент: доцент, к.т.н. Громницкий Владимир Семенович

© Малыженков В.И., 2011

© Нижегородский государственный

университет им. Н.И. Лобачевского, 2011

Введение………………………………………………………………….………..4

Глава1. Основы компьютерной грамотности………………...…………………5

1. Что такое компьютер?.................................................................................5

2. Базовая конфигурация ПК………………………………………………..5

3. Операционные системы (ОС)………………………………………….…7

4. Файловая система MS DOS и WINDOWS……………………………….8

5. Структура файловых систем………………………………….…………10

Глава 2. Обработка данных в среде алгоритмических языков……………..…11

1. Парадигмы программирования………...………………………………11

2. Этапы решения задач на компьютере…………………………………..11

3. Общее описание языков программирования (Basic, Pascal)…………..16

3.1 Алфавит………………………………………………………….…16

3.2 Описание данных………………………………………………….17

3.2.1. Типы данных…………….……………………………….17

3.2.2 Константы…………………………………………………17

3.2.3 Переменные…………………………………………...…..19

3.2.4 Функции…………………..……………………………….20

3.3 Выражения…………………………………………………………21

3.3.1. Арифметические выражения……………………………21

3.3.2.Логические выражения…………….……………………..22

3.3.3 Строковые выражения………………………..…………..23

3.4.Основные исполняемые операторы языков……………………...23

3.4.1 Оператор присваивания………………………………….24

3.4.2 Условный оператор………………………………………24

3.4.3 Оператор выбора по ключу…………………..………….25

3.4.4 Операторы цикла………………...……………………..27

3.4.5 Оператор безусловного перехода…………...……….30

3.4.6 Операторы ввода – вывода……………………………30

3.5.Структура программного модуля……………………………...…31

4. Пример решения задач с модульным подходом……………………….32

5. Сложные типы данных………………...………………………………..35

6. Обработка файлов данных…………………………………..………….38

6.1. Общие понятия……………………..……………………………..38

6.2. Основные операции по обработке файлов………..…………….39

6.3 Операторы (процедуры) обработки файлов в Basic и Pascal…...40

7. Принципы структурного программирования…………..……………..44

8. Описание простейших модулей………………………………………..46

9. Пример составления программы в соответствии с принципами структурного программирования………………………………………47

Литература……………………………………………………………………...51

Введение

Термин «информатика» впервые появился во Франции в начале 70-х годов и произошел от сочетания двух слов: information (информация, разъяснение) и automatique (автоматика, автоматический). Так образовалось французское слово informatique . В русском языке вместо вольного перевода этого термина как «информационная автоматика» утвердилось понятие «информация и средства её автоматической обработки». В США укоренился другое словосочетание - с omputer science – наука о компьютерах.

В нашем курсе мы будем представлять информатику как составляющую следующих компонент:


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

Глава1. Основы компьютерной грамотности.

1. Что такое компьютер?

Термин «компьютер» образован от английского слова compute – вычислять. Так же переводится и английское слово calculate , однако под compute обычно понимается выполнение более сложных операций, в том числе и логических. Так появилось два типа счетно-решающих устройств: компьютеры и калькуляторы.

С точки зрения пользователя компьютер – это комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач (обработка, хранение, передача информации).

С технической точки зрения компьютер – это любое устройство или система, способная выполнить заданную четко определенную последовательность операций (программу). Как техническое устройство компьютер в настоящее время получил самое широкое распространение и используется практически в любой сфере человеческой деятельности - от бытовой техники до астрофизических расчетов. В связи с этим классификация компьютеров очень широка - от микро- до суперкомпьютеров.

Наибольшее распространение в настоящий момент получили персональные компьютеры. Впервые они появились в 80-е годы прошлого столетия. Основными причинами широкого распространения ПК стали ориентация на одного пользователя, открытость персонального компьютера, т.е. возможность присоединения к нему дополнительных устройств в зависимости от потребностей пользователя, и дешивизна, позволившая стать ПК предметом домашнего обихода. В настоящее время в мире насчитывается более 1 миллиарда персональных компьютеров.

2. Базовая конфигурация ПК.

К основным устройствам персонального компьютера относятся:

1) системный блок;

2) монитор;

3) клавиатура;

4) “мышь”.

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

Кроме того в системном блоке находятся:

HDD, НЖМД – hard disk drive, накопитель на жестких магнитных дисках (жесткий диск, винчестер) - устройство хранения информации. Информация с HDD пересылается в оперативную память для обработки или на внешние устройства. Отличается от оперативной памяти существенно большими объемами хранимой информации, но меньшей скоростью доступа к ней. На винчестере храниться важнейшая часть программного обеспечения любого компьютера - операционная система;

FDD, НГМД – floppy disk drive – дискета, предназначенная для переноса информации с одного на другой компьютер;

CD ROM – compact disk read only memory (память только читается);

DVD –R, RW – design video drive, диски для чтения или чтения-записи. Отличаются от CD , большим обьемом хранимой информации;

Видео – и сетевые карты;

Порты и разъемы для присоединения к компьютеру различных внешних устройств (флэшки, карты памяти и др.)

Монитор.

Монитор – это устройство для просмотра вводимой и выводимой информации, диалоговое устройство.

Мониторы бывают разных типов: с ЭЛТ – электронно-лучевая трубка; ЖК – жидкокристаллические, плазменные. В настоящее время в основном используются ЖК-монитры. Мониторы обладают определенными характеристиками:

1. размер диагонали экрана (типовые 14"-21", всего от 9" до 42" (23-106см);

2. частота обновления и регенерации от 75-до 110Гц. Ниже - мигание, выше – размывание и удвоение изображение;

3. разрешение – количество пикселей на миллиметр(мин:640х480, - 1024х768 - мах:1280х1024); размер пикселя в среднем 0.18-0.25 мм, не выше 0,28;

4. ТСО-92-95-99 – Total Cost Oqupation - это классы защиты потребителя от электромагнитного излучения экрана монитора.

Клавиатура.

Клавиатура является устройством ввода информации. С помощью клавиатуры можно вводить тексты, текстовые команды и некоторые специальные команды (Esc,Ctrl и другие).

Товарищи инженеры, уже четвертый год пошел, как я взялся преподавать в . За это время у меня накопилось огромное количество примеров кода и материалов, примерно на 90 лекций . Должен сказать, что за весь период своей профессиональной деятельности (а это 24 года почти ежедневного написания кода), я никогда не подымал свой уровень программирования, как за последние годы, работая со студентами. Если раньше мне казалось, что написать кратко, сложно и внушительно - это верх мастерства, то теперь я осознал, что мой код должны понимать студенты после минимальных объяснений, иначе он никуда не годится. Я пришел к выводу, что способность эту можно и нужно распространить не только на обучающий код, но и на весь рабочий код. Более того, обучающий код не должен существенно отличаться от рабочего кода, потому, что мы учим будущих инженеров делать настоящие системы, а не учебные. А после многочисленных просьб, я решил записывать все лекции в виде скринкастов, которые сразу после завершения лекции отправляются на ютюб. За этот учебный год я планирую записать 100 лекций, из которых уже опубликованы 23 , готовы материалы еще для 67 лекций и новых 10 лекций еще в процессе подготовки.

Концепция курса

Все вы знаете, что у нас в отрасли есть существенные проблемы с фундаментальным инженерным образованием:

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

Построить курс на базе JavaScript - это конечно экспериментальная затея, но этот язык уж точно не будет лишним ни для кого в современном ИТ. У самих же JavaScript разработчиков очень часто наблюдается плохая базовая инженерная подготовка и нехватка фундаментальных знаний по структурам данных, алгоритмам, базовым абстракциям, паттернам, архитектуре, парадигмам и приемам программирования. Большинство кода, что пишется сейчас в индустрии, просто выбрасывается вскоре после создания, потом опять переписывается и опять выбрасывается. В общем, качество и знания редко требуются, разве что на собеседованиях. Выгоднее всего делать некачественный код и обслуживать его или выбрасывать код и продавать больше времени на его повторное написание. Кроме того, наша отрасль совершенно оторвалась от науки, в этом есть существенные заслуги маркетологов, потому что мы уже программируем не на языках программирования и не на абстракциях, а мы программируем на фреймворках и библиотеках, которые нам "втюхали" в красивой обертке. Мы собираем все из кубиков, часто без всякого научного осмысления и редко можем ответить на вопрос, почему мы делаем так а не иначе. Все по частям уже давным-давно написано, все можно найти в интернете, но оказалось, что одно с другим не лепится, то есть по частям оно есть, а вместе это не работает. Связывать разобщенные кусочки кода гораздо сложнее чем поодиночке их сделать. Происходит это именно из-за отсутствия системного подхода, терминологического раскола и понятийной рассинхронизации специалистов. Вместе будет работать только то, что идеологически совместимо, что базируется на общей теории и выведенных из этой теории общих стандартах. Я надеюсь, что этим курсом я сделаю хоть небольшой шаг к достижению такого важного для отрасли консенсуса.


Все материалы курса в свободном доступе на github , а лекции открытые, их можно посещать бесплатно. Каждую неделю я записываю 4 лекции. Мы проводим еще семинары и практические занятия, но они не записываются.

Структура курса

  • Базовые понятия : программные абстракции, переменные, операторы, типы данных, массивы, структуры, скалярные и ссылочные типы, отображения;
  • Основные понятия : функции, контексты и область видимости, классы и объекты, прототипы, методы, лямбды, чистые функции, побочные эффекты, замыкания, частичное применение, каррирование, композиция, функции высшего порядка, колбэки, враперы, декораторы, примеси, события, интерфейс, синглтон, итераторы, функциональные объекты, функторы, монады, работа с файлами, потоки, сокеты, мемоизация, наследование, генераторы, асинхронное программирование, чеининг, модули и зависимости, обработка ошибок, фабрики и пулы, таймеры, регулярные выражения;
  • Вспомогательные материалы : git, системы контроля версий и менеджеры пакетов, работа с консолью, тестирование, непрерывная интеграция, логирование, линтеры, оптимизация и производительность, борьба с утечками памяти, скрытые классы, мономорфные функции, дженерики, сборка мусора, управление памятью;
  • Структуры данных : коллекции, массивы и типизированные массивы, буферы, списки, стек, очередь, дек, деревья двоичные и иерархические, многомерные деревья, повороты и балансировка ветвей, множества, хешмапы, графы, развернутые списки, асинхронная очередь, автоматы, итерирование структур данных и поиск;
  • Расширенные понятия : символы, прокси, диферы, фьючеры и промисы, линзы, трансдьюсеры, async/await, коллекторы данных, асинхронная композиция, адаптеры асинхронности, асинхронные итераторы, интроспекция, рефлексия, скаффолдинг, инверсия управления и внедрение зависимостей, песочницы, слоистая архитектура, компонентный подход, слой доступа к данным, проекции данных, мониторинг файловой системы, клиент-серверная и трехзвенная архитектура, кластеризация и балансировка, проектирование протоколов, динамическая перегрузка модулей, метаданные, динамическое связывание, межпроцессовое взаимодействие;
  • Примеры кода и комплексного использования технологий: живые электронные таблицы, чат на вебсокетах, реализация языка запросов к графам, альтернативная библиотека асинхронных абстракций metasync, сравнение реализации одинаковых задач на разных парадигмах, сравнение стилей функционального программирования, примеры структуры приложений, маршрутизация обработчиков в node.js приложениях, изоляция кода в песочницах, транзакционные объекты;
  • Парадигмы программирования : императивное, структурное и неструктурное, процедурное, объектно-ориентированное, прототипное, функциональное, логическое, декларативное, асинхронное, реактивное, событийное, автоматное, обобщенное, программирование управляемое потоками данных, мультипарадигменное, метапрограммирование.

Введение.

Язык программирования – набор ключевых слов и система грамматических и синтаксических правил для конструирования операторов, состоящих из групп или строф знаков, с помощью которых человек сообщает компьютеру последовательность команд.

Специфика в том, что обозначения понятны человеку и могут быть преобразованы в последовательность машинных команд.

Классификация языков программирования:

    Неструктурный (преобразование машинных кодов на языке Assembler);

    Модульные (задачи→подзадачи →алгоритмы→функции);

    Логический подход;

    Объектно-ориентированный подход;

    Функциональный подход;

    Смешанный подход;

    Компонентно-ориентированный подход;

Транслятор – программа для перевода программы понятных человеку символов в программу машинных кодов.

Понятие формального алгоритма.

Формальный алгоритм – заранее заданная последовательность чётко определённых правил или команд для получения решения задач за конечное число шагов.

Рабочая лента – линейно-упорядоченный массив переменной длины. В каждой ячейке 1 символ.Переменная-указатель – управляющая головка, которая в любой момент времени указывает на какую-либо ячейку рабочей ленты.

Эффективность алгоритма – алгоритм или функция эффективно вычислима, если существует алгоритм правильно её вычисляющий и удовлетворяющий следующим требованиям:

    Состоит из конечного множества простых команд, для которых однозначно определён порядок исполнения;

    Вычисления должны закончиться и дать результат в конечное число шагов;

    Если аргумент принадлежит области определения, не должны приводить к результату: аргумент не принадлежит области определения.

Эффективным называется алгоритм, который допускает эффективную вычислительную реализацию.

20-е года ХХв. – машина Тьюринга (Гильберт, Черч (основа понятий рекурсивной функции), Клини, Пост, Тьюринг (описание алгоритмического процесса))

1936- выдвинута концепция автоматического устройства, способного выполнить любое мыслимое вычисление.

Абстрактная машина.

∆Фон Неймана (1945-ЭДВАК 3-хкомпонентная архитектура).

Такая ЭВМ выполняет программу, которая должна храниться в памяти, где хранятся и данные этой программы.

ЗУ и УВВ – прямой доступ в памяти.

Переменная – область в памяти.

Память – последовательность ячеек для хранения порции информации. Доступ к информации осуществляется в соответствии с адресом этой ячейки или в порядке очереди.

Классификация памяти:

    постоянная;

    оперативная = временная (v )

УУ – для считывания команд данных из памяти и общая координация команд.

АЛУ – для выполнения простейших арифметических и логических операций.

Основные этапы решения задач на ЭВМ.

    Осознание проблемы, формулировка задачи ;

    Формальная постановка задачи (формируется цель, описывается её содержание), что будет делать программа, не указывая как), анализируется характер, сущность всех величин, используемых в задаче, определяется условие, при которых она решается, результатом данного этапа является спецификация программы);

Спецификация программы точное описание того результата, который необходимо получить с помощью программы.

    Выбор или разработка метода решения задач (с учетом особенностей, метод должен привести задачу к конкретным машинным операциям);

    Разработка алгоритма решения задач (процесс обработки разбивается на отдельные относительно самостоятельные блоки);

    Разработка структур данных и архитектуры программы (начиная с проектирования архитектуры, общих структур данных);

    Перевод алгоритма на язык программирования (требуются языки высокого уровня с соответствующим транслятором в машинный код);

    Разработка системы теста, отладка и тестирование программы (поиск и устранение синтаксических и логических ошибок в программе). Синтаксический контроль выполняет транслятор, который выявляет конструкции и сочетания символов, недопустимые с точки зрения языка программирования. После устранения синтаксических ошибок проверяется логика работы в процессе её выполнения с конкретными исходными данными);

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

Этапы связаны друг с другом, но некоторые могут отсутствовать. Неудовлетворительный результат приводит к пересмотру одного или нескольких предшествующих этапов.

Критерии качества ПО.

    Функциональные возможности . (Описывает свойства ПО в части полноты удовлетворения требований пользователя. Оценка качества ПО должна начинаться с точного и формального установления предъявляемых требований и поверки соответствия ПО данным требованиям.)

    Надежность ПО – характеристика его способностей выполнять возложенные функции при поступлении запросов на их выполнение. В отличие от надежностиправильность ПО – соответствие предъявляемым требованиям, то есть различие в том, что правильность – некоторое статическое свойство, которым в соответствии со спецификацией должна обладать программа. Надежность – динамические требования к работоспособностям системы.

    Практичность:

    Простота использования;

    Модифицируемость (характер трудоемкости внесения изменений в программу при ошибках и др.)

    Сопровождаемость

    Возможность многократного использования (наличие отдельных частей, модулей и тому подобное, которые могут быть в неизменном виде или с небольшими изменениями перенесены в другие программы)

    Мобильность - набор атрибутов, относящихся к соотношению между уровнем качества функций ПО и объемом используемых ресурсов при установленных условиях. Характеризуется 2 способами: с учетом vиспользуемой памяти, быстродействия программы.

Диалоговые программы.

По способу общения программ использования прикладные программы делятся на:

    Функционирующие в автоматическом режиме;

    Диалоговые программы.

Диалог с программой может осуществляться в 2 режимах:

          Пакетном (получает все исходные данные до начала работы)

          Интерактивном (режим вопрос-ответ)

Интерфейс – система унифицированных связей, определяющих способ взаимодействия между компонентами аппаратного обеспечения вычислительной системы, между человеком и ВС и др.

Взаимодействие в интерактивном режиме по следующей схеме:

    Режим командной строки (получает параметры работы с помощью ввода команд)

    Система меню (программа получает управляющий сигнал при выборе пользователем элемента из списка, в котором перечислены все возможные варианты функционирования программы).

Программы делятся на консольные приложения и приложенияс графическим интерфейсом. При проектировании интерфейса «человек-компьютер» должны учитываться требования, призванные обеспечить эффективность взаимодействия пользователя и системы.

Требования:

    Естественный интерфейс;

    Последовательный интерфейс (каждое текущее действие пользователя должно определяться результатом предыдущего действия)

    Не избыточный интерфейс

    Интерфейс должен обеспечивать поддержку пользователя;

    Интерфейс должен быть гибким (включение функций настройки интерфейса)

Жизненный цикл программы.

Период от начальной концепции до морального устаревания.

Жизненный цикл включает следующие этапы:

    Выработка требований к системе;

    Разработка требований ПО;

    Общее проектирование;

    Детальное проектирование;

    Создание отдельных модулей;

    Тестирование отдельных модулей;

    Объединение модулей в системы;

    Выпуск системы;

    Эксплуатация сопровождения системы;

Модели создания систем.

    Каскадная (водопадная)

Возврат предыдущего этапа невозможен.

    Модель развития системы.

    Циклическая.

Способы представления алгоритма.

Свойства определённости алгоритма требуют исполнения при описании его формальных языков. Однако, степень формализации (то, насколько строгим должен быть синтаксис языка), а также представление алгоритма определяются тем, что предполагается в качестве исполнения. Формальный исполнитель субъекта или устройства, способный воспринимать и анализировать указание алгоритма, изменить в соответствии с ним своё состояние и обладающий механизмом управления, способный производить по-маловую обработку информации.

В программировании есть определенные представления алгоритмов, рассчитанные на разных исполнителей:

    Если для человека запись может быть полностью формализована, существенными являются понятность и наглядность;

    Для технических устройств важна однозначность понимания и исполнения, а также ограничение допустимых грамматических конструкций;

Формы представления алгоритмов:

    Символьная (последовательность строк, каждая из которых содержит описание 1-го или нескольких элементарных действий). Порядок выполнения алгоритма задаётся:

    1. В явном виде (указание метки последовательности);

      В неявном виде (элементарность действия определяется возможностями исполнителя).

Символьный способ основный: понятен и человеку, и ЭВМ.

    Помагословесная форма - пронумерованная последовательность строк, каждая из которых содержит описание конкретных действий на естественном языке (для человека) – алгоритмы математических вычислений над конечными числами;

Алгоритм Евклида:

        If a=b, результат a;

        If a>b, ?(a-b), a=a-b → 1) ;

        If a

    Формулы – строчная запись действий, обеспечивающих обработку числовых, символьных и логических данных.

    Псевдокод – ориентированный на человека частично-формализованный (в псевдокоде строго определены только правила записи направляющих структур) язык, позволяющий записывать алгоритм в форме весьма близкой языкам программирования высокого уровня.

Направляющие структуры псевдокода:

      Внешние направляющие алгоритма;

      Ветвление (если, то, иначе, всё)

      Цикл (пока – повторять – конец - пока)

Алгоритм Евклида:

Пока a≠b повтор

Если a>b то

Конец если

Конец пока

D.Язык программирования – искусственно-формализованный язык для ЭВМ

    Графическая (для представления отдельных элементов, используя некоторый набор геометрических фигур). Только для человека.

Наглядность

Трудоемкость

→ соединительная линия

Структурное программирование.

До середины 60-х годов теории разработки алгоритмов не существовало, а процесс разработки определялся опытом и искусством программиста. Однако по мере роста сложности программ возникла необходимость создания методологии разработки программы, которая воплотилась в виде структурного программирования. Идеи такого программирования были высказаны Дейкстрой (1965г.) В том же году итальянские математики Бом, Джакопини сформулировали теорему о структурности, лежащую в основе этого программирования.

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

В структурном программировании 3 варианта организации потока управления:

    Линейный поток (несколько функциональных блоков выполняются последовательно;

    Ветвление;

    Циклический.

Алгоритм называется структурным, если он может быть представлен последовательностью перечисленных функциональных блоков.

Особенности структурных алгоритмов.

    Понятность и простота восприятия;

    Проверяемость;

    Модифицируемость.

Структурная теорема:

Любому неструктурному алгоритму может быть поставлен ему в соответствие эквивалентный ему структурный алгоритм, любая программа может быть написана только с использованием конструкций условий и цикла.

Информация, подготовленная для определенных целей, при этом часто подразумевается определенный формат. В вычислительной технике рассматриваются 3 различных значения этого термина:

    Это объекты, отличные от команд, то есть операнды, обрабатываемые программой. Значения констант и переменных файлы данных, противоположных файлам программ. Значение термина зависит от контекста. Команды на исходном языке являются данными для компилятора. Объектный код, получаемый в результате работы компилятора, является исходными данными для загрузчика после начала исполнения. Объектный код становится программой.

    в контексте программ слово «данные» может интерпретироваться в смысле «исходные данные», в противоположность результатам работы результатам работы программы, ее выходных данных. При этом результаты одной программы могут быть данными для другой.

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

Значение переменной – данные.

Информация.

Применительно к терминам обработка информации, информационные технологии (ИТ), теория информации.

Под информацией понимается совокупность символов. Символы определяются как образы, несущие смысловую нагрузку. Некоторое количество информации может рассматриваться с 3 основных точек зрения:

    с поведенческой (создание порции информации осуществляется по некоторой причине, а получение этой информации моет привести к некоторому результату, наблюдаемому действию или мыслительной операции);

    с математико-лингвистической (порция информации может быть записана путем соотнесения ее с другой информацией, указания ее смысла и структуры)

    с физико-технической (рассматриваются физические аспекты проявления информации, ее материальный носитель, разрешающая способность и точность, с которыми они фиксируются, количество информации, которое производится, передается или принимается и так далее).

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

Программа на языке высокого уровня.

Этапы существования ПО (не жизненный цикл программы):

Подвергается трансляции (процедура перевода с языка высокого уровня на машинный язык.) В ходе трансляции может использоваться переход на промежуточный язык – кросстрансляции. в качестве промежуточного языка может использоваться язык Ассемблера.

Ассемблер – программа, осуществляющая перевод с языка ассемблера на машинный язык.

Машинный язык – язык, использующий машинные команды, записанные в формате воспринимаемом конкретным вычислительным устройством.

Язык ассемблера представляет собой мнемонимическую запись машинного языка (add-сложить).

Транслятор – программа, выполняющая процедуру трансляции. 2 вида:

    компилятор;

    интерпретатор.

    1. Компилятор – осуществляет перевод текста программы на машинный язык целиком.

Результат работы – объектный файл, содержащий программу на машинном языке и информацию о данных, используемых программой. Объектный файл обрабатывается компоновщиком (линкером) или редактором связи.

Компоновщик обрабатывает объектные файлы, разрешает внешние ссылки (делает доступным вызовы объектов функций или данных из других объектных файлов или стандартных библиотек), осуществляет необходимую подготовительную работу для последующей загрузки программы на исполнение. В случае сBorlandCмы получаем исполняемый файл (.exe).

Загрузчик программ, осуществляющих размещение исполняемого кода и данных в памяти ЭВМ и передающий управление первой исполняемой команде программы.

В случае персональных ЭВМ функции загрузчика распределены между ОС и кодом, включаемым в исполняемый файл.

Исполнение программы начинается с загрузки в регистр счетчика исполняемых команд ЦП, адреса первой исполняемой команды программы.

Устройство управления считывает по этому адресу код команды, в соответствии с ним считывает значения операндов (если они есть), передает код и операнды АЛУ, которое выполняет необходимые операции.

По завершению выполнения команды значение регистра счетчика команд увеличивается на значение длины команды, которая известна по коду операции.

Процедура повторяется до тех пор, пока не будет встречена команда stop . Исполняемая программа обычно завершается возвратом управления программе, вызвавшей данную программу (ОС).

      Интерпретатор – покомандно или построчно считывает программу на исходном языке, переводит на машинный язык и отправляет на выполнение.

Входом является программа на языке программирования. Результат – построчно выполняемая команда.

Пример машинной команды, языка высокого уровня.

Оператор goto– безусловного перехода.

Goto_«метка»;

«Метка» - идентификатор, определяющий точку в тексте программы. В языке С с помощью метки осуществляются переходы на определенный оператор или пустой оператор.

А=В+С; после компиляции

М:А=Д+Е; gotoбудет переведен вjump. В качестве операнда из программы должен быть адрес. Метка М после компиляции получит свое значение как адрес относительно начала исполняемого кода, начиная с которого после перевода на машинный язык будут записаны команды, соответствующие А=Д+Е. (М на относительную ссылку). При загрузке размещения в памяти относительная ссылка будет заменена действительным адресом (абсолютной ссылкой в каком-либо формате). После того, как в счетчик команд попадет адрес командыjump, то произойдет загрузка значения абсолютного адреса метки М в регистр счетчика команд, представляет собой безусловный переход

На оператор А=Д+Е. собственно оператор А=Д+Е приведет к появлению машинных команд: сложения, пересылке.

Интерпретатор языка командной строки.

Идентификатор строка символов, используемая для идентификации или именования некоторого элемента программы. Вид именуемого элемента зависит от языка программирования (это может быть переменная, структура данных, процедура, оператор, конструкция высокого уровня или сама программа).

Имя – обозначение объекта в программе или в системе. Имя обозначает объект независимо от его физического местоположения или адреса. Имена используются с целью их долговременного закрепления, например, за описываемым модулем (подпрограммой вычисления квадратного корня) или для удобства (человеку проще распознавать имена, чем адреса).

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

В рассмотренном примере (с goto) идентификатор используется для именования адреса, по которому размещаться оператор, который будет выполняться сразу после оператора безусловного перехода «goto».

Критерии качества программы.

Для определения качества используются следующие свойства:

    Правильность;

    Эффективность;

    Тиражируемость;

    Модифицируемость;

    Стиль программирования.

    Под доказательством правильности программы понимают формальное математическое подтверждение того, что семантика программы соответствует предъявленным требованиям, изложенным в спецификации этой программы.

Семантика – часть определения языка, касающаяся указания смысла и действия текста, составленного в соответствии с синтаксическими правилами этого языка.

Синтаксис – правила, определяющие в случае языка программирования разрешенные последовательности языковых конструкций, а также последовательность и расположение символов в программе. Синтаксические правила определяют только форму различных конструкций языка, но ничего не говорят об их смысловом содержании.

Синтаксическим анализом (парсингом) называют процесс принятия решений о том, является ли цепочка данных символов предложением данного языка и,если является, то дополнительно процесс определения синтаксической структуры введенной строки, определяемой грамматикой.

Грамматика – один из основных подходов к описанию бесконечного формального языка конечными средствами. Содержит набор правил, используемых для вывода одной строки из другой путем замены подстрок. Строки определенного языка выводятся из некоторой начальной строки путем многократного применения этих правил.

Программная спецификация – точное описание того результата, который необходимо достичь с помощью программы. Описание должно точно устанавливать что должна делать программа, не указывая как. Для программ, заканчивающих свою работу каким-либо результатом программная спецификация может иметь форму спецификации «ввода-вывода», которая описывает желаемое отображение множества входных величин в множество выходных.

Для циклических программ в которых нельзя указать точку завершения, нельзя дать простую спецификацию «ввода-вывода». В этом случае специфицируются отдельные функции, реализуемые программой в ходе циклической операции.

При доказательстве правильности типичных последовательных программ, написанных на некотором императивном процедурном языке, описание программы представляют в форме двух простых утверждений: входного и выходного. Утверждения выражают свойства определенных элементов программы и отношения между ними. Доказательство состоит в формальной демонстрации того, что семантика программы совместима с входным и выходным утверждениями. Программа решения квадратного уравнения: а,в,с – входные; х1,х2 – выходные.

Императивные и декларативные языки.

Императивные (процедурные) языки. Класс языков программирования.

Программа, написанная на процедурном языке, явно указывает способ получения желаемого результата, не определяя при этом ожидаемых свойств результата. Результат неявно задается только способом получения его при помощи определенной процедуры. Процедура получения желаемого результата имеет вид последовательности операций, и поэтому для процедурных языков характерно указание логики управления в программе и порядка выполнения операторов. В этих языках обычно присутствуют операторы присваивания, которые разрушают информацию (присваемое значение заменяет предыдущее) и также зависит от порядка выполнения. Процедурные языки тесно связаны с фон-неймановской моделью вычисления (C,Pascal,Fortran).

Императивным противопоставляют декларативные языки (Prolog).

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

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

    Надежность ПО.

Характеристика способностей системы ПО выполнять возложенные на нее функции (при поступлении требований на их выполнение). Понятие надежности ПО существенно отличается от понятия доказательства правильности программы.

Правильность – некоторое статическое свойство, которым в соответствие со спецификациями должна обладать программа.

Надежность относится к динамическим требованиям, предъявляемым системе удовлетворять требованиям.

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

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

Обеспечение качества ПО.

Процесс подтверждения высокого качества системы ПО и связанной с ней документации с целью получения гарантии, что система во всех отношениях соответствует своему назначению.

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

Стандарты программирования – система правил или соглашений, которые ограничивают форму представления программ, создаваемых конкретной организацией.

    Эффективность – с точки зрения качества ПО эффективной программа будет в соответствии с 2 взаимоисключающими критериями:

    Время выполнения;

    Объем использованной памяти;

(Даны переменные а и в. результат а=в, а в=а)

    Стиль программирования.