- •Средства разработки программ на Паскале
- •Структура Паскаль-программы
- •Комментарии
- •Директивы компилятора
- •Идентификаторы
- •Переменные и типы данных
- •Константы
- •Неименованные константы
- •Нетипизированные константы
- •Типизированные константы
- •Простейшие операторы
- •Метки и безусловный переход
- •Ввод и вывод: консоль
- •Ввод с консоли
- •Вывод на консоль
- •Форматный вывод
- •Пример простейшей программы на языке Pascal
- •Типы данных
- •Порядковые типы данных
- •Стандартные подпрограммы, обрабатывающие порядковые типы данных
- •Типы данных, относящиеся к порядковым
- •Вещественные типы данных
- •Конструируемые типы данных
- •Операции и выражения
- •Совместимость типов данных
- •Приведение типов данных
- •Ветвления, массивы, циклы
- •Массивы
- •Операторы циклов
- •Сортировки массивов
- •Быстрая сортировка
- •Символы и строки
- •Неименованные константы
- •Нетипизированные константы
- •Типизированные константы
- •Операции
- •Стандартные функции
- •Стандартные функции и процедуры обработки строк
- •Операции со строками Сравнения
- •Обращение к компонентам строки
- •Конкатенация
- •Множества
- •Описание множеств
- •Множество-константа Неименованная константа
- •Нетипизированная константа
- •Типизированная константа
- •Операции с множествами
- •Представление множеств массивами
- •Представление множеств линейными массивами
- •Представление множеств битовыми массивами
- •Примеры использования символов, строк и множеств
- •Что такое файл
- •Когда нужно использовать файлы
- •Разновидности файлов
- •Описание файлов
- •Текстовые файлы Назначение файла
- •Открытие файла
- •Закрытие файла
- •Считывание из файла
- •Запись в файл
- •Пробельные символы
- •Пример использования файлов
- •Решение
- •Реализация
- •Изменение реакции на ошибку
- •Описание записей
- •Задание записей константой
- •Доступ к полям
- •Оперирование несколькими полями
- •Вложенные операторы with
- •Запись с вариантной частью
- •Описание записи с вариантной частью
- •Механизм использования записи с вариантной частью
- •Бинарные файлы
- •Типизированные файлы
- •Описание типизированных файлов
- •Назначение типизированного файла
- •Открытие и закрытие типизированного файла
- •Считывание из типизированного файла
- •Поиск в типизированном файле
- •Запись в типизированный файл
- •Поиск в нетипизированном файле
- •Запись и чтение
- •Подпрограммы обработки директорий
- •Применимость подпрограмм обработки файлов
- •Процедуры и функции Подпрограммы
- •Список параметров
- •Возвращаемые значения
- •Вызов подпрограмм
- •Способы подстановки аргументов
- •Параметр-значение Описание
- •Механизм передачи значения
- •Параметр-переменная Описание
- •Механизм передачи значения
- •Параметр-константа Описание
- •Механизм передачи значения
- •Области действия имен Разграничение контекстов
- •Побочный эффект
- •Совпадение имен
- •Нетипизированные параметры
- •Явное преобразование типа
- •Совмещение в памяти
- •Открытые параметры
- •Открытые массивы
- •Рекурсивные подпрограммы Динамические структуры данных
- •Операции
- •Очередь
- •Операции
- •Рекурсия
- •Рекурсивные подпрограммы
- •Пример рекурсивного алгоритма
- •Алгоритм решения
- •Стековая организация рекурсии
- •Ограничение глубины рекурсии
- •Замена рекурсивных алгоритмов итеративными
- •Пример сравнения рекурсивного и нерекурсивного алгоритма
- •Рекурсивный алгоритм
- •Реализация рекурсивного алгоритма
- •Полный перебор с отсечением
- •Нерекурсивный алгоритм
- •Реализация нерекурсивного алгоритма
- •Иллюстрация
- •Эффективность
- •Быстрая сортировка2
- •Алгоритм Быстр
- •Реализация алгоритма Быстр
- •Эффективность алгоритма Быстр
- •Адреса и указатели. Списочные структуры данных Статически выделяемая память
- •Разыменование
- •Присваивания
- •Сравнения
- •Динамически распределяемая память
- •Динамическое выделение памяти Типизированные указатели
- •Нетипизированные указатели
- •Динамическое освобождение памяти Типизированные указатели
- •Нетипизированные указатели
- •Списочные структуры
- •Структура списков
- •Описание списков
- •Оперирование элементами списка Хранение списка
- •Обращение к элементам списка
- •Создание списков
- •Просмотр элементов списка
- •Удаление элементов списка
- •Перестройка списков
- •Примеры перестройки линейных списков
- •Реализация
- •Создание дружественного интерфейса
- •Заставка
- •Ввод информации
- •Приглашения
- •Вывод информации
- •Технология программирования и отладка Советы по технологии написания быстро отлаживаемых программ
- •Имена, имена, имена...
- •Кусочки, куски и кусищи...
- •Спасение утопающих - дело рук самих утопающих
- •Отладка и тестирование
- •Поиск и исправление ошибок
- •Правила составления тестов
- •Оптимизация программ
- •Учебники к курсу
Оптимизация программ
Процесс оптимизации уже написанной программы начинается только после того, как вы убедились, что ваша программа работает правильно. Стараться оптимизировать неправильную программу бессмысленно, правильнее она от этого не станет, поскольку оптимизация - это замена некоторых программных кусков эквивалентными им с точки зрения результата, но более экономичными с точки зрения выполнения.
Основная часть процесса оптимизации программы приходится на этап выбора наилучшего алгоритма. Однако даже при правильном выборе алгоритма неграмотное кодирование может привести к неэффективно работающему результату. Чтобы такого не происходило, внимательнее относитесь к тому, что и как вы пишете, реализуя выбранный вами алгоритм. Не всегда те действия, которые кажутся оптимальными с точки зрения логики алгоритма, стоит пытаться запрограммировать "в лоб".
Если же алгоритм выбран и запрограммирован "почти" правильно, можно попытаться улучшить его, внося изменения, сокращающие его работу.
В первую очередь стоит оптимизировать часто повторяющиеся куски программы, то есть циклы. Старайтесь не допускать ситуаций, когда в теле цикла раз за разом производятся одни и те же вычисления, никак не изменяющие состояние переменных. И вообще, избегайте вносить в повторяющиеся участки "тяжелые" операции.
Например, ясно, что из двух эквивалентных кусков
k:= 0;
for i:= 1 to b*100 do
k:= k+i+1000*b+100*(b div 2);
и
a:= 1000*b+100*(b div 2);
k:= 0;
for i:= 1 to b*100 do k:= k+i+a;
второй является и более быстрым (особенно если b = 10000), и более компактным, чем первый.
Лишние вычисления, лишние действия с файлами или структурами, лишние пересылки элементов из одной ячейки памяти в другую (и список этот далеко не полон!) - все это снижает эффективность программы. Старайтесь помнить о том, что лаконичность приветствуется всегда и везде, а особенно в программировании.
Успехов вам в написании красивых и полезных программ!
Учебники к курсу
Андреева Т.А. Программирование на языке Pascal Интернет-университет информационных технологий - ИНТУИТ.ру, 2006
Зыков С. В. Введение в теорию программирования Интернет-университет информационных технологий - ИНТУИТ.ру, 2004
Анисимов А.Е., Пупышев В.В. Сборник заданий по основаниям программирования БИНОМ. Лаборатория знаний, Интернет-университет информационных технологий - ИНТУИТ.ру, 2006
Терехов А.Н. Технология программирования БИНОМ. Лаборатория знаний, Интернет-университет информационных технологий - ИНТУИТ.ру, 2007
Вирт Н. Алгоритмы и структуры данных М.: Мир,1989
Кнут Д. Искусство программирования для ЭВМ. В 3 т., любое издание http://lib.ru/CTOTOR/KNUT, http://pascal.sources.ru/docs/knuth3.htm
Рейнгольд Э., Нивергельд Ю., Део Н. Комбинаторные алгоритмы: теория и практика М.: Мир, 1980
Дейкстра Э. Дисциплина программирования М.: Мир, 1978. http://lib.ru/CTOTOR/DEJKSTRA
Майерс Г. Искусство тестирования программ М., Финансы и статистика, 1980
Майерс Г. Надежность программного обеспечения М.: Мир, 1980
Поттосин И.В. О критериях добротности программ. - В сб.: Системная информатика Новосибирск, 1998
Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль М.: Наука, 1987
Алкок Д. Язык Паскаль в иллюстрациях/Пер. с англ М.: Мир, 1991
Зуев Е.А. Язык программирования Turbo Pascal 6.0 М.: Унитех, 1992
Фаронов В.В. Турбо Паскаль. В 3-х кн. Кн. 1. Основы Турбо Паскаля М.: МВТУ - ФЕСТО ДИДАКТИК, 1992
Фаронов В.В. Турбо Паскаль 7.0. Начальный курс М.: Нолидж, 1997. http://pascal.dax.ru/files/books/TurboPascal.zip
Белецкий Я. Турбо Паскаль с графикой для персональных компьютеров М.: Машиностроение, 1991
Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0 М.: ДИАЛОГ-МИФИ, 1996
Фаронов В.В. Паскаль и Windows М.: МВТУ - ФЕСТО ДИДАКТИК, 1992
Фаронов В.В. Практика программирования М.: МВТУ - ФЕСТО ДИДАКТИК, 1993. http://borlpasc.narod.ru/docym/farpract/oglav.htm
Фаронов В.В Турбо Паскаль. В 3-х кн. Кн. 2. Библиотека Turbo Vision М.: МВТУ - ФЕСТО ДИДАКТИК, 1992
Зубов В.С. Программирование на языке Turbo Pascal (версии 6.0 и 7.0). Справочник по процедурам, функциям, диагностическим сообщениям М., 1997
И.И.Дериев, С.В.Токарь Справочник по процедурам и функциям Borland Pascal with Objects 7.0 К.: Диалектика, 1993