Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Informatika_2-y_semestr

.pdf
Скачиваний:
18
Добавлен:
11.04.2015
Размер:
1.98 Mб
Скачать

Информатика 2012г.

41

Например: Дано N>0 измерений хi , представленных в виде файла st.dat вещественных чисел. Вычислить среднее значение М и стандартное отклонение S по формулам

program statistic; var f:file of real; M, S, Fz:real;

N:integer; begin

N:=0; M:=0; S:=0; assign(f, ‘st.dat’); reset;

repeat N:=N+1; Read(f, Fz); M:=M+Fz; S:=S+SQR(Fz); Until EoF(f); M:=M/N;

S:=SQRT(S/N-SQR(M)); Writeln(‘M=’, M); Writeln(‘S=’, S); Writeln;

end.

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

Текстовые файлы

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

type text=file of char;

text – стандартный идентификатор, такой как integer, real или char. Специальные процедуры работы над текстовыми файлами: Writeln(x); - завершение текущей строки текстового файла х; Readln(x); - переход к началу следующей строки текстового файла х; EoLN(x) – логическая функция, показывающая достигнут ли конец

текущей строки, текстового файла х. Если достигнут то возвращает значение true, в противном случае false.

Все выше перечисленные процедуры применимы только к текстовым файлам.

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

Информатика 2012г.

42

Просмотр текстового файла: Reset(f);

While NOT EoF(f) do begin

while NOT EoLN(f) do begin

read(f, ch);

обработка ch; end; readln(f);

end;

или

Reset(f); repeat repeat read(f, ch);

обработка ch; until EoLN(f); readln(f);

until EoF(f);

Создание текстового файла f: rewrite(f);

while создание файла do begin

while формирование строки do сформировать ch;

write(f, ch); end; writeLN(f); end;

Или

rewrite(f); repeat repeat

сформировать ch; write(f, ch);

until NOT формирование строки; writeLN(f);

until NOT создание файла;

Информатика 2012г.

43

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

Дополнительно для текстовых файлов определены следующие операции: Append(f) – аналогична rewrite, однако не очищает файл, а только

устанавливает текущий указатель файла в его коней.

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

SeekEoLN(f) – производит поиск конца текущей строки. SeekEoF(f) – осуществляет поиск конца файла.

Пример: Копирование файла Х в файл Y с заменой последовательности подряд стоящих пробелов одним.

Program cop; var ch:char; x, y:text;

begin

assign(x, ‘x.txt’); assign(y,’y.txt’); reset(x); rewrite(y);

while NOT EoF(x) do begin

while NOT EoLN(x) do begin

read(x,ch); write(y, ch); if ch=’ ‘ then begin

repeat read(x, ch); until ch <> ‘ ‘; write(y, ch); end;

end;

readLN(x)

writeLN(y);

end;

end.

Строковые типы

Являются расширением языка Pascal. Строковый тип данных обобщает символьный массив, позволяет динамически изменять длину строки.

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

 

 

 

 

 

Информатика 2012г.

44

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

type Line=string[80]; var Myline: Line;

Youline:string[80];

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

Myline:=’пример строки’; Youline:=Myline; Read(f, Myline);

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

Line:string;

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

Myline:=’строка’; Myline:=Myline+’стала длинее’;

Память под строку резервируется по максимальной длине и используется только часть этой памяти реально занятой символами. В строке N байтов предназначены для хранения символов строки, а один байт – для значения текущей длины этой строки. Структура строки string:

Это используют для определения текущей длины строки

Myline:=’QPRS’; writeLN(Ord(Myline[0])); // результат 4 Myline[0]:=2;

writeLn(Myline);// будет напечатано QP Myline:=’’;

writeLN(Ord(Myline[0])); // результат 0

Стандартная функция Length – определяет текущую длину строки. Операции сравнения над строками:

< <= > >= = <>

Действуют по правилу:

Информатика 2012г.

45

1.Более короткая строка всегда меньше более длиной.

2.Если длины строк равны, производится поэлементное сравнение

символов.

Если при присвоении длина строки меньше чем длина строковой константы производится обрубание строки

var str:string[5]; begin

str:=’строка была длинна’; writeLN(str);

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

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

var str:string[26]; i:integer;

begin str:=’A’;

for i:=1 to 26 do str[i]:=Chr(Ord(‘A’)+i-1); writeLn(str);

end.

Результат выполнения программы символ А. Правильная следующая программа

var str:string[26]; i:integer;

begin str:=’A’;

for i:=1 to 26 do str:=str+Chr(Ord(‘A’)+i-1); writeLn(str);

end.

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

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

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

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

Информатика 2012г.

46

2.Локальный контекст подпрограммы: совокупность описаний (рабочих) объектов, с которыми осуществляются действия;

3.Собственно действия (операторы), составляющие смысл подпрограммы. Интерфейс подпрограммы сосредоточен в заголовке. Описание локальных

объектов и операторы (алгоритм) составляют внутреннюю часть подпрограммы

иимеют синтаксис блока.

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

Синтаксис

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

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

Описание функции

Заголовок процедуры

Информатика 2012г.

47

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заголовок функции

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

procedure Swap(var X,Y: real); procedure Stop;

function GHJ(a, b:byte):byte;

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

Область действия имен в подпрограммах

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

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

 

 

Информатика 2012г.

48

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Буквой А – обозначим самый внешний блок программы; B и E – блоки подпрограмм, описанные во внешнем блоке А; С и D блоки, вложенные в подпрограмму В (то есть описанные в ней). Тогда доступ к объектам, описанным в различных блоках, производится по правилу:

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

2.Имена объектов, описанных в блоке, должны быть уникальными в пределах данного блока и могут совпадать с именами объектов из других блоков.

3.Если в некотором блоке описан объект, имя которого совпадает с именем объекта, описанного в объемлющем блоке, то это последнее имя становится недоступным в данном блоке. Имя, описанное в блоке, экранирует (делается недоступным) одноименные объекты из блоков, объемлющих данный.

Объекты из А и В видимы в C и D. Имена из C,D и E видимы только в своих блоках. Имена из А известны во всех вложенных блоках. Объекты, описанные в самом внешнем блоке, называются глобальными. Локальные объекты – объекты блока вместе с объектами объемлющих блоков.

Механизм параметров

Информатика 2012г.

49

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

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

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

Тип параметра

Пример заголовков процедур и функций

Function MaxElem(A:Vector, n:byte):real; Procedure Sum(A, B: Matrix; var C:Matrix);

Типы формальных параметров должны обязательно обозначатся идентификаторами. Например следующая запись недопустима:

Procedure Incorrect(var A:array[1..10] of byte);

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

type MYArray= array[1..10] of byte;

……………………….

procedure correct(var A:MYArray);

Информатика 2012г.

50

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

Параметры-значения

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

Например: program fur; var A,B:real

procedure SumSq(X, Y:real); begin

X:=X*X;

Y:=Y*Y;

writeln(‘Сумма квадратов=’, X+Y); end;

begin A:=1.34; B:=8.95;

SumSq(A, B); end.

Параметры-переменные

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

program gwer;

procedure SumS(X, Y:real; var Sum, Sub:real); begin

Sum:=X*X+Y*Y;

Sub:=X*X-Y*Y; end;

var A,B:real; SA, SB:real;

Begin

A:=45.87;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]