Строковый тип данных
В ТР помимо символьного существует строковый тип данных. Строка символов представляет собой массив, в котором возможно обращение к отдельному элементу массива, при этом каждый элемент массива относится к типу char. В связи с этим, строку можно описать следующим образом:
Н-р, type s=array [1..80] of char или var s:string[80] или var s:string.
В первом случае строка имеет определенную длину, во втором она ограничена числом 255 (стандартная длина символьной строки).
Операции над строками:
concat(s1,s2,…,sn) – функция типа string, возвращает строку, представляющую сцепление строк s1,s2,…,sn.
сopy(s,k,n) – функция типа string, копирует из строки s n-символов, начиная с символа с номером k.
delete(s,k,n) – процедура, удаляет из строки s n-символов, начиная с символа с номером k.
insert(sb,st,k) – процедура, вставляет подстроку sb в строку st, начиная с символа с номером k.
length (s) – функция типа integer, возвращает длину строки s.
pos(sb,st) – функция типа integer, отыскивает в строке st первое вхождение подстроки sb и возвращает номер позиции, с которой она начинается, если подстрока не найдена, возвращает ноль.
str(x[:w [:d]],s) – процедура, преобразует число х любого вещественного или целого типа в строку символов s так, как это делает процедура write перед выводом. Здесь w – общее количество символов, выделенных под соответствующее символьное представление числа х, d – количество символов, отводимых на дробную часть.
val(s,x,code) – процедура, преобразует строку символов s в числовое представление переменной х. Если преобразование прошло успешно, code содержит ноль, иначе переменная х не меняет своего значения, а code содержит номер позиции, в которой имеется ошибка.
Н-р: val(‘ 123’,k,i) – k получит значение 123, i=0
val(‘123 ’,k,i) – k не изменится, i=4
upcase (с) – функция типа char, возвращает для символьного выражения с, которое должно представлять собой строчную латинскую букву, соответствующую заглавную букву, если значением с является любой другой символ (в т.ч. русская буква), то функция возвращает его без преобразования.
ord(x) – функция типа integer, возвращает код символа х.
chr(x) – функция типа char, возвращает символ с кодом х.
Задача 17. Написать программу, которая выводит на экран первую часть таблицы кодировки символов (от 0 до 127). Таблица должна состоять из 8 колонок и 16 строк. В первой колонке должны быть символы, имеющие коды от 0 до 15 и т.д.
Задача 18. Написать программу, которая а) удаляет начальные пробелы из введенной с клавиатуры строки; б) проверяет, является ли введенная с клавиатуры строка целым числом.
Задача 19. Написать программу, которая вычисляет значение выражения N1±N2±N3± … ± Nk. N – целое одноразрядное число. Вид программы:
Введите арифметическое выражение 9+5-4+2
Значение введенного выражения равно 12.
Многомерные массивы.
В определении регулярного типа
U=array [n1..n2] of r
В качестве базового типа r может выступать real, integer, char или ранее определенный тип. Пусть r в свою очередь является ранее определенным массивом: r=array [m1..m2] of s и пусть а – переменная типа u, тогда a[i] – это переменная типа r, а а[i,j] – это переменная типа s.
То есть, u=array[n1..n2,m1..m2] of s.
Следовательно, массив u – представляет собой таблицу или матрицу, если s – числовой тип.
Задача 21. Задана матрица 15*15. Надо поэлементно вычесть последний столбец из всех столбцов, кроме последнего и показать исходную и полученную матрицу на экране. (Элементы матриц задать положительными целыми числами через генератор случайных чисел (random(1)*20) ).
Файлы. Файловые типы.
Большие совокупности данных, с которыми необходимо часто работать, удобно хранить в виде файлов. В ТР под файлом понимается последовательность компонент, являющихся объектами одного и того же типа. Особенности файлов:
- каждый файл имеет свое имя, что позволяет программе работать одновременно несколькими файлами
- файл содержит компоненты одного типа
- длина вновь создаваемого файла не указывается при его объявлении и ограничивается свободной внешней памятью.
В ТР различают файлы трех типов: типизированные, текстовые, нетипизированные.
Обращение к файлам осуществляется через файловые переменные:
Н-р: type trud=record
d:integer;
n:string;
end;
var s:trud; f:file of trud; f1:file of integer; f2:text; f3:file;
Чтобы получить доступ к компонентам файла, файл необходимо связать файловую переменную с уже существующими или создаваемым файлом
Assign(f,’d:\мои документы\1.dat) или в каталоге, где находится программа ТР assign(f,’1.dat’)
При открытии файла для чтения или записи, указатель устанавливается в начало файла – в нулевую позицию.
Чтение данных из типизированного файла осуществляется с помощью команды read(f,a); где а – перечисленные через запятую выражения, значения которых вводятся в файл. Выражения могут быть целого, вещественного, логического, символьного типа, типа string или char. Тип выражений должен соответствовать типу компонент файла. Если файл текстовый, то возможно чтение целой строки readln(f,a).
Запись в типизированный файл write(f,a), в текстовый файл можно вписать строку writeln(f,a).
Следует помнить, что читать и записывать – два несовместимых друг с другом действия, поэтому, в таких случаях используется процедура close(f) – закрытие файла.
Добавление данных в файл append(f)- процедура открывает файл и добавляет данные в конец файла. Если файл был уже открыт для чтения или записи, то файл закрывается и вновь открывается.
Открытие файла для чтения – процедура reset(f);процедура rewrite(f)- создает файл для записи, если же он уже был создан, то открывает и удаляет все содержимое.
Если в типизированном файле несколько компонент, то можно осуществить прямой доступ к компоненте – процедурой seek(f,n), где n – выражение типа longint, указывающее номер компоненты.
Функция filepos(f)- возвращает номер компоненты файла, которая будет обрабатываться следующей операцией ввода-вывода, только для типизированных файлов.
Функция filesize(f) – размер файла в компонентах файла.
При обращении в программе с текстовыми файлами, нужно помнить о том, что здесь важно отделение строк друг от друга и отделение составных частей разных типов: строки и числа и т.п. Для этого используется признак конца строки EOLN(f)(true, false), seekeoln(f), файла EOF(f) (true, false) , seekeof(f) и ведущие пробелы. Признак конца строки имеет кодом #13 или #10, конца файла #26.
При чтении переменных символьного типа char из текстового файла будет считан один символ . Если перед чтением достигнут конец строки, то будет считан символ с кодом #13, конец файла - #26.
При чтении в переменные типа string количество считанных символов равно 255, если не встречен признак конца строки или файла. В этом случае сами признаки в строку не помещаются. Если количество символов в строке больше 255, то лишние символы отбрасываются. При чтении числовых данных выделяется подстрока, ограниченная разделителями. В качестве разделителей используются ведущие пробелы, символы табуляции и признак конца строки. Выделенная подстрока из символьного представления числа переводится во внутреннее представление числа и полученное значение присваивается переменной. Если в подстроке нарушен формат представления числовой переменной, возникнет ошибка ввода-вывода.
При записи логических выражений в файл вводятся слова true или false, вещественные числа выводятся в экспоненциальной форме, в противном случае с фиксированной точкой.