p align="left">str (1500:6, stl); даст результат '_1500'; str (4.8е+03:10, stl); - результат '_ 4.800E+03'; str (-46854:3, stl); - результат '-46854'. Val (st, IBR, Cod); процедура преобразует значение st в величину целочисленного или вещественного типа и помещает результат в IBR. Значение st должно содержать символьное изображение числа и не содержать символов, не присущих изображению чисел (например, пробелов перед цифрами), букв и т.п. Cod - целочисленная переменная индуцирующая ошибку. Если Cod=0, преобразование произведено без ошибки, если Cod=5, то ошибка при преобразовании - 5 символов. Программа Program Prim 40; иллюстрирует работу вышеописанных процедур: Program Prim40; var st1,st2:string[30]; BEGIN st1:=' река Волга '; delete(st1,1,5); writeln(st1); st1:='дом 25 '; st2:='на улице живет петух'; insert(st1,st2,10); writeln(st2); str(1500:6,st1); writeln(st1); str(4.8e+03:10,st1); writeln(st1); str(-46854:3,st1); writeln(st1); readln;END.
8.3.2. Функции обработки строк Сору (st, Poz, N) выделяет из st подстроку длиной N символов, начиная с позиции Poz. stl:='absdefg'; writeln (Сору (stl, 2, 3)); результат bсd Const (stl, st2,..., stn) выполняет сцепление строк stl... stn. Длина суммарной строки не должна превышать 255 символов. Length (st) определяет длину строки, результат - integer. Pos (stl, st2) обнаруживает первое появление строки stl в строке st2. Результат - целое число, определяющее номер позиции, в которой находится первый символ подстроки st1. Если st1 не содержится в строке st2, то результат равен 0. UpCase (ch) преобразует строчную букву в прописную. Параметр и результат имеют литерный тип. ch:=a'; UpCase (ch) имеет результат 'A'. Program Prim 41, Prim 42, Prim 43 иллюстрируют работу вышеописанных функций. Program Prim41; var st1,st2:string[30]; s:char; BEGIN st1:='отдел № 256'; writeln(copy(st1,7,5)); st2:='находится в НИИ 5'; writeln(concat(st1,st2)); writeln(length(st2)); st2:='n 256'; writeln(pos(st2,st1)); s:='a'; writeln(upcase(s)); readln;END. Program Prim42; {программа удаляет все пробелы в строке, стоящие в строке слева, если они имеются} Var str:string[255]; { Var str: string; будет работать так же} function del(stroka:string):string; Var dlina:byte; Begin dlina:=Ord(stroka[0]); while ((dlina>0)and(copy(stroka,1,1)=' '))do delete(stroka,1,1); del:=stroka; end; BEGIN writeln('введите строку'); readln(str); writeln(del(str)); readln; END. Program Prim43; { Даны три исходные строки A,B,C. В строке А определить первую бук } { ву; Затем заменить первую букву строки А со строчной на заглавную; } { объединить в одну строку A,B,C; Определить длины строк A,B,C} { и в результирующей строке вставить '-' между составляющими ее}{ строками. В результирующей строке найти номер позиции, в которой } { буква "а" встречается первый раз; определить длину результирующей } { строки. После каждого действия печатать результаты. } Var A,B,C:string[14]; str:string[50]; ch:string[1]; d1,d2,d3:integer; Begin A:='электронная'; B:='вычислительная'; C:='машина'; ch:=copy(A,1,1); writeln(ch); delete(A,1,1); writeln(A); writeln(upcase(ch[1])); insert(upcase(ch[1]),A,1); writeln(A); str:=concat(A,B,C); writeln(str); d1:=length(A); d2:=length(B); d3:=length(C); writeln('длины строк ' ,d1:6,d2:6,d3:6); insert('-',str,d1+1); insert('-',str,d1+d2+2); writeln(str); writeln('первый раз буква "а"стоит в результирующей строке ', 'в позиции ',pos('а',str)); writeln('общая длина строки =',length(str)); readln; END. 9. ЗаписиРанее мы рассматривали структурированные данные, состоящие из компонент одного типа (массивы). Однако на практике часто необходимо иметь под одним именем совокупность данных различного типа. Например, информация о студенте может состоять из данных: фамилия, имя, отчество (тип string), домашний адрес (тип string), пол (тип char), номер группы (тип integer), номер комнаты проживания в общежитии (тип integer), изучаемые предметы (тип, массив строк) и т.д. Для объединения разнотипных данных под одним именем и возможности последующей их обработки в языке Pascal предусмотрен тип данных запись. Запись - поименованный структурированный тип данных, состоящий из фиксированного количества различных компонент. Определение (описание) данного типа "запись" начинается атрибутом record и заканчивается end. Между record и end заключается список компонент записи, называемых полями, с указанием их имен и типа каждого поля. Туре имя типа=record идентификатор поля: тип компоненты; идентификатор поля: тип компоненты; end; Var идентификатор: имя типа; Возможно и «прямое» описание записи, без предварительного описания типа. Пример описания записи с помощью предварительного задания типа:Туре Car=record Nomer: integer; {номер} Marka: string [20]; {марка автомобиля} FIO: string [40], {ф.и.о. владельца} adres: string [60]; {адрес владельца}end;Var M, V: Car;Либо «прямое» описание:Var М, V: Record Nomer: integer; Marka: string [20]; FIO: string [40]; adres: string [60]; end; Идентификатор поля должен быть уникален только в пределах записи, однако во избежание ошибок лучше его делать уникальным в пределах программы. Объем памяти, выделяемый в разделе Var, для хранения записи складывается из объемов памяти - суммы длин полей. Значения полей записи могут использоваться в выражениях, при этом в них должны указываться составные (уточненные) имена, так как имена полей в различных записях могут совпадать. Например, чтобы получить доступ к полям записи Саr, необходимо пользоваться именами М. FIO, М. NOMER для записи М, а для записи V - именами V. FIO, V. NOMER. Эти имена можно использовать везде, где применяются обычные имена, например, в операторах присваивания: М. Nomer:=1678; V. Nomer:=3789; М. Marka:'газ-24'; V. Marka:='Таврия'; В операторах ввода-вывода: writeln (м. marka); Допускается применение операторов присваивания к записям в целом, если они имеют одинаковые структуры. Так, для приведенного выше описания записей М и V допустимо M:=V; После выполнения этого оператора значения полей записи V станут равными значениям полей записи М. В ряде задач удобно пользоваться следующими массивами записей: Туре Person=record FIO: string [30]; Prof: string [30); end; Var List: array [1..50] of Person; Здесь массив List будет состоять из 50 записей типа Person. Сама запись может иметь поля любого известного нам типа, в том числе и массивного. Допускается, чтобы поле записи само было записью. Обращение к полям записи с помощью составных имен имеет несколько громоздкий вид, что особенно неудобно при использовании мнемонических идентификаторов длиной более 5 символов. Для облегчения этой ситуации в языке Pascal есть оператор with, который имеет следующий формат: with имя переменной типа запись do begin ···················· end. Один раз указав в операторе with переменную типа запись, затем - в пределах begin... end, стоящих после with, можно работать с именами полей этой записи как с обычными переменными, т.е. без указания перед именем поля имени записи. Например: без применения оператора with: М. NOM:=5543; M.MARKA:='гa3-24'; М. FIO:='Петров П. П.'; М. Adres:='ул. Чкалова, 7, кв.32'; end; Составить программу учета успеваемости студентов курса, состоящего из шести групп до 30 студентов в каждой группе. Каждый студент сдавал экзамены по пяти дисциплинам: высшая математика, основы информатики, философия, история Украины, архитектура ЭВМ. По каждому предмету можно получить оценки 2, 3, 4, 5. Каждый экзамен можно сдавать до трех раз. Произвести анализ: если у студента имеется три двойки по одному предмету или три непересданные двойки по трем предметам, то он должен быть отчислен; если студент все двойки пересдал, то его нужно поругать. Program Prim44; label u,w; type mo=array[1..5,1..3] of 0..5; st=record namb:integer; fio:string[20]; o:mo; end; var gr:array[1..6,1..30] of st; i,j,k,l,kol_dvoek,v,kgr,n:integer; md:mo; ch:char; predmet:string; kst:array[1..6] of byte; procedure rea_ocenki(fio:string;Var oc:mo); Label M1,M2,M3,M4; Var i:integer; begin for i:=1 to 5 do Begin
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
|