Мои Конспекты
Главная | Обратная связь

...

Автомобили
Астрономия
Биология
География
Дом и сад
Другие языки
Другое
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Металлургия
Механика
Образование
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Туризм
Физика
Философия
Финансы
Химия
Черчение
Экология
Экономика
Электроника

Программирование. На данном этапе происходит реализация алгоритма решения задачи на выбранном языке программирования.





Помощь в ✍️ написании работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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

Отладка и тестирование. Состоит из следующих этапов:

1) контроль программы – работа с исходным текстом программы, заключающаяся в обнаружении ошибок при написании текста;

2) локализация ошибки – поиск точки, содержащей ошибку (следует различать точки обнаружения ошибки (место в программе, где ошибка стала очевидной) и возникновения ошибки (где реально находится ошибка), которые обычно не совпадают);

3) исправление ошибки;

4) предупреждение ошибки – использование принципа этапности разработки программы, а также принципов защитного программирования (проверка типов, области значений и правдоподобности входных данных, счетчиков и итогов вычислений; размещение средств обнаружения ошибки как можно ближе к предполагаемому источнику ошибки; уменьшение волнового эффекта – влияния ошибки в одном модуле программы на другие модули и т.д.);

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

Существуют следующие виды тестирования:

1) алгоритмическое – проверка программного текста на этапе алгоритмизации и программирования;

2) функциональное – применяется для контроля применяемых в программе методов. Оцениваются эффективность метода, соответствие исходных данных и результатов поставленной задаче и т.д.

3) содержательное – уточнение исходной постановки задачи и разработки программного средства.

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

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

 

 

6.4.Общие сведения о Турбо-Паскале

 

Общие сведения. Система программирования Турбо-Паскаль разработана американской корпорацией Borland.

Швейцарский ученый Николас Вирт придумал Паскаль как средство обучения студентов программированию. Язык Паскаль стараниями фирмы Borland (Андерсена Хейлсберга) превратился в мощную современную профессиональную систему программирования.

Структура программы.Паскаль-программа состоит из заголовка программы и тела программы (блока). Признаком конца программы является точка.

Заголовок начинается служебным словом PROGRAM, за которым следует имя программы (не играющее никакой роли внутри программы). Например:

PROGRAM RF;

В Турбо-Паскале можно опускать заголовок программы.

Блок в общем случае состоит из шести разделов (в Турбо-Паскале порядок первых пяти разделов произвольный):

1) раздел меток (LABEL);

2) раздел констант (CONST);

3) раздел типов (TYPE);

4) раздел переменных (VAR);

5) раздел процедур и функций (PROCEDURE, FUNCTION);

6) раздел операторов.

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

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

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

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

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

 

PROGRAM имя;

LABEL описание меток;

CONST описание констант;

TYPE описание новых типов;

VAR описание переменных;

PROCEDURE описание процедуры;

FUNCTION описание функции;

 

BEGIN

оператор 1;

оператор 2;

оператор n;

END.

 

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

 
 

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

 

Program PR1; (* заголовок программы *)

(* расчет функции у*)

var (* описание переменных *)

Х, A, Y, Р: real;

begin (* начало блока операторов *)

writeln ( ‘Введите X, A’); (* вывод фразы-подсказки *)

readln(Х,А); (* ввод переменных Х и А *)

Р := Х-А; (* расчет Р *)

Y := P*cos(P*P); (* расчет Y *)

writeln(‘Y= ’, Y:10:4) (* вывод Y *)

end. (* конец блока операторов *)

 

Алфавит.Алфавит языка Паскаль состоит из следующих элементов:

1) английские и русские заглавные и строчные буквы

А,В … Z, a,b …z А,Б,…Я, а,б,…я.

Не делается различия между заглавными и строчными буквами (если только они не являются данными литерного типа и не входят в состав комментария). Буквы используются главным образом для записи идентификаторов (имен различных программных объектов);

2) десятичные арабские цифры 0,…9. Они используются для представления числовых данных, для записи меток и в составе идентификаторов;

3) специальные символы:

из одного символа + - * / , . : ; < > ( ) [ ] { } $ #;

из двух элементов <> <= >= := (* *) (. .).

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

Все символы, имеющие коды ASCII в диапазоне от 0 до 32, в том числе признак конца строки (он состоит из двух символов с кодами 13 и 10) и собственно пробел (его код равен 32), считаются пробелами. Пробел служит в программе в качестве разделителя, причем несколько идущих подряд пробелов эквивалентны одному пробелу.

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

Следующие слова в Турбо-Паскале являются служебными:

absolute file mod shr

and for nil string

array forward not then

begin function of to

case goto or type

const if packed unit

div implementation procedure until

do in program uses

downto inline record var

else interface repeat while

end interrupt set with

external label shl xor

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

Комментарии. Комментарий служит для пояснения программы или ее частей. Комментарий – это последовательность символов, ограниченная слева парой символов «(*» и справа парой символов «*)». В качестве ограничителей комментария можно также использовать символы «{», «}» или «(.», «.)».

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

Константы.Константы – это величины, которые не меняют своего значения в процессе выполнения программы. Константы описываются в разделе, начинающемся ключевым словом CONST. Константа может быть числовой или литерной (строкой символов). Раздел констант имеет следующую форму записи:

CONST имя константы = значение;

Примеры.

CONST

Pi = 3.14;

nn = 1000;

nn1 = -nn;

mx = 1.7e12;

sp = ‘*****’;

ln = nn + pi;

Метки. Метки представляют собой числа от 0 до 9999 включительно или идентификаторы. Метки объявляются в программе в разделе, начинающемся ключевым словом LABEL:

LABEL метка 1, метка 2…;

Примеры.

LABEL

1, 5, 20, aa;

Метка в программе располагается перед оператором и отделяется от него двоеточием. Например:

5: А := В*С;

 

Определение типов. В разделе TYPE описывают новые типы, которые создают из стандартных типов:

TYPE имя типа = описание типа;

Примеры.

Ds = 1..20;

Mas = array [1..10] of real;

Int = integer;

Days = (mon, tues, wed, thurs,, fri, sat, sund);

 

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

VAR

имя переменной 1, имя переменной 2, …: имя типа;

Примеры.

Var

A,B,X : REAL;

L, L1, L1 : BOOLEAN;

I, J, M : INTEGER;

S, P : CHAR;

K, Q : ARRAY [1..3, 1..4] OF INTEGER;

 

6.5. Основные типы данных

 

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

1) Простые типы:

· вещественные;

· целые;

· символьные;

· булевские (логические);

· перечисляемые;

· ограниченные (диапазонные).

2) Составные (структурированные) типы:

· регулярные (массивы);

· комбинированные (записи);

· файловые;

· множественные;

· строковые;

· объекты.

3) Ссылочные (указатели) типы.

4) Процедурные типы.

Целый тип. Значениями целого типа являются элементы подмножества целых чисел. В Турбо-Паскале существует пять целых типов (табл. 6.3).

 

Таблица 6.3

Целые типы данных

Тип Интервал чисел Объем памяти
Shortint -128..127 1 байт
Integer -32768..32767 2 байта
Longint 2147483648..2147483647 4 байта
Byte 0..255 1 байт
Word 0..65535 2 байта

 

Целые переменные описываются с использованием указанных выше зарезервированных слов:

VAR

I, J, K : INTEGER;

F, H : WORD;

Данные целого типа хранятся в памяти точно. Например, переменные типа integer занимают в памяти 2 байта (16 бит), которые распределяются следующим образом: 1 бит отводится для хранения знака числа (0, если число положительное, и 1, если число отрицательное) и 15 бит для хранения числа в двоичной системе счисления. Максимальное десятичное число, которое можно записать как двоичное в 15 бит – это 32767.

Значение целого типа может изображаться в десятичном виде и в шестнадцатеричном виде. Цифры старше 9 изображаются латинскими буквами от A до F, а в начале ставится $, например, 123,-5, $F1 ( то же, что и 241).

Для целого типа определены пять основных операций, результатом которых также является целое число: +, -,*, div, mod (сложение, вычитание, умножение, целочисленное деление и остаток от целочисленного деления). В арифметических выражениях операции *, DIV, MOD имеют более высокий приоритет по сравнению с операциями +, -. Примеры записи выражений:

I DIV J

A + C * D

K MOD L

Значение K MOD L всегда неотрицательно и определено только для L >0.

Если К >0, то K MOD L = K – ((K DIV L)*L). Например, 11 MOD 2 = 1, 2 MOD 11 = 2.

Если K < 0, то K MOD L = ABS(K) – (((ABS(K)) DIV L)*L). Например, (-11) MOD 2 = 1, (-10) MOD 5 = 0.

Значения целого типа получаются при вычислении следующих функций:

ABS(X) – абсолютная величина Х (Х – целое);

SQR(X) – квадрат значения Х (Х – целое);

INC(X [,I]) – увеличивает Х на величину I, если I отсутствует, то на 1;

DEC(X [,I]) - уменьшает Х на величину I, если I отсутствует, то на 1;

 

TRUNC(X) – целая часть Х (Х – вещественное);

ROUND(X) – округление до ближайшего целого (Х- вещественное).

Если R>0, то ROUND(R) = TRUNC(R+0.5). Например, ROUND(3.7) = 4.

Если R <0, то ROUND(R) = TRUNC(R – 0.5). Например, ROUND(-3.7) = -4.

К значениям целого типа применимы следующие две функции:

SUCC(I) – следующее целое число (т.е. I+1);

PRED(I) – предыдущее целое число (т.е. I-1).

Вещественный тип. В Турбо-Паскале существуют пять вещественных типов (табл. 6.4).

Таблица 6.4

Вещественные типы данных

Тип Диапазон Число цифр в мантиссе Размер памяти
Real 11-12 6 байт
Single 7-8 4 байта
Double 15-16 8 байт
Extende   19-20 10 байт
Comp (только целые числа)   8 байт

 

Вещественные переменные описываются с использованием указанных выше зарезервированных слов:

VAR

A, D, K : REAL;

P, R : SINGLE;

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

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

0.087 4.0 23.5 0.6

В форме с плавающей точкой запись содержит букву Е, которая означает «умножить на десять в степени», причем степень является целым числом, например:

7Е3 6.9Е-8 0.98Е-02 45Е+04

Над объектами вещественного типа определены следующие операции: +, -, *, /.

Операции «*» и «/» имеют более высокий приоритет по сравнению с операциями «+» и «-».

Если хотя бы один операнд вещественный, то операции +, -, *, / приводят к вещественному результату. Операция деления / приводит к вещественному результату и в случае двух целых операндов, например: 9/3 = 3.0.

Стандартные функции ABS(X) и SQR(X) при вещественном Х дают вещественный результат.

Следующие функции дают вещественный результат при вещественном и целом аргументах:

SIN(X) – синус;

COS(X) – косинус;

LN(X) – натуральный логарифм;

EXP(X) – экспонента;

SQRT(X) – квадратный корень;

ARCTAN(X) – арктангенс.

Переменные и константы типа REAL запрещается использовать:

  • в функциях PRED(X), SUCC(X), ORD(X);
  • в качестве индексов массивов;
  • в качестве меток в операторах передачи управления;
  • в качестве управляющих переменных (параметров цикла).

Символьный тип.Символьные переменные описываются с помощью зарезервированного слова CHAR:

VAR

S, T, E: CHAR;

Значения этого типа выбираются из упорядоченного множества символов (из множества ASCII), состоящего из 256 символов. Элементы этого множества пронумерованы, начиная с нуля.

Значением переменной символьного типа является один символ, заключенный в апострофы, например:

‘F’ ‘8’ ‘*’

Символьные переменные можно сравнивать между собой, при этом сравниваются коды символов.

Существуют функции, которые устанавливают соответствие между символом и его кодом:

ORD(С) – выдает номер символа С;

CHR(I) – выдает символ с номером I.

Эти функции являются обратными по отношению друг к другу.

Логический тип. Логические переменные описываются с помощью зарезервированного слова BOOLEAN:

VAR

P1, P2 : BOOLEAN;

Переменные логического типа принимают два значения: TRUE (истина), FLASE. (ложь).

Эти величины упорядочены следующим образом: FALSE<TRUE. FALSE имеет порядковый номер 0, TRUE имеет порядковый номер 1.

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

VAR

A, D, G, B: BOOLEAN;

X, Y: REAL;

A := TRUE;

D := FALSE;

G := X > Y;

B := X < Y;

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

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

NOT – отрицание (операция не);

AND – логическое умножение (операция и);

OR – логическое сложение (операция или).

Выражение (NOT a) имеет значение, противоположное значению а.

Выражение (a AND b) дает значение TRUE, если только и а и b имеют значение TRUE, в остальных случаях значение этого выражения есть FALSE.

Выражение (a OR b) дает значение FALSE, если только и а и b имеют значение FALSE, во всех остальных случаях результат TRUE.

Результат логического типа дают следующие стандартные функции:

ODD(X) имеет значение TRUE, если целый Х нечетный;

EOLN(F) имеет значение TRUE, если считан конец строки текстового файла F;

EOF(F) имеет значение TRUE, если считан конец файла F.

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

TYPE

X = (W1, W2, …, Wn);

VAR A:X;

где Х – имя типа, W1, W2,…, Wn – значения, которые может принимать переменная типа Х.

Эти значения являются упорядоченными W1<W2<…<Wn и перенумерованными, начиная с нуля.

К аргументу W перечисляемого типа применимы следующие стандартные функции:

SUCC(W), PRED(W), ORD(W).

Пример.

TYPE

W=(ON, OFF);

COLOR=(RED, BLACK, YELLOW, GREEN)

WW=(LEFT, UP, RIGHT, DOWN);

VAR

A,B : W;

C,D: COLOR;

F: ARRAY [1..4] OF WW;

BEGIN

A:=ON;

B:=OFF;

D:=BLACK;

F[1]:=UP;

ORD(D)=1

PRED(D)=RED

SUCC(D) =YELLOW

Переменные А и В имеют тип W. Они могут принимать одно из трех значений, причем ON<OFF. Переменные C и D имеют тип COLOR и принимают одно из четырех значений, причем RED< BLACK< YELLOW< GREEN. Пусть переменная D имеет значение BLACK. Тогда SUCC(D) есть BLUE, PRED(D) есть RED, ORD(D) есть 1.

К величинам перечисляемого типа применимы операции отношения: =, <>, <=, >=, <, >.

Допускается указывать константы перечисляемого типа непосредственно в разделе VAR без использования раздела TYPE, например

VAR

C,D: (RED, BLACK, YELLOW, GREEN);

Диапазонный (ограниченный) тип. При определении ограниченного типа указывают начальное и конечное значения, которые может принимать переменная диапазонного типа. Значения разделяют двумя точками.

Описание ограниченного типа имеет вид

TYPE A = MIN..MAX;

Здесь А – имя типа, MIN, MAX – константы.

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

  • обе граничные константы MIN и MAX должны быть одинакового типа;
  • ограниченный тип создается из данных базового типа, в качестве которого можно выбрать целый, символьный или перечисляемый типы. Например:

TYPE

Index = 1..20;

Col = RED.. YELLOW;

Later = ‘A’..’F’;

VAR

I: index;

D: col;

F: later;

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

VAR

I: 1..20;

  • ограниченный тип наследует все свойства базового типа, из которого он создается;
  • граница MIN всегда должна быть меньше границы MAX.

Массивы. Массив – это сложный тип, представляющий собой структуру, состоящую из фиксированного числа компонент одного типа. Тип компонент называется базовым типом. Описание массива в разделе VAR имеет вид

VAR

A: ARRAY [T1] OF T2;

где А – имя массива, ARRAY, OF – служебные слова, Т1 – тип индексов; Т2 – тип компонент (базовый тип).

Количество индексов определяет размерность массива. Индексы могут быть целого (кроме LONGINT), символьного, логического, перечисляемого и диапазонного типов. Индексы разделяются запятыми и заключаются в квадратные скобки. Компоненты массива могут быть любого типа, кроме файлового.

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

4.6 6.23 12 -4.8 0.7

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

VAR C: ARRAY [1..5] OF REAL;

По конкретному значению индекса можно выбрать определенную компоненту массива (например, C[3] означает третий элемент массива С, т.е. число 12).

Пример 2. Рассмотрим двумерный массив В (матрицу В), значением которого является таблица из целых чисел:

45 5 -4 6

12 7 -8 15

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

VAR B [1..2, 1..4] OF INTEGER;

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

Имеется другая форма описания массива, состоящая из двух этапов. Сначала в разделе TYPE указывается тип массива, затем в разделе VAR перечисляются массивы, относящиеся к указанному типу. Эта форма объявления массива имеет вид:

TYPE

A = ARRAY [T1] OF T2;

VAR

B, D: A;

Здесь А – имя типа; B, D – имена массивов; ARRAY, OF – служебные слова; Т1 – тип индексов; Т2 – базовый тип элементов массива.

Приведенные выше массивы можно описать так:

TYPE

MAS = ARRAY[1..5] OF REAL;

TAB = ARRAY[1..2, 1..4] OF INTEGER;

VAR

C: MAS;

B: TAB;

Если несколько массивов B, P, W имеют тип ТАВ, то изменится лишь раздел

VAR

B, P, W: TAB;

Число индексов не ограничивается. Однако нужно помнить об ограничении общей памяти, отводимой под переменные (чаще всего – это 64 Кбайта). Размер массива должен быть такой, чтобы для хранения массива хватило отводимой под переменные памяти.

Единственно возможное действие над массивом в целом – это присвоение:

VAR

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

A := B;

Индексы могут быть произвольными выражениями, соответствующими типу индексов из описания массива:

VAR

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

I: INTEGER;

A[3] := 5;

A[I] := 12;

A[(I+1)*2] := 24;

 

Набор операций над элементами массива полностью определяется типом этих элементов.

Символьные массивы. Символьные массивы – это массивы, состоящие из элементов символьного типа. Например,

VAR

S: ARRAY [1..10] OF CHAR;

Особенности использования символьных массивов:

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

S := ‘Иванов ‘;

  • при выводе данных допускается использование операции конкатенации (присоединения):

VAR

S1: ARRAY [1..10] OF CHAR;

S2: ARRAY [1..8] OF CHAR;

S1 := ‘Московский’;

S2 := ‘проспект’;

WRITELN(S1+’ ‘+S2);

На экране дисплея будет выведено: «Московский проспект». Конкатенация не допускается в правой части оператора присваивания. Следующая конструкция S := S1 + ‘ ‘ + S2; будет признана ошибочной независимо от размера символьного массива S.

Строковый тип. Строковый тип – множество символьных цепочек произвольной длины (от нуля до заданного числа). Переменные строкового типа описываются с помощью служебного слова STRING:

TYPE

ST = STRING [50];

VAR

A: ST;

B: STRING [100];

Описание строковых переменных, как и других переменных, можно осуществить двумя способами. При первом способе в разделе TYPE описывается новый тип, а затем в разделе VAR переменная объявляется переменной нового типа. При втором способе в разделе VAR сразу описывается строковая переменная. В квадратных скобках указывается максимальная длина строки. Переменная А имеет максимальную длину 50 символов. Переменная В имеет максимальную длину 100 символов.

Особенности:

  • значение строковой переменной может быть введено с помощью клавиатуры, присвоено в операторе присваивания, прочитано из файла. При этом длина введенной строки может быть любой (меньше указанного размера, равна размеру или больше, в последнем случае, лишние символы отбрасываются); A := ‘Результаты’;
  • допускается использовать операцию конкатенации в операторе присваивания, так как строки могут динамически изменять свою длину: А := A + ‘ вычислений’;
  • максимальная длина строковой переменной 255 символов, это указание длины может быть опущено:

VAR

A: STRING;

A1: STRING [255];

Переменные А и А1 – одинаковы (эквивалентное описание).

  • память под переменные строкового типа отводится по максимуму, но используется лишь часть памяти, реально занятая символами строки в данный момент. Для описания строковой переменной длины N используется N+1 байт памяти: N байтов - для хранения символов строки, N+1 –й байт – для хранения текущей длины.
  • над значениями строковых типов определены операции сравнения: < <= > >= = <>. Короткая строка всегда меньше длинной. Если строки имеют одинаковую длину, то сравниваются коды символов.
  • возможен доступ к отдельным элементам строки аналогично доступу к элементам массива: А[1], A[5]. В квадратных скобках указывается номер элемента строки.

Процедуры и функции, ориентированные на работу со строками.

  • CONCAT (S1, S1,…) – функция слияния строк, S1, S2,…- строки, число строк может быть произвольным. Результатом работы функции является строка. Если длина результирующей строки больше 255 символов, то строка усекается до 255 символов.
  • COPY (S, INDEX, COUNT) – функция выделения строки из исходной строки S длиной COUNT символов, начиная с символа под номером INDEX.
  • DELETE (S, INDEX, COUNT) – процедура удаления из строки S подстроки длиной COUNT символов, начиная с символа с номером INDEX.
  • INSERT (S1, S2, INDEX) – процедура вставки строки S1 в строку S2, начиная с символа с номером INDEX.
  • LENGTH(S) – функция определения текущей длины строки, возвращает число равное текущей длине строки.
  • POS(S1,S2) – функция поиска в строке S2 подстроки S1. Выдает номер позиции подстроки S1 в строке S2.

 

6.6.Простейшие операторы

 

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

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

Составной оператор. Составной оператор – объединение нескольких операторов в одну группу.

Форма записи составного оператора:

BEGIN

оператор 1;

оператор 2;

оператор n-1;

оператор n

END;

В этой конструкции служебные слова BEGIN (начало) и END (конец) называются операторными скобками. Слово BEGIN выполняет роль открывающей скобки, слово END – роль закрывающей скобки. После BEGIN и перед END не ставится точка с запятой.

Составной оператор представляется как единый оператор. Его можно вставлять в любое место программы, где допускается один оператор. Любой из операторов составного оператора, в свою очередь, также может быть составным, например:

BEGIN

BEGIN

оператор А;

оператор В

END;

BEGIN

оператор С;

оператор D

END

END;

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

оператор 1;

оператор 2;

;

оператор 4;

Здесь третий оператор является пустым.

Составной и пустой операторы нередко применяются в условных операторах.

Оператор присваивания. Оператор присваивания – основной оператор любого языка программирования. Общая форма записи оператора

V := A;

где V – имя переменной; “:=” – знак присваивания; А – выражение.

Данный оператор вычисляет значение выражения А, стоящего справа от знака операции присваивания :=, и присваивает полученной значение переменной V, стоящей слева. Например:

D := SIN(X+A)*G-SQRN(ABS(X-G));

В частных случаях выражение в правой части оператора присваивания может принимать значение константы, переменной или функции. Например:

F := 23.6;

Q := X;

L := SQRT(X);

Оператор присваивания применим не только к арифметическим, но и логическим и символьным данным.

Например, логическим переменным D, H, K можно присвоить следующие значения:

VAR

D, H, K : BOOLEAN;

X, Z : REAL;

D := TRUE;

H := Z >= X;

K := D AND H;

Переменная D получила значение TRUE (истина). Если переменная Z больше или равна переменной X, то переменная H получила значение TRUE (истина), в противном случае – FALSE (ложь). Если обе переменные D и H имеют значение TRUE (истина), то К получит значение TRUE (истина), в противном случае – FALSE (ложь).

Пример присвоения значений символьным переменным:

VAR

S, H, T : CHAR;

S := ‘*’;

H := ‘6”;

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

VAR A : REAL;

K : CHAR;

K := A; (*символьной переменной присваивается вещественная*)

K := 23.7; (*символьной переменной присваивается число*)

A := ‘!’; (*вещественной переменной присваивается символ*)

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

VAR

X, Y : REAL;

K, L : INTEGER;

Y := ABS(K)*X+SQRT(X*L);

 

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

Процедура ввода вызывается с помощью оператора ввода READ, процедура вывода – с помощью оператора вывода WRITE.

Данные могут быть разбиты на отдельные строки. Признаком конца строки является нажатие клавиши Enter.

Различают три вида операторов ввода:

  • READ(a1, a2, …, an) – каждое вводимое значение получают последовательно переменные a1, a2,…, an;
  • READLN(a1, a2, …, an) - каждое вводимое значение получают последовательно переменные a1, a2,…, an, после чего происходит переход на новую строку;
  • READLN – переход на новую строку при вводе данных.

Первый и третий операторы эквивалентны второму оператору.

Вводить можно только переменные целого, вещественного, символьного и строкового типа.

Ввод числовых данных. Числовые данные (целые и действительные) должны разделяться пробелом или нажатием клавиши Enter.

 

Пример ввода

VAR A, B, C: REAL;

R, Q: INTEGER;

READLN(A,B,C);

READ(R, Q);

READLN;

После запуска программы на выполнение происходит останов машины при встрече READLN(A, B, C) и ожидание ввода данных. Необходимо набрать три действительных числа через пробел и нажать клавишу Enter. Затем – два целых числа и нажать клавишу Enter,например,

0.4 6.2 –8 Enter

6 12 Enter

Числа можно отделять друг от друга клавишей Enter, например,

0.4 Enter

6.2 Enter

-8 Enter

6 Enter

12 Enter

Но нельзя вводить все в одну строку:

0.4 6.2 –8 6 12 Enter

В этом случае оператор READLN(A,B,C) введет три числа и перейдет к новой строке, пропустив два последних числа, а оператор READ(R,Q) будет ждать ввода двух чисел в новую строку (которые мы уже ввели).

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

VAR C, D, W: CHAR;

READLN(C,D,W);

Правильный ввод Неправильный ввод

aвсEnter a b c Enter

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

Оператор вывода. Оператор вывода данных из памяти на экран дисплея имеет три формы записи:

  • WRITE (B1, B2,…, Bn) – выводит последовательно значения В1, В2,…, Вn;
  • WRITELN (B1, B2,…, Bn) - выводит последовательно значения В1, В2,…, Вn и осуществляет переход на новую строку;
  • WRITELN – осуществляет переход на новую строку при выводе данных.

В качестве параметров В1, В2, Вn могут быть использованы целые, вещественные, символьные и логические переменные, а также символьные константы, заключенные в апострофы.

Примеры:

  • WRITELN (‘Результаты вычислений’); - вывод на экран строки

Результаты вычислений

  • Y := 12; WRITELN (‘Y= ‘,Y); - вывод на экран строки

Y= 12

Для вывода целых и вещественных чисел можно указывать форматы. Формат указывается через двоеточие после переменной.

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

WRITELN(Y:5:2);

для изображения вещественной переменной Y отводит пять позиций, из них две – под дробную часть. Оставшиеся три позиции распределяются так: одна позиция - под точку и две – под знак числа и целую часть.

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

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

WRITELN (I:3);

для изображения целой переменной I отводит три позиции.

Если формат отведен больше, чем реальное количество позиций, занимаемых числом, то перед целой частью будет выведено соответствующее количество пробелов, а после дробной части – соответствующее количество нулей.

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

VAR S: CHAR; K: INTEGER;

K := 3;

S := ‘*’;

WRITELN (S:K);

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

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

GOTO метка;

Метка представляет собой целое число без знака в диапазоне 1-9999 или идентификатор (имя). Метка записывается перед помеченным оператором и отделяется от него двоеточием. Метка должна быть объявлена в разделе LABEL. Например:

LABEL

10, aaa;

GOTO 10;

aaa: A := 2;

10: Y := Y + A;

Здесь после оператора GOTO 10 выполняется оператор с меткой 10. Оператор, следующий за оператором перехода, также должен быть помечен. Иначе операторы между оператором GOTO и оператором с меткой 10 будут мнимыми, так как к ним нет доступа и они не будут выполняться.

Условный оператор. Условный оператор имеет следующие формы записи:

  • IF логическое выражение THEN оператор 1

ELSE оператор 2;

  • IF логическое выражение THEN

BEGIN группа операторов 1 END

ELSE BEGIN группа операторов 2 END;

  • IF логическое выражение THEN оператор;
  • IF логическое выражение THEN

BEGIN группа операторов END;

Если логическое выражение истинно, тогда выполняется оператор 1 или группа операторов 1, иначе выполняется оператор 2, или группа операторов 2, или оператор IF пропускается и выполняется следующий за ним оператор.

Пример А.

IF X >= 50 THEN Y := SQRT(X) ELSE Y := Х*Х;

WRITELN(Y);

В данном примере, если Х больше или равен 50, то Y равен квадратному корню из Х, в противном случае Y равен переменной Х в квадрате. Затем выполняется оператор вывода.

Пример В.

IF X < 0 THEN X := ABS(X);

S := S + X;

Если условие X < 0 истинно, то Х присваивается модуль Х и происходит передача управления на вычисление значения S.

Если условие X < 0 ложно, то сразу выполняется оператор вычисления S.

В качестве операторов 1 и 2 могут быть также условные операторы. Служебное слово ELSE всегда ассоциируется с ближайшим по тексту слову IF, которое еще не связано со служебным словом ELSE.

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

Пример 1. Вычислить значение функции Y.

 
 

Текст программы.

VAR

X,A,Y:REAL;

BEGIN

WRITELN(‘ВВЕДИТЕ Х,А’);

READLN(X,A);

IF X<= A THEN Y:=COS(X+A)

ELSE Y:= ln(X-A);

WRITELN(‘Y= ’, Y:10:4, ‘ X=’, X:6:2);

END.

 
 

Пример 2. Вычислить значение функции Y.

 

Текст программы.

VAR

X,A,Y: REAL;

BEGIN

WRITELN (‘ВВЕДИТЕ Х, A’);

READLN(X,A);

IF X > 3.14 THEN Y := X*X*X

ELSE IF A < 0 THEN Y := A- EXP(X)

ELSE Y := SQRT(ABS(A+X));

WRITELN (‘Y= ’,Y:12:5,’ X=’,X:5:1);

READLN

END.

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

IF X>3.14 THEN Y:=X*X*X;

IF (X<3.14) AND (A<0) THEN Y:=A-EXP(X);

IF (X<=3.14) AND (A>=0) THEN Y:=SQRT(ABS(A+X));

 

 
 

Пример 3. Вычислить значения функции Y на интервале от А до С (Х изменяется с шагом H) и найти максимальное значение функции Y и соответствующий Х.

 

LABEL 1,2;

VAR

X, B, A, C, H,Y, MAXX, MAXY: REAL;

BEGIN

WRITELN(‘Введите A,C,H,B’);

READLN(A,C,H,B);

X:=A;

2: IF X > C THEN GOTO 1;

IF X > B THEN Y:=LN (X*X)+SIN(B)

ELSE Y:=SQRT(ABS(B+X))*SIN(X);

WRITELN(‘Y= ’, Y:12:5,’ X=’X:5:1);

IF X=A THEN BEGIN

MAXY:=Y;

MAXX:=X;

END

ELSE IF MAXY < Y THEN BEGIN

MAXY:=Y;

MAXX:=X

END;

X := X+H;

GOTO 2;

1: WRITELN(‘MAXY= ’,MAXY:12:5,’ MAXX= ’,MAXX:5:1);

END.

 

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

CASE выражение (переключатель) OF

константа 1: оператор 1;

константа 2: оператор 2;

константа n: оператор n

[ELSE оператор k]

END;

Здесь CASE, OF, ELSE, END – служебные слова. Квадратные скобки говорят о том, что эта часть конструкции может отсутствовать.

Оператор выбора действует следующим образом.

Если значение выражения совпадает с константой 1, то выполняется оператор 1, затем управление передается следующему за CASE оператору. Если значение выражения совпадает с константой 2, то выполняется оператор 2, затем управление передается следующему за CASE оператору и т.д. Если значение выражения не совпадает ни с одной константой и есть конструкция ELSE, то выполняется оператор k, затем управление передается следующему за CASE оператору. Если значение выражения не совпадает ни с одной константой, и нет конструкции ELSE, то управление сразу передается оператору, следующему за CASE.

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

CASE I OF

1,2 : K := 0;

3..8: K := 1;

9,10,20..25: K := 2

ELSE

K := 100

END;

В данном примере, если I равно 1 или 2, то К присваивается 0. Если I принимает значение от 3 до 8, то К присваивается 1. Если I принимает значение 9, или 10, или изменяется от 20 до 25, то К принимает значение 2. Если I не совпадает ни с одним из указанных выше значений, то К присваивается 100.

Выражение (переключатель) может быть переменной целого (INTEGER), логического, символьного, перечисляемого и ограниченного типов.

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

Диапазоны изменений значений констант не пересекаются.

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

Примеры использования оператора выбора.

Пример 1.

VAR

A: BOOLEAN;

C,D,X: INTEGER;

BEGIN

READLN(C,D);

A := C>D;

CASE A OF

FALSE: X:=0;

TRUE: X:=1;

END;

WRITELN(X:2)

END.

В данном примере переключатель имеет логический тип.

Пример 2.

VAR

S: ’A’..’G’;

BEGIN

WRITELN(‘ВВЕДИТЕ БУКВУ ОТ А ДО G’);

READLN(S);

CASE S OF

‘A’, ‘B’, ‘C’, ‘E’ : WRITELN (‘БУКВЫ РУССКОГО И ЛАТИНСКОГО АЛФАВИТА’);

‘D’, ‘F’. ‘G’ : WRITELN(‘БУКВЫ ЛАТИНСКОГО АЛФАВИТА’);

END;

END.

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

Пример 3.

TYPE

COLOR=(RED,GREEN,BLACK);

VAR

X: INTEGER;

CLR:COLOR;

BEGIN

WRITTE(‘ ВВЕДИТЕ ЦИФРУ RED-0,GREEN-1,BLACK-2');

READLN(X);

CASE X OF

0: CLR := RED;

1: CLR := GREEN;

2: CLR := BLACK;

END;

WRITE(‘ЦВЕТ-‘);

CASE CLR OF

RED: WRITELN(‘КРАСНЫЙ’);

GREEN: WRITELN(‘ЗЕЛЕНЫЙ’);

BLACK: WRITELN(‘ЧЕРНЫЙ’);

END;

END.

В данном примере переключатель Х имеет целый тип, а переключатель CLR имеет перечисляемый тип.

 

6.7.Операторы организации циклов

 

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

· оператор цикла с предварительным условием;

· оператор цикла с последующим условием;

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

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

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

WHILE логическое выражение DO

BEGIN

операторы циклической части программы (тело цикла)

END;

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

WHILE логическое выражение DO оператор;

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

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

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

 
 

Пример 1. Вычислить значения функции Y при изменении Х от С до D с шагом H.

 

VAR

X,A,Y,C,D,H:REAL;

BEGIN

(*Ввод исходных данных*)

WRITELN(‘ВВЕДИТЕ С,D,H,A’);

READLN(C,D,H,A);

(*присвоение Х нижней границы интервала*)

X := C;

(*Сравнение Х с верхней границей интервала*)

WHILE X <= D DO

BEGIN

(*Вычисление Y*)

IF X > A THEN Y := X*COS(A*X)

ELSE Y := SIN(X)+A*X ;

(*Вывод Y и Х*)

WRITELN(‘Y= ’, Y:10:2,’ X= ’,X:6:2)

(*Увеличение Х на шаг и переход на оператор WHILE*)

X:=X+H;

END;

END.

 
 

Пример 2. Составить программу нахождения суммы сходящегося ряда с точностью Е. Расчет суммы закончить, когда слагаемое по модулю станет меньше заданной точности. В качестве значения Е можно взять 0.1, или 0.01, или 0.001.

 

VAR

E, S, X, Y: REAL;

N: INTEGER;

BEGIN

WRITELN(‘ВВЕДИТЕ Х,Е’);

READLN(X,E);

N:=0;

S:=1; (*Присвоение сумме значения 1*)

Y:=1; (*Присвоение слагаемому Y значения 1*)

WHILE ABS(Y) >= E DO

BEGIN

N:=N+1;

Y:=SIN(N*X)/(N*N); (*Вычисление слагаемого*)

S:=S+Y; (*Расчет суммы с помощью накопления*)

END;

WRITELN(‘Y= ’,Y:7:4,’ S= ’,S, ‘ N= ’, N);

END.

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

REPEAT

Оператор 1;

Оператор2;

Оператор N;

UNTIL логическое выражение;

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

Пример 1. Составить программу нахождения суммы сходящегося ряда с точностью Е. Расчет суммы закончить, когда слагаемое по модулю станет меньше заданной точности. В качестве значения Е можно взять 0.1, или 0.01, или 0.001.

 
 

 
 

В данном примере необходимо составить рекуррентную формулу, позволяющую каждое следующее слагаемое вычислять через предыдущее. N! – это выражение равно 1·2·3·…·n. Рекуррентная формула представлена ниже.

 

VAR

S, X, Y, E: REAL;

N: INREGER;

BEGIN

WRITEL(‘ВВЕДИТЕ Х,Е');

READLN(X,E);

S := X; (*первоначальная сумма*)

N: = 0;

Y := X; (*первое слагаемое*)

REPEAT

N := N+1;

Y := Y*X*X/(2*N*(2*N+1));

S := S+Y;

UNTIL ABS(Y) <= E;

WRITELN(‘СУММА= ’,S:12:5,’ ПРИ N= ‘,N ,’ Y=’,Y:12:5);

END.

 
 

Пример 2. Составить программу, доказывающую тождество. Доказать тождество – это значит доказать, что разность между левой и правой частями выражения, взятая по модулю, меньше заданной точности Е.

Для вычисления слагаемого в правой части выражения необходимо составить рекуррентную формулу. Пусть первое слагаемое Y =1, тогда последующие будут вычисляться по формуле Y=Y*X/N.

VAR

X, E, L, P, Y: REAL;

N: INTEGER;

BEGIN

WRITELN(‘ВВЕДИТЕ Х,Е');

READLN(X,E);

L := EXP(X); (*Расчет левой части тождества*)

P := 1; (*Присвоение правой части тождества 1*)

Y := 1; (*Присвоение 1 первому слагаемому*)

N := 0;

REPEAT

N := N+1;

Y := Y*X/N; (*Расчет слагаемого*)

P := P+Y; (*Вычисление правой части тождества*)

UNTIL ABS(L-P) <= E;

WRITELN(‘L= ’,L:12:4,’ ‘ P= ’,P:12:4,’ N=’,N);

END.

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

FOR I := M1 TO M2 DO

BEGIN

операторы циклической части программы

END;

Здесь FOR, TO, DO – служебные слова; I – параметр цикла (или управляющая переменная); М1, М2 – начальное и конечное значения параметра цикла.

Если в цикле выполняется один оператор, то операторные скобки BEGIN и END не пишут.

FOR I := M1 TO M2 DO

оператор;

Циклическая часть программы выполняется повторно для каждого значения параметра цикла I от его начального значения М1 до конечного значения М2 включительно.

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

Возможные значения управляющей переменной определяются перед первым выполнением цикла. Если параметр цикла имеет целый тип, то он автоматически увеличивается на +1 от значения М1 до значения М2. Если параметр цикла должен уменьшаться на –1, то вместо служебного слова TO используют DOWNTO.

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

В теле цикла запрещается явное изменение управляющей переменной (например, оператором присваивания).

После завершения цикла управляющая переменная сохраняет свое последнее значение.

Если используется конструкция ТО и М1 больше М2 (DOWNTO и М1 меньше М2), то цикл не работает ни разу.

Пример 1. Параметр цикла возрастает от 1 до 5.

VAR

S: REAL;

I: INTEGER;

BEGIN

S:=0;

FOR I := 1 TO 5 DO

S := S+1;

END.

Пример 2. Параметр цикла убывает от 5 до 1.

VAR

S: REAL;

I: INTEGER;

BEGIN

S:=0;

FOR I := 5 DOWNTO 1 DO

S := S+1;

END.

Пример 3. Параметр цикла является символьной переменной и принимает значения ‘A’, ‘B’, ‘C’, ‘D’.

VAR

M: CHAR;

S: REAL;

BEGIN

S:=0;

FOR M := ’A’ TO ‘D’ DO

S:=S+1;

END.

Пример 4. Вычислить

 

VAR

N.I: INTEGER;

A, P: REAL;

BEGIN

WRITE(‘Введите А,N’);

READLN(A,N);

P:=1; (*Присвоение первоначально произведению 1*)

FOR I := 1 TO N DO

P:=P*(A+I-1); (*Расчет произведения*)

WRITELN(‘P= ’,P:12:2);

END.

Ввод-вывод числовых одномерных массивов. Элементы одномерного массива можно вводить по одному (ввод каждого элемента заканчивается нажатием клавиши Enter) или все сразу (элементы вводятся друг за другом через пробел и в конце нажимают клавишу Enter). Пусть даны два массива: А и В.

VAR

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

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

I: INTEGER;

 

(*Ввод всех элементов массива сразу*)

WRITELN(‘Ввод 5–ти элементов А’);

FOR I := 1 TO 5 DO

READ(A[I]); READLN;

При выполнении данной группы операторов на экран будет выведено:

Ввод 5-ти элементов А

Затем необходимо ввести c помощью клавиатуры, например, следующие данные:

4 –6.5 34.9 –7 5 Enter

 

(*Ввод только по одному элементу*);

WRITELN(‘Ввод 10-ти элементов В только по одному’);

FOR I := 1 TO 10 DO

READLN(B[I]);

При выполнении данной группы операторов на экран будет выведено:

Ввод 10-ти элементов В только по одному

Затем необходимо ввести, например, следующие данные:

3 Enter

5 Enter

-67 Enter

 

(*Ввод по одному элементу с комментарием*)

FOR I := 1 TO 10 DO

BEGIN

WRITE(‘Введите В[ ’,I,’ ] =’);

READLN(B[I]);

END;

При выполнении данной группы операторов на экран будет выведено

Введите В[ 1 ]=

Следует с помощью клавиатуры набрать значение B[1], например 4 Enter.

При выполнении данной группы операторов на экран будет выведено

Введите В[ 2 ]=

Следует с помощью клавиатуры набрать значение B[2], например 24 Enter и т.д.

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

(*Вывод всех элементов А в одной строке*)

WRITELN(‘Массив А’);

FOR I := 1 TO 5 DO

WRITE(A[I]:5:1,’ ‘);

WRITELN;

На экране, например, может быть выведено следующее:

-12.5 3.4 67.0 –8.6 3.2

(*Вывод элементов В по одному в строке*)

WRITELN(‘Массив В’);

FOR I :=1 TO 10 DO

WRITELN(B[I]:3);

На экране, например, может быть выведено следующее:

и т.д.

Примеры программ, работающих с одномерными массивами.

 
 

Пример 1. Вычислить 10 значений функции

Массив Х задан. Даны также Z1 и H и известно, что Zi = Zi-1+ H.

Результат представить в виде таблицы

Функция Y

X Z Y
Формат :5:1 Формат :5:1 Формат :5:2

Общая ширина таблицы 19 позиций (15 позиций для вывода чисел и 4 позиции для вывода разграничительных линий).

VAR

X,Z,Y: ARRAY [1..10] OF REAL;

I: INTEGER;

BEGIN

(*Ввод элементов массива Ч*0

WRITELN(‘Введите 10 элементов’);

FOR I := 1 TO 10 DO

READ(X[I]);

READLN;

(*Ввод Z1 и H*)

WRITELN(‘Введите Z[1],H’);

READLN(Z[1],H);

(*Вычисление остальных элементов массива Z*)

FOR I := 2 TO 10 DO

Z[I]=Z[I-1]+H;

(*Вычисление Y*)

FOR I := 1 TO 10 DO

Y[I] := SIN(X[I]+COS(SQR(Z[I]));

(*Вывод названия таблицы и названий граф*)

WRITELN(‘ ФУНКЦИЯ Y ’);

WRITELN(‘___________________’);

WRITELN(‘! X ! Z ! Y !’);

WRITELN(‘ ___________________’);

(*Вывод переменных Xi, Zi, Yi*)

FOR I := 1 TO 10 DO

WRITELN(‘!’,X[I]:5:1,’!’,Z[I]:5:1,’!’,Y[I]:5:1,’!’);

(*Вывод подчеркивающей линии*)

WRITELN(‘ ___________________’);

READLN

END.

Пример 2. В массиве А(10) найти максимальный элемент и его номер.

VAR

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

MAX: REAL;

I, N: INTEGER;

BEGIN

(*Ввод элементов массива А*)

WRITELN(‘Введите массив А(10)’);

FOR I := 1 TO 10 DO

READ(A[I]);

READLN;

(*Присвоение переменной MAX первого элемента массива А*)

MAX := A[1];

(*Запоминание номера элемента*)

N := 1;

(*Поиск максимального элемента и его номера*)

FOR I := 2 TO 10 DO

IF MAX < A[I] THEN BEGIN MAX := A[I]; N := I; END;

(*Вывод максимального элемента и его номера*)

WRITELN(‘MAX= ‘,MAX:5:1,’ номер=’,N:2);

(*Вывод массива А*)

WRITELN(‘Массив А’);

FOR I := 1 TO 10 DO

WRITE(A[I]:5:1,’ ‘);

WRITELN;

READLN;

END.

 

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

  • параметры вложенных циклов должны быть разными;
  • вложенный цикл должен полностью находиться внутри внешнего цикла;
  • параметр внутреннего цикла меняется быстрее параметра внешнего цикла.

Ввод – вывод числовых матриц.Ввод элементов матриц можно осуществлять по одному элементу, по элементам строк, всех элементов. Пусть даны три матрицы А, В, С.

VAR

A: ARRAY [1..2, 1..3] OF REAL;

C, B: ARRAY [1..3, 1..2] OF INTEGER;

I, J: INTEGER;

(*Ввод всех элементов*)

WRITELN (‘ввод 6-ти элементов А’);

FOR I := 1 TO 2 DO

FOR J := 1 TO 3 DO

READ (A[I, J]);

READLN ;

При выполнении данной группы операторов на экран будет выведено:

Ввод 6-ти элементов А

Затем необходимо ввести c помощью клавиатуры, например, следующие данные:

4 –6.5 34.9 –7 5 –4.2 Enter

 

(*Ввод элементов матрицы по одному элементу*)

WRITELN (‘Ввод матрицы В по одному элементу’);

FOR I := 1 TO 3 DO

FOR J := 1 TO 2 DO

READLN (B[I, J]);

При выполнении данной группы операторов на экран будет выведено:

Ввод матрицы В по одному элементу

Затем необходимо ввести, например, следующие данные:

3 Enter

5 Enter

-67 Enter

 

Доверь свою работу ✍️ кандидату наук!
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой



Поиск по сайту:







©2015-2020 mykonspekts.ru Все права принадлежат авторам размещенных материалов.