ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.03.2025
Просмотров: 1646
Скачиваний: 1
СОДЕРЖАНИЕ
Московский государственный социальный университет
Лекция 1: Введение в программирование.
Лекция 2: Язык Паскаль и системы программирования на Паскале.
Лекции 3-4: Базисные конструкции языка.
Лекции 5-6: Простые операторы и программы с линейной структурой.
Лекция 7: Операторы с условиями.
Лекция 8: Методика разработки простых программ.
Лекция 9: Концепция типа данных.
Лекция 10: Структурный тип - Массив.
Лекция 11: Структурный тип - Строка.
Лекция 15: Структурный тип - Множество.
Лекция 16: Структурный тип - Запись.
Лекции 17-19: Модули и их использование.
Лекция 20: Структурный тип - Файл.
Лекции 21-22: Основные задачи обработки файлов.
Лекция 23: Динамическая память и указатели.
Лекции 24-25: Использование указателей для представления динамически структур данных.
Лекции 26-27: Объекты и объектно-ориентированное программирование.
Для операций с вещественными числами предусмотрены стандартные функции, в числе которых: тригонометрические функции (sin, cos, arctan), логарифм и экспонента (ln, exp), выделение целой и дробной части (int, frag), квадратный корень (sqrt), функции abs, sqr и random, аналогичные функциям, используемым для целых типов.
3. Оператор выбора case -of.
Оператор выбора является обобщением оператора if-then-else на случай выбора одного из нескольких возможных продолжений выполнения программы. Выбор осуществляется по ключу выбора (селектору). Синтаксическая структура этого оператора такова:
case < ключ выбора > of
< константа выбора 1> : < оператор 1>;
. . . . . .
< константа выбора m> : < оператор m>;
[else < оператор>]
end;
где: < константа выбора > - значение того же типа, что и ключ выбора. Ключом выбора может быть выражение любого порядкового типа.
m - число ветвей выбора (не более чем мощность типа ключа выбора).
При выполнении оператора выбора вначале вычисляется значение ключа, а затем последовательным просмотром ветвей выбора отыскивается такая ветвь, для которой константа выбора совпадает со значением ключа. Оператор этой ветви выполняется, после чего оператор выбора завершает работу и передает управление следующему по тексту программы оператору. Ветвь else (если она присутствует) выполняется только в том случае, когда ни одна ветвь оператора case-of не выбрана. Если ветвь else отсутствует, то это эквивалентно ветви else с пустым оператором.
В ветвях выбора вместо констант выбора можно использовать список констант выбора (разделенных запятыми), либо диапазон констант выбора (заданный посредством .. также как для типа-диапазона). В этих случаях выбор ветви производится при равенстве константы из списка или из диапазона констант с ключом выбора.
Операторы выбора являются хорошо структурированным средством выбора из любого числа альтернатив и часто выполняют ту же функцию, что и вложенные операторы if-then-else.
4. Примеры программ с простыми типами и оператором выбора.
Следующая простая программа демонстрирует создание и использование перечислимого типа и оператора case-of.
program colors;{Выбор цвета из набора, заданного перечислимым типом}
uses CRT;
type color = (cWhite,cRed,cBlue,cGreen,cBlack); {перечислимый тип}
var b:0..4; c:color;
begin TextBackground(cyan);TextColor(white);ClrScr;window(10,10,50,20);
write('Введите число (от 0 до 4):');read(b);c:=color(b);
case c of cWhite: begin TextColor(white);writeln('white') end;
cRed: begin TextColor(red);writeln('red') end;
cBlue: begin TextColor(blue);writeln('blue') end;
cGreen: begin TextColor(green);writeln('green') end;
cBlack: begin TextColor(black);writeln('black') end;
end
end {colors}.
Эта программа иллюстрирует также так называемое приведение типа. Для любого типа можно использовать функцию с именем этого типа для преобразования переменной (или выражения) к заданному типу. Например, для описанного выше типа color допустим, оператор присваивания сol:= color(3); в результате такого присваивания переменная col типа color получит значение blue.
|
Замечание
|
Переменная с приведением типа рассматривается, как обычная переменная и может использоваться не только в выражениях, но и в левой части оператора присваивания. |
Приводимая ниже программа week_day иллюстрирует использование диапазонов типа и оператора case-of для определения дня недели по вводимой дате:
program week_day; {Вычисление дня недели по введённой дате}
uses CRT;
var d:1..31; m:1..12; year:1600..2000;{день, месяц, год}
wd:integer; {день недели} z:1..100; {год в столетии}
t:string[1];
begin TextBackground(cyan);TextColor(white);ClrScr;
window(10,10,50,20); TextBackground(blue);ClrScr;
repeat writeln(' введите дату:');
write(' Год:'); readln(year); write(' месяц:'); readln(m);
write(' день:'); readln(d); writeln(' день недели: ');
{вычисление по формуле Зеллера}
if m<3 then begin m:=m+10;year:=year-1 end
else m:=m-2; z:=year div 100; year:=year mod 100;
wd:=abs(trunc(2.6*m-0.2)+d+year div 4+year+z div 4-2*z);
wd:=wd mod 7; {конец вычисления} case wd of
0: writeln(' воскресенье');
1: writeln(' понедельник');
2: writeln(' вторник');
3: writeln(' среда');
4: writeln(' четверг');
5: writeln(' пятница');
6: writeln(' суббота'); end; readln(t)
until (t=' ')
end{week_day}.
Лекция 10: Структурный тип - Массив.
1. Понятие массива в Паскале.
2. Описание массивов и доступ к элементам массива..
3. Обработка массивов.
4. Пример работы с массивом.
1. Понятие массива в Паскале.
Массив является одним из основных структурных типов Паскаля, широко применяемым в практике программирования. Идея массива состоит в том, чтобы объединить в одно целое фиксированное количество элементов одного и того же типа. Например, массив результатов измерений, массив данных о ежедневном расписании и др. Без использования массива в этих и многих других случаях пришлось бы описывать большое число переменных для представления данных, что делает нереальной обработку таких данных. Массив дает удобный способ представления и обработки массовых однородных данных.
Суть концепции массива в Паскале заключается в том, чтобы объединить элементы в такую структуру, в которой эти элементы были бы линейно упорядочены (пронумерованы) так, чтобы к ним был прямой доступ через их номер. Номер элемента в массиве принято называть индексом элемента.
В Паскале допустимы только статические массивы. Это означает, что число элементов массива должно оставаться постоянным при обработке массива и быть указано при описании массива. Размер массива в Паскале не может быть представлен переменной, а только константой. Другими словами, размер массива должен быть известен в период компиляции программы, так как под него статически распределяется память. Это, конечно, является существенным ограничением, однако позволяет сохранить в более чётком виде концепцию типов в Паскале. Для работы с переменным числом компонентов в Турбо Паскале следует использовать динамические структуры данных - указатели или файлы, с которыми мы познакомимся во второй части курса.
2. Описание массивов и доступ к элементам массива.
Прежде чем использовать массив, его следует описать в разделе описаний программы. Общая форма описания массива имеет вид:
type <имя типа-массива> = array [ < тип индекса > ] of < тип элементов>;
где: <имя типа-массива> - имя, выбираемое программистом.
< тип индекса > - любой порядковый тип (кроме longint) или тип-диапазон.
< тип элементов > - любой тип Турбо Паскаля.
В качестве типа индекса часто используют тип-диапазон, указывающий границы индекса. Например:
type measure = array [ 1..16] of real; {тип -массив измерений}
var m1,m2: measure; {переменные-массивы измерений}
Кроме переменных допускается также описание типизированных констант-массивов, в котором элементы-константы перечисляются через запятую. Например:
сonst vect: array [1..8] of 0..9 = (0,0,0,0,1,2,3,4);
Если тип элементов - простой тип, то массив - одномерный (вектор). Однако тип элементов может быть в свою очередь тип-массив. В этом случае мы имеет дело с массивом более высокой размерности. Если тип элементов - одномерный массив, то описываемый массив - двумерный (матрица). Аналогичным образом можно получить трехмерные, четырехмерные массивы и т.д.
Двумерный массив (матрица) может быть описан в виде:
type <имя типа-массива>= array [<тип индекса1>] of array [<тип индекса2>] of <тип >;
Однако в Паскале допускается более компактная форма таких описаний, в которой вместо одного типа индекса используется список из нескольких типов индексов.
Для матрицы такое описание будет иметь вид:
type <имя типа-массива>=array[<тип индекса1,тип индекса2>]of <тип компонент>;
Например: type matr= array [ 1..16,1..8] of real; {тип - матрица 16х8}
var mt1,mt2: matr; {переменные типа matr}
Доступ к элементам массива осуществляется посредством так называемых индексированных имен, имеющих вид:
<имя переменной-массива > [<индексное выражение > ];
где : <индексное выражение > - выражение типа индекса (в частности, индексным выражением может быть переменная).
В случае, когда массив многомерный (имеет несколько индексов), доступ к элементу массива осуществляется по списку индексных выражений в виде:
<имя переменной-массива >[<индексное выражение1 >,<индексное выражение2 >, ...];
Например: m1[ j ] {значение j- элемента массива m1}
mt2[j+3, k] {значение элемента (j+3)-строки, k-столбца матрицы mt2}
Индексы, таким образом, предоставляют новый способ именования элементов, существенно отличный от имён простых переменных. По сути, индексированное имя (имя компонента массива) - вычислимое имя, т.е. такое, которое может изменяться при выполнении программы за счёт изменения значения индексного выражения. Это придает доступу по индексам весьма большую гибкость и удобство при обработке массивов.