- •Долинер л.И., Данилина и.И., Пашкова р.Р., Емельянов д.А. Языки и системы программирования
- •Содержание
- •Теоретическая работа а. Что такое «программирование»
- •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
- •Список рекомендуемой литературы
Теоретическая работа ж. Построение графиков функций
1Пользуясь графическими командами, мы можем нарисовать очень ограниченный набор линий. Более сложные задачи, например моделирование движения по сложным траекториям, требует построения линий из точек. Один из способов решения этой задачи известен вам из алгебры - построение графиков функций. Давайте попробуем такую программу разработать.
Значение x будет меняться от края до края экрана, а значение y вычисляться по заданной формуле. Для описания такого алгоритма годится конструкция цикла со счетчиком. В роли параметра цикла будет выступать координата x, тогда фрагмент программы построения графика будет выглядеть примерно так:
For x:=0 to 639 do
begin
y:=f(x); { вместо f(x) подставим нужную функцию }
PutPixel(x,y,White)
end;
Если эту программу ввести в компьютер и исполнить, результат, скорее всего, разочарует вас. Дело в том, что в “экранной” системе координат, во-первых, можно изобразить только точки с положительными координатами, а во-вторых, ось Oy направлена не вверх, как мы привыкли, а вниз.
Для того чтобы графики “знакомых” функций выглядели привычно, нужно выбрать более удобную систему координат. Начало координат поместим в центр экрана, а оси направим, как обычно: Ox влево, а Oy - вверх. Изобразим их на экране (для простоты ограничимся лишь прямыми линиями, не изображая стрелок и надписей).
SetColor(Green); { цвет линий }
Line(0,240,639,240); { ось Ox }
Line(320,0,320,479); { ось Oy }
Начнем строить график. Теперь нам придется иметь дело с двумя системами координат - “экранной” и “нарисованной”. Вычислять значение функции нам удобнее в нарисованной системе, а рисовать точки придется в экранной. Обозначим через x и y координаты точки в нарисованной системе, а xэкрана и yэкрана - в экранной.
Связь между ними будет такой.
xэкрана= x - 320
yэкрана=-y + 240
Из этих соотношений видно, что когда x меняется от 0 до 639 (от левого до правого края экрана), xэкрана меняется от -320 до +319, а при изменении y от 0 до 479 (от верхнего края до нижнего), yэкрана меняется от +240 до -239 (т.е. в обратном направлении).
Пользуясь этими соотношениями, составим новую программу построения графика (обозначим xэкрана как x_ekr, а yэкрана - y_ekr):
For x_ekr:=0 to 629 do
begin
x := x_ekr - 320; {переходим от “экранной” системы координат к “нарисованной” }
y := f(x); { вместо f(x) подставим нужную функцию) }
y_ekr := 240 - y; { переходим обратно к “экранной” системе }
PutPixel(x_ekr,y_ekr,White) {рисуем точку }
end;
Присоединив к этому фрагменту рисование осей координат и снабдив его соответствующим описанием переменных, мы получим желаемый результат. Переменные x и y должны иметь тип Integer; чтобы не нарушать этого условия, y считают обычно как y=round(f(x)).
2Рассмотренный выше способ построения графиков функций основывается на определении положения точки на плоскости с помощью вычисления расстояния от двух перпендикулярных осей в прямоугольной (декартовой) системе координат. Существуют и другие способы задания функции. Один из них опирается на идею полярных координат.
На плоскости берется числовая ось. Начало координат этой оси (точка О) называется полюсом, а сама ось - полярной осью. Для определения положения точки М достаточно указать два числа: r - полярный радиус (расстояние от этой точки до полюса) и - полярный угол (угол поворота от полярной оси до луча ОМ. Иными словами, в полярной системе координат положение точки на плоскости задается двумя числами, указывающими направление, в котором находится точка, и расстояние до этой точки.
С помощью полярных координат можно также задавать на плоскости различные кривые. Очень простым будет, например, уравнение окружности с центром в полюсе. Если радиус окружности равен P, то и полярный радиус любой точки окружности равен P, значит уравнение этой окружности имеет вид r = P.
Полярная система координат в некоторых случаях удобнее прямоугольной. Например, простенькое уравнение r = в полярных координатах задает спираль, описать которую в прямоугольной системе очень сложно.
3Идея полярных координат, безусловно, красива и полезна, но наш экран работает в прямоугольной системе. Значит, для того чтобы строить графики функций в полярных координатах, нужны формулы перехода от одной системы к другой.
Давайте поместим полюс в центр экрана, а полярную ось направим горизонтально слева направо. Пусть x_ekr и y_ekr по-прежнему обозначают экранные координаты точки, а r и a - ее полярные координаты. Тогда формулы перехода будут такими:
x_ekr = 320 + r * Sin(a)
y_ekr = 240 - r * Cos(a)
При этом надо иметь в виду, что стандартные функции Sin и Cos предполагают задание аргумента в радианах. Напомним, что радиан - это единица измерения углов, равная 180°, деленному на число градусов (развернутый угол составляет радиан). Если вам удобнее работать с градусной мерой, пользуйтесь формулой перехода aрадиан =3.1416*aградусов/180.
А теперь составим программу рисования спирали, которая задается в полярных координатах уравнением r = a. В качестве параметра цикла выберем полярный угол, который будем менять от 0 до полного угла, разделив его на 1000 частей. Тогда размер шага будет равен 2*3.1416/1000=0.0062832.
a := 0;
For i:=0 to 1000 do
begin
r := f(a); { вместо f(a) подставим нужную функцию) }
x_ekr := 320 + r*Sin(a); { переходим от полярных }
y_ekr := 240 - r*Cos(a); { координат к “экранным” }
PutPixel(x_ekr,y_ekr,White); { рисуем точку }
a := a + 0.006832; { увеличиваем полярный угол }
end;
Добавив соответствующее описание переменных, мы получим программу, рисующую на экране кусок спирали. Если спираль покажется Вам некрасивой из-за того, что соседние точки слишком далеко отстоят друг от друга, - уменьшите шаг и соответственно увеличьте число шагов.
Обратите внимание, что в этой программе переменная i играет роль только счетчика цикла, а в теле цикла не используется.