Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Заполнение строки одним символом
Строку можно заполнить одним символом: Var s: string; begin Fillchar (s, 10, ’1’); Процедура Fillchar имеет три параметра: 1-й задает адрес (строки), с которого нужно начинать писать выбранный вами символ; 2-й сколько символов нужно написать; 3-й код (или изображение - в апострофах) записываемого символа Будут выполнены следующие действия: с самого начала запишется 10 кодов символа ‘1’ (код = $31). В эти 10 байтов будет включен байт с индексом ноль, в котором хранится текущая длина строки. Что бы такого не было заполнение строки делается в два этапа: Var s: string; begin Fillchar (s[1], 10, ’1’); // 1 этап s[0]: = #10; // 2 этап end. 4) Стандартные функции и процедуры для работы со строками: Length(s) – функция возвращает значение типа byte = текущей длине строки. Concat (s1, s2, s3, ..., s10) - функция сцепления строк выполняется для заданных аргументов (сцепляемых строк) и возвращает значение типа string – сцепленную строку. При выполнении сцепления вторая строка записывается в хвост первой, третья – вв хвост второй и т.д. Copy (str, start, len) – функция возвращает значение типа string – указанную часть строки: str - строка, в которой выделяется подстрока. start - позиция начала выделяемого фрагмента len - размер выделяемого фрагмента (в символах).
ПРИМЕР. Пусть надо переставить местами левую и правую части строки. Решение: надо выделить правую часть и добавить к ней справа (сцепить) левую часть. Var s: string; begin s: = ’abcdef’; s: = Concat (Copy(s, 4,. 3), Copy(s, 1, 3)); //Первый вартант или s: = Copy(s, 4,. 3) + Copy(s, 1, 3)); //Второй вартант
Pos(s1, s2) – функция возвращает позицию (слева направо) в строке s2, с которой в ней первый раз встречается подстрока s1. Если не встречается, то возвращается 0. Эту функцию часто используют для проверки, входит или нет подстрока в строку (если POS возвращает не 0, то входит). Delete (s, Start, Len) - процедура которая удаляет часть строки: s -строка, Start - начало, Len - длина Insert (s1, s2, start) – процедура вставляет подстроку s1 в заданную строку s2, start - позиция начала с которой s1 вставляется в s2. ПРИМЕР: пусть надо заменить вторую половину первой строки на первую половину второй. Решение: в Паскале нет операции «заменить», но ее можно реализовать с помощью двух действий: 1) удаление (delete) и 2) вставка (insert). s1: = ‘abcdef’; результатам должно быть ‘abc123' s2: =’123456’; Выполнение: delete(s1, 4, 3); // удаляем из 1-ой строки правую (заменяемую) часть insert( copy (s2, 1, 3), s1, 4); // вставляем левую половину 2-ой строки в коней 1-ой
левая часть строки s2
5) Подпрограммы преобразования из строкового представления в числовое и наоборот: Процедура вывода числа в строку: Str (число [: общая ширина: дробная часть], строка); Эта процедура предназначена для преобразования числа в строковое представление. Параметры: число – то, что преобразуется; ширина - общее количество символов, которое отводится для представления числа в пределах строки. Сюда кроме цифр числа включаются а) знак «точка» (отделяет целую часть числа от дробной), б) знак числа, в) символ e (для вещественных чисел); г) знак порядка; д) порядок числа. дробная часть - сколько знаков после точки с должно быть в изображении числа в виде строки; строка – принимающая строка. Str (2.35: 6: 2, s); --> для данного вызова значения числа 2.35 будет следующим: s= ‘ 2.35’. Замечание: только при указании и ширины и дробной части вещественное значение попадет в строку в формате с фиксированной точкой (иначе - в формате с плавающей точкой). Процедура преобразования строки в число: Val (строка, число, код_ошибки); - процедура возвращает для входной строки типа string или Pchar (с символьным представлением числа) значение этого числа в переменной число. После выполнения процедуры в параметре код_ошибки находится номер позиции, в которой обнаруживается ошибка преобразования (если все нормально, то возвращается 0). Чтобы не возникало ошибки преобразования содержимым входной строки может быть только строка, содержащая символы с изображением значения по правилам типа, соответствующего переменной «число». ПРИМЕР. Х - переменная целого типа. Следовательно, в строке s не может быть точек, пробелов, символа ‘Е’, символов букв. ПРИМЕР. Var s: string; x: Real; i: Integer; Begin s: = ‘12.34’; Val (s, x, i); // i будет равно 0, а x будет равен 12.34 s: = ‘123 ’; // Пробел вызовет ошибку преобразования строки в целочисленную переменную Val (s, x, i); После выполнения второй строки программы, значение i=0 (нет ошибок), т.к. ошибок при преобразовании строки в числе не будет и х= 12.34. После выполнения 4-й строки i будет равно 4, т.к. в 4-й позиции находится пробел, значение х будет непредсказуемо. Замечание: наиболее часто эти две процедуры используются для того, чтобы: - вставить изображение (символьное) числа в строку (str); - из изображения строки выделить число (val). Пример: пусть нужно в середину строки вставить изображение (символьное представление) числа, равного текущему году. Var s1, s2: string; i, j: integer; begin s1: = ’abcdef’; i: = 2016; из s2 str(i, s2); // изображение числа записали в s2 (s2 будет равно ‘2016’) insert(s2, s1, 4); // результат s1 = ‘abc2016def’ val(copy(s2, 4, 4), i, j ); // i будет равно 2016 end. Далее - простейший ввод-вывод
8. Совместимость и преобразование типов. 8.1 Совместимость типов
Паскаль является строго типизированным языком. Это означает: 1. Все данные, используемые в программе должны быть явно объявлены, т.е. указан тип переменных (умолчание не действует). 2. Используемые одной и той же конструкции языка (выражении) данные должны быть согласованы по типу (должны иметь одинаковый или совместимые типы). Существует несколько уровней совместимости (типов), отличающихся степенью строгости и применяющихся в разных конструкциях языка (и нужно знать, когда какой вид совместимости нужен).
1 уровень: Эквивалентность или тождественность типов. Существует две стороны (1 и 2) эквивалентности типов: 1) В секции описания типов два типа считаются эквивалентными, если в секции Type тип Т2 явно указан эквивалентным типу Т1 использованием знака “=”. Type T2 = T1 2) Две переменные V1 и V2 считаются принадлежащими к одному и тому же типу, если: - в секции Var справа от двоеточия при объявлении переменных присутствует один и тот же идентификатор (но не описание) типа, например: Var V1: T1; V2: T1; - переменные V1 и V2 объявляются в одной секции Var, причем перечисляются через запятую так, чтобы справа от двоеточия оказался один и тот же тип.
ПРИМЕРЫ тождественности и не тождественности типов: Пример1: Type T1 = array [1..5] of byte; T2 = array [1..5] of byte; T3 = T1; Согласно этому объявлению, типы T1 и T2 не эквивалентны, хотя имеют одно и то же описание типа. Типы Т3 и Т1, согласно последней строке, являются эквивалентными. Пример2: Var V1, V2: array [1..5] of byte; V3: array [1..5] of byte; V4: T1; V5: T1; V6: T1; Из этого описания следует: - переменные V1 и V2 в этом описании имеют эквивалентный тип, потому что они перечисляются слева от одного и того же типа; - переменная V3 не совместима по типу с переменными V1 и V2; - переменные V4, V5 и V6 объявляется с типом Т1 и, согласно данному выше определению, имеют тип Т1, эквивалентный Т3. Правило эквивалентности типов необходимо соблюдать только при вызове процедур и функций. Оно означает, что типы формальных параметров-переменных и соответствующих им фактических параметров должны быть тождественны или эквивалентны.
2 уровень: Совместимость типов. Типы являются совместимыми, если: Þ они тождественны; Þ оба вещественны; Þ оба целые; Þ один тип является поддиапазоном другого; Þ оба типа являются строками с одинаковой объявленной длиной; Þ оба типа строковые без указания длины; Þ ………………………………………….. Правила совместимости типов следует соблюдать при записи выражений на Паскале, т.е. нельзя использовать несовместимые типы в одном выражении. Например, нельзя писать: ‘a’> 5. Однако можно так: byte(‘a’) > 5; приведение типа значения
3 уровень: Совместимость по присваиванию (менее жесткие, чем в предыдущем случае, требования). При следующих объявлениях: Type T1 =... T2 =... Var V1: T1 V2: T2 оператор присваивания вида V1: = V2; не вызовет сообщения об ошибке, связанной с несовместимостью типов, если: - T1 и T2 тождественны или эквивалентны; - T1 и T2 являются совместимыми порядковыми типами и значение V2 лежит в диапазоне возможных значений V1; - T1 и T2 - вещественные типы и значение V2 лежит в диапазоне возможных значений переменной V1; - если T1 - вещественный, а T2 - целый тип (наоборот - нельзя! ); - если T1 - строковый, а T2 - символьный или строковый тип. Нарушение правил совместимости типов обнаруживается обычно на стадии компиляции и сопровождается выдачей сообщения Type mismatch:
Var i, j: integer; x, y: real; begin i: = 25; x: = 1.25; y: = i; //правильно j: = x; //ошибка ...............
Популярное:
|
Последнее изменение этой страницы: 2016-07-12; Просмотров: 769; Нарушение авторского права страницы