Раздел процедур или функций (подпрограмм).

Учебное пособие

по дисциплине «Основы программирования»

для студентов очного отделения

специальности 09.02.03

«Программирование в компьютерных системах»

Нижний Новгород

СОДЕРЖАНИЕ

Пояснительная записка 3

ОСНОВНАЯ ЧАСТЬ 4

ЭЛЕМЕНТЫ ЯЗЫКА ПАСКАЛЬ 5

ОПЕРАТОРЫ ЯЗЫКА ПАСКАЛЬ 13

СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ 29

ПОДПРОГРАММЫ В ПАСКАЛЕ 48

ЗАКЛЮЧЕНИЕ 54

ЛИТЕРАТУРА 55


Пояснительная записка

Методическая разработка «Основы программирования на алгоритмическом языке Паскаль» предназначена для студентов очного отделения специальности 09.02.03 «Программирование в компьютерных системах» в качестве учебного пособия при изучении раздела «Алгоритмический язык программирования Паскаль» дисциплины «Основы программирования».

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

В результате изучения данного пособия студент должен:

уметь:

− реализовывать построенные алгоритмы в виде программ на языке программирования Паскаль;

знать:

− типы данных;

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

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

ОСНОВНАЯ ЧАСТЬ

ВВЕДЕНИЕ

Алгоритмический язык высокого уровня Паскаль, названный в честь французского математика и философа Блеза Паскаля, был создан в 1968-1971 гг. Николаусом Виртом в высшей технической школе в Цюрихе.

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

1. Легкость реализации на ПК.

2. Возможность достаточно полного контроля правильности программы, как на этапе компиляции, так и на этапе выполнения.

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

4. Наличие набора структурных типов данных: массивов, записей, множеств, файлов.

К недостаткам можно отнести отсутствие операции возведения в степень.

ЭЛЕМЕНТЫ ЯЗЫКА ПАСКАЛЬ

ОСНОВНЫЕ ПОНЯТИЯ ЯЗЫКА ПАСКАЛЬ

Алгоритмический язык – это набор символов языка (алфавит языка), система правил составления из этих символов конструкций языка (синтаксис языка) и система правил истолкования этих конструкций (семантика языка).

Алфавит языка Паскаль содержит следующие символы:

- строчные и прописные буквы латинского алфавита;

- арабские цифры от 0 до 9;

- специальные символы ( +, - , *, ; , :, «, /, ‘, =, [ ], ( ), < >, !, ?, пробел и др.);

- буквы русского алфавита (для написания комментариев и подсказок).

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

Для обозначения объекта программы используется идентификатор.

Идентификатор (имя) – это любая последовательность букв и цифр, начинающаяся с буквы. Рекомендуемая максимальная длина идентификатора - 8 символов.

ДАННЫЕ В ПАСКАЛЕ

Данные – это формализованное представление информации, пригодной для обработки. Каждый элемент данных в программе является либо переменной, либо константой.

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

Синтаксис определения констант – это раздел описания констант, запись которого начинается со служебного слова CONST. Тип константы определяется её записью.

CONST

имя = ± константа;

Например: CONST

E =2.72;

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

Синтаксис определения переменных - это раздел описания переменных, запись которого начинается со служебного слова VAR (variables – переменные). С помощью описания устанавливается не только факт существования переменной, но и задается её тип. В одном разделе можно описать несколько переменных.

VAR

идентификатор 1, идентификатор 2, …, идентификатор N:тип;

Например: VAR

A, B, C: INTEGER;

ТИПЫ ДАННЫХ

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

Тип - это множество значений плюс множество операций над ними.

1. СТАНДАРТНЫЕ ТИПЫ ДАННЫХ (скалярные).

1. Целый тип – INTEGER.

2. Вещественный тип – REAL.

3. Символьный тип – CHAR.

4. Логический тип (булевский) – BOOLEAN.

Целый тип - INTEGER

Значение – все целые числа в диапазоне от -32768 до 32767.

Константы целого типа – это любые числа записанные без десятичной точки:

Например: 55, -14.

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

Вещественный тип - REAL

Значение – все числа, которые имеют дробную часть.

Константы вещественного типа могут быть представлены в двух формах:

1) с фиксированной точкой (-27.3)

2) с плавающей точкой (4Е – 05 (4*10-5), 0.62Е+02 (0.62*102))

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

Символьный тип - CHAR

Константа символьного типа – это любой символ алфавита, заключенный в апострофы:

Например: ‘W’, ‘№’

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

Строковая константа – строка символов, заключенная в апострофы.

Например: ‘TRUE’, ‘Язык программирования Паскаль’

Логический тип - BOOLEAN

Значение – истина или ложь.

Константы логического типа – это TRUE (истина) и FALSE (ложь).

Переменные, принимающие в качестве своих значений константы логического типа, относятся к логическим переменным.

2. ТИПЫ ДАННЫХ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ.

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

TYPE

идентификатор=тип;

Перечисляемый тип

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

TYPE

перечисляемый тип=(значение типа 1, …, значение типа N);

VAR

идентификатор переменной:перечисляемый тип;

Например: TYPE

CHISLA=(0,1,2,3,4,5,6,7,8,9);

VAR

A:CHISLA;

Ограниченный тип

Определяется путем наложения ограничения на стандартный тип или определенный ранее пользователем тип.

TYPE

ограниченный тип::=минимальная константа..максимальная константа;

VAR

идентификатор переменной:ограниченный тип;

: : - могут отсутствовать.

Ограничения определяются заданием диапазона: минимальная константа - нижняя граница диапазона, максимальная константа - верхняя граница диапазона.

Константы должны быть одного и того же типа. Тип константы может быть любым стандартным типом кроме вещественного.

Например:

TYPE

CHISLA=0..9;

VAR

A:CHISLA;

Если константы имеют стандартный тип, то описание ограниченности типа можно делать в разделе переменных.

Например: VAR

A:0..9;

СТРУКТУРА ПРОГРАММЫ

Программа на языке Паскаль состоит из заголовка программы, который начинается со служебного слова PROGRAM и собственно программы. Заканчивается программа точкой.

PROGRAM имя;

ПРОГРАММА.

Программа содержит разделы описаний и раздел операторов.

Разделы описаний:

Раздел меток.

LABEL

число 1, число 2, …, число N;

где число 1, …, число N - целые числа без знака;

Любой оператор в программе можно выделить, поставив перед ним метку – целое число без знака, содержащее не более 4 цифр (от 1 до 9999). Метка от оператора отделяется двоеточием (метка: оператор;).

Раздел констант.

CONST

имя = ± константа;

Раздел типов.

TYPE

идентификатор = тип;

Раздел переменных.

VAR

идентификатор 1,идентификатор 2,…,идентификатор N:тип;

Арифметические выражения.

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

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

1. Нельзя записывать подряд два знака арифметических операций.

нельзя: A+-B

нужно: A+(-B)

2. Не допускаются верхние и нижние индексы, «двухэтажные» дроби.

нельзя: x1, x2, Раздел процедур или функций (подпрограмм). - student2.ru

нужно: x1, SQR(X), 1/2

3. Можно использовать скобки только круглого типа.

4. Вычисления выполняются слева направо, в соответствии со старшинством операций. Если присутствуют круглые скобки, то сначала выполняются действия в скобках.

Порядок выполнения действий в арифметическом выражении:

1. Вычисление значений функций.

2. Смена знака (-).

3. Умножение, деление, операции DIV, MOD.

4. Сложение, вычитание.

Операция возведения в степень в языке Паскаль отсутствует. Для выполнения этой операции используется следующая математическая формула:

Раздел процедур или функций (подпрограмм). - student2.ru

На Паскале это будет выглядеть так:

XY =EXP(Y*LN(X))

Например: X5 = EXP(5*LN(X))

Логические выражения.

Логическое выражение задает правило для вычисления логического значения TRUE и FALSE. Выражение строится из логических данных (логических функций, констант, переменных, операций отношения (сравнения)), связанных логическими операциями.

Порядок выполнения действий:

1. Операция отрицания - NOT.

2. Умножение, деление, операции DIV, MOD, логическое умножение – AND.

3. Сложение, вычитание, логическое сложение – OR.

4. Операции отношения (<, >, <=, >=, =, <>) - имеют самый низкий приоритет, поэтому их следует заключать в круглые скобки.

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

Функция Назначение Тип аргумента Тип функции
PI Число p=3,1415926536 - REAL
ABS(X) Абсолютное значение Х ( |x| ) REAL INTEGER REAL INTEGER
SQR(X) Квадрат Х (х2) REAL INTEGER REAL INTEGER
SIN(X) Синус Х REAL INTEGER REAL REAL
COS(X) Косинус Х REAL INTEGER REAL REAL
ARCTAN(X) Арктангенс Х REAL INTEGER REAL REAL
EXP(X) Экспонента Х (ех) REAL INTEGER REAL REAL
EXP10(X) 10 в степени Х (10х) REAL INTEGER REAL REAL
LN(X) Натуральный логарифм Х (ln x) REAL INTEGER REAL REAL
LOG(X) Десятичный логарифм Х (lg x) REAL INTEGER REAL REAL
SQRT(X) Квадратный корень из Х ( Раздел процедур или функций (подпрограмм). - student2.ru ) REAL INTEGER REAL REAL
TRUNC(X) Ближайшее целое, не превышающее Х по модулю REAL INTEGER
ROUND(X) Округление Х в сторону ближайшего целого REAL INTEGER
ODD(X) TRUE – если Х – нечетное FALSE – если Х– четное INTEGER BOOLEAN
ORD(X) Определение номера символа языка Паскаль в десятичной системе счисления CHAR INTEGER
CHR(X) Определение символа языка Паскаль по его порядковому номеру INTEGER CHAR
A DIV B Вычисление частного при делении А на В INTEGER INTEGER
A MOD B Вычисление остатка при делении А на В INTEGER INTEGER
INT(X) Целая часть Х INTEGER REAL REAL REAL
FRAC(X) Дробная часть Х INTEGER REAL REAL REAL
PRED(X) Нахождение элемента, являющегося предыдущим для данного (в перечне допустимых элементов) INTEGER BOOLEAN CHAR INTEGER BOOLEAN CHAR
SUCC(X) Нахождение элемента, являющегося следующим для данного (в перечне допустимых элементов) INTEGER BOOLEAN CHAR INTEGER BOOLEAN CHAR

PRED(TRUE)=FALSE

SUCC(FALSE)=TRUE

Если аргумент целый, то Y:=PRED(X) ≈ Y:=X-1

Y:=SUCC(X) ≈ Y:=X+1

ОПЕРАТОРЫ ЯЗЫКА ПАСКАЛЬ

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

программа пользователя;

наборы исходных данных, для этой программы;

наборы результатов выполнения программы;

Для ввода в программу исходных данных и вывода результатов используются два стандартных файла: INPUT – для ввода данных;

OUTPUT – для вывода данных.

Можно считать, что вычислительный процесс осуществляется преобразованием текстового файла INPUT в файл OUTPUT. Эти файлы могут записываться в заголовке программ.

PROGRAM P1 (INPUT, OUTPUT);

По умолчанию они имеют следующие описания.

TYPE

TEXT = PACKED FILE OF CHAR;

VAR

INPUT, OUTPUT: TEXT;

ПУСТОЙ ОПЕРАТОР

Синтаксис оператора:

N:; где N – метка.

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

СОСТАВНОЙ ОПЕРАТОР

Синтаксис оператора:

BEGIN

оператор 1;

оператор 2;

………….. ;

оператор N

END;

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

ОПЕРАТОР ПРИСВАИВАНИЯ

Синтаксис оператора:

V:=E;

где V – переменная, Е – выражение.

Оператор присваивания выполняется следующим образом: вычисляется значение выражения Е, стоящего в правой части оператора, и это значение присваивается переменной V, стоящей в левой части.

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

Допускаются следующие различия типов:

1) Переменной вещественного типа можно присвоить значение целого типа.

2) Переменной целого типа можно присвоить значение ограниченного типа.

Пример:

Вычислить процент выполнения плана выпуска продукции по предприятию.

PROGRAM PRIMER1;

USES CRT;

VAR

P,F,PR:REAL;

BEGIN

CLRSCR;

WRITELN (‘Введите план и фактический выпуск продукции’);

READLN (P, F);

PR:=F/P*100;

WRITELN (‘План выпуска продукции составляет:’,P:5:2);

WRITELN (‘Фактический выпуск продукции составляет:’,F:5:2);

WRITELN (‘Процент выполнения плана равен’,PR:6:2)

END.

Задачи для самостоятельного решения:

1. Даны семь чисел, найти их среднее арифметическое.

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

3. Вычислить длину окружности, площадь круга и объем шара одного и того же заданного радиус.

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

5. По длине двух сторон треугольника и углу между ними вычислить длину третьей стороны и площадь треугольника.

6. Ввести любой символ языка Паскаль и определить его порядковый номер, а также предыдущий и последующий символы (использовать функции ORD, PRED и SUCC).

БЕЗУСЛОВНЫЙ ОПЕРАТОР

Синтаксис оператора:

GOTO метка;

Безусловный оператор служит для изменения порядка выполнения операторов и для перехода на оператор с меткой, которая указана в этом операторе.

Оператор GOTO следует применять в исключительных случаях; частое его использование затрудняет чтение программы и свидетельствует о невысокой культуре программирования.

С помощью оператора GOTO нельзя:

1. Передать управление во внутрь составного оператора.

2. Передать управление во внутрь оператора цикла.

3. Передать управление во внутрь оператора выбора.

4. Передать управление в процедуру.

5. Передать управление из одной ветви условного оператора в другой условный оператор.

УСЛОВНЫЙ ОПЕРАТОР

Синтаксис оператора:

1. Полная форма

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

2. Краткая форма

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

оператор 2;

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

Условие – это логическое выражение, которое может принимать значение истина или ложь. Если условие истинно, то выполняется оператор, следующий за словом THEN, т.е. оператор 1; если условие ложно, то выполняется оператор, следующий за словом ELSE, т. е. оператор 2 - для полной формы оператора, либо оператор, следующий за условным - для сокращенной формы.

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

IF условие

THEN оператор 1

ELSE оператор 2;

После слов THEN и ELSE могут стоять и условные операторы. Для определения соответствия слов IF и ELSE следует руководствоваться следующим правилом: конструкция ELSE относиться к ближайшему IF, для которого не установлено соответствие.

Например: IF условие 1

THEN IF условие 2

THEN IF условие 3

THEN оператор 1

ELSE оператор 2

ELSE оператор 3

ELSE оператор 4;

Если после слов THEN и ELSE надо выполнить несколько операторов, то для этого используют операторные скобки BEGIN и END. Оператор в этом случае будет называться составным условным оператором.

IF условие

THEN BEGIN

оператор 1;

оператор 2;

……………;

оператор N

END;

Примеры:

1. Вычислить переменную Z в зависимости от условия:

Раздел процедур или функций (подпрограмм). - student2.ru x2, если x< 3

Z= x2-2x+5, если 3≤ x≤ 4

x-2, если x>4

PROGRAM PRIMER2;

USES CRT;

LABEL

1;

VAR

X,Z:REAL;

OTV:CHAR;

BEGIN

1: CLRSCR;

WRITELN (‘Введите произвольное число X’);

READLN (X);

IF X<3

THEN Z:=SQR (X)

ELSE IF X<=4

THEN Z:=SQR(X)-2*X+5

ELSE Z:=X–2;

WRITELN (‘При значении X =’,X:5:2);

WRITELN (‘Значение Z=’,Z:5:2);

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

THEN GOTO 1

END.

2. Записать условные операторы.

Раздел процедур или функций (подпрограмм). - student2.ru

Раздел процедур или функций (подпрограмм). - student2.ru

Задачи для самостоятельного решения:

 
  Раздел процедур или функций (подпрограмм). - student2.ru

Y=
1. X, если X ≥ 0

– X, если X< 0

2. – X2, если Х≤0

Раздел процедур или функций (подпрограмм). - student2.ru Y= 0, если 0≤X≤½

X – ½, если Х>½

3. Если Х и Y отрицательные, то каждое из них возвести в квадрат, иначе меньшее из них заменить абсолютной величиной.

4. Даны три числа а, b, c. Найти min из этих чисел и проверить его на равенство 0. Если min=0, то повторить ввод всех трех чисел.

5. Найти остаток от деления целого выражения С=К*(А+В) на 4. Вывести на печать сообщение об остатке. Если остаток равен 0, то выражение С оставить без изменения. Если равен 1 или 3, уменьшить С на величину остатка. Если остаток равен 2, то увеличить С на величину остатка. Новое значение С вывести на печать.

6. Найти корни квадратного уравнения Раздел процедур или функций (подпрограмм). - student2.ru .

7. Написать программу для определения подходящего возраста для вступления в брак, используя следующее соображение: возраст девушки равен половине возраста мужчины плюс 7, возраст мужчины определяется соответственно как удвоенный возраст девушки минус 14. Данные для проверки работы программы задать самостоятельно.

ОПЕРАТОР ВАРИАНТА (ВЫБОРА) CASE

Синтаксис оператора:

CASE выражение OF

список меток 1: оператор 1;

список меток 2: оператор 2;

…………………………….…..;

список меток N: оператор N

[ELSE оператор]

END;

где CASE – вариант или выбор, OF – из, END – конец;

выражение – это выражение любого скалярного типа, кроме REAL.

список меток – это список разделенных запятыми значений выражения или одно из его значений.

Список меток должен содержать хотя бы одно значение выражения, указанного после ключевого слова CASE, следовательно, метки и выражение должны иметь одинаковый тип. Метка - это необязательно целое число и она не описывается в разделе LABEL и на нее нельзя ссылаться в операторе GOTO.

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

Оператор выполняется следующим образом:

1. Вычисляется значение выражения.

2. Среди меток находится это значение.

3. Выполняется тот оператор, метка которого равна значению выражения.

4. После выполнения оператора управление передается в конец оператора CASE.

Пример:

1. Определить площади различных геометрических фигур:

 
  Раздел процедур или функций (подпрограмм). - student2.ru

S=

PROGRAM PRIMER3;

USES CRT;

LABEL

1;

VAR

A,B,H,FI,S,R:REAL;

N:INTEGER;

BEGIN

CLRSCR;

WRITELN (‘Введите значения переменных A,B,H,FI,R’);

READLN (A,B,H,FI,R);

1:WRITELN (‘Введите N от 1 до 5’);

READLN (N);

IF (N<1) OR (N>5)

THEN BEGIN

WRITELN (‘Повторите ввод’);

GOTO 1

END;

CASE N OF

1:S:=A*B;

2:S:=A*H/2;

3:S:=(A+B)*H/2;

4:S:=PI*SQR(R);

5:S:=PI*SQR(R)*FI/360

END;

WRITELN (‘Площадь фигуры равна ',S:7:2)

END.

Задачи для самостоятельного решения:

1. Составить программу, которая переводит числовую оценку знаний учащегося в ее словесный эквивалент (2 – «неудовлетворительно», 3 – «удовлетворительно», 4 – «хорошо», 5 – «отлично»). В случае неправильного ввода дать сообщение «Нет такой оценки».

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

3. Составить программу, которая выводит на экран меню:

1. Первое

2. Второе

3. Третье

и в зависимости от выбранного пункта выдает одну из надписей: «Получите суп», «Получите картошку», «Получите компот», «Оставайтесь голодными».

Операторы цикла

В языке Паскаль существует 3 вида операторов цикла:

1. Оператор цикла с постусловием;

2. Оператор цикла с предусловием;

3. Оператор цикла с параметром.

VAR

S,EPS:REAL;

N:INTEGER;

OTV:CHAR;

BEGIN

1:CLRSCR;

WRITELN (‘Введите точность вычислений’);

READLN (EPS);

S:=1;

N:=2;

REPEAT

S:=S+(1/N);

N:=N+1

UNTIL (1/N)<EPS;

WRITELN (‘Сумма =’,S:5:2);

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

THEN GOTO 1

END.

Оператор цикла с параметром

Синтаксис оператора:

FOR V:=E1 TO [DOWNTO] E2 DO

оператор;

где FOR (для), TO (до), DOWNTO (вниз до), DO (выполнить) – служебные слова;

V – параметр цикла;

Е1, Е2 – граничные выражения, определяющие границу изменения параметра цикла (начальное и конечное значения параметра цикла).

Оператор цикла с параметром используется в том случае, если заранее известно число повторений цикла. Тип параметра цикла V и граничных выражений Е1 и Е2 должен совпадать, может быть любым, кроме вещественного. Тело цикла может состоять из нескольких операторов, в этом случае необходимо использовать операторные скобки BEGIN и END. После выхода из цикла значение параметра цикла становится неопределенным.

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

1. Вычисляются значения выражений Е1 и Е2 (один раз перед входом в цикл).

2. Параметру цикла V присваивается значение выражения Е1.

3. Значение параметра цикла сравнивается со значением выражения Е2. Если параметр цикла меньше или равен этому значению, то выполняется тело цикла, в противном случае выполнение цикла заканчивается – при использовании TO. При использовании DOWNTO тело цикла выполняется в том случае, если параметр цикла больше или равен значению Е2.

4. Параметр цикла принимает следующее значение, полученное с помощью функции SUCC (в случае TO) или PRED (в случае DOWNTO). Происходит возврат к пункту 3.

S=1+2+…+100

S:=0; FOR I:=1 TO 100 DO S:=S+I; S:=0; FOR I:=100 DOWNTO 1 DO S:=S+I;

Пример:

1. Вычислить переменную A:

A= Раздел процедур или функций (подпрограмм). - student2.ru

PROGRAM PRIMER5;

USES CRT;

VAR

S,P,I,N,A:INTEGER;

BEGIN

CLRSCR;

S:=0;

FOR I:=1 TO 20 DO

S:=S+SQR(I);

P:=1;

FOR N:=10 DOWNTO 1 DO

P:=P*SQR(N)*N;

A:=S+P;

WRITELN (‘Сумма=’,A:7);

END.

Задачи для самостоятельного решения:

1. N!= Раздел процедур или функций (подпрограмм). - student2.ru

2. Y=x10= Раздел процедур или функций (подпрограмм). - student2.ru

СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Структурированный тип данных - это множество значений или переменных с одним общим именем.

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

Массивы (регулярный тип)

Для массивов в языке Паскаль характерно следующее:

1.Число элементов массива определяется при его описании и в дальнейшем не изменяется.

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

Синтаксис описания одномерного массива:

TYPE

имя типа=ARRAY [тип индекса] OF тип элементов;

VAR

имя массива:имя типа;

Тип индекса может быть любым стандартным типом, кроме REAL.

Пример: Описать вещественный массив А(10).

TYPE

VECTOR=ARRAY [1..10] OF REAL;

VAR

A:VECTOR;

Можно обойтись без определения типа массива. Тогда описание массива имеет вид:

VAR

имя массива: ARRAY [тип индекса] OF тип элементов;

При использовании ограниченного типа в качестве типа индекса можно употреблять символ константы:

CONST

N=10;

VAR

A: ARRAY [1..N] OF REAL;

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

TYPE

имя типа=ARRAY [тип инд.1] OF ARRAY [тип инд.2] OF тип элементов;

VAR

имя массива:имя типа;

Пример: Описать целочисленную матрицу B(20, 10).

TYPE

MATRICA=ARRAY [1..20] OF ARRAY [1..10] OF INTEGER;

VAR

B:MATRICA;

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

Например: VAR

B:ARRAY [1..20, 1..10] OF INTEGER;

Обращение к элементам массива производится при помощи указания имени массива, за которым в квадратных скобках следуют номера индекса.

Например: a5 ® A[5]

b15,8 ® B[15, 8]

Примеры:

1. Дан вектор Х(N). Найти количество нулевых элементов, сумму положительных и произведение отрицательных элементов.

PROGRAM PRIMER6;

USES CRT;

LABEL

1;

VAR

X:ARRAY [1..50] OF REAL;

S, P:REAL;

K,N,I:INTEGER;

OTV:CHAR;

BEGIN

1:CLRSCR;

WRITELN (‘Введите размерность вектора’);

READLN (N);

(*ввод вектора*)

WRITELN (‘Введите вектор X’);

FOR I:=1 TO N DO

BEGIN

WRITE (‘X [‘,I:2,‘]=>’);

READLN (X[I])

END;

(*вывод вектора*)

WRITELN (‘Вектор X’);

FOR I:=1 TO N DO

WRITE (X[I]:5:2,‘ _ ’);

WRITELN;

K:=0;

S:=0;

P:=1;

FOR I:=1 TO N DO

IF X[I]=0

THEN K:=K+1

ELSE IF X[I]>0

THEN S:=S+X[I]

ELSE P:=P*X[I];

WRITELN (‘Количество элементов вектора, равных нулю =’,K:2);

WRITELN (‘Сумма положительных элементов вектора =’,S:5:2);

WRITELN (‘Произведение отрицательных элементов =’,P:5:2);

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

THEN GOTO 1

END.

2. Найти максимальный элемент матрицы В(N,M) и номер строки и столбца, на пересечении которых он находится.

PROGRAM PRIMER7;

USES CRT;

LABEL

1;

VAR

B:ARRAY [1..50, 1..50] OF REAL;

MAX:REAL;

NST,NSTR,N,M,I,J:INTEGER;

OTV:CHAR;

BEGIN

1:CLRSCR;

WRITELN (‘Введите количество строк матрицы’);

READLN (N);

WRITELN (‘Введите количество столбцов матрицы’);

READLN (M);

(*ввод матрицы*)

WRITELN (‘Введите матрицу В’);

FOR I:=1 TO N DO

FOR J:=1 TO M DO

BEGIN

WRITE (‘B[‘,I:2,‘,’,J:2,’]=>’);

READLN (B[I,J])

END;

(*вывод матрицы*)

WRITELN (‘Исходная матрица В’);

FOR I:=1 TO N DO

BEGIN

FOR J:=1 TO M DO

WRITE (B[I, J]:5:2,‘ _’);

WRITELN

END;

MAX:=B[1,1];

NSTR:=1;

NST:=1;

FOR I:=1 TO N DO

FOR J:=1 TO M DO

IF MAX<=B[I,J]

THEN BEGIN

MAX:=B[I,J];

NSTR:=I;

NST:=J

END;

WRITELN (‘Максимальный элемент матрицы’,MAX:5:2);

WRITELN (‘Номер строки’,NSTR:2);

WRITELN (‘Номер столбца’,NST:2);

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

THEN GOTO 1

END.

Задачи для самостоятельного решения:

1. Дан вектор Х(n). Найти число нулевых, число и сумму отрицательных, число и сумму положительных элементов.

2. Найти число и сумму положительных элементов вектора, начиная с третьего элемента.

3. Найти произведение и количество элементов вектора, принадлежащих отрезку
[-2;1].

4. Найти максимальный (минимальный) элемент вектора.

5. Найти сумму и количество элементов матрицы, принадлежащих отрезку [2;5]. Элементы равные 25 уменьшить на 10.

6. В матрице C(N,N) отрицательные элементы заменить их квадратами, подсчитать их количество.

7. В матрице найти произведение элементов, больших трех, и количество отрицательных элементов.

8. В матрице подсчитать сумму и количество элементов, меньших пяти, элементы, большие 10 умножить на 5.

Упакованные массивы

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

Для экономии памяти в языке Паскаль существуют средства, позволяющие более компактно расположить данные в памяти. Это делается с помощью упаковки данных. Например, массивы символьной информации упаковываются по два символа в одну ячейку. Компилятор делает это, если при описании массива указать ключевое слово PACKED перед ключевым словом ARRAY.

Синтаксис описания упакованного массива:

TYPE

имя типа= PACKED ARRAY [тип индекса] OF тип элементов;

VAR

имя массива: имя типа;

THEN GOTO 1

END.

Задачи для самостоятельного решения:

1. Дана строка S, состоящая не более чем из 40 символов. В этой строке все вхождения букв ‘ABC’ заменить на ‘123’.

2. Используя функции для работы со строками получить из слова: а) «ВЕЛИЧИНА» слово «НАЛИЧИЕ»; б) «СТРОКА» слово «СЕТКА».

3. Сформировать символьную строку, состоящую из n звездочек (n – целое число, 1≤ n≤ 255).

4. Дан текст, в конце которого стоит точка. Подсчитать количество слов в тексте (слово – подстрока, не содержащая пробелов).

Раздел процедур или функций (подпрограмм). - student2.ru записи (комбинированный тип)

При решении экономических и информационных задач, которые обрабатывают ведомости, документы, списки и т.д., возникает необходимость объединять различные типы данных в одну группу. Для этого в языке Паскаль введено понятие записи (RECORD).

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

Каждая компонента записи называется полем.

Запись, как и другие переменные, объявляется в разделе описания и используется в разделе операторов. Описание записи можно делать как в разделе описания типов TYPE, так и в разделе описания переменных VAR.

Синтаксис описания записи:

TYPE

имя типа=RECORD

имя элемента 1:тип;

имя элемента 2:тип;

…..

имя элемента N:тип

END;

VAR

имя записи:имя типа;

Служебное слово RECORD (запись) выполняет роль открывающейся операторной скобки, END - закрывающейся операторной скобки. Внутри операторных скобок описываются элементы записи.

Для обращения к компонентам (полям) записи необходимо указать идентификатор записи, за которым ставится точка, а затем идентификатор поля (составное имя).

имя записи.имя поля

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

Пример:

TYPE

STUDENT= RECORD

FIO: STRING [20];

D1, D2: 2..5;

PR: INTEGER

END;

VAR

GRUPPA: ARRAY [1..25] OF STUDENT;

В данном примере был создан тип STUDENT, который представляет собой запись, включающую фамилию, оценки по двум дисциплинам и количество пропусков. Эти данные по каждому студенту объединены в группу, т.е. получен массив записей GRUPPA. Этот массив содержит 25 записей типа STUDENT. Обращение к отдельным элементам записей: GRUPPA [15]. FIO

GRUPPA [24]. PR

GRUPPA [13]. D1

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

Синтаксис оператора:

WITH

имя записи DO

BEGIN

операторы, содержащие имена элементов записи

END;

Внутри этого оператора к компонентам записи можно обращаться только с помощью имени компонент.

Пример:

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

PROGRAM PRIMER9;

USES CRT;

LABEL 1;

TYPE

VED = RECORD

FIO: STRING[30];

B1, B2, B3, B4, B5: 2..5;

SB: REAL

END;

VAR

GRUPPA: ARRAY[1..25] OF VED;

I, K: INTEGER;

OTV: CHAR;

BEGIN

1: CLRSCR;

WRITELN('ВВЕДИТЕ КОЛИЧЕСТВО СТУДЕНТОВ В ГРУППЕ');

READLN(K);

FOR I := 1 TO K DO

BEGIN

WRITELN('ВВЕДИТЕ ДАННЫЕ ', I:2, '-ГО СТУДЕНТА:');

WITH GRUPPA[I] DO

BEGIN

WRITELN ('ВВЕДИТЕ ФАМИЛИЮ И ИМЯ СТУДЕНТА');

READLN (FIO);

WRITELN ('ВВЕДИТЕ 5 ОЦЕНОК ПО ДИСЦИПЛИНАМ');

READLN (B1);

READLN (B2);

READLN (B3);

READLN (B4);

READLN (B5);

SB:=(B1+B2+B3+B4+B5)/5

END;

END;

{ВЫВОД ВЕДОМОСТИ НА ЭКРАН}

CLRSCR;

WRITELN('----------------------------------------------------');

WRITELN('| ФИО | 1 | 2 | 3 | 4 | 5 | СР.БАЛЛ |');

WRITELN('----------------------------------------------------');

FOR I := 1 TO K DO

BEGIN

WITH GRUPPA[I] DO

BEGIN

WRITE ('|', FIO:20, '|');

WRITE (B1:2, ' |');

WRITE (B2:2, ' |');

WRI

Наши рекомендации