Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal_учебник_3.doc
Скачиваний:
33
Добавлен:
11.04.2015
Размер:
937.47 Кб
Скачать

Задания

№1. Описать следующие понятия в виде записи:

а) цена в рублях и копейках;

б) время в часах, минутах и секундах;

в) адрес (город, улица, дом, квартира);

г) бланк требования на книгу (сведения о книге: шифр, автор, название; сведения о читателе: номер читательского билета, фамилия; дата заказа);

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

№2. В программе имеются описания:

Type mast = (piki,trefy,bubny,chervy); {?????}

dostoinstvo = (shest,sem,vosem,devyt,desyt,valet,

dama,korol,tuz); { ???????????}

karta = Record

M:mast;

D:dostoinstvo

End;

Описать логическую функцию F(K1,K2,KM), проверяющую, «бьет» ли карта К1 карту К2, с учетом того, что масть KM является козырной.

№3. В программе имеются описания:

Type

kryg=Record radius: real;

centr : Record

x,y:real

End

End;

Var

K:krug;

Требуется переменной К присвоить значение, соответствующее кругу радиуса 2.5 с центром в точке (0,1.8). В каких из следующих операторов присоединения правильно решается эта задача, а в каких нет и почему?

а) with K do begin

radius:=2.5;

x:=0;

y:=1.8

end;

б) with K do begin

radius:=2.5;

with centr do begin

x:=0;

y:=1.8

end

end;

в) with K do begin

radius:=2.5;

centr.x:=0;

centr.y:=1.8

end;

г) with K, centr do begin

radius:=2.5;

x:=0;

y:=1.8

end;

д) with centr, K do begin

radius:=2.5;

x:=0;

y:=1.8

end;

№4. В программе имеется следующее описание:

Type

vremy=Record

chas:0..23;

min, sec:0..59

End;

Описать процедуру F(t,t1), присваивающую параметру t1 время, на секунду больше времени t (учесть смену суток).

№5. В программе имеются описания:

Typy

kost = Record

lev,prav:0..6

End;

ryd = array [1..28] of kost;

Описать логическую функцию L(r), которая проверяет, правильно ли выставлены кости домино в ряду r (равна ли правая цифра очередной кости левой цифре следующей кости).

13. Работа со строками

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

string[n];

Максимальная длина строки – целочисленная константа от 1 до 255.

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

Пример описания переменных типа STRING:

VAR

a,b,c : STRING [ N ];

или

VAR

b : STRING;

Все символы строки пронумерованы, т.е. имеют индекс, значение которого изменяется от 1 до числа n. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива: ARRAY [0..N ] OF CHAR.

Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки, т.е., чтобы узнать текущую длину строки, например b, достаточно обратиться к функции ORD следующим образом:

N:=ORD(b[0])

ОПЕРАЦИИ НАД СТРОКАМИ

К строкам можно применить операцию “+” - сцепление строк.

Например:

'Turbo/' + 'Pascal'  'Turbo/Pascal';

'24' + '.' + '36'  '24.36' .

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

Операции отношения выполняются после операции '+'.

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

В языке PASCAL все латинские и русские символы упорядочены в порядке соответственно латинского и русского алфавитов, например:

'r' < 's' ;

'ф' > 'д' .

Напомним, что соответствующие большие и маленькие буквы каждого алфавита имеют разные коды, например:

'F'≠'f'.

Примеры присваивания строковых данных:

AGE:='fiftinth';

U:='Yes '+ AGE;

Если переменная U описана как string[9], то, поскольку превышать максимальную длину строки нельзя, переменная U после выполнения описанных операций будет равна

U='Yes fifti' .

функции для обработки строковых переменных

1. CONCAT( ST1 , ST2 ,..., STN:String ):STRING - возвращает строку, представляющую собой сцепление строк-параметров ST1,ST2,...,STN.

Количество сцепляемых строк - произвольное.

Примеры:

1) T:=CONCAT('Зима,', ' Весна,', ' Лето,', ' Осень');

В результате Т будет равно:

Т='Зима, Весна, Лето, Осень'.

2) ST:=concat('Turbo/' , 'Pascal');

В результате ST будет равно:

ST='Turbo/Pascal'.

2. LENGTH(ST:String):INTEGER - возвращает длину строки ST (количество символов в строке).

Пример:

ST:='ЮРГТУ(НПИ)';

i:=length(st);  i=10.

3. COPY(ST:String;I,K:Integer):STRING - копирует из строки ST K символов, начиная с символа с номером I.

Если I>length(ST) , то в результате получится пустая строка.

Если I+K>length(ST), то берутся только символы, которые содержатся в строке.

Пример: R:='1 января 2009 года';

S:=copy(R,10,6);  S='2009 г'

4. POS(SUBST,ST:String) : INTEGER - просматривает строку ST и отыскивает первое появление в ней подстроки SUBST. Результатом является целое число - номер той позиции строки, в которой находится первый символ подстроки SUBST. Если заданная подстрока не найдена, то результат равен нулю.

Пример: ST:='студенты';

I :=pos('ден',ST);  I=4

ПРОЦЕДУРЫ ДЛЯ ОБРАБОТКИ СТРОКОВЫХ ПЕРЕМЕННЫХ

1. DELETE(var ST:String;I,K:Integer) - удаляет из строки ST участок, содержащий K символов, начиная с I-го символа (т.е. начиная с позиции I); результат заносится в ту же строку ST.

Если I>length(ST), то никакие символы не удаляются.

Если I+K>length(ST), то удаляются только те символы, которые присутствуют в строке.

Пример:

Var

st:string;

Begin

st:='ABCDEF';

delete(st,2,4);

……................  st='AF'

2. INSERT(SUBST:String;var ST:String;I:integer) - вставляет подстроку SUBST в строку ST, начиная с позиции c номером I.

Если I>length(ST), то строка SUBST присоединяется к строке ST. Лишние символы отсекаются.

Пример:

ST:=' январь 2004 г.';

insert('Месяц',st,1);  ST='Месяц январь 2004 г.'

3. STR(X [ :WIDTH [ :DECIMALS ] ] : Integer (или Real); var ST : String) - преобразует число X вещественного или целого типа в строковое представление (строку ST). WIDTH определяет общую длину поля, выделенного под соответствующее символьное числа X представление вещественного или целого числа X; DECIMALS определяет количество символов в дробной части.

Примеры:

1) i:=5237;

Str(i,st);  st='5237'

Str(i:4,st);  st='5237'

Str(i:6,st);  st=' 5237

Str(i:2,st);  st='5237'

2) a:=28.36;

STR(a,st);  st=' 2.8360000000E-01'

STR(a:9,st);  st=' 2.84E-01'

STR(a:5,st);  st=' 2.8E-01'

STR(a:5:2,st);  st='28.36'

STR(a:8:3,st);  st=' 28.360'

STR(a:3:1,st);  st='28.4'

4. VAL(ST:String;var X:Integer(или Real);var CODE:byte) - преобразует строковую величину ST в числовое представление целой или вещественной переменной X (тип определяется типом переменной X).

ST не должно содержать незначащих пробелов в начале или в конце строки.

Параметр CODE содержит ноль, если преобразование прошло успешно, и тогда в X помещается результат преобразования. Иначе CODE равен номеру первого ошибочного символа в строке ST, и в этом случае содержимое X не меняется (перевод не осуществится).

Пример: ST:='234';

val(ST,i,r);  i=234; r=0.

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