- •Ю.П. Чернов, о.П. Шафеева программирование для начинающих
- •1. Среда программирования turbo pascal 7.0
- •1.1. Структура меню среды
- •1.2. Правила оформления программ
- •1.3. Команды редактора тп
- •Команды удаления и вставки
- •1.4. Компиляция и исправление синтаксических ошибок
- •2. Элементы языка pascal
- •2.1. Алфавит языка
- •2.2. Константы. Идентификаторы
- •2.3. Операторы
- •2.3.1. Оператор присваивания
- •2.3.2. Оператор безусловного перехода
- •Стандартные функции
- •2.3.3. Условный оператор if
- •2.3.4. Опеpатоp варианта case
- •2.3.5. Составной и пустой операторы
- •2.3.6. Операторы цикла
- •2.4. Процедуры прерываний
- •2.5. Типизированные константы
- •2.6. Структура программы
- •2.7. Подпрограммы
- •2.7.1. Определение процедур и функций
- •2.7.2. Вложенные подпрограммы
- •2.7.3. Вызов подпрограмм
- •2.7.4. Процедуры
- •2.7.5. Функции
- •2.7.6. Передача в подпрограмму параметров-массивов и параметров-строк
- •2.7.7. Рекурсия
- •2.8. Типы в Турбо Паскале
- •2.8.1. Целые типы
- •Классификация целых типов
- •Встроенные процедуры и функции для целых типов
- •2.8.2. Логический тип
- •2.8.3. Символьный тип
- •Служебные символы
- •2.8.4. Строковый тип
- •Встроенные функции и процедуры для обработки строк
- •Процедуры преобразования
- •2.8.5. Перечислимый тип
- •2.8.6. Ограниченный тип (диапазон)
- •2.8.7. Вещественные типы
- •Вещественные типы
- •Встроенные функции
- •2.8.8. Структурированные типы данных. Массивы
- •2.8.9. Множества
- •2.8.10. Записи
- •2.9. Изменение типа выражения
- •2.10. Процедурные типы
- •2.11. Файлы
- •Общие процедуры и функции для работы с файлами
- •2.11.1. Текстовые файлы
- •2.11.2. Типизированные файлы
- •2.11.3. Нетипизированные файлы
- •2.12. Указатели и динамическая память
- •2.13. Модули
- •2.14. Библиотека Турбо Паскаля
- •2.14.1. Модуль crt
- •2.14.2. Модуль graph
- •Var driver, Mode: integer переменные драйвера и режима.
- •Управление графическим режимом
- •Управление экраном, окном, страницей
- •Управление цветом и палитрой
- •Работа с точками
- •Работа с линиями
- •Построение фигур из линий
- •Построение криволинейных фигур
- •Работа с текстом
- •Обмен с памятью
- •2.15. Динамические структуры данных
- •2.15.1. Связанные динамические данные. Списки
- •Чтобы сослаться на двунаправленный кольцевой список как на единый программный объект, используется указатель, значением которого является ссылка на заглавное звено списка.
- •2.15.2 Очередь
- •2.15.3. Стек
- •3. Практическое программирование Этапы подготовки и решения задач на компьютере
- •Порядок выполнения лабораторных работ
- •Лабораторная работа 1 Основы программирования в среде Турбо Паскаля.
- •Приоритет операций в выражении
- •Задание 1 (программа 1_1)
- •Лабораторная работа 2 Программирование разветвленных алгоритмов. Операторы передачи управления
- •Лабораторная работа 3 Программирование циклических алгоритмов с заданным числом повторений
- •Лабораторная работа 4 Программирование циклических алгоритмов с предусловием
- •Лабораторная работа 5 Программирование циклических алгоритмов с постусловием
- •Модифицировать программу 3_2 для вычисления функций f1(X) и f2 (X) с применением оператора цикла с постусловием. Выполнить ее и сравнить результаты с полученными ранее.
- •Лабораторная работа 6 Программирование алгоритмов обработки одномерных массивов
- •Задание 1
- •Лабораторная работа 7
- •Лабораторная работа 8 Программирование с использованием функций
- •Лабораторная работа 9 Программирование с использованием процедур
- •Лабораторная работа 10 Обработка символьных и строковых данных
- •Лабораторная работа 11 Файлы
- •Лабораторная работа 12 Записи
- •Лабораторная работа 13 Решение нелинейных уравнений
- •Задание (программа_13)
- •Лабораторная работа 14 Вычисление приближенного значения определенного интеграла
- •Лабораторная работа 15 Модульное программирование
- •Лабораторная работа 16 Графика
- •Библиографический список
- •Обозначения графические в схемах алгоритмов (гост 19.701-90)
- •Зарезервированные слова Turbo Pascal 7.0
- •Приложение в
- •Кодировка символов в соответствии с кодами ascii
- •Приложение г
- •Альтернативная кодировка госТа для кодов 128...255
- •Клавиши с кодами из двух частей
- •Содержание
2.15.3. Стек
Наиболее часто встречающаяся динамическая структура данных – стек (магазин) отличается от очереди тем, что она организована по принципу LIFO (last in first out): «последним пришел первым ушел».
Стек – это частный случай линейного односвязного списка, для которого разрешено добавлять или удалять элемент только с одного конца списка, который называется вершиной (головы) стека.
Стек можно представить в ввиде трубы с одним запаяным концом, куда помещаются «бочонки» - элементы:
Вершина стека
Добавить
Взять
Операции включения и удаления элемента в стеке выполняются только с одного конца, называемого вершиной стека.
Если число элементов не может превышать некоторой величины, то стек называется ограниченным, максимальное число элементов в нем - это глубина стека. Стек, в котором нет ни одного элемента, называется пустым.
Стек можно представить в виде динамической цепочки звеньев. Вершиной является первое звено цепочки (или последнее), заглавное звено становится излишним. Поэтому значением указателя, представляющего стек как единый объект, является ссылка на вершину стека. Каждое звено содержит ссылку на следующее звено цепочки, причем "дно" стека имеет ссылку NIL:
Если стек пуст, то значением указателя р является ссылка NIL. К началу использования стека его необходимо сделать пустым (p=NIL).
Операции над стеком:
1) Занесение элемента в стек.
2) Выбор элемента из стека. При этом элемент, находящийся в вершине стека, должен быть присвоен в качестве значения некоторой переменной, а звено, в котором был представлен этот элемент, должно быть исключено из стека.
Пример создания и удаление стека из 10 элементов:
Program stack; stack.pas
Uses crt;
Type ptr = ^elem;
elem = record
inf: integer;
next: ptr
end;
Var
Результаты
х = 10
х = 9
х = 8
х = 7
х = 6
х = 5
х = 4
х = 3
х = 2
х = 1
Top: ptr;
x: integer;
i: byte;
Procedure Push(val:integer); {Добавление элемента}
Var pt: ptr;
Begin
new(pt);
pt^.inf:=val;
pt^.next:=Top;
Top:=pt
End;
Procedure Pop(Var Val:integer); {Извлечение }
Var pt: ptr;
begin
val:=Top^.inf;
pt:=Top;
Top:=pt^.next; dispose(pt)
end;
BEGIN
clrscr;
Top:=nil; {Начальная установка указателей}
for i:=1 to 10 do Push(i); {Создание стека из 10 элементов. Удаление стека с
распечаткой значений его элементов}
while Top<>nil do
begin
Pop(x);
writeln('x=',x:4)
end
END.
3. Практическое программирование Этапы подготовки и решения задач на компьютере
Практика программирования показывает, что решение прикладных, инженерных, экономических и научных задач на ЭВМ сложный и трудоемкий процесс, состоящий из следующих этапов:
1. Постановка задачи состоит в четком изложении условия задачи и определении подзадач.
2. Физический и математический анализ. Анализируется, существует ли вообще решение данной задачи и единственно ли оно. Подбирается математический аппарат, и строится математическая модель для решения задачи. Выбирается метод или методика решения (составляются формулы, определяются правила, связывающие эти формулы)
3. Этап алгоритмизации. На основании выбранного метода и конкретных методик с учетом возможностей ПК или ЭВМ разрабатывается алгоритм и строится его схема. Этот этап заключается в разложении вычислительного процесса на возможные составные части, описании содержания каждой такой части, установлении порядка их следования, которые определят структуру программы, т. е. разрабатывается укрупнённый алгоритм решения задачи и проверяется возможность реализации выбранного метода.
Расчленение алгоритма на составные части называется структуризацией.
4. Этап программирования.
Выбирается язык и (или) система программирования, и в соответствии с алгоритмом разрабатывается программа на конкретном языке программирования.
5. Отладка программы и тестирование. Отладка программы состоит в обнаружении и исправлении ошибок, допущенных на всех этапах проектирования программы. Синтаксические ошибки обнаруживаются компилятором при компиляции, который выдаёт сообщение об ошибке и её месте (в основном это ошибки в написании операторов). Алгоритмические ошибки или смысловые (семантические) обнаруживаются в результате тестирования.
6. Решение задач на компьютере.
7. Обработка результатов решения задач. Производится анализ результатов, строятся таблицы, графики, делаются выводы.
Дополнительно могут присутствовать такие этапы как описание структуры программы, описание структур данных, оптимизация программы, этап документирования.
Готовая программа в компьютере проходит следующие стадии
Исходный
модуль
Трансляция преобразование программы, представленной на одном языке программирования, в эквивалентную форму на другом языке.
Компиляция трансляция программы с исходного модуля в объектный (или на язык низкого уровня, близкого к машинному языку).
Редактирование связей (компоновка) изменение порядка размещения, формата и содержимого данных, сборка программы с другими модулями и стандартными подпрограммами.
Загрузка пересылка программы с носителя данных в основную память и из основной в регистровую.
Исходный модуль программа на языке высокого уровня.
Объектный модуль текст программы после компиляции (в машинных кодах с относительными адресами).
Абсолютный модуль это программа в машинных кодах с подсоединёнными к ней подпрограммами и настроенная на выполнение в заданной области оперативного запоминающего устройства.
Компилятор – программное средство, выполняющее компиляцию программы.
Транслятор программа или специальное технические средство, выполняющее трансляцию программы.
Редактор связей программа, предназначенная для построения одного загрузочного модуля из одного или более независимо транслируемых объектных или загрузочных модулей.
Загрузчик обрабатывающая программа, выполняющая загрузку абсолютного модуля в основную память по установленным адресам.
Различают следующие системы подготовки и выполнения программы:
1) компилирующего типа (статистическая подготовка) (СИ, ПАСКАЛЬ);
2) интерпретирующего типа (динамическая подготовка).
В системах компилирующего типа сначала для всей программы готовится загрузочный модуль, которые затем выполняется (подготовка и выполнение разделены во времени).
В системах интерпретирующего типа последовательно читается, транслируется и сразу же выполняется оператор за оператором (БЕЙСИК).
Интерпретатор вид транслятора, осуществляющего пооператорную (покомандную) обработку и выполнение исходной программы.