Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры информатика 2012.doc
Скачиваний:
16
Добавлен:
17.04.2019
Размер:
11.54 Mб
Скачать

24.Целые типы Целый тип присваивается данным ( переменным и константам), которые во время работы программы могут принимать лишь целочисленные значения. Например, программа вычисления функции факториал для натурального числа N ооперирует целыми числовыми значениями. В стандарте языка Паскаль определен единственный целый тип данных Integer. В современных реализациях языка целый тип данных представлен множеством типов: Integer(-32768..32767) – 2(4) байта, Shortint(-128..127), Smallint(-32768..32767), Longint(-231..231-1) , Byte(0..255) – 1 байт, Word(0..216-1),Longword(0..4294967295). Переменные физических целых типов имеют разные диапазоны значений в зависимости от того, сколько байтов памяти они занимают.

24. Строковый тип

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

В разделе var строки описываются следующим образом:

var <имя_строки>: string[[<длина>]]

Максимальная длина строки - 255 символов. Нумеруются ее компоненты начиная с 0, но этот нулевой байт хранит длину строки. Если <длина> не указана, то считается, что в строке 255 символов. Поэтому для экономии памяти следует по возможности точно указывать длину используемых строк.

Примеры описаний:

Var S1: string;

St1,St2=string[7];

St1:=строка_`; St2:=`очень_длинная`; линная –автоматически оборвется

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

If St1>St2 then

S1:=`St1 больше чем St2`;

Var S1,S2:String[5];

St1: String(12);

St1:=S1+S2; St1:=S1&S2; St1:= Concat(S1,S2);

Стандартные функции и процедуры обработки строк

Для обработки символьных массивов, которыми являются строки, в языке Pascal существуют специальные подпрограммы:

1. Функция concat(s1,_,sN:string):string осуществляет слияние (конкатенацию) всех перечисленных строк или символов в указанном порядке. Если длина итоговой строки больше 255-ти символов, то произойдет отсечение "хвоста". Кроме того, даже если результат конкатенации не был усечен, но программа пытается сохранить его в переменную заведомо меньшей длины, то усечение все равно состоится: concat('abc','3de',' ','X','yz') = 'abc3de Xyz'

2. Функция copy(s:string;i,k:byte):string вычленяет из строки s подстроку длиной k символов, начиная с i-го. Если i больше длины строки, то результатом будет пустая строка. Если же k больше, чем длина оставшейся части строки, то результатом будет только ее "хвост":

copy('abc3de Xyz',2,4) = 'bc3d'

copy('abc3de Xyz',12,4) = ''

copy('abc3de Xyz',8,14) = 'Xyz'

3. 3. Процедура delete(s:string;i,k:byte) удаляет из строки s подстроку длиной k символов, начиная с i-го. Если i больше длины строки, то ничего удалено не будет. Если же k больше, чем длина оставшейся части строки, то удален будет только ее "хвост":

{s = 'abc3de Xyz'} {s = 'abc3de Xyz'}

delete(s,2,3); delete(s,8,13);

{s = 'ade Xyz'} {s = 'abc3de '}

4.Процедура insert(ss,s:string;i:byte) вставляет подстроку ss в строку s, начиная с i-го символа. Если i выходит за конец строки, то подстрока ss припишется в конец строки s (если результат длиннее, чем допускается для строки s, произойдет его усечение):

{s = 'abc3de Xyz'} {s = 'abc3de'}

insert('xyz',s,2); insert('xyz',s,12);

{s = 'axyzbc3de Xyz'} {s = 'abc3dexyz'}

5. Функция length(s:string):byte определяет длину строки или количество символов строки:

length('abc3de Xyz') = 10

6. Функция pos(ss,s:string):byte определяет позицию, с которой начинается первое (считая слева направо) вхождение подстроки ss в строку s. Если ss не встречается в s ни разу, функция вернет 0. Если необходимо определить ермепа всех позиций подстроки ss к s можно обозначить каждый X с которых начинается символ или подстроку ss другим символом одинаковым для всех ss например *. Если этого не делать, то происходит зацикливание всех подстрок ss:

pos('X', 'abc3de Xyz') = 8

7.Процедура str(x[:w[:d]],s:string) преобразует число x (можно указать, что в этом числе w цифр, из них d дробных) в строку s. Если число короче указанных величин, то спереди и/или сзади оно будет дополнено пробелами:

str(156.4:7:2,s);

{s = ' 156.4 '}

8. Процедура val(St,x,code); x – числовое значение в которое переводим. Преобразовывает символьное значение S1 в числовое значение целого или вещественного типа. (в случае ошибки в переменную code будет записан номер первого недопустимого символа):

{s = '15.47'}

val(s,x,code);

{x = 15.47}

27. Массивы, строки и индексы

Массивом называется совокупность однотипных данных связанных общим именем.

Переменная с индексом позволяет представить большое количество величин или компонентов с одним общим именем. Каждая отдельная величина определяется индексом в скобках после наименования переменной. Полная система таких величин называется массивом, а каждая отдельная величина – компонентом или элементом массива. Массив может быть одномерным(вектор), двумерным(матрица или таблица), трехмерным(тензор) и т.д. Термин «одномерный» определяет количество индексов, а не количество переменных. Количество индексов в линейном массиве определяется номером последнего элемента, если 1й номер массива был единица. Первый компонент одномерного массива – это элемент с номером 1, второй – 2 и.т.д, до тех пор, пока не будут пронумерованы все элементы массива. Двумерный массив представляет собой таблицу или матрицу из горизонтальных строк и вертикальных столбцов. Первый индекс – определяет номер строки, он изменяется от 1 до М, где М – полное количество строк. Второй номер столбца изменяется от 1 до N, где N – полное число столбцов. Индексы отделяются запятыми. Главная диагональ в двумерном массиве это, где номер строки = номеру столбцов. Квадратная матрица – если количество строк равная количеству столбцов. Задавая соответствующие значения индексов, можно выполнить прямой доступ к любому компоненту массива. Текущие значения индексов не должны выходить за пределы заданного диапазона. В противном случае переменная с индексом не может быть определена. Обычный прием работы с массивами, в особенности с большими массивами, - выборочное изменение отдельных его компонентов. На месте индекса может быть выражение соответствующее значению индекса, которое идентифицирует соответствующий компонент массива. Основные характеристики: имя массива, типа компонентов, размерность, равная количеству индексных позиций массива, порядок нумерации компонентов в последовательности, количество компонентов – длина массива или размер массива. Последовательную обработку массивов позволяет обеспечить цикл с параметром, который осуществляет прямой доступ к каждому элементу массива. Для обработки двумерных массивов используются те же приемы, что и для одномерных массивов.

Массивы в Object Pascal во многом схожи с аналогичными типами данных в других языках программирования. Отличительная особенность массивов заключается в том, что все их компоненты по сути данные одного типа. Эти компоненты можно легко упорядочить и обеспечить доступ к любому из них простым указанием его порядкового номера. Описание типа массива задается следующим образом:

<имя типа> = array [ <сп.инд.типов> ] of <тип>;

В качестве индексных типов в Object Pascal можно использовать любые порядковые типы, имеющие объем не более 2 Гбайт (т. е. кроме LongWord И Int64).

Определить переменную как массив можно и непосредственно при описании этой переменной, без предварительного описания типа массива, например:

var

a,b : array [1..10] of Real; - одномерный

var

a: array [1..5,1..] of real – двумерный ( строки потом столбцы)