Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Пример 6. Запись типа ZAPIC содержит три компонента: номер, фамилию и имя. Доступ к полям записи осуществляется через переменную SPICOK типа запись и массив TABL, состоящим из записей.





TYPE ZAPIC= RECORD nomer: integer;

famil: string[20];

Imya:string[20];

END;

VAR: SPICOK: ZAPIC; TABL: ARRAY [1.. 25] OF ZAPIC;

BEGIN

READ(SPICOK.NOMER, SPICOK.FAMIL, SPICOK.IMYA);

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

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

Выражения, операнды и операции.

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

Арифметические операции выполняют арифметические действия в выражениях над значениями операндов целочисленных и вещественных типов. Основные из них приведены ниже:

+ - сложение;

- - вычитание;

* - умножение;

/ - деление;

div – целочисленное деление (возвращает целую часть частного, дробная часть отбрасывается);

mod – деление по модулю (восстанавливает остаток, полученный при выполнении целочисленного деления).

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

= - равно;

<> - не равно;

> - больше;

< - меньше;

>= - больше или равно;

<= - меньше или равно.

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

not – логическое отрицание;

and – логическое И;

or – логическое ИЛИ;

xor – исключающее ИЛИ.

Таблица истинности логических операторов.

a b a and b a or b a xor b not a
false false false false false true
false true false true true true
true false false true true false
true true true true false false

Выполнение операций происходит с учетом их приоритета: высший приоритет имеет операция отрицания, второй – операции типа умножения, третий – операции типа сложения, четвертый – операции типа отношения.

 

Операторы языка Паскаль.

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

Простые операторы не содержат в себе никаких других операторов. К ним относятся:

1) Оператор присваивания (:=) предписывает выполнить выражение в его правой части, и присвоить результат переменной, идентификатор которой расположен в левой части:

идентификатор:= выражение;

Переменная и выражение должны иметь один и тот же тип.

2) Оператор безусловного перехода (GOTO) означает «перейти к» и имеет формат:

GOTO_ метка;

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

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

имя процедуры [(список параметров)];

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

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

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

1) Составной оператор представляет собой группу из произвольного числа операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками:

BEGIN

[ Оператор1;

ОператорN ]

END;

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

2) Условные операторы обеспечивают выполнение или невыполнение некоторого оператора, группы операторов или блока в зависимости от заданных условий.

Оператор условия может принимать одну из следующих форм:

1. IF_ условие _THEN_ оператор1 _ELSE_ оператор2;

2. IF_ условие _THEN_ оператор;

Условие – выражение булевского типа, при его записи могут использоваться все возможные операции отношения. Если значение выражения истинно, то выполняется оператор1, если ложно – оператор2. Во втором варианте, если выражение ложно, то выполняется оператор, следующий в программе сразу за оператором IF. Один оператор IF может входить в состав другого оператора IF, т.е. этот оператор может быть вложенным. При вложенности операторов каждое ELSE соответствует тому THEN, которое ему непосредственно предшествует.

Пример 7. 1) Программа определения принадлежности точки с координатами X,Y окружности радиусом R с центром в начале координат.

PROGRAM KRUG;

USES CRT;

VAR X,Y,R,L: REAL;

BEGIN

CLRSRT;

WRITELN(‘введите значения X,Y и R’);

READ(X,Y,R);

L:=SQRT(SQR(X)+SQR(Y));

IF L<R THEN WRITELN (‘точка находится внутри круга’);

ELSE WRITELN (‘точка находится вне круга’);

END.

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

READ(J); {задание значения}

S:=0;

FOR I:=1 TO N DO IF A[I]=J THEN BEGIN

S:=S+1;C[S]:=I

END;

{печать результатов поиска}

IF S=0 THEN WRITELN('в массиве элем. равных заданному нет')

ELSE BEGIN WRITELN('в массиве ',s:3,' элем. равных’,J);

WRITELN(‘ номера элементов, равных заданному: ‘,)

{печать массива из номеров элементов}

FOR K:=1 TO S DO WRITE(‘ ‘,C[K]);

END;

3) Оператор выбора позволяет сделать выбор из произвольного числа имеющихся вариантов и имеет формат:

CASE_ выражение-селектор _OF

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

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

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

ELSE [ оператор ]

END;

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

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

READ(I);

CASE I OF

1..10: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 1 до 10’);

11..20: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 11 до 20’);

21..30: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 21 до 30’);

ELSE WRITELN(‘число I=’,I:3,’находится вне диапазона 1 - 30’);

END;

4) Операторы повтора используются при организации циклов.

Оператор повтора FOR состоит из заголовка и тела цикла и может иметь два формата:

1. FOR_ параметр-цикла:=S1_TO_S2_DO_ оператор;

2. FOR_ параметр-цикла:=S1_DOWNTO_S2_DO_ оператор;

S1 и S2 – выражения, определяющие начальное и конечное значение параметра цикла. FOR…DO – заголовок цикла, оператор – тело цикла. Тело цикла может быть простым или составным оператором. Оператор FOR обеспечивает выполнение тела цикла с увеличением параметра цикла (TO) или с уменьшением параметра цикла (DOWNTO) на единицу.

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

Пример 9. 1)Вычисление переменных А и В, значения которых зависят от переменной цикла, и их печать.

FOR I:=1 TO 4

BEGIN A:=2*I; B:=4+I

WRITELN(A:3,B:4)

END;

2) Перевод угла в градусах в радианы.

WRITELN(‘угол в градусах угол в радианах’);

FOR I:=0 TO 18 DO BEGIN

GRAD:=I*20;

RAD:=GRAD*PI/180;

WRITELN(‘ ‘,GRAD:12:2,’ ‘,RAD:12:4);

END;

Оператор повтора repeat имеет формат:

REPEAT

тело цикла;

UNTIL_у словие;

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

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

Пример 10. Вычисление y=x2 при x=8, 6, 4, 2.

X:=8

REPEAT

Y:=SQR(X);

WRITELN (X:3,Y:4);

X:=X-2

UNTIL X=0;

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

WHILE_ условие _DO_ тело цикла;

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

Все операторы повтора могут быть вложенными.

Пример 11. 1)Увеличение переменной I на 2 до тех пор, пока она меньше 30.

I:=10;

WHILE I<30 DO I:=I+2;

2) Вычисление переменных А и N по заданным формулам до тех пор, пока 2*A не станет меньше или равно 3*N+1.

A:=1; N:=2;

WHILE 2*A<=3*N+1 DO

BEGIN A:=A*2; N:=N+1; ND;

3) Перевод угла в радианах в градусы.

RAD:=0;

WRITELN(‘угол в радианах угол в градусах’);

WHILE RAD<6,28 DO BEGIN

GRAD:=RAD*180/PI; WRITELN(‘ ‘,RAD:12:4,’ ‘,GRAD:12:2);

RAD:=RAD+0.1; END

Процедуры ввода-вывода.

Для выполнения операций ввода-вывода служат четыре процедуры: READ, READLN, WRITE, WRITELN. Примеры использования этих процедур приведены в этой главе и в ранее рассмотренных примерах 6, 7, 9,11.

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

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

READ([ имя-файла,] переменная1, переменная2,…переменнаяN);

Здесь переменные – переменные допустимых типов данных, значения этих переменных набираются минимум через один пробел на клавиатуре и высвечиваются на экране. Набираемые значения должны соответствовать типам переменных. После набора данных для процедуры READ нажимается клавиша ENTER. Имя-файла – имя файла, откуда будет выполнятся чтение. Число переменных в списке может быть любым, разделяются переменные запятыми.

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

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

READLN(A,B);

READLN(NOMER);

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

WRITE([ имя-файла,] переменная1, переменная2,…переменнаяN);

Имя-файла – имя файла, куда производится вывод. Для вывода на принтер имя-файла – LST, при выводе на экран дисплея этот параметр в команде отсутствует. Переменная – переменная типа INTEGER, BYTE, REAL, CHAR, BOOLEAN и т.д.

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

В процедурах WRITE и WRITELN имеется возможность записи выражения, определяющего ширину поля вывода. Переменные в процедурах WRITE или WRITELN могут записываться в одной из следующих форм:

1) имя-переменной

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

2) имя-переменной:m

- если переменная целочисленного, символьного, строкового или булевского типа – выводится значение переменной в крайние правые позиции поля шириной m символов, переменная вещественного типа выводится в десятичном представлении в крайние правые позиции поля шириной m символов в формате с плавающей точкой;

3) имя-переменной:m:n

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

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

Примеры применения процедуры вывода с использованием форматов приведены в таблице 2.3.

 

 

Таблица 2.3. Примеры форматов вывода.

Значение переменной V Тип переменной Процедура вывода Результат
       
  целочисленная WRITE(V)  
  целочисленная WRITE(V:5) __134
715.43 вещественная WRITE(V) __7.1543000000E+02
715.43 вещественная WRITE(V:11) 7.15430E+02
715.43 вещественная WRITE(V:6:2) 715.43
‘mashina’ символьная WRITE(V) mashina
‘mashina’ символьная WRITE(V:11) ____machina
‘day n’ строковая WRITE(V) day n
‘day n’ строковая WRITE(V:6) _day n
true булевская WRITE(V) true
true булевская WRITE(V:6) __true

Пример 13. Печать матрицы.

FOR I:=1 TO 6 DO BEGIN

FOR J:=1 TO 6 DO BEGIN

{задание и печать элемента матрицы}

A[I,J]:=RANDOM(50);

WRITE(A[I,J]:6);

END;

WRITELN; {перевод курсора на следующую строку}

END;

 

Работа с файлами.

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

VAR имя файловой переменной: TEXT;

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

ASSIGN (имя файловой переменной, имя файла на диске);

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

REWRITE(имя файловой переменной);

RESET(имя файловой переменной);

APPEND(имя файловой переменной);

Процедура REWRITE открывает файл для чтения из него данных, RESET – для записи данных в файл, APPEND для дозаписи данных в файл.

Для обработки текстовых файлов используются процедура READ, READLN и WRITE, WRITELN, обеспечивающие соответственно чтение и запись величин в текстовый файл. Общий формат этих процедур при работе с текстовым файлом:

READ(имя файловой переменной; переменная1, переменная2,…переменнаяN);

WRITE(имя файловой переменной; переменная1, переменная2,…переменнаяN);

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

После работы с файлом его необходимо закрыть командой:

CLOSE(имя файловой переменной);

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

Созданный файл с данными можно открыть в какой-либо программе, например в Excel, и работать там с ним.

Пример 14. Программа расчета функции y=sin(2x)/x и вывода значений х и y в файл REZULT.DAT на диске D: и на экран монитора.

PROGRAM RASCHET;

USES CRT;

VAR I:INTEGER;

Y,X:REAL;

FF:TEXT;

BEGIN

{установка связи файловой переменной FF с дисковым именем файла REZULT.DAT}

ASSIGN(FF,'D:\REZULT.DAT');

{открытие файла для записи в него данных}

REWRITE(FF);

CLRSCR;

X:=0.3;

FOR I:=1 TO 20 DO BEGIN

Y:=SIN(2*X)/X;

{вывод результатов в файл}

WRITELN(FF,' ',X:4:2,Y:8:3);

{вывод результатов на экран}

WRITE(' ',X:4:2,' ',Y:6:2);

X:=X+0.05;

END;

{закрытие файла}

CLOSE (FF);

END.

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

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

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

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

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

Наиболее часто используемые арифметические встроенные функции:

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

ARСTAN(X) – вычисление угла, тангенс которого равен Х, значение угла представляется в радианах;

COS(X) – вычисление косинуса Х, параметр задает значение угла в радианах;

SIN(X) - вычисление косинуса Х, параметр задает значение угла в радианах;

EXP(X) – вычисления значения еХ;

INT(X) – вычисление целой части Х;

LN(X) – вычисление натурального логарифма Х;

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

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

PI – функция возвращает значение числа p;

RANDOM(N) – генерирует значение случайного числа в диапазоне от 0 до N, тип результата целочисленный;

RANDOM – генерирует значение случайного числа в диапазоне от 0 до 0,99, тип результата вещественный.

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

tg(x)=sin(x)/cos(x); ctg(x)=cos(x)/sin(x);

lg(x)»0,43429ln(x); ;

; .

В Паскале нет функции возведения в степень, поэтому для вычисления ZX необходимо записать EXP(X*LN(Z)), причем число Z должно быть больше нуля.

Встроенные процедуры ввода-вывода (WRITE, WRITELN, READ, READLN) были рассмотрены ранее.

Функция, определенная пользователем, состоит из заголовка и тела функции и имеет формат:

FUNCTION имя функции[(формальные параметры)]: тип результата;

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

BEGIN

Раздел операторов

END;

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

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

имя функции [(фактические параметры)];

Процедуры пользователя. Описание такой процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова PROCEDURE, имени процедуры и необязательного заключенного в круглые скобки списка формальных параметров с указанием типа каждого параметра. Имя процедуры – идентификатор, уникальный в пределах программы, тело процедуры – локальный блок по структуре аналогичный программе на Паскале. Формат записи процедуры:

PROCEDURE имя процедуры [(формальные параметры)];

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

BEGIN

Раздел операторов

END;

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

имя процедуры [(фактические параметры)];

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

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

Пример 15. Программы нахождения факториала:

а) с использованием функции.

PROGRAM FAKT1;

USES CRT;

VAR N,M,F1,F2: integer;

FUNCTION F(K: integer): integer;

VAR FAKT,I: integer;

BEGIN

FAKT:=1

FOR I:=1 TO K DO FAKT:=FAKT*I;

F:=FAKT;

END;

BEGIN {основная программа}

CLRSCR;

READ (N,M);

F1:=F(N); F2:=F(M); {обращение к функции}

WRITELN(‘ ‘,N:3,’!=’,F1:7);

WRITELN(‘ ‘,N:3,’!=’,F2:7);

END.

б) с использованием рекурсивной функции.

PROGRAM FAKT3;

USES CRT;

VAR N: integer;

FUNTION FACT(I: integer):longint;

BEGIN

IF I=1 THEN FACT:=1

ELSE FACT:=I*FACT(I-1)

END;

BEGIN {основная программа}

CLRSCR;

READ (N);

F1:=FACT(N); {обращение к функции}

WRITELN(‘ ‘,N:3,’!=’,F1:7);

END.

в) с использованием процедуры.

PROGRAM FAKT2;

USES CRT;

VAR N,M: integer;

PROCEDURE F(K: integer);

VAR FAKT,I: integer;

BEGIN

FAKT:=1

FOR I:=1 TO K DO FAKT:=FAKT*I;

WRITELN(‘ ‘,K:3,’!=’,FAKT:7);

END;

BEGIN {основная программа}

CLRSCR;

READ (N,M);

F(N); F(M); {обращение к процедуре}

END.







Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор...

Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам...

Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все...

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





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.