Модуль 1. Основы алгоритмизации 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Модуль 1. Основы алгоритмизации



Содержание

  • 1. Основы алгоритмизации
    • 1.1 Этапы решения задач на ЭВМ
    • 1.2 Алгоритм. Свойства алгоритмов
    • 1.3 Алгоритмическая конструкция ветвления
    • 1.4 Алгоритмическая конструкция цикла
    • 1.5 Использование циклов с параметром для обработки массивов
  • 2. Основные конструкции языка Паскаль
    • 2.1 История создания языка
    • 2.2 Интегрированная инструментальная оболочка (ИИО) Turbo Pascal (TP)
    • 2.3 Алфавит и программа на TP 7.0
    • 2.4 Простые типы данных
  • 3. Управляющие конструкции языка ТП
    • 3.1 Безусловные конструкции
    • 3.2 Условные конструкции
    • 3.3 Конструкция выбор
    • 3.4 Циклические конструкции
  • 4. Структурированные типы данных
    • 4.1 Массивы
    • 4.2 Сортировка массивов
    • 4.3 Строковый тип данных
    • 4.4 Множества
    • 4.5 Записи
  • 5. Процедуры и функции
    • 5.1 Процедуры и функции
    • 5.2 Функции пользователя
    • 5.3 Процедуры пользователя
    • 5.4 Использование функций в приближенных вычислениях
    • 5.5 Использование процедур в приближенных вычислениях
    • 5.6 Использование библиотек стандартных процедур в программах. Модуль Crt. Текстовые режимы использования экрана
  • 6. Файлы
    • 6.1 Файлы
    • 6.2 Сортировка файлов
  • 7. Объектно - ориентированное программирование
    • 7.1 Тип объект
    • 7.2 Инкапсуляция
    • 7.3 Наследование
    • 7.4 Полиморфизм
  • 8. Язык программирования Си
    • 8.1 История создания языка
    • 8.2 Структура простой программы на языке Си
    • 8.3 Представление данных в языке Си
    • 8.4 Форматированный ввод/вывод
    • 8.5 Операции, выражения и операторы
    • 8.6 Директивы препроцессора
    • 8.7 Реализация циклов в языке Си
    • 8.8 Условные и безусловные переходы в языке Си
    • 8.9 Использование массивов при реализации циклов

Модуль 1. Основы алгоритмизации

 

Этапы решения задач на ЭВМ.

 

Решение задачи разбивается на этапы:

  1. Постановка задачи
  2. Формализация (математическая постановка)
  3. Выбор (или разработка) метода решения
  4. Разработка алгоритма
  5. Составление программы
  6. Отладка программы
  7. Вычисление и обработка результатов
  1. При постановке задачи выясняется конечная цель и вырабатывается общий подход к решению задачи. Выясняется сколько решений имеет задача и имеет ли их вообще. Изучаются общие свойства рассматриваемого физического явления или объекта, анализируются возможности данной системы программирования.
  2. На этом этапе все объекты задачи описываются на языке математики, выбирается форма хранения данных, составляются все необходимые формулы.
  3. Выбор существующего или разработка нового метода решения (очень важен и, в то же время личностный этап).
  4. На этом этапе метод решения записывается применительно к данной задаче на одном из алгоритмических языков (чаще на графическом).
  5. Переводим решение задачи на язык, понятный машине.

 

Название

Символ (рисунок)

Модуль 2. Основные конструкции языка Паскаль

 

История создания языка.

 

Первая версия языка Паскаль была разработана в 1968 году. Ее разработчиком является швейцарский ученый Никлаус Вирт. Свое название язык получил в честь создателя первой механической вычислительной машины француза Блеза Паскаля. На основе языка Паскаль в 1985 г. фирма Borland выпустила версию Turbo Pascal версии 3.0. С этого времени язык Паскаль используется во всем мире в учебных заведениях в качестве первого изучаемого языка программирования.

В пакете Turbo Pascal 4.0 были устранены ошибки и ограничения компилятора предыдущей версии. Наиболее важным нововведением была unit-концепция, позаимствованная из языка МОДУЛА-2. Это позволило разрабатывать крупные программные продукты. В версии 5.0 появился интегрированный отладчик. Был реализован аппарат перекрытий overlays. В этой версии были исправлены и улучшены библиотеки графических процедур, которым была обеспечена совместимость с графическими адаптерами класса VGA. Появились новые возможности справочной системы Help.

В версии 6.0 была реализована концепция объектно-ориентированного программирования с полным набором прикладных задач для пользователя. В оболочку был встроен интегрированный текстовый редактор. В этой версии впервые использовалась мышь для управления работой.

В 1992 г. появилась последняя на сегодняшний день версия языка Turbo Pascal - 7.0. В ней сохранились все достоинства предыдущих версий:

  • многооконный режим работы
  • возможность использования мыши
  • возможность использования Ассемблера
  • возможность создавать объектно-ориентированные программы

К улучшениям этой версии относятся:

  • возможность выделять определенным цветом различные элементы исходного текста
  • расширен язык программирования. Появился типизированный адресный оператор, открытые массивы и строки
  • улучшен компилятор
  • изменен интерфейс пользователя

 

Простые типы данных.

 

Любые данные ТП характеризуются своими типами. Тип определяет:

  1. Формат представления данных в памяти компьютера
  2. Множество допустимых значений, принимаемое переменной или константой, принадлежащей к выбранному типу
  3. Множество допустимых операций применимых к этому типу

Тип переменной определяется при ее декларации. Одна из базовых концепций Паскаля заключается в жесткой проверке соответствия типов в операциях присваивания.

Типы данных в языке ТП делятся на 5 основных классов:

  1. Простые типы
  2. Структурированные типы
  3. Ссылочные типы
  4. Процедурные типы
  5. Объектные типы

К простым типам относятся: целочисленные типы, логический тип, символьный тип, перечисляемый тип, интервальный тип, вещественные типы.

Среди этих видов выделяют подмножества типов, отличных от вещественного, называемых порядковым типом.

Порядковые типы обладают четырьмя характеристиками:

  1. Все возможные значения данного порядкового типа представляют собой упорядоченное множество и каждое возможное значение связано с порядковым номером, который является целым числом
  2. Значения любого порядкового типа, за исключением целочисленного начинается с порядкового номера ноль (следующий порядковый номер 1, 2, 3…)
  3. Порядковым номером значения целочисленного типа является само значение
  4. В любом порядковом типе каждому значению кроме первого есть предыдущее и каждому значению кроме последнего есть последующее

К данным любого порядкового типа можно применить любую из пяти операций:

  1. Стандартная операция Ord возвращает порядковый номер указанного значения. Значение указывается в скобках
  2. Стандартная операция Pred возвращает значение, предшествующее указанному, если эта функция применяется к первому значению данного типа, то выдается сообщение об ошибке
  3. Стандартная операция Succ возвращает следующее значение за указанным, если операция применяется к последнему элементу типа, то выдается сообщение об ошибке
  4. Стандартная операция Low возвращает наименьшее значение в диапазоне порядкового типа, указанного данного
  5. Стандартная операция High возвращает наибольшее значение в диапазоне порядкового типа, указанного данного

В TP имеется 5 предопределенных, целочисленных типов. Каждый тип обозначает определенное подмножество целых чисел:

Тип

Диапазон

Формат

Короткое целое shortint

-128..127

8 бит со знаком

Целое integer

-32768..32767

16 бит со знаком

Длинное целое longint

-2147483648..2147483647

32 бита со знаком

Длиной в байт byte

0..255

8 бит без знака

Длиной в слово word

0..65535

16 бит без знака

 

Верхнее граничное значение и нижнее граничное значение целочисленных типов задаются как константы и имеют соответствующее имя.

В тексте программы данные целочисленных типов записываются в десятичном или шестнадцатеричном формате и не должны содержать десятичные точки.

Пример:

1 - целый тип

1.0 - не целый тип

100 - десятичный формат (100)

#100 - шестнадцатеричный формат (256)

Над целочисленными данными возможно выполнение операций сложения, вычитания и умножения, а также операций сравнения. Арифметические действия над операндами целочисленного типа предполагают восьмибитовую, 16-битовую или 32-битовую точность вычислений, в соответствии со следующими правилами:

  1. Тип целой константы представляет собой встроенный целочисленный тип с наименьшим диапазоном, включающий значение данной константы
  2. В случае бинарной операции оба операнда преобразуются к общему типу. Общим типом будет целочисленный тип с наименьшим диапазоном, включающим значение обоих операндов. Действие выполняется в соответствии с точностью общего типа и результатом будет общий тип
  3. Выражение справа в операторе присваивания вычисляется независимо от размера или типа переменной слева
  4. Любые операнды размера в байт преобразуются в операнды размера слово

К логическим типам относятся данные типов Boolean, ByteBool, WordBool, LongBool.

Значением каждого данного логического типа могут являться 2 значения: TRUE (1) и FALSE (0).

Для данных логического типа применимы только две операции сравнения: равно и не равно.

Переменные типа Boolean и ByteBool занимают один байт; переменная WordBool - 2 байта; LongBool - 4 байта.

Boolean - это предпочтительный тип, использующий меньше памяти. Остальные типы обеспечивают совместимость с другими языками и средой Windows.

Предполагается, что тип Boolean имеет порядковые значения 0 и 1, а другие типы могут иметь другие порядковые значения. Когда выражение типа ByteBool, WordBool или LongBool равно 1, то его значение истинно, когда 0 - ложь; любое другое значение преобразуется к единице и считается истинным.

Символьный тип (char) представляет собой тип данных, предназначенный для хранения одного символа (буквы, знака или кода). В переменную этого типа может быть помещен любой из 256 символов расширенного кода ASCII.

Переменная типа char занимает один байт памяти. Значения типа char задаются в апострофах. Кроме того можно задавать значения используя код из таблицы ASCII. Над данными символьного типа можно выполнять операции сравнения.

Перечисляемый тип определяется как упорядоченный набор идентификаторов, заданный путем их перечисления. При этом список идентификаторов разделенных запятой указывается в круглых скобках. Задается перечисляемый тип в разделе type.

Пример:

type A=(2, 4, 1, 7);

B=('c', 'L', '3', '|');

Значения переменных перечисляемого типа не могут вводиться с клавиатуры и выводиться на экран.

Интервальный тип данных определяется посредством задания подмножества значений одного из ранее определенных типов. Можно использовать все простые типы, за исключением вещественного. При задании диапазона указывается наименьшее и наибольшее значения, разделенные двумя точками. При этом оба значения обязательно одного типа.

К вещественному типу относится подмножество вещественных чисел, представленных в формате с плавающей точкой и фиксированным числом цифр.

В ТП имеется 5 видов вещественных типов:

Тип

Диапазон

Точность

Формат

Real (вещественное)

2.9*10-39..1.7*1038

11-12 знаков

6 байт

Single (с одинарной точностью)

1.5*10-45..3.4*1038

7-8 знаков

4 байта

Double (с двойной точностью)

5.0*10-324..1.7*10308

15-16 знаков

8 байт

Extended (с повышенной точностью)

3.4*10-4932..1.1*104932

19-20 знаков

10 байт

Comp (сложное)

-9.2*1018..9.2*1018

19-20 знаков

8 байт

 

Действия над типами с одинарной, двойной, повышенной точностью и сложным типом могут выполняться только при наличии числового сопроцессора. Поэтому считается что постоянно доступным является только тип Real.

 

 

Имя функции

Математическое значение

Тип результата

a mod b

Остаток деления a на b

Целое

a div b

Целая часть деления a на b

Целое

abs (a)

|a|

Совпадает с типом аргумента

sqr (a)

a2

Совпадает с типом аргумента

sqrt (a)

Вещественное

sin (a)

sin a

Вещественное

cos (a)

cos a

Вещественное

arctan (a)

arctg a

Вещественное

ln (a)

ln a

Вещественное

exp (a)

ea

Вещественное

 

При составлении сложных выражений осуществляется приоритет выполнения операций:

  1. not, @
  2. *, /, div, mod, and, shl, shr
  3. +, -, or, xor
  4. =, <>, <=, >=, >, <, in

 

Операторы ввода/вывода.

 

ТП содержит четыре оператора ввода/вывода: read, readln, write, writeln.

Оператор read осуществляет ввод данных с клавиатуры и размещение их в стандартном файле ввода input. Вводимые данные размещаются в качестве значений переменных, имена которых перечислены в круглых скобках за оператором read.

read (a, b, c);

Вводятся данные тоже списком, в котором они разделяются пробелом. Ввод заканчивается нажатием Enter. Курсор, отмечающий позицию следующего ввода/вывода остается за последним введенным данным.

Оператор readln выполняет аналогичные действия и переводит курсор на следующую строку.

Оператор write осуществляет вывод на экран или печатающее устройство с одновременным размещением в стандартном файле вывода output. Оператор может выводить сообщение или значение переменной. Сообщения записываются в апострофах. Для вывода значения переменной указывается имя переменной. Сообщения и переменные можно чередовать в одном списке, разделяя их запятыми. Курсор остается за последним выведенным данным.

Оператор writeln выполняет аналогичные действия и переводит курсор на следующую строку.

Операторы write и writeln допускают т.н. форматированный вывод данных.

write (a:5:2);

Первое из чисел указывает сколько экранных знаков отводится под вывод. Второе число указывает количество знаков после запятой в числе и может отсутствовать.

 

 

Безусловные конструкции.

 

Оператор языка представляет собой неделимый элемент программы, который позволяет выполнять определенные алгоритмические действия. Все операторы можно условно разделить на две группы: простых операторов и структурированных операторов. К простым относятся те операторы, которые не содержат других операторов. К структурированным - те, которые состоят из других операторов.

В ТП 7.0 существует всего один оператор безусловного перехода Goto и четыре безусловных функции: Break, Continue, Exit, Halt.

Оператор безусловного перехода Goto представляет собой простой оператор, используя который можно изменять порядок выполнения операторов в программе. Общий вид оператора безусловного перехода:

goto <метка>, где <метка> - это идентификатор или целое число от 0 до 9999, объявленное в разделе меток label.

Применение оператора безусловного перехода в ТП - программе является нежелательным, т.к. его присутствие нарушает структурную целостность и наглядность. Такую программу трудно читать, отлаживать и модифицировать.

Функция Break позволяет досрочно закончить цикл.

Функция Continue - позволяет начать новую итерацию цикла, даже если предыдущая не была завершена.

Функция Exit - позволяет завершить работу текущего программного блока.

Функция Halt (n), где n - некоторое целое число - позволяет завершить работу программы с кодом завершения n.

 

 

Условные конструкции.

 

1) неполная форма с одним оператором

2) полная форма с одним оператором

3) неполная форма с несколькими операторами

4) полная форма с несколькими операторами

1) IF условие THEN оператор;

2) IF условие THEN оператор1 ELSE оператор2;

3) IF условие THEN BEGIN

оператор1;

оператор2;

оператор N;

END;

4) IF условие THEN BEGIN

оператор1;

оператор2;

операторN;

END ELSE

BEGIN

оператор1;

оператор2;

операторN;

END;

Пример: ввести оценку студента в баллах и сообщить ее название.

Begin

Read(b)

If b=5 then Write(' отлично ') else

If b=4 then Write(' хорошо ') else

If b=3 then Write(' удовл.') else

If b=2 then Write(' неудовл.') else

Write ('это не оценка');

End.

 

 

Конструкция выбор.

 

Ситуации, реализующие систему вложенных ветвлений могут быть разрешены с использованием конструкции выбор.

Оператор выбора является структурированным и использует в своей записи операторы case, of, else, end и операторные скобки по необходимости.

В самом общем виде оператор выбора можно записать так:

Case порядковая переменная of

значение1: begin оператор1; оператор2; …; операторN; end;

значение2: begin оператор1; оператор2; …; операторN; end;

значениеM: begin оператор1; оператор2; …; операторN; end;

else begin оператор1; оператор2; …; операторN; end;

end;

Пример: ввести оценку студента в баллах и сообщить ее название.

Begin

Read(b)

Case b of

5: Write(' отлично ');

4: Write(' хорошо ');

3: Write(' удовл.');

2: Write ('неудовл.');

else Write ('это не оценка');

end;

End.

 

Порядковая переменная, значение которой при выполнении программы определяет ветвь в операторе выбора, подлежащую выполнению, может принадлежать любому целочисленному типу. В случае, когда для нескольких значений выполняемые действия одинаковы, их можно указать один раз, а сами значения перечислить через запятую.

Пример: напечатать количество дней во введенном месяце:

Begin

Read(m);

Case m of

янв, мар, май, июл, авг, окт, дек: Write('31');

апр, июн, сен, ноя: Write('30');

фев: Write('28');

else Write (' это не месяц ');

end;

End.

 

 

Циклические конструкции.

 

Цикл с предусловием.

Для реализации циклов с предусловием используется составной оператор, включающий оператор while, do, операторные скобки.

В общем виде цикл реализуется записью:

while <условие> do <действие>;

Если тело цикла содержит более одного действия, то необходимо использовать операторные скобки:

while <условие> do

begin

<оператор 1>;

<оператор 2>;

...

<оператор n>;

end;

 

Цикл с постусловием.

Для реализации цикла используется составной оператор, состоящий из операторов repeat и until.

В общем виде цикл записывается так:

repeat

<действие>;

until <условие>;

Пример: задано целое число. Вывести на печать все цифры введенного числа.

1 способ:

 

var a,b:longint;

Begin

read(a);

repeat

b:=a mod 10;

writeln(b);

a:=a div 10;

until a=0;

End.

2 способ:

 

var a,b:longint;

Begin

read(a);

while a<>0 do

begin

b:=a mod 10;

write(b:3);

a:=a div 10;

end;

End.

 

Цикл с параметром.

Для реализации в языке Pascal используется составной оператор, состоящий из операторов for, to, downto, do и при необходимости из операторных скобок. Переменная параметр обязательно объявляется в декларационной части программы и может принадлежать одному из порядковых типов.

Если при изменении переменной параметра необходимо использовать переход к следующему значению, то используется оператор to; если переход необходимо осуществить к предыдущему значению, то используется оператор downto. Тогда в общем виде цикл записывается так:

for I:=I0 to In do

begin

<оператор 1>;

<оператор 2>;

...

<оператор n>;

end;

 

Массивы.

 

Объявление переменной массива происходит в разделе var. При этом используется зарезервированное слово array, указывается тип массива и его размерность перечислением индексов, а также объявляется тип данных в массиве.

Пример 1:

Пример 2:

var masiv: array ['a'..'z'] of integer;

Для обращения к элементу массива в Pascal-программе указывается имя массива и в квадратных скобках индексы элемента.

Пример 1:

a [2,4]

а) ввести значение:

read (A[2,4]);

б) изменить значение:

A[2,4]:=5;

в) сообщить значение:

write (A[2,4]);

Пример 2:

masiv ['b'];

masiv['b']:=47*24;

Задача ввода элементов массива.

а) линейного:

 

 

program vvod;

var A: array [1..10] of integer;

i:integer;

begin

for i:=1 to 10 do

read (A[i]);

end.

 

 

б) двумерного:

 

 

program vvod;

const n=5; m=7;

var A: array [1..n,1..m] of real;

i,j: integer;

begin

for i:=1 to n do

for j:=1 to m do

read (A[i,j]);

end.

 

 

Задача 2: найти минимальный элемент в массиве:

 

 

program min;

const n=10;

var i: byte;

a: array [1..n] of real;

min: real;

begin

for i:=1 to n do read (A[i]);

min:=A[1];

for i:=1 to n do

if min>A[i] then min:=A[i];

write (min);

end.

 

 

Сортировка массивов.

 

Сортировкой называется процесс расположения элементов массива в порядке убывания (возрастания) из значений.

Пример:

Алгоритм выполнения сортировки называется методом сортировки. К наиболее распространенным методам относятся:

  1. Простым выбором
  2. Простой перестановкой
  3. Пузырьковый метод
  1. На каждом шаге находится минимальный (максимальный) неотсортированной части. Он меняется с первым элементом в неотсортированной части, после чего отсортированная часть увеличивается на один элемент. На первом шаге весь массив считается неотсортированным. Сортировка заканчивается за (n-1) шаг.
  2. Пример: 241795

 

1 шаг: 1 | 42795

2 шаг: 12 | 4795

3 шаг: 124 | 795

4 шаг: 1245 | 97

5 шаг: 124579

 

  1. На каждом шаге массив делится на отсортированную и неотсортированную части. Первый элемент из неотсортированной части сравнивается с каждым элементом отсортированной части, начиная с последнего. Если найден элемент, больший сравниваемого, то они меняются местами. Шаг закончен когда просмотрены все отсортированные элементы. Сортировка закончена когда просмотрены все неосортированные элементы. На первом шаге отсортироованным считается первый элемент.
  2. Пример: 2 | 41795

 

1 шаг: 24 | 1795

2 шаг: 21 | 4795

124 | 795

3 шаг: 1247 | 95

4 шаг: 12479 | 5

124759

124579

 

  1. На каждом шаге сравниваются все соседние элементы. В случае необходимости они меняются местами. Сортировка считается законченной за nn действий или на шаге, когда не выполнено ни одной перестановки.
  2. Пример: 241795

 

1 шаг: 214795 true

2 шаг: 124579 true

3 шаг: 124579 false

 

 

Строковый тип данных.

 

Переменная типа строка предназначена для обработки цепочек символов. Каждый символ является элементом типа char. Строки могут вводиться с помощью стандартных операторов read/readln и выводиться стандартными операторами write/writeln.

Объявляются переменные типа строка в разделе var. При объявлении указываются идентификатор переменной, зарезервированное слово string и, в квадратных скобках, целое число - максимально возможная длина строки. Наибольшая длина строки составляет 256 символов. Если переменная имеет значение с максимальной длиной строки, то при объявлении переменной ограничиваются зарезервированным словом.

Пример:

var

identificator_1: string;

identificator_2: string[20];

identificator_3: string[255];

Значение строкового типа также как и значение типа char при записи внутри программы заключаются в апострофы.

Пример:

identificator_1:=' это - компьютер ';

identificator_1[1]:=' э ';

Простейшая операция которую Pascal позволяет выполнить со строками - это операция конкатенации, или сцепления, или объединения строк в операторе присваивания. Операция записывается с помощью знака "+".

Пример:

identificator_1:='это' + '-' + 'компьютер';

 

Для обработки строковых данных используется ряд встроенных функций:

1) Length (L) - определяет длину строки, являющуюся значением переменной L. Значение, возвращаемое этой функцией является целочисленным и отображает реальную длину строки, т.е. может не совпадать со значением длины строки, объявленным при декларации.

Пример 1:

var

L: string[15];

A: byte;

Begin

L:=' Урок ';

A:=length(L);

Write(A);

End.

 

Пример 2:

Begin

write(length(' Урок '));

End.

2) Upcase (C) - преобразует любой символ в прописной. Переменная C может иметь значение типа char, либо являться одним элементом из строки. Русские символы обрабатываться этой функцией не могут.

3) Copy (L, A, B) - позволяет копировать фрагмент строки являющейся значением переменной L, начиная с позиции A в количестве B, где A и B - целые числа, причем значение A не превышает длины строки L, а значение B не превышает (длина строки L - A). Если эти правила нарушены, то ошибки компиляции не произойдет, но возможно совершение логической ошибки в программе.

4) Pos (L, M) - возвращает результат целочисленного типа, являющийся номером позиции, с которой строка L входит в строку M. Если строки L нет в строке M, то результат - 0.

5) Insert (L, M, A) - вставляет строку L в строку M, начиная с позиции с номером A. Фактически, вставка производится перед указанной позицией.

6) Delete (L, A, B) - удаляет из строки L B символов, начиная с позиции A.

Если номера позиций в функциях Insert и Delete не соответствуют длине рассматриваемых строк, то произойдет ошибка компиляции.

Пример 1: переставить буквы введенного слова в противоположном порядке. Например, ввели "урок", получили - "кору":

Пример 2: изменить введенное значение строковой переменной на слово, записанное теми же символами, но в обратном порядке. Новую переменную не использовать:

Пример 3: сравнение слов в Pascal.

 

 

Program slovo;

Var

word1, word2: string[60];

Begin

readln(word1);

readln(word2);

if word1 > word2 then writeln ('>')

else begin

if word1 = word2 then writeln ('=')

else writeln ('<');

End.

 

 

Множества.

 

Множеством называется упорядоченная совокупность данных одного типа, записанных без повторений и отсортированных по возрастанию. Максимальное множество состоит из 256 элементов. Для объявления множеств используется зарезервированное слово set, за которым указывается тип элемента множества или сами элементы.

Пример:

type A: 5..9;

var

B: set of A;

C: set of char;

D: set of '1'..'5';

Внутри программы элементы множества записываются в квадратных скобках. Для перечисления используется интервальный, перечисляемый типы или их комбинации.

Пример: e:['A'..'Q', 'T', 'x'..'z']

Элементы множеств нельзя вводить с клавиатуры и выводить стандартными операторами, т.к. элементы множества относятся к перечисляемому типу.

Над множествами можно выполнять следующие операции:

  1. Объединение (+). Результатом будет множество, состоящее из всех элементов первого и второго множеств без повтора:
  2. Пример:
  3. [1..3, 6, 9..11] + [2..4, 7, 10..12] = [1, 2, 3, 4, 6, 7, 9, 10, 11, 12] = [1..4, 6, 7, 9..12]
  4. Пересечение (*). Результатом будет множество, состоящее из тех элементов, которые присутствуют как в первом, так и во втором множествах.
  5. Пример:
  6. [1..3, 6, 9..11] * [2..4, 7, 10..12] = [2, 3, 10, 11]
  7. Разность двух множеств (-). Результатом будет множество, состоящее из тех элементов первого множества, которых нет во втором.
  8. Пример:
  9. [1..3, 6, 9..11] - [2..4, 7, 10..12] = [1, 6, 9]
  10. Операция in - проверяет принадлежность элемента множеству. Результатом операции будет логическое значение (true или false).
  11. Пример:
  12. [2] in [1..4] (true)
  13. [7] in [1..7] (false)
  14. Сравнение. Равными называются множества, состоящие из одинаковых элементов. Большим будет множество, у которого больше элементов. Из двух множеств с равным количеством элементов большим будет то, первое несовпадающее значение которого больше.

Пример: из введенной последовательности символов, признаком конца которой является '0', сформировать множество заглавных и строчных латинских букв.

var

c: char;

a, pl: set of 'A'..'Z';

b, sl: set of 'a'..'z';

i: char;

Begin

pl:= [0];

sl:= [0];

repeat

read(c);

if [c] in a then pl:=pl+[c];

if [c] in b then sl:=sl+[c];

until [c]='0';

for i:='A' to 'Z' do

if [i] in pl then write(i:3);

for i:='a' to 'z' do

if [i] in sl then write(i:3);

End.

 

 

Записи.

 

Пример:

Для реализации объединения данных разного типа в языке Pascal существует специальная структура - запись. Объявление записи начинается с зарезервированного слова record, за которым перечисляются имена и типы всех составляющих записей ее полей. Заканчивается объявление скобкой end.

Пример:

type

karta = record

family: string[20];

name: string[15];

age: integer;

end;

При обращении к записи в программе указывается имя записи и через точку имя поля.

Пример:

karta.family:='Иванов';

karta.name:='Иван';

karta.age:=20;

Для упрощения обращения к записи может быть использован оператор работы со структурой with.

Пример:

with karta do

begin

family:=' Иванов ';

name:='Иван';

age:=20;

end;

Полями записи наряду с простыми типами могут быть и данные структурированных типов, например, массивы или записи.

Пример 1:

var z: record

pole1: string;

pole2: array [1..10] of byte;

end;

Begin

for i:=1 to 10 do

read (z.pole2[i]);

End.

 

Пример 2: объявите запись, содержащую сведения о фамилии, дате рождения и адресе студента.

var student: record

fam: string[15];

data: record

day: 1..31;

mes: 1..12;

year: integer;

end;

adres: record

street: string[15];

dom: byte;

kvart: byte;

end;

end;

Begin

with student do

begin

fam:= ' Иванов ';

with data do

begin

day:= 30;

mes:= 4;

year:= 1987;

end;

with adres do

begin

street:= ' Туполева ';

dom:= 22;

kvart:= 154;

end;

end;

End.

Для использования в программе набора с одинаковыми полями используются массивы записей.

Пример: объявить массив из десяти записей.

1 вариант решения:

var A: array [1..10] of record

fam: string;

name: string;

end;

2 вариант решения:

type student = record

fam: string;

name: string;

end;

var A: array [1..10] of student;

 

Процедуры и функции.

 

Процедуры и функции используются в тех случаях, когда:

  1. Алгоритм или программа содержат одинаковые действия, различающиеся, возможно исходными данными;
  2. Решаемая задача состоит из нескольких задач, меньших по объему и сложности;
  3. Решением задачи занимается коллектив программистов.

 

Функции пользователя.

 

Работа с функцией в Паскаль-программе состоит из двух частей: объявление функции и обращение к функции. Объявление функции производится в специальном разделе декларационной части Паскаль-программы непосредственно перед разделом операторов. Начинается объявление с заголовка функции. В общем виде заголовок имеет следующие разделы:

function <имя функции> (<список параметров>): <тип возвращаемого результата>, где function - зарезервированное слово.

В качестве имени функции может использоваться любой допустимый идентификатор.

Список параметров содержит перечисление всех формальных аргументов с указанием их типа. Однотипные аргумент можно перечислить списком.

Тип возвращаемого результата - один из стандартных типов языка Паскаль.

Пример:

function factorial (n:integer):real;

function mm (a, b:real; c:byte; d:char):integer;

При обращении к функции из раздела операторов Паскаль-программы указывается имя функции и список фактических параметров.

Обращение к функциям возможно из оператора вывода.

В качестве фактических параметров могут использоваться как значения, так и ссылки на другие переменные. В любом случае количество фактических и формальных параметров одинаково и передача значений происходит в порядке записи.

Пример:

F:=factorial(5);

T:=factorial(2)-7;

M:=factorial(n);

P:=mm(d,c,b,a);

Задача 1: вычислить факториалы первых 10 натуральных чисел:

var i: byte;

f: real;

function factorial (n: byte): real;

var i: byte;

f: real;

begin

f:=1;

for i:=1 to n do

f:=f * i;

factorial:=f;

end;

begin

for i:=1 to 10 do

begin

f:=factorial(i);

writeln(f);

end;

end.

Задача 2: вычислить 10 натуральных степеней для каждого из первых 10 натуральных чисел:

var i, j: byte;

p: real;

function stepen (b: integer; n: byte): real;

var i: byte;

a: real;

begin

a:=1;

for i:=1 to n do

a:=a * b;

stepen:=a;

end;

begin

for i:=1 to 10 do

for j:=1 to 10 do

begin

p:=stepen (i, j);

write (p);

end;

end.

 

 

Процедуры пользователя.

 

Функции являются частным случаем, т.е. подвидом процедур. Следовательно, все свойства функций справедливы для процедур.

Объявляются процедуры в описательной части программы, в одном разделе с функциями. Порядок объявления независимых друг от друга процедур и функций не важен, если процедура использует в себе обращение к функции или другой процедуре, то последнии обязательно объявляются раньше.

Объявление процедур начинается с заголовка:

procedure <имя процедуры> (<список параметров>);, где procedure - зарезервированное слово.

Список параметров процедур содержит формальные параметры двух видов. Те, значения которых не возвращаются в программу, и параметры с возвращаемыми значениями.

Последние в списке отмечаются зарезервированным словом var.

Пример:

procedure xxx(a: byte; var b: byte; c,d: real; var j: char);



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 93; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.19.56.45 (0.429 с.)