Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
билеты по информатике.docx
Скачиваний:
46
Добавлен:
18.04.2015
Размер:
341.85 Кб
Скачать

* 24.4. Преобразование строковых данных

Для преобразования числовых данных в строковые и обратно используются стандартные процедуры:

Str (X, S); Преобразование целого (или вещественного) числа Х в строку S.

Val (S, X, Code); Преобразование строки S в значение числовой переменной Х; Code (переменная типа Integer) при этом играет роль признака возможности такого преобразования: если Code=0, преобразование успешно; в противном случае значение Code равно позиции ошибочного знака в строке.

Благодаря этим процедурам числовые данные можно преобразовать в строки и применять к ним строковые функции, а строковые данные – в числовые, к которым применимы арифметические операции.

Пример выполнения процедуры Str (X, S):

Описание

X

S

Длина строки

Var X: Integer; S: String;

12345

'12345'

5

-12345

'-12345'

6

Var X: Real; S: String;

12345

' 1.2345000000E+04'

17

-12345

'-1.2345000000E+04'

17

34.5

' 3.4500000000E+04'

17

Пример выполнения процедуры Val (S, X, Code):

Описание

S

X

Code

Var S : String; X, C : Integer;

170

170

0

5.5

0

2

Var S : String; X : Real; C : Integer;

17E3

1.7000000000E+04

0

-0.25

-2.5000000000E-01

0

93A5

0

3

Примеры программ:

Пример 1. Найти сумму цифр заданного натурального числа.

Рассматривая число как строку, и преобразуя каждый символ в число с помощью процедуры Val, можно найти сумму цифр достаточно «длинного» числа.

Пусть A – заданная строка, S – искомая сумма, k – номер символа (цифры), С – результат преобразования символа в число.

Полагаем, что данные корректны, и после преобразования сразу выполняем суммирование цифр.

Program SUMM;

Var A: String;

S, C, k, cod : Integer;

Begin

Write ('Число=');

Readln (A);

S:=0;

For k:=1 to Length (A) do

Begin

Val (A[k], C, cod);

S:=S+C

End;

Writeln ('S=', S)

End.

Пример 2. Проверить, является ли палиндромом сумма двух палиндромических натуральных чисел, не больших 1010.

Решение задачи распадается на следующие этапы:

1) ввод двух натуральных чисел a, b; так как корректность данных не гарантируется, при вводе каждого числа требуется проверка соответствия его условию задачи;

2) вычисление суммы c=a+b;

3) проверка, является ли с палиндромом.

Итак, в алгоритме выделились две самостоятельные подзадачи:

первая – ввод чисел с требуемой проверкой; эта задача решается дважды (для чисел a и b);

вторая – проверка, является ли число палиндромом; эта задача решается трижды (для чисел a, b и c).

Оформим в программе подпрограммы пользователя: VVOD и PALINDROM для решения соответственно первой и второй подзадач. В результате их выполнения будут получены значения простого типа (соответственно натуральное число и логическая величина). Значит, уместно использование функций пользователя. В функции PALINDROM после преобразования числа N (единственный параметр-значение) в строку T формируется логический результат. Функция VVOD содержит обращение к функции PALINDROM для проверки корректности вводимого числа x.

Program Palindromy ;

Var a, b, c : LongInt ;

Function PALINDROM (N :LongInt): Boolean ;

Var T : String; D, n : Byte ;

Begin

STR (N, T); D :=Length (T);

n:=1;

While (n<=D div 2) and

(T[n]=T[D-n+1]) Do n:=n+1;

If n>D div 2 Then

PALINDROM :=True

Else PALINDROM :=False

End;

Function VVOD (b:String): LongInt;

Var x : LongInt;

Begin

Write (b); Readln (x);

While PALINDROM (x)=False Do

Begin

Writeln ('Это не палиндром. Повторите ввод');

Readln (x)

End;

VVOD:=x

End;

Begin

Writeln ('Введите два палиндромических числа, не большие 10^10');

a:=VVOD ('a=');

b:=VVOD ('b=');

c:=a+b;

Write ('Сумма ', a, '+', b, '=', c);

If PALINDROM (c)=False Then Write (' не');

Writeln (' палиндром')

End .