Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семестр1.doc
Скачиваний:
3
Добавлен:
19.09.2019
Размер:
1.03 Mб
Скачать

6.4 Для работы с массивами – шаблоны

Шаблон 1. Ввод-вывод одномерного массива.

program …;

const NN=100;{Максимальное число элементов}

type MM=array [1..NN]of real; {Новый тип данных - массив}

var M:MM; k,i:integer;

begin

{Ввод массива}

writeln(‘Введите кол-во элементов (не более ',NN:1,’)’);

readln(k);

writeln(‘Введите ’,k:1,’ элементов массива‘);

for i:=1 to k do read(M[i]); readln;

{Вывод массива на экран}

writeln(‘Вот результат:’); {Заголовок вывода}

for i:=1 to k do write(‘M[‘,i:2,’]=’,M[i]:7:3); writeln;

end.

Шаблон 2. Ввод-вывод двумерного массива.

program …;

const NN=100; MM=100;{Максимальное число строк и столбцов}

type AA=array [1..NN,1..MM]of real;{Новый тип данных – двумерный массив}

var A:AA; n,m,i.j:integer;

begin

{Ввод двумерного массива}

writeln(‘Введите кол-во строк (не более ’,NN:1,

’) и столбцов (не более ’,MM:1,’)');

readln(n,m);

for i:=1 to n do

begin

writeln(‘Введите ’,i:1,’-ю троку‘);

for j:=1 to m do read(M[i,j]);

readln

end;

{Вывод двумерного массива на экран}

writeln(‘Вот результат:’);{Заголовок вывода}

for i:=1 to n do

begin

for j:=1 to m do write(M[i,j]);

writeln

end;

end.

Лекция 7

7.1 Строки

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

<имя переменной>:STRING[длина]

или

<имя переменной>:STRING

В стандарте Паскаля такого типа данных нет.

Параметр длина задает максимальную длину строки (максимальное число символов цепочки). Если максимальный размер строки не указан, то он автоматически принимается равным 255 – максимально возможной длине строки. Для переменной типа string резервируется участок памяти длиной длина+1 байт. Дополнительный байт используется для хранения значения текущей длины строки.

В языке Паскаль широко используются константы строкового типа. Они представляют собой цепочки произвольных символов используемой кодовой таблицы, заключенные в апострофы. Например: ‘ВОТ’ – цепочка из трех символов, ‘’ – пустая цепочка.

Строка обладает всеми свойствами массива литер, то есть, структуры данных, описанной описателем array[0..длина] of char. Если имеются описания s,s1:string[10], то, в отличие от массива, допустимы присваивания

s:=’BOT’

s1:=’’.

При этом текущая длина строки s будет равна 3, текущая строка s1 – 0. Текущая длина строки – целое положительное число в диапазоне от 0 до длина – хранится в нулевом элементе строки как данное типа char (s[0]=chr(3), s1[0]=chr(0)). В первом элементе строки s – s[1] – хранится символ ‘B’, во втором – ‘O’, в третьем – ‘T’, значение элемента s[4] неопределенно, обращение к нему является ошибкой, поскольку индекс превышает текущее значение длины строки.

Текущая длина строки не должна превышать максимальную длину.

К строкам применимы стандартные процедуры ввода и вывода. Если выдать на экран значения строк s и s1, то получим:

writeln(s) – на экране строка ‘ВОТ’,

writeln(s1) – на экране пустая строка.

Над строковыми данными определена бинарная операция конкатенации (+). Результатом конкатенации двух строк является строка, содержащая последовательно все символы левого операнда, а затем все символы правого операнда. Вот примеры использования конкатенации:

writeln(s) – на экране текст ВОТВОТ;

s1:=s+’ KOT’; writeln(s1) – на экране ВОТ КОТ.

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

program Enter_int;

type status=(beginning,znak,Ok,Err);

var s:string; zn,k,i:integer; c:char;

n:longint;

stat:status;

cifra:boolean;

begin

repeat

writeln(‘Введите целое по модулю меньшее ’,$7FFF:1);

readln(s);

k:=length(s);

zn:=1;

n:=0;

stat:=beginning;

for i:=1 to k do

begin

c:=s[i];

cifra:=(c>='0') and (c<='9');

case stat of

beginning: case c of

' ': ;

'+': stat:=znak;

'-': begin stat:=znak; zn:=-1 end;

'0'..'9': begin n:=n*10+ord(c)-ord('0');

stat:=Ok end;

else stat:=Err

end;

znak: if cifra then

begin

n:=n*10+ord(c)-ord('0'); stat:=Ok

end else stat:=Err;

Ok: if cifra then

begin

n:=n*10+ord(c)-ord('0'); stat:=Ok

end else stat:=Err;

end;

end;

n:=zn*n;

if abs(n)>=$7FFF then stat:=Err;

until stat=Ok;

writeln('rezult ',n)

end.

Переменную типа STRING можно сравнивать с другой переменной или константой типа STRING, используя отношения =, <, >, <=, >=, <>. Используется лексикографический порядок (как в каталогах библиотек).

В TP имеются следующие функции для обработки строк:

  • CONCAT - функция имеет произвольное число параметров строкового типа, результат - строка, полученная последовательной склейкой параметров. Если длина полученной строки превышает 255 символов, то происходит усечение;

  • COPY(S:string; ind,count:integer):string - возвращает подстроку S длиной count, начиная с литеры номер ind. При несоответствии с максимальной длиной используется усечение;

  • DELETE(var S:string; ind,count:integer) - удаляет из S count символов, начиная с ind;

  • INSERT(St:string; var S:string; ind:integer) - вставляет в S St, начиная с позиции ind;

  • LENGTH(S:string) - функция, возвращает текущую длину строки S;

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

  • VAL(S:string; var V; var code:integer) - где V - переменная целого или вещественного типа. Процедура выделяет из строки последовательность символов, преобразует к типу соответствующей переменной и присваивает полученное значение этой переменной. Процедура VAL является строковым аналогом процедуры READ. Если при чтении из строки встречается недопустимый символ, то в переменной code возвращается его номер. В противном случае этот параметр равен нулю;

  • STR(X; var S:string) - преобразует численное значение целого или вещественного типа в его строковое представление. Эта процедура является строковым аналогом процедуры WRITE. После выражения X можно указать длину и точность представления данных.

Вот примеры использования процедур VAL и STR.

var X:real; S:string; i:integer;

begin

X:=3.1415926;

STR(X:8:4, S); S:='X=' + S;

Writeln(S); { на экране 'X= 3.1416'}

S:=DELETE(S,1,2); {удалили первые два символа}

VAL(S,X,i);

if i=0 then writeln(X:10:6) {на экране ' 3.141600'}

end.

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