Оператор выбора (case)
Предназначен для ветвления программ на 2 или несколько направлений.
Case <ключ выбора> of <список выбора> else P end;
<ключ выбора> - идентификатор целого или символьного типа,
<список выбора> - включает в себя две или более конструкций следующего вида:
<константа выбора> : <оператор>;
<константа выбора> - это идентификатор того же типа, что и <ключ выбора>.
Пример. Для 100 целых значений x рассчитать значение .
Составить два варианта программ: с помощью условного оператора if и c помощью оператора выбора Case.
Технологические операции программирования приведены в таблице
Таблица
N | Технологическая операция | Выполнение |
1. | Постановка задачи | Для 100 целых значений x рассчитать значение y, ![]() |
2. | Математическое описание | Для определения четности воспользуемся оператором mod – остаток целочисленного деления: Если x mod 2=0, то x-четное Если x mod 2=1, то x-нечетное |
3. | Разработка структограммы | ![]() |
4. | Написание программы | |
4.1 | С помощью оператора If | Program P4; Var x,y:integer; Begin For x:=1 to 100 do Begin If x mod 2 =0 then y:=2*x else y:=2+x; Writeln(x,y); End; End. |
4.2 | С помощью оператора Case | Program P4; Var x,y:integer; Begin For x:=1 to 100 do Begin Case x mod 2 of 0: y:=2*x; 1: y:=2+x; end; Writeln(x,y); End; End. |
5. | Отладка и получение результатов | Выполнить самостоятельно |
ФУНКЦИЯ И ПРОЦЕДУРА
Функции и процедуры представляют собой важный инструмент Турбо Паскаля, позволяющий писать хорошо структурированные программы.
Функции и процедуры должны быть описаны в разделе описания, обращение к ним производится, как правило, из тела основной программы.
Описание функций и процедур включает заголовок и основную часть описания.
- Заголовок:
Function F1(<С.Ф.П.>): тип; {для функций},
Procedure Pr(<С.Ф.П.>); {для процедур},
где Function, Procedure – служебные слова, показывающие, что далее следует описание функции и процедуры соответственно,
F1 и Pr – имена функции и процедуры, которые записываются как идентификаторы ТП, <С.Ф.П.> - список формальных параметров.
Входные параметры от выходных при описании процедуры разделяются служебным словом var. Выходным параметром у функции является имя функции.
- Основная часть описания функции и процедуры полностью повторяет структуру программы (см. лекцию 3).
- Обращение к функциям и процедурам выполняется, как правило, в теле основной программы. Порядок описания функций и процедур и обращения к ним рассмотрим на примере.
Пример. Написать программу вычисления площади круга с помощью функции и процедуры.
Технология разработки программы приведена в таблице.
Таблица
N | Этап программирования | Выполнение |
Постановка задачи | Написать программу вычисления площади круга с помощью функции и процедуры | |
Математическое описание | Формула для площади круга S=π∙R2 | |
Разработка структограммы | ||
3.1 | С использованием функции | ![]() |
3.2 | С использованием процедуры | ![]() |
4. | Написание программы | |
4.1 | С использованием функции | Program PY; Var R,S:real; Function PL(R:real):real;{Описание функции } Begin PL:=p*sqr(R); End; Begin R:=3; S:=PL(R); {Обращение к функции} Writeln(R,S); End. |
4.2 | С использованием процедуры | Program PY; Var R,S:real; Procedure PL(R:real;var S:real); {Описание процедуры } Begin S:=p*sqr(R); End; Begin R:=3; PL(R,S); {Обращение к процедуре} Writeln(R,S); End. |
5. | Отладка и получение результатов | Выполнить самостоятельно |
Для использования графических возможностей Турбо Паскаля необходимо в блоке описания uses подключить графический модуль Graph. Модуль содержит набор графических функций и процедур, основные из которых рассмотрены ниже.
Графические процедуры
Arc(x,y:integer;St,En,R:word); {рисование дуги, где x,y - коорд. центра дуги, R - радиус, St, En - нач. и конечный углы.}
ClearDevice; {очистка экрана}
Circle(x,y:integer;R:word); {окружность радиуса R
cцентром в точке (x,y)}
CloseGraph; {закрытие графики}
InitGraph(gd,gm:integer;Path:string); {инициализация графики, где
gd - графический драйвер,
gm - графический режим,
Path - путь размещения файла
с расширением .bgi.}
Line(x1,y1,x2,y2:integer); {рисование линии, проходящей через две точки:
с координатами (x1,y1) и (x2,y2) }
LineRel(dx,dy:integer); {рисование линии: dx, dy – приращения
координат к координатам текущей
позиции курсора}
LineTo(x,y:integer); {рисование линии, проходящую через текущую
позицию курсора и точку с координатами (x,y)}
Moveto(x,y:integer); {задание координат текущей точки}
OutText(T:string); {вывод текста в текущую точку}
OutTextXY(x,y:integer;T:string);{вывод текста в точку с координатами х,у}
Rectangle(x1,y1,x2,y2:integer); {рисование прямоугольника: (x1,y1) и (x2,y2) - координаты противоположных вершин}
PutPixel(x,y:integer;c:word); {выводит точку с координатами (х,у) цветом с}
Графические функции
GetMaxX - определяет максимальный размер экрана по оси x.
GetMaxY - определяет максимальный размер экрана по оси y.
GetX - координата текущей позиции курсора по оси x.
GetY - координата текущей позиции курсора по оси y.
Машинные координаты
Начало машинной системы координат, направление осей, а также максимальные значения координат монитора показаны на рисунке
На рисунке приведена также машинная (xm, ym) и физическая (x,y) системы координат. Для изображения на экране точки с физическими координатами (x,y) необходимо определить ее машинные координаты (xm, ym). Расчетные формулы имеют следующий вид (попробуйте самостоятельно получить эти формулы):
xm=x0+x*Mx ,
ym=y0-y*My,
где Mx, My-масштабы соответственно по осям x и y, которые показывают число пикселей в одной физической единице,
x, y- физические координаты точки,
xm, ym- машинные координаты точки,
x0, y0- машинные координаты начала физической системы координат.
Пример. Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора.
Этапы разработки программы сведены в таблицу.
Таблица
N | Этапы программирования | Выполнение |
1. | Постановка задачи | Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора. |
2. | Математическое описание | Изобразим вид экрана с указанием координат требуемых линий ![]() |
3. | Разработка структограммы | ![]() |
4. | Написание программы | Program P5; Uses graph; {подключение граф.модуля} Var gd,gm:integer; Begin gd:=detect;{определение граф. драйвера} InitGraph(gd,gm,’ ‘);{инициализация графики} Line(0, round(GetMaxY/2), GetMaxX, Round(GetMaxY/2));{гориз. лин.} Line(round(GetMaxX/2), 0, Round(GetMaxX/2), GetMaxY); {вертик. лин.} Readln; {пустой ввод} CloseGraph;{закрытие графики} End. |
5. | Отладка и получение результатов | Выполнить самостоятельно |
Пример. Написать программу построения графика функции y=x2 для x∈[-1;1].
Этапы разработки программы сведены в таблицу.
Таблица
N | Этапы программирования | Выполнение |
1. | Постановка задачи | Построить график функции y=x2 для x∈[-1;1]. |
2. | Математическое описание | Изобразим вид экрана, который мы хотели бы получить после выполнения программы. ![]() |
3. | Разработка структограммы | ![]() |
4. | Написание программы | Program P6; Uses graph; Var gd,gm:integer; x,y:real; x0,y0,xm,ym,Mx,My:integer; begin gd:=detect; InitGraph(gd,gm,’ ‘); Mx:=300; x0:=320; My:=440; y0:=460; {выбраны для монитора 640×480 пикс.} For xm:=20 to 620 do Begin x:=(xm-x0)/Mx; y:=sqr(x); ym:=round(y0-y*My); PutPixel(xm,ym,1); End; Readln; CloseGraph; End. |
5. | Отладка и получение результатов | Выполнить самостоятельно |
Среда Турбо Паскаля загружается файлом turbo.exe.
Главное меню ТП содержит оглавление дополнительных меню:
-
- вспомогательные действия.
- File(файл) – действие с файлами.
- Edit (редактировать) – редактирование файлов.
- Search (искать) – поиск.
- Run (работа) –прогон программы.
- Compile (компиляция) – компиляция программы.
- Debug ( отладка) – отладка программы.
- Options (варианты) – установка параметров среды.
- Windows (окно) – работа с окнами.
- Help (помощь) –обращение к справочной службе.
Выбор пункта главного меню приводит к появлению дополнительного меню, вид и назначение которого для каждой клавиши рассмотрены ниже на примере версии Турбо Паскаля 6.0.
-
Вспомогательные действия
About | Версия о Паскале |
Refresh display | Восстановление экрана |
Clear Desktop | Очистка экрана |
- File (файл) – действие с файлами;
OpenF3 | Открыть файл {A:\LB1} |
New | Новый файл |
SaveF2 | Сохранение |
Save as … | Сохранить как |
Save all | Записать всё |
Change dir | Изменение директории |
Распечатывает файл из активного окна | |
Get into | Получение информации |
Dos shell | Временный выход в DOS (из Turbo Pascal) |
Exit Alt-X | Выход из Turbo Pascal |
- Edit – редактирование
Restore Line | Восстановление строки |
CutShift+Del | Удаление выделенного блока из окна в буфер |
Copy Ctrl-Ins | Копирование выделенного блока из окна в буфер |
Paste Shift-Ins | Копирование буфера в окно редактирования |
Copy Examples | Копирование примера |
Clear Ctrl-Del | Удаление выделенного блока |
- Search - поиск
Find | Найти |
Replace | Заменить |
Search again | Повторить поиск |
Go to line number | Искать линию с номером |
Find procedure | Поиск процедуры |
Find Error | Поиск ошибки |
- Run – работа
Run Ctrl+F9 | Запуск программы |
Program Reset | Прекращение отладки |
Go to cursor | Начало режима отладки |
Trace into F7 | Режим отладки сначала |
Step over F8 | Следующий шаг |
Parameters | Параметры |
- Compile – компиляция
CompileAlt+F9 | Создание exeфайла |
MakeF9 | Перекомпиляция измененных файлов |
Build | Перекомпиляция всех файлов |
Destination | Путь компиляции |
Primary File | Имя компилируемого файла |
- Debug – отладка
Evaluate/Modify Ctrl+F4 | Оценка модификации |
Watches | Наблюдение |
Toggle Break Point Ctrl+F8 | Установка контрольной точки |
Break points | Контрольные точки |
- Options – Опции
Compiler | Компилятор |
Memory size | Размер памяти |
Linker | Редактор связи |
Debugger | Отладка |
Directories | Директории |
Environment | Окружающая среда |
Save options | Запись опций |
Retrieve | Загрузка опций |
- Windows – окна
Size/Move | Размер и положение окна на экране |
ZoomF5 | Распахнуть |
Title | Черепица |
Cascade | Каскад |
Next F6 | Следующее окно |
Previous Shift+F6 | Предыдущее окно |
CloseAlt+F3 | Закрыть |
Watch | Окно наблюдения |
Register | Регистр |
Output | Выходное окно |
Call stack | Показать список |
User screenAlt+ F5 | Окно пользователя |
List | Посмотреть содержимое экрана |
- Help – помощь
Contents | Содержание |
IndexSheft+F1 | Алфавитный список |
Topic Search Ctrl+F1 | Поиск в окрестностях курсора |
Previous Topic Alt+F1 | Предыдущее сообщение |
Редактирование файла
Для корректировки файла в редакторе ТП зарезервированы следующие комбинации клавиш:
Подготовка к промежуточному контролю
Под первичной обработкой информации будем понимать следующие операции заполнение массивов, отыскание в нем максимального и минимального элементов, определение среднего арифметического и среднего геометрического значений, сортировку элементов массива.
Рассмотрим некоторые примеры первичной обработки информации, выносимые на промежуточный контроль.
Пример. Для заданного случайным образом массива x (1.5<=x<=2.5), состоящего из 12 элементов, определить среднее арифметическое для всех и среднее геометрическое для x>2. Этапы решения задачи сведены в таблицу
Таблица
N | Этапы программирования | Выполнение |
1. | Постановка задачи | Для заданного случайным образом массива х (1.5<=x<=2.5), состоящего из 12 элементов, определить среднее арифметическое для всех x и среднее геометрическое для х>2. |
2. | Математическое описание | ![]() ![]() |
3. | Разработка структограммы | ![]() |
4. | Написание программы | Program PK1; Var x:array [1..12] of real; i,n,k:integer; A,P:real; Begin A:=0; P:=1; n:=12; k:=0; {задание нач. зн.} Randomize; {подключение генератора случайных чисел} For i:=1 to 12 do Begin x[i]:=random+1.5; {генерация x∈(1.5,2.5)} A:=A+x[i]; {сумматор для среднего арифметического} If x[i]>2 then Begin P:=P*x[i]; {произведение для вычисление среднего геометрического} k:=k+1; {счетчик сомножителей для вычисление среднего геометрического} end; end; A:=A/n; {среднее арифметическое} P:=exp(Ln(P)/k); {среднее геометрическое} Writeln(A,P); end. |
5. | Отладка и получение результатов | Выполнить самостоятельно. |
Пример. Для шести произвольных значений X∈(1,3) рассчитать и записать массив Y
Этапы решения задачи сведены в таблицу
Таблица
N | Этапы программирования | Выполнение |
1. | Постановка задачи | Для шести произвольных значений X∈(1,3) рассчитать и записать массив Y. ![]() |
2. | Математическое описание | — |
3. | Разработка структограммы | ![]() |
4. | Написание программы | Program P6; Var x,y:array[1..6] of real; I:integer; Begin X[1]:=1,2;X[2]:=2,5;X[3]:=2,9;{зад. массивов} X[4]:=1,7;X[5]:=1,5;X[6]:=2,3; {опер. присв.} For i:=1 to 6 do Begin If x[i]<2 then y[i]:=exp(x[i]*ln(2,5)); If x[i]>=2 then y[i]:=sqr(sin(x[i])/cos(x[i]); Writeln(x[i],y[i]); End; End. |
5. | Отладка и получение результатов | Выполнить самостоятельно |
Пример. Самостоятельно составьте программу для решения задачи.
Заполнить массив из 10 элементов. Отсортировать элементы массива в порядке возрастания. Найти min и max значения массива. Вывести на экран исходный, отсортированный массивы, min и max значения.