КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Запрещен
Примеры применения переменных множественного типа, описанных выше: c:=['a'..'e']; {c:=['a','b','c','d','e']} ch:=['d'..'f']; {c:=['d','e','f'], c<>ch} cc:=c+ch; {cc=['a','b','c','d','e','f'], cc>=c или c<=cc} cc:=c*ch; {cc=['d','e']} cc:=c-ch; {cc=['a','b','c']} for cha:='a' to 'z' do if cha in cc then write(cha); {печать элементов множества сс} c2:=[]; {пустое множество} for i:=1 to 7 do можно заменить одним оператором: c2:=c2+[i]; {множество c2:=[1..7]; чисел от 1 до 7} for i:=1 to 7 do if i in c2 then write(i); {печать множества с2} Правила приоритета для множественных операций:
ЗАДАНИЯ №1. Какие из следующих описаний неверны и почему? type { 1 } Tochki = set of real; { 2 } bajt = array [1.. 8] of 0..1; { 3 } europe = (england, france,germany,spain,italy); { 4 } oset = set of europe; { 5 } vektor = array [1..10] of boolean; { 6 } oneset = set of vektor; { 7 } digits = '0'..'9'; { 8 } threeset = set of digits; { 9 } matrica = array [digits] of threeset; { 10 } fiveset = set of boolean; { 11 } fourset = set of integer; №2. Какие из следующих конструкций являются множествами (в смысле языка PASCAL), а какие нет и почему? а) [9,3,6,0]; б) [2..3],5,7; в) [1..15,4..18]; г) ['*','*']; д) [0..0]; е) [true..false]; ж) [2,sqrt(9)]; з)['=','>=','>']; и) [[],[5]]; к) [ord(7),0<2] №3. Что будет на экране в результате выполнения следующей программы: Type Primery=(Red,Yellow,Blue,White,Black); Color =set of Primery; Var H0,H1:Color; C1,C2,C3:set of Char; B1,B2:Boolean; Ch:Char; Begin { лат.алф.:A,B,C,D,E,F,G,H,I,J,K,L,M, N,O,P,Q,R,S,T,U,V,W,X,Y,Z } H0:=[Yellow]; H1:=H0+[succ(Blue)]; if Blue in H1 then writeln('Blue'); C2:=['F'..'K','M','X'..'Z']; C1:=['L','N'..'W']; C3:=C1+C2; for Ch:='A' TO 'Z' DO if Ch in C3 THEN Write(Ch:2); Writeln; B1:= C3 = C1 + C2; B2:= C3 <= C2; Writeln(B1,B2:6,'M' in C1:6); End. №4. Имеется описание: var x,y,z:set of 8..22; Переменной x присвоить множество всех целых чисел от восьми до 22, переменной y - множество всех составных чисел из этого же диапазона, а переменной z присвоить множество всех простых чисел из того же диапазона. №5. Не используя дополнительные переменные, поменять местами значения переменных-множеств А и В. 12. ИСПОЛЬЗОВАНИЕ ЗАПИСЕЙ Под записью в языке PASCAL понимается структура данных, состоящая из фиксированного числа элементов разного типа. Составляющие запись объекты называются ее полями. В записи каждое поле имеет свое собственное имя (идентификатор). В определении типа записи после служебного слова RECORD следует, СПИСОК ПОЛЕЙ, состоящий из одного или нескольких элементов, называемых СЕКЦИЯМИ ЗАПИСИ. Если секций записи более одной, то они разделяются точкой с запятой. Вся последовательность завершается служебным словом END. ОБЩИЙ ВИД ОПЕРАТОра Допустим, что мы хотим определить тип данных RECORD с именем adress, и наша запись должна содержать три элемента: улицу (тип string), номер дома и номер квартиры (тип integer). Это будет выглядеть следующим образом: TYPE Adress RECORD street: string; house, flat: integer END; Теперь, располагая определением типа adress, можно объявить одну и более переменных этого типа или даже ряд из элементов типа adress: VAR home: adress; familiy: array [1..100] of adress; fater: RECORD street: string; house, flat: integer end; Названия полей записи могут совпадать с именами переменных, констант и других объектов программ, но не могут совпадать с названиями полей других записей. Чтобы обратиться к именам полей, необходимо написать имя переменной-записи и через точку имя нужного поля. Например: home.street:='Ленина'; home.house:=25; home.flat:=1; for i:=1 to 100 do begin readln(familiy[i].street); readln(familiy[i].house,familiy[i].flat) end; home:=familiy[1]; {все поля переменной home равны полям первого элемента массива familiy} Понятно, что такой синтаксис может стать довольно обременительным, в особенности с записями очень сложной структуры. В качестве альтернативы в языке PASCAL предусмотрено специальное средство, называемое WITH (присоединение). Формально предложение WITH строится по следующей схеме: WITH префикс[,префикс [...]] DO оператор где слово префикс обозначает имя одного или нескольких уровней записи. За заголовком WITH... DO следует любой оператор или группа операторов, заключенные в операторные скобки BEGIN и END. Например: for i:=1 to 100 do WITH familiy[i] do begin Readln(street); Readln(house,flat) end; ПРИМЕР 1 Написать программу, в которой организовать ввод данных для каждого ученика: фамилию, имя, класс и букву класса. Определить, для какого года обучения больше всего классов. Решение TYPE class = RECORD nom: 1..11; {номер класса} ch: char {буква класса} end; uchenik = RECORD fam,imya:string[15]; kl: class end; VAR u: array[1..1000] of uchenik; x: uchenik; n,i: integer; Begin WRITE('сколько учеников в школе?'); Readln(n); for i:=1 to n do {ввод сведений по всем ученикам} begin Writeln(i,'-й уч.'); Writeln('фамилия?'); Readln(u[i].fam); Writeln('имя?'); Readln(u[i].imya); Writeln('класс N'); Readln(u[i].kl.nom); Writeln('буква класса?'); Readln(u[i].kl.ch) end; {определим, каких больше классов: 1-х или 2-х или..} x:=u[1]; {первого ученика берем за основу} for i:=2 to n do with u[i],kl do if ch>x.kl.ch then x:=u[i]; Writeln(x.kl.nom,'-х классов больше всего. Их ', ord(x.kl.ch)-ord('а')+1); End. ЗАДАНИЯ №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.
Дата добавления: 2014-12-27; Просмотров: 450; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |