Тема 5: «Обработка двумерных числовых массивов»
Массивы в Турбо Паскале во многом схожи с аналогичными типами данных в других языках программирования. Отличительная особенность массивов заключается в том, что все их компоненты суть данные одного типа (возможно, структурированного). Эти компоненты можно легко упорядочить и обеспечить доступ к любому из них простым указанием его порядкового номера, например:
type
digit =array[0..9] of Char ;
matrix =array[Byte] of Single;
var
m : matrix;
d : digit;
i : Integer;
begin
.......
m[17] := ord(d[i-l])/10;
.......
end.
Описание типа массива задается следующим образом:
<имя типа> = ARRAY [ <сп.инд.типов> ] OF <тип>
Здесь <имя типа> - правильный идентификатор;
ARRAY, OF - зарезервированные слова (массив, из);
<сп.тд.типов> - список из одного или нескольких индексных типов, разделенных запятыми; квадратные скобки, обрамляющие список, - требование синтаксиса;
<тип> - любой тип Турбо Паскаля.
В качестве индексных типов в Турбо Паскале можно использовать любые порядковые типы, кроме LONGINT и типов-диапазонов с базовым типом LONGINT.
Определить переменную как массив можно и непосредственно при описании этой переменной, без предварительного описания типа массива, например:
var
а,b : array [1..10] of Real;
Обычно в качестве индексного типа используется тип-диапазон, в котором задаются границы изменения индексов. Так как тип <тип>, идущий за словом OF, - любой тип Турбо Паскаля, то он может быть, в частности, и другим массивом, например:
|
|
type
mat = array [0..5] of array [-2..2] of array [Char] of Byte;
Такую запись можно заменить более компактной:
type
mat = array [0..5,-2..2,Char] of Byte;
Глубина вложенности структурированных типов вообще, а следовательно, и массивов - произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничено, однако суммарная длина внутреннего представления любого массива, как уже говорилось, не может быть больше 65520 байт. В памяти ПК элементы массива следуют друг за другом так, что при переходе от младших адресов к старшим наиболее быстро меняется самый правый индекс массива. Если, например,
var
а : array[1. .2,1. .2] of Byte;
begin
a [1,1]:=1;
a [2,1]:=2;
a [l, 2]:=3;
a [2,2]:=4;
end.
то в памяти последовательно друг за другом будут расположены байты со значениями 1,3,2, 4 . Это обстоятельство может оказаться важным при использовании стандартной процедуры копирования памяти MOVE.
В Турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа, например:
var
а,b:array [1..5] of Single;
begin
.....
a := b;
.....
end.
После этого присваивания все пять элементов массива А получат те же значения, что и в массиве В. Однако над массивами не определены операции отношения. Нельзя, например, записать
|
|
if a = b then ...
Сравнить два массива можно поэлементно, например:
var
a,b:array [1..5] of Single;
eq:Boolean;
i:Byte;
begin
.....
eq := True; for i := 1 to 5 do
if a[i] <> b[i] then
eq := False;
if eq then
.....
end.
Тема 6: «Процедуры и функции программиста»
Заголовок процедуры имеет вид:
PROCEDURE <имя> [ (<сп. ф. п . >) ] ;
Заголовок функции:
FUNCTION <имя> [ (<сп.ф.п.>)] : <тип>;
Здесь <имя> - имя подпрограммы (правильный идентификатор);
<сп.ф.п.> - список формальных параметров;
<тип> - тип возвращаемого функцией результата.
В программе задаются два целых числа 5 и 7, эти числа передаются процедуре INC2, в которой они удваиваются. Один из параметров передается как параметр-переменная, другой - как параметр-значение. Значения параметров до и после вызова процедуры, а также результат их удвоения выводятся на экран
а : Integer = 5;
b : Integer = 7 ;
{-----------------}
Procedure Inc2 (var c: Integer; b: Integer) ;
begin {Inc2}
с := с + с;
b := b + b;
WriteLn ( 'удвоенные: ', c:5, b:5)
end {inc2};
{--------------}
begin {main}
а : Integer = 5;
b : Integer = 7 ;
{-----------------}
Procedure Inc2 (var c: Integer; b: Integer) ;
begin {Inc2}
с := с + с;
b := b + b;
WriteLn ( 'удвоенные: ', c:5, b:5)
end {inc2};
{--------------}
begin {main}
Тема 7: «Текстовые файлы»
Текстовые файлы можно создать заранее в каком-либо текстовом редакторе и затем обрабатывать в программе. Текстовые файлы состоят из отдельных строк. Обрабатывать их можно либо посимвольно, либо построчно.
|
|
Объявление текстового файла в программе:
var f :text;
Текстовые файлы являются файлами последовательного доступа, то есть считывать или записывать в них информацию можно только последовательно, от начала до конца. Нельзя, например, обратиться сразу в середину файла, чтобы считать какую-либо строку: придется прочитать файл от начала до нужной строки. Записывать информацию в текстовый файл можно либо заново (режим перезаписи, то есть содержимое файла стирается и потом заноситься новая информация), либо в конец существующего файла.
Прежде чем начать чтение или запись, необходимо связать файловую переменную с именем файла на диске с помощью команды:
Аssign (f,'c:\f.txt');
Затем следует подготовить файл к чтению или записи, то есть открыть файл. Файл открывается в одном из следующих режимов:
Reset(f); {открытие файла в режиме чтения}
Rewrite (f); {открытие файла в режиме перезаписи}
Append(f); { открытие файла в режиме добавления}
После этого происходит непосредственно чтение или запись в файл. Часто необходимо организовать цикл для чтения или записи, так как считывается или заносится не одна строка.
|
|
По окончании работы с файлом нужно закрыть его командой:
Сlose (f);
Пример программы обращения к текстовому файлу:
program txt1; {Работа с текстовыми файлами}
uses crt;
var f1,f2:text;
str:string;
k:integer;
begin
assign (f1,'c:\f.txt');
rewrite (f1);
assign (f2,'c:\f1.txt');
rewrite (f2);
clrscr;
writeln ('Inpyt (enter-end):');
repeat
write ('->');
readln (str);
writeln (f1, str);
k:=length(str);
if k<20 then write(f2,str,' ');
until str='';
close (f1);
close (f2);
end.
Дата добавления: 2018-05-13; просмотров: 342; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!