Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Паскалю.doc
Скачиваний:
61
Добавлен:
04.06.2015
Размер:
7.62 Mб
Скачать

Var Ozenka : Array [Fam, Predm] Of 2..5;

Сейчас можно поставить Петрову П.оценку по математике следующим образом:

Ozenka[Petrov,Math]:=3;

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

При решении некоторых задач полезно использовать массивы размерностью более двух, например, трехмерные массивы. Такие массивы представляют собой объемную конструкцию типа куба. Этот куб состоит из нескольких слоев -двумерных массивов. Каждый из них имеет строки и столбцы.

Например, целочисленный массив Aразмером3слоя, по 4строки и5 столбцов в каждом слое, можно описать так:

Var a: Array [1..3, 1..4, 1..5] Of Integer;

и представить в следующем виде:

Строки

Строки занимают промежуточное положение между простыми переменными и сложными структурами – массивами, множествами, записями.

Строка– это упорядоченная последовательностьсимволоврасширенной таблицы кодаASCIIне длиннее255символов или массив значений типаChar.

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

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

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

Строки можно описать в операторе Varс указанием их длины:

Var str_1: String;строка длиной 255 символов

str_2: String[25]; строка длиной 25 символов

str_3: String[10]; строка длиной 10 символов

или задать в Constкакпоименованнуюконстанту:

Const my_str=’Это строка символов’; записывается в апострофах

klav=’qwerty’;

Эту же строку можно задать с помощью шестнадцатиричных или десятичных кодов символов таблицы ASCII, причем в этом случае апострофы не ставятся:

Const klav=#113#119#101#114#116#121; десятичные коды символов

Эту же строку можно задать с использованием смещения:

Const klav=^1^7^%^2^4^9; смещения кодов в таблице ASCII

Смещениеобозначается знаком карата^.Рассмотрим таблицу кодовASCII, для этого выведем ее в текстовый файл следующей программой:

Program Table_ASCII;

Uses CRT;

Const n: String[16] = '0123456789ABCDEF';

s: String = '--+-----------------------------------------------';

Var I, j: Byte;

c: Char;

f: Text;

Begin

ClrScr;

Assign(f, 'D:\User\ASCII.txt');

ReWrite(f);

Write(f, ' | ');

For j:=0 To 15 Do

Write(f, n[j+1],' ');

WriteLn(f);

WriteLn(f, s);

Write(f, '0 | ');

For j:=0 To 15 Do

Begin

If (j In [9,10,13])

Then c:=' '

Else c:=Chr(j);

Write(f, c, ' ');

End;

WriteLn(f);

For i:=1 To 15 Do

Begin

Write(f, n[i+1],' | ');

For j:=0 To 15 Do

Write(f, Chr(i*16+j), ' ');

WriteLn(f);

End;

WriteLn(f, s);

WriteLn(f);

Close(f);

End.

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

| 0 1 2 3 4 5 6 7 8 9 A B C D E F

--+-----------------------------------------------

0 |

1 | ­

2 | ! " # $ % & ' ( ) * + , - . /

3 | 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

4 | @ A B C D E F G H I J K L M N O

5 | P Q R S T U V W X Y Z [ \ ] ^ _

6 | ` a b c d e f g h i j k l m n o

7 | p q r s t u v w x y z { | } ~ 

8 | Ђ Ѓ ‚ ѓ „ … † ‡ € ‰ Љ ‹ Њ Ќ Ћ Џ

9 | ђ ‘ ’ “ ” • – — ˜ ™ љ › њ ќ ћ џ

A |   Ў ў Ј ¤ Ґ ¦ § Ё © Є « ¬ ­ ® Ї

B | ° ± І і ґ µ ¶ · ё № є » ј Ѕ ѕ ї

C | А Б В Г Д Е Ж З И Й К Л М Н О П

D | Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я

E | а б в г д е ж з и й к л м н о п

F | р с т у ф х ц ч ш щ ъ ы ь э ю я

--+-----------------------------------------------

Таким образом, 16-ричный кодцифры ноль –30, что соответствует ее коду48вдесятичнойсистеме счисления.

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

Рассмотрим стандартную часть таблицы, состоящую из первых восьми строк. Разобъем ее на две половины по четыре строки. Если S– любой символ из верхней половины, то^S– символ из нижней половины, находящийся в том же столбце, то есть отстоящий на четыре строки, и наоборот.

Например, ^}соответствует=, наоборот^= соответствует символу}.

Аналогичное правило действует и в расширенной, национальной части таблицы.

При вводе с клавиатуры исходных данных знак карата ^соответствует нажатию клавишиCTRL, удерживаемой при одновременном нажатии того или иного знака. Этим часто пользуются при вводе символов, отсутствующих на клавиатуре:будет соответствовать символу¬ (операция отрицания).

Нумерация элементов строки начинается с единицы. Для каждого элемента строки в оперативной памяти выделяется1 байт. Для хранения текущей длины строки в памяти выделяется дополнительный байт в начале строки (нулевой байт). Длина строки хранится в нем в видеASCII-символа, порядковый номер которого и определяет ее длину. Например,Ord(my_str[0])=19– в ней 19 символов, включая пробелы.

В программе строки можно задать операторами присваивания:

srt_1 := ‘Это первая строка’; записывается в апострофах

srt_2 := ‘Это вторая строка’;

или ввести с клавиатуры целиком, указывая имя строки:

ReadLn(str_1); вводится без апострофов

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

Строки можно выводить на экран целиком, указывая имя строки:

WriteLn(str_1);

Помимо присваивания, ввода и вывода, над строками определены следующие операции:

1. сложение(конкатенация) строк:

str_1 :=’Turbo’;

str_2 := ‘ Pascal’;

str_3 := str_1 + str_2; в str_3 будет фраза Turbo Pascal

2. сравнениестрок – осуществляется операциями отношения>, >=, <, <=, =, <> посимвольно слева направо до первого несовпадающего символа – сравниваются коды символов строк. Большей считается та строка, у которой код этого символа больше:

Vova’ > ‘Vasja’ = True так как Ord(‘o’) > Ord(‘a’)

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

1. Length(строка)- текущаядлинастроки – количество символов в ней (целое число):

str_1 :=’Turbo’;

n := Length(str_1); n=5 – в строке 5 символов

2.Pos(строка_1, строка_2)- определениеположениястроки_1 встроке_2(положение - номер символа – целое число):

str_1 :=’ша’;

str_2 :=’Наша Маша шагает в шапке’;

n := Pos(str_1, str_2);n=3определяется первое вхождение str_1 в str_2, а это позиция с номером 3 во второй строке

Внимание! Если искомая строка не найдена, то результат равеннулю.

3.Copy(строка, номер символа, длина фрагмента)-копированиефрагмента заданной длины, начиная с заданного номера символа строки; получается новая строка:

str_1 :=’браконьер’;

str_2:=Copy(str_1, 2, 3);из строкибраконьер, начиная совторой буквы, копируется фрагментдлиной3символа; получаетсяstr_2=’рак’

4.Concat(строка_1, строка_2, строка_3, ...)конкатенация(сложение) строк; получается новая строка:

str_1 :=’Turbo’;

str_2 := ‘ Pascal’;

str_3 := Concat(str_1, str_2); в str_3 будет фраза Turbo Pascal

Внимание! Длина суммарной строки не должна превышать 255 символов.

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

1.Delete(строка, номер символа, длина фрагмента)-удалениеизстрокифрагмента заданной длины, начиная с заданного номера символа строки; получается новаястрока_1:

str_1 :=’коробочка’;

Delete(str_1, 4, 2);из строкикоробочка, начиная с четвертойбуквы, удаляется фрагментдлиной2символа; получаетсяstr_1=’корочка’

2.Insert(строка_1, строка_2, номер символа)-вставкастроки_1встроку_2, начиная с заданного номера символа; получается новаястрока_2:

str_1 :=’сор’;

str_2 :=’мука’;

Insert(str_1, str_2, 3);в строкумука,начиная о третьей буквы, вставляется строка сор; получаетсяstr_2=’мусорка’

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

1.Str(число, строка)-преобразование числового значения величинычисло встроку:

x:= 3.14;

Str(x, str_1); строка str_1 примет значение ‘3.14’

2.Val(строка, число, код)-преобразование значениястроки в величину целого или вещественного типачисло. Если во время операции преобразования ошибки не обнаружено, то значениекодаравно нулю. Если же обнаружена ошибка (строка не переводится в число), токодбудет содержать номер позиции ошибочного символа, а значениечислане определено:

str_1 := ‘3.14’;

Val(str_1, x, n); строка str_1 преобразуется в число x=3.14, n = 0 (ошибок нет)

str_1 := ‘3,14’;

Val(str_1, x, n); строка str_1 не будет преобразована в число, n = 2 (второй символ – запятая - ошибочен), x не определен

Использование этой функции позволяет избежать неприятной ошибки выполнения Invalid numeric format, возникающей при неправильном вводе числовых данных, при появлении которой программа заканчивает работу. Если же вводить число в виде строки, а потом преобразовывать ее в число, используя процедуруVal, то даже при некорректном вводе можно будет продолжать работу, анализируя значение кода ошибки и повторив ввод.

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