Процедура Str
Процедура Str в Паскале преобразует число или перечисление в строку. Синтаксис:
procedure Str(var X : TNumericType; var S : string);
Процедура Str возвращает строку, представляющую значение X , которое может быть любым числовым или перечисляемым типом. Фактическое объявление процедуры Str не соответствует синтаксису Паскаль и должно быть
где необязательные спецификаторы NumPlaces и Decimals управляют форматированием строки:
- NumPlaces задаёт общую ширину строки
- Decimals задаёт количество десятичных знаков после символа десятичного разделителя
Процедуру Str также можно использовать для преобразования значения перечисляемого типа в строковое представление объявленного перечисления. Это означает, что будет работать следующее:
Эта программа выведет на экран слово One . То же самое сделает и следующая программа:
Преобразование числа может быть выполнено, например, так:
Если вы хотите преобразовать вещественное число и задать определённое количество знаков после запятой, то это можно сделать так:
Примеры вывода показаны на рисунке:
Если хотите, можете с помощью процедуры Str создать собственную функцию преобразования вещественных чисел в строку с заданным количеством знаков после запятой. Функция может быть, например, такой:
Здесь с помощью спецификатора Decimals мы задаём количество знаков после запятой. В программе функцию можно использовать так:
Writeln(MyFloatToStr(Pi*2, 3));
При этом на экран будет выведена строка 6.283
Спецификатор NumPlaces тоже может пригодиться, например, при выводе таблиц. С его помощью мы можем задать одинаковую ширину строки, и на экране вывод будет занимать всегда одинаковое заданное количество знакомест, независимо от того, сколько цифр у нас в числе. Пример:
Процедуры STR и VAL.
В строковую переменную можно записывать не только буквы, но и цифры. Однако это будут не числа, как таковые, а их символьное представление. Для преобразования символьных представлений числа в само число, и наоборот, используются процедуры STR и VAl.
Например, возьмем 2 числа: 125 и 347. Если эти числа записаны в строковых переменных, то с ними можно производить те действия, которые производятся над строками. Например, в результате операции сцепления 125+347 получится 125347. Если же данные числа будут записаны в переменных типа Integer или Real, то над ними можно производить операции, предусмотренные для чисел (сложение, вычитание умножение, деление, DIV, MOD и т.д.). Например, в результате операции сложения 125+347 получится 472.
В языке программирования Pascal предусмотрена возможность преобразования чисел в их символьное представление и наоборот.
Процедура STR преобразует число целого или вещественного типов в его строковое представление. Процедура имеет 2 параметра: STR (X, ST), где «X» — это число, а ST – его строковое представление. Также, можно указывать формат преобразования: STR(X:A:B, ST), где «A» задает ширину всего поля, которое выделяется для строкового представления числа, а «B» — количество символов в дробной части (последний параметр имеет значение в том случае, если преобразуется вещественное число). Процедура STR делает с числом то же, что и оператор Writeln перед тем как вывести число на экран (преобразует число в символ).
Процедура VAL преобразует строковое представление числа в само число, которое можно записать в целочисленную или вещественную переменную. Процедура имеет 3 параметра: VAL (ST, X, CODE), где ST – строка, которую необходимо преобразовать в число, X – вещественная или символьная переменная, в которую записывается это число, CODE – необязательный параметр, который, в случае ошибки будет содержать номер позиции, в которой обнаружен ошибочный символ.
Использование процедуры STR.
Строка №3. Создаем 3 строковые переменные.
Строка №4. Создаем 3 целочисленные переменные.
Строка №7. В 1-ую переменную типа Integer записываем число 1234.
Строка №8. Во 2-ую переменную типа Integer записываем число 5678.
Строка №9. Складываем эти числа, результат записываем в 3-ю переменную.
Строка №10. Выводим результат на экран.
Строка№11. Переводим 1-ое число в его строковое представление, результат сохраняем в переменной «stroka1».
Строка №12. Переводим 2-ое число в его строковое представление результат сохраняем в переменной «stroka2».
Строка №13. Производим над строками операцию сцепления и записываем результат в переменную «stroka».
Строка №14. Выводим результат на экран.


О процедуре STR также можно прочитать в разделе, посвященному графике в Pascal.
Использование процедуры VAL.
Напишем программу, в которой строковой переменной будет присвоено значение, определяющее дату, например, 23.02.1965. Пусть эта дата обозначает год вашего рождения. Программа, должна подсчитать, сколько вам лет на текущий момент. Текущим моментом будем считать 2012 год.
Строка №7. В переменную «stroka1» записываем дату рождения.
Строка №8. В переменную «stroka2» копируем из переменной «stroka1» последние 4 символа, 1965.
Строка №9. Преобразовываем эти 4 символа в число и записываем это число в целочисленную переменную «rog».
Строка №10. В целочисленную переменную «let» записываем значение, которое получится при вычитании из числа 2012 числа 1965.
Как перевести число в строку в паскале
Перечислим основные процедуры и функции, которые предназначены для работы с переменными строкового типа.
1. Определение длины строки. Вычисление текущей длины строки производится с помощью функции Length . Ее общий вид следующий: Результатом данной функции является целое число, равное текущему количеству символов в строке. Например, при выполнении следующих конструкций: значение целой переменной K будет равно 12.
- ‘Паскаль ‘>’Паскаль’ (первая строка будет больше второй, так как в первой строке еще присутствует пробел),
- ‘Balkon’ (первая строка меньше второй, так как код символа ‘b’ больше кода символа ‘B’: Ord (‘b’)>Ord (‘B’)) ,
- ‘Паскаль’=’Паскаль’ (строки совпадают посимвольно и равны по длине).
2. Удаление части символов строки. Для удаления из строки фрагмента используется процедура Delete , общий вид которой следующий:
Рис.1. Общий вид процедуры Delete
Например, при выполнении процедуры Delete(‘Язык Паскаль’,5 ,8) из строки будут удалены 8 символов, начиная с пятого, и исходная строка будет иметь вид: ‘Язык’.
3. Вставка символов в строку. Для вставки символов в строку используется процедура Insert . Ее общий вид следующий:
Рис.2. Общий вид процедуры Insert
Например, в результате выполнения процедуры Insert(‘111’, ‘ABC’,2); результирующая строка будет такой:’A111BC’.
4. Поиск подстроки в строке. Для определения позиции подстроки в строке используется функция Pos , общий вид которой следующий:
Рис.3. Общий вид функции Pos
Результат этой функции целое число. Оно определяет номер элемента, с которого начинается первое вхождение подстроки в строку. Если подстрока в строку не входит, то значение функции равно нулю. Например, при выполнении конструкции k1:=Pos(‘BC’,’ABCD’); значение переменной k1 равно 2, так как функция Pos возвращает номер элемента, с которого подстрока первый раз встречается в строке. При выполнении оператора k1:=Pos(‘ABCD’,’ BC’); значение переменной k будет равно нулю.
Приведем пример программы, иллюстрирующей выше описанные конструкции. Пусть в заданном тексте нужно заменить все вхождения подстроки ‘del’ на ‘insert’ .
Решение и комментарии вы можете посмотреть здесь.
5. Склеивание строк. Для «склеивания» строк используется функция Concat , общий вид которой следующий:
Например, после выполнения следующих конструкций: на экран будет выведено сообщение: «Пароход «.
Замечание .
«Склеивание» строк можно производить, используя символ «+», например, C:=A+’о’+B; в результате строка C будет иметь вид: ‘Пароход’.
6. Копирование строк. Для копирования строк или их фрагментов используется функция Copy . Ее общий вид:
Рис.4. Общий вид функции Copy
Например, при выполнении оператора WriteLn(Copy (‘Язык Паскаль’,6,7)) на экран будет выведено сообщение:» Паскаль».
Часто возникает необходимость получить строковое представление числа и наоборот (например, получить строку ’13’ из числа 13). Для работы с числами и строками применяются следующие две процедуры.
7. Перевод числа в строку. Для перевода числа в строку используется процедура Str , общий вид которой следующий:
Рис.5. Общий вид процедуры Str
Например, Str(1.21, St); в результате выполнения процедуры строка будет такой: St=’1.21′.
8. Перевод строкового выражения в число. Для перевода строки в число используется процедура Val . Ее общий вид:
Рис.6. Общий вид процедуры Val
Если данная строка действительно является записью числа (целого или действительного), то значение признака будет равно нулю , иначе значение признака будет равно номеру первого символа, с которым процедура Val «не справилась», то есть преобразование этого символа является невозможным.
Например, при выполнении процедуры Val (‘1234’,N,K); значение переменной N будет равно 1234, а переменная K будет равна нулю, так как строка ‘1234’ является записью целого числа. При выполнении конструкции Val(’12-34′,N,K); значение переменной N не изменится, а переменная K будет равна трем, то есть номеру символа, с которого преобразование невозможно, так как знак «-» в записи чисел может быть только на первом месте.
Проиллюстрируем использование некоторых процедур и функций на примере следующей программы: подсчитать сумму цифр, входящих в данную строку.
Решение и комментарии вы можете посмотреть здесь.
На следующем шаге мы разберем еще несколько задач, при решении которых используются перечисленные конструкции.
Процедура Str
Процедура Str(x [:width [:decimals]], st) преобразует число х любого вещественного или целого типов в строку символов st. Параметры width и decimals, если они присутствуют, задают формат преобразования. Width определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа х, а decimals – количество символов в дробной части (имеет смысл только в том случае, когда х – вещественное число).
y : integer; x : real; st : string [8];
y := 45; str(y, st); writeln (st);
y := 45; str(y:3, st); writeln (st);
y := -2; str(y:5, st); writeln (st);
str(x:7, st); writeln (st);
str(x:10, st); writeln (st);
str(x:6:2, st); writeln (st);
str(x:8:3, st); writeln (st);
Вывод на экране дисплея:
Процедура val
Процедура val(st, x, code) преобразует строку символов st во внутреннее представление целой или вещественной переменной х, которое определяется типом этой переменной. Параметр code содержит ноль, если преобразование прошло успешно, и тогда в х помещается результат преобразования, в противном случае он содержит номер позиции в строке st, где обнаружен ошибочный символ, и в этом случае содержимое х не меняется. Пробелы в строке st могут присутствовать лишь в начале.
x : real; y : integer; st : string;
st := ’45.678′; val(st,x,y); writeln (x:6:3,’ ‘,y);
st := ‘3,1415’; val(st,x,y); writeln (x:6:3,’ ‘,y);
st := ‘ 45.678’; val(st,x,y); writeln (x:6:3,’ ‘,y);
st := ’45.6 ‘; val(st,x,y); writeln (x:6:3,’ ‘,y);
Результат выполнения программы:
Практические примеры работы со строковыми данными
Задача.Определить, сколько раз в тексте встречается заданная буква.
С помощью функции Сopy копируем в переменную а по одному последовательно все символы из текста t. В случае а = х, где х исходная буква, необходимо включить счетчик. Длину текста определим с помощью функции length.
x : char; i,k : integer;
write(‘Введите исходный текст’);
for i := 1 to length (t) do
if a = x then k := k + 1;
write (‘Буква ‘,x,’ встречается ‘, k, ‘ раз.’)
В этой задаче функцию Copy использовать не обязательно. Возможно и такое решение:
for i := 1 to length (t) do
if t(i) = x then k := k + 1;
Задача.Подсчитать, сколько слов в тексте начинается на заданную букву. Слова в тексте разделены пробелами.
Первая буква каждого слова в тексте следует после пробела. Определив позицию пробела и выделив фрагмент текста от пробела и до конца, определим является ли первая буква фрагмента заданной по условию.
Программа:
x : char; i,k : integer;
write(‘Введите исходный текст’);
if a = x then k := k + 1;
t := copy (t, i + 1, length(t)–i);
write (‘Количество слов на букву ‘,x,’ = ‘, k)
В переменную a копируем первую букву фрагмента текста; i – номер позиции пробела; t – исходный текст и текущий фрагмент текста от пробела и до конца. Цикл продолжается до тех пор, пока текущий фрагмент t содержит пробелы.
Задача.В заданном тексте осуществить замену одного слова на другое.
Программа:
write(‘Введите исходный текст’);
writeln(‘Введите слово, которое нужно заменить’);
writeln(‘Введите слово, для замены’);
writeln (‘Исходный текст ‘); writeln (t);
c := copy (t, 1, i – 1);
if c = a then s := s + b + ‘ ‘ else s := s + c + ‘ ‘;
t := copy (t, i + 1, length(t) – i)
writeln (‘Новый текст ‘); writeln (s)
Выделяем из текста каждое слово с помощью функции Copy. Выделенное слово “с” сравниваем с заданным “а”: если они равны, то в новый текст следует записать слово для замены “b”, иначе в новый текст записываем старое слово “с”. Текст должен заканчиваться пробелом, иначе не будет возможности выделить последнее слово. На всякий случай запишем в конец исходного текста пробел (t := t + ‘ ‘;).
Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быть различных типов. Каждое поле именуется.
Структура объявления типа записи такова:
<имя типа> = record <список полей>end
Здесь <имя типа> – правильный идентификатор;
record,end – зарезервированные слова (запись, конец);
<список полей> – последовательность разделов записи, разделяемых символом «точка с запятой»;
Каждый раздел записи состоит из списка идентификаторов (имен) полей, за которым через двоеточие следует описание типа поля (полей). Идентификаторы в списке отделяются друг от друга запятой, например
circle=record
В этом примере объявляется тип circle(окружность), который представляет собой запись с полямиx,y(координаты центра) иr(радиус). Переменныеaиbсодержат записи типаcircle.
Как и в массиве, значения переменных типа записи можно присваивать друг другу, если их типы совпадают. Доступ к каждому из компонентов записи осуществляется указанием составного имени, состоящего из имени переменной-записи и имени поля, которые разделяются точкой. Например,
Как и массивы, записи нельзя целиком сравнивать и выводить на экран; эти операции выполняются покомпонентно. Раздел записи может представлять собой описание массива или ранее объявленной записи, при этом глубина вложенности конструкций не ограничена. Имена полей должны быть уникальными в пределах той записи, где они были объявлены, однако на разных уровнях вложенности имена могут повторяться. Например,
date = record
person = record
name: string[20];
param: array [1..3] of byte;
mp:array[1..10]of person;
В последнем примере запись типа personвключает в себя следующие поля структурных типов:name– строка символов,date– запись с полями день, месяц, год иparam– массив из трех элементов типаbyte. Имя поляyearповторяется в записях типаdateи типаperson, однако значения этих полей физически никак не связаны. Переменнаяmpпредставляет собой массив из записей типаperson. Доступ к отдельным компонентам такой структуры можно проиллюстрировать на следующем примере:
writeln( mp[3].name,’ ‘, mp[3].birthday.year,’ ‘, mp[3].param[1]);
В результате выполнения приведенного фрагмента программы на экран будет выведено: «Иванов 1967 5»