
- •Долинер л.И., Данилина и.И., Пашкова р.Р., Емельянов д.А. Языки и системы программирования
- •Содержание
- •Теоретическая работа а. Что такое «программирование»
- •1. Что такое «программа» и как ее исполняет компьютер
- •2. Что такое “Среда программирования Turbo Pascal”
- •Вопросы для контроля
- •Лабораторная работа 1. Знакомство со средой turbo pascal
- •1. Как начать работу со средой Turbo Pascal
- •1.1. Структура каталогов среды Turbo Pascal
- •1.2. Запуск среды программирования Turbo Pascal
- •1.3. Структура экрана после запуска среды
- •1.4. Вход в меню
- •1.5. Среда Turbo Pascal как рабочий стол программиста
- •1.6. Работа со страницами
- •1.7. Компиляция и исполнение программ
- •2. Резюме
- •Вопросы для контроля
- •Лабораторная работа 2. Простейшие программы на языке pascal, или как это делается...
- •1. Структура программы на языке Pascal
- •2. Простейшие операторы
- •2.1. Резервирование памяти для работы
- •2.2. Запись данных в память, или оператор присваивания
- •2.3. Вывод данных на экран дисплея
- •2.4. Форматированный вывод информации
- •Теоретическая работа б. Введеhие в язык пpогpаммиpоваhия pascal
- •1. Алфавит языка
- •1.1. Символы, используемые в идентификаторах
- •1.2. Разделители
- •1.3. Специальные символы
- •1.4. Неиспользуемые символы
- •2. Структура программы
- •3. Типы данных
- •3.1. Целый тип
- •3.2. Вещественный тип
- •3.3. Символьный тип
- •3.4. Логический тип
- •3.5. Строковый тип данных
- •3.5. Пример описания данных
- •4. Команда присваивания
- •4.1. Операции
- •4.2. Стандартные функции
- •4.3. Запись выражений
- •5. Простейшие команды ввода и вывода информации
- •5.1. Вывод информации
- •5.2. Ввод информации
- •Вопросы для контроля
- •Лабораторная работа 3. Как организовать диалог
- •1. Команда ввода данных
- •2. Библиотека Crt
- •2.1. Определение цвета символов
- •2.2. Определение цвета фона
- •2.3. Очистка экрана
- •Вопросы для контроля
- •Лабораторная работа 4. Графика в языке pascal (первое знакомство)
- •1. Включение графического режима
- •2. Библиотека Graph
- •Задачи для самостоятельной работы. Линейные алгоритмы
- •Лабораторная работа 5. Операции с целыми и вещественными числами
- •Теоретическая работа в. Алгоритмические конструкции: условный оператор
- •4.1. Составной оператор
- •4.2. Условные операторы
- •4.2.1. Команда ветвления
- •5. Сложные условия
- •5.1. Что такое True и False
- •5.2. Логический тип данных
- •5.3. Сложные условия
- •6. Оператор выбора case
- •Лабораторная работа 6. Операторы ветвления и выбора
- •1. Что такое ветвление и как оно организуется в языке Pascal?
- •2. Условный оператор if
- •2.1. Теория
- •2.2. Практика
- •Контрольное задание
- •3. Оператор выбора case
- •3.1. Теория
- •3.2. Практика
- •Теоретическая работа г. Введение в систему типов языка pascal
- •1. Стандартные типы данных
- •2. Перечислимый тип
- •3. Ограниченный тип данных
- •4. Множества
- •5. Вопросы для самоконтроля
- •Теоретическая работа д. Циклы с параметром: быстрое начало
- •1. Когда используется цикл с параметром
- •2. Форма записи цикла с параметром
- •3. Вычисление сумм
- •4. Выборки
- •5. Максимумы и минимумы
- •Лабораторная работа 7. Циклы с параметром
- •Лабораторная работа 8. Как нарисовать забор
- •Лабораторная работа 9. Звездное небо и прочие странности
- •1. Получение случайного числа
- •2. Рисование точек в графическом режиме
- •Лабораторная работа 10. Проектирование программ и процедуры
- •1. Зачем нужна технология программирования
- •2. Знакомство с технологией проектирования “сверху вниз”
- •Решение Часть 1. Уточнение постановки задачи (эскиз)
- •Часть 2. Первый вариант решения
- •Часть 3. Уточнение решения
- •Часть 4. Уточнение решения
- •Часть 5. Уточнение решения
- •Часть 6. Уточнение решения
- •Это вам пригодится
- •Теоретическая работа е. Конструкции цикла в языке pascal
- •Оператор цикла с параметром
- •2. Цикл с предусловием while
- •3. Цикл с постусловием repeat
- •4. Вопросы для самоконтроля
- •Лабораторная работа 11. Разные конструкции цикла
- •1. Теория
- •1.1. Цикл со счетчиком (for)
- •1.2. Цикл с предусловием (while)
- •1.3. Цикл с постусловием (repeat)
- •2. Практика
- •Вопросы для контроля
- •Лабораторная работа 12. Как управлять движением на экране дисплея, или след слона
- •Теоретическая работа ж. Построение графиков функций
- •Лабораторная работа 13. Построение графиков функций
- •Лабораторная работа 14. Дополнительные возможности при работе с графикой
- •Теоретическая работа г. Динамические объекты: считывание картинок в память и вывод их на экран
- •Лабораторная работа 15. Как делается движущееся изображение
- •Теоретическая работа д. Использование страниц памяти для организации движения объектов по экрану
- •Как рисовать сложные картинки
- •Лабораторная работа 16. Мультипликация с использованием страниц видеопамяти
- •Лабораторная работа 17. Технология представления картинок в виде числового массива
- •Лабораторная работа 18. Движение объектов по многоцветному фону
- •1. Как вывести на экран картинку формата pcx
- •2. Технология движения объектов по многоцветному фону
- •Лабораторная работа 19. Мыши и модули
- •I. Как работать с мышью
- •1.1. Как работает манипулятор "мышь"
- •1.2. Начинаем программировать управление мышью
- •2. Модули
- •Implementation {начало раздела реализации}
- •Лабораторная работа 20. Работа со строковыми переменными
- •1. Теория
- •1.1. Описание строковых переменных
- •1.2. Сравнение строк
- •1.3. Операции со строками
- •2. Практика
- •Вопросы для контроля
- •Лабораторная работа 21. Работа с символьными переменными -1
- •Лабораторная работа 22. Работа с символьными переменными - 2
- •Лабораторная работа 23. Процедуры - 1
- •1. Теория
- •2. Практика
- •Лабораторная работа 24. Процедуры - 2
- •Лабораторная работа 25. Строковый редактор
- •1. Что такое «строковый редактор»
- •2. Зачем писать строковый редактор
- •3. Несколько вспомогательных задач
- •4. Постановка задачи на разработку
- •5. Необходимая информация для написания процедуры
- •6. Подсказка: алгоритм работы строкового редактора
- •Лабораторная работа 26. Поиск среднего и другие неожиданности
- •Лабораторная работа 27. Как работать с массивами: первые шаги
- •1. Теория
- •2. Практика
- •Вопросы для контроля
- •Лабораторная работа 28. Массивы и деловая графика
- •Теоретическая работа е. Строковые массивы. Алгоритмы поиска
- •Лабораторная работа 29. Строковые массивы. Алгоритмы поиска
- •Лабораторная работа 30. Нечисловые индексы в массиве
- •Теоретическая работа ж. Сортировка массивов
- •Лабораторная работа 31. Сортировка массивов
- •Лабораторная работа 32. Программа обслуживания конькобежных соревнований
- •Теоретическая работа з. Двумерные и многомерные массивы
- •Вопросы для контроля
- •Лабораторная работа 33. Шахматный турнир
- •Лабораторная работа 34. Подпрограммы - функции
- •1. Теория
- •2. Практика
- •Лабораторная работа 35. Работа с текстовыми файлами -1
- •1. Теория
- •1.1. Что такое текстовый файл
- •1.2. Принцип работы с текстовыми файлами
- •2. Практика
- •Лабораторная работа 36. Работа с текстовыми файлами - 2
- •Вопросы для контроля
- •Лабораторная работа 37. Работа с типизированными файлами - 1
- •1. Теория
- •2. Практика
- •Лабораторная работа 38. Работа с типизированными файлами - 2
- •1. Теория : тип данных «запись»
- •2. Практика
- •Лабораторная работа 39. Работа с типизированными файлами как с файлами прямого доступа
- •1. Теория
- •2. Практика
- •Лабораторная работа 40. Дополнительные возможности, или что можно еще натворить...
- •1. Что можно делать с файлами и каталогами
- •2. Процедуры и функции библиотеки dos
- •2.1. Работа с часами и календарем
- •2.2. Работа с каталогами и файлами
- •2.3. Типы и константы модуля dos для работы с файлами
- •3. Практика
- •Приложение 1 Зарезервированные слова Turbo Pascal
- •Приложение 2 Знаки пунктуации в языке Pascal
- •Приложение 3 Операции в языке Pascal
- •3.1. Арифметические операции
- •3.2. Логические операции
- •3.3. Операции отношения
- •Приложение 4 Стандартные функции языка Pascal
- •4.1. Арифметические функции
- •4.2.Функции преобразования типов
- •4.3. Функции для величин порядкового типа
- •Приложение 5 Команды pедактоpа сpеды Turbo Pascal 7.0
- •5.1. Команды перемещения курсора
- •5.2. Команды поиска фрагментов
- •5.3. Команды вставки и удаления информации
- •5.4. Команды работы с блоками информации
- •5.5. Клавиши быстрого управления средой Turbo Pascal 7.0
- •Список рекомендуемой литературы
2. Перечислимый тип
Это такой тип данных, при котором количество всех возможных значений ограничено (можно перечислить). Стандартные типы Integer, Char и Boolean относятся к перечислимым, а тмп Real не является перечислимым (т.к. нельзя перечислить все возможные значения вещественных чисел).
Перечисимый тип данных можно расписать в ряд по значениям:
Boolean=(False,True)
Integer=(-32768,-32767,-32766..32766,32767)
Можно вводить новые перечислимые типы:
Type
Computer=(IBM,Yamaha,Atari);
Name=(Pete,Kate,Nick,Bob);
mark=(1,2,3,4,5);
Color=(Black,White,Red,Yellow,Green);
Week=(Mn,Tu,We,Th,Fr,Sa,Sn);
После того, как создан такой тип, можно объявлять в блоке Var переменные такого типа, а их значениями индексировать массивы и организовывать циклы.
Например:
Var m:mark;
pupil:Name;
col1,col2:Color;
Следует отметить, что важно, в каком порядке перечислены идентификаторы при определении типа, т.к. первому идентификатору присваивается порядковый номер 0, второму - 1 и т.д. Один и тот же идентификатор можно использовать в определении только один раз.
При использовании перечислимых типов улучшается читаемость программ, более четко проводится контроль значений, перечислимые типы имеют очень компактное машинное представление. Но при этом следует помнить, что значения перечислимого типа не могут быть выведены на экран или принтер и не могут быть явно введены с клавиатуры.
Для работы с переменными перечислимого типам могут быть использованы функции: Ord, Pred, Succ.
Примеры:
. . .
pupil:=Nick;
writeln(ord(pupil)); { будет выведено 2 }
col1:=Red;
col2:=pred(col1); {значение переменной col2 стало White}
col2:=succ(col1); {значение переменной col2 стало Yellow}
. . .
3. Ограниченный тип данных
Этот тип данных похож на перечислимый, но задается не перечислением всех элементов, а диапазоном из некоторого перечислимого типа. Задается ограниченный тип указанием минимального и максимального значений, разделенных двумя точками. Следует заметить, что минимальное значение при определении такого типа не должно быть больше максимального.
Примеры:
Type
Century=1..20; {числа от 1 до 20}
Letter='a'..'z'; {буквы от а до z}
Используя описание перечислимых типов, приведенные в вышеописанных примерах (раздел *.*) можно записать следующее:
Type
Work_day=Mn..Sa;
Fav_color=White..Green;
Для переменных ограниченного типа могут использоваться функции Ord, Pred, Succ.
4. Множества
Вам, несомненно известно следующее определение: "Множество - это многое, мыслимое как целое". Множества курящих водолазов, лохматых девушек, рыжих, клавиш и т.п. отличаются одной особенностью: они не упорядочены (вряд ли существует общепринятое правило ранжирования лохматых девушек или курящих водолазов).
В отличие от других языков в языке Pascal можно работать с множествами. Множества задаются перечислением своих элементов, т.е. отвечается на вопрос "Множество чего?". Если элементов нет, считается, что множество ПУСТО.
Множество-константа обозначается в квадратных скобках:
[] - пустое множество. В нем ничего нет.
[1..10] - в множестве - целые число от 1 до 10.
['B','O','Y'] - множество из трех символов B,O и Y.
['A'..'Z'] - множество символов от A до Z.
[#72..#80] - множество символов, имеющих коды с 72 до 80.
Если есть потребность в переменных типа множество, то их описание возможно как в блоке Var, так и в блоке Type. Описание множества осуществляется с помощью фразы
Set of <базовый тип>,
где <базовый тип> - любой из перечислимых типов языка (либо стандарный: integer, byte, word, Char, Boolean, либо перечислимый или ограниченный тип, организованный на базе стандартных).
Например:
Type month=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);
year=set of month;
Today=set of 1994..2994;
numbers=set of '0'..'9';
...
var
times:numbers;
boys:set of char;
girls: year;
...
Есть одна особенность: количество элементов в множестве ограничено. Для версии языка Pascal, имеющейся у Вас, это значение не может превышать 256. Именно поэтому приходится указывать конкретные диапазоны значений. Исключением является тип char и байт: они имеют ровно столько значений.
Как показала практика, cамая главная операция, которая выполняется для множеств - это проверка включения элемента в множество: if ch in [#72..#80] then ...
Операция IN позволяет составить выражение, значение которого равно True, если элемент принадлежит множеству и False - в ином случае.
Другие возможные операции:
= проверка на равенство множеств. Порядок элементов значения не имеет;
<> проверка на неравенство. Результат сравнения множеств неравенство равен True, если эти множества отличаются хотя бы одним элементом.
<= Проверка на подмножество. Результат будет True, если все элементы левого множества содержатся в правом множестве.
>= Проверка на подмножество. Результат будет True, если все элементы правого множества содержатся в левом множестве.
+ объединение множеств:
girls:=[1994..2000]+[1995..2100];
{в girls будет множество [1994..2100], т.е. все элементы, входящие в оба множества. Повторяющиеся элементы остаются в одном экземпляре}
- разность множеств:
boys:=['к','р','о','д','и','л'] - ['р','и','д'];
{в boys будет множество ['к','о','д'], т.е. все элементы, которые входят в первое множество, но не входят во второй}
* пересечение множеств:
times:=['0'.'5','7','9']*['3'..'6','8','9'];
{в times будет множество ['3','4','5','9'], т.е. те элементы, которые содержатся одновременно в первом и втором множестве }