1.44M
Category: programmingprogramming

Преобразования число-строка

1.

Преобразования число ↔ строка
10 класс

2.

• В практических задачах часто нужно преобразовать число, записанное в виде
цепочки символов, в числовое значение, и наоборот.
• В языках программирования есть стандартные функции:
• переводит строку в целое число;
• переводит строку в вещественное число;
• переводит целое число в строку;
• переводит вещественное число в строку.
• Строку не всегда можно преобразовать в число (например, если в ней содержатся
буквы).

3.

В языке Паскаль строка преобразуется в число (целое
или вещественное) с помощью процедуры Val:
• Третий параметр r служит для того, чтобы зафиксировать ошибку: если
после вызова процедуры Val он равен нулю, то ошибки не было, иначе в
переменную r записывается номер первого ошибочного символа.

4.

Преобразование числа в строку выполняет
процедура Str:
• По умолчанию вещественные числа представлены в научном
(экспоненциальном) формате ('1.234560Е+002' означает 1,23456-102). В
последней строке примера используется форматный вывод: запись Х:10:3
означает «вывести число в 10 позициях с 3 знаками в дробной части».

5.

Строки в процедурах и функциях

6.

• Строки можно передавать в процедуры и функции как аргументы
(значения параметров), а также возвращать как результат функций.
Построим процедуру, которая заменяет в строке s все вхождения словаобразца wOld на слово-замену wNew (здесь wOld и wNew — это имена
переменных, а выражение «слово wOld» означает «слово, записанное в
переменную wOld»).

7.

Сначала разработаем алгоритм решения задачи.
На первый взгляд кажется, что можно написать такой
алгоритм на псевдокоде:
пока { слово wOld есть в строке s }
{ удалить слово wOld из строки }
{ вставить на это место слово wNew }
wOld: '12'
wNew: 'A12B'
зацикливание
• Однако такой алгоритм работает неверно, если слово wOld входит в состав
wNew, например, нужно заменить '12' на 'А12В'.

8.

• Однако такой алгоритм работает неверно, если слово wOld входит в
состав wNew, например, нужно заменить '12' на 'А12В' (покажите
самостоятельно, что это приведет к зацикливанию).
• Чтобы избежать подобных проблем, попробуем накапливать результат
в другой символьной строке res, удаляя из строки s уже обработанную
часть. Предположим, что на некотором шаге в оставшейся части строки
s обнаружено слово wOld.

9.

Замена всех
экземпляров подстроки
• Теперь нужно выполнить следующие действия:
1) ту часть строки s, которая стоит слева от образца,
«прицепить» в конец строки res (б);
2) «прицепить» в конец строки res слово-замену
wNew (в);
3) удалить из строки s начальную часть, включая
найденное слово-образец (г).
• Далее все эти операции (начиная с поиска слова
wOld в строке s) выполняются заново до тех пор,
пока строка s не станет пустой. Если очередное
слово-образец найти не удалось, вся оставшаяся
строка s приписывается в конец строки-результата,
и цикл заканчивается.

10.

В начале работы алгоритма в строку res записывается пустая строка ' ',
не содержащая ни одного символа. В таблице приведён протокол
работы алгоритма замены для строки '12.12.12', в которой нужно
заменить слово '12' на 'А12В'.

11.

Теперь можно написать процедуру на школьном алгоритмическом языке.
Так как она должна менять строку s, эта строка должна быть одновременно
аргументом и результатом (в школьном алгоритмическом языке — аргрез), а
старое и новое слова — это просто аргументы (арг).
• Переменная р — это номер первого
символа первого найденного словаобразца wOld, а в переменной lеn
записана длина этого слова.

12.

• Переменная р — это номер первого символа первого найденного словаобразца wOld, а в переменной lеn записана длина этого слова. Если после
поиска слова значение р меньше нуля (образец не найден), происходит выход
из цикла:
• Если р > 1, то слева от образца есть какие-то символы, и их нужно
«прицепить» к строке res:
• Условие р+lеn>длин (s) означает, что образец стоит в самом конце слова, при
этом остаток строки s — пустая строка.
• В конце программы результат записывается на место исходной строки s.

13.

Приведём пример использования процедуры:
• Построенную выше процедуру можно легко превратить в
функцию. Для этого нужно:
• в заголовке функции указать, что она возвращает строку
(добавить ключевое слово лит);
• все параметры должны быть аргументами (нужно убрать
аргрез и арг);
• поскольку в школьном алгоритмическом языке нельзя менять
аргументы внутри процедуры, назовём первый параметр
(исходную строку) s0, и введём дополнительную переменную
s для работы со строкой в процедуре;
• в конце нужно записать результат во встроенную
переменную знач, а не в s.

14.

• Ниже показаны все изменённые части подпрограммы:
• Вызывать функцию можно таким образом:

15.

program Replace;
var s: string;
... { здесь будет процедура }
begin
s:= '12.12.12';
replaceAll(s, '12', 'A12B');
writeln(s)
end;
рабочая строка s
'12.12.12'
'.12.12'
'.12'
''
результат res
''
'A12B'
'A12B.A12B'
'A12B.A12B.A12B'

16.

procedure replaceAll(var s: string; wOld, wNew: string);
var res: string;
p, len: integer;
begin
len:= Length(wOld);
res:= '';
while Length(s) > 0 do begin
p:= Pos(wOld, s);
if p = 0 then begin res:= res + s; break; end;
if p > 1 then res:= res + Copy(s,1,p-1);
res:= res + wNew;
if p+len > Length(s) then
s:= ''
else s:= Copy(s,p+len,Length(s));
end;
s:= res
end;

17.

program Replace;
var s: string;
function replaceAll(s,
wOld, wNew: string): string;
...
begin
... { тело процедуры }
replaceAll:= res
end;
begin
s:= '12.12.12';
s:= replaceAll(s, '12', 'A12B');
writeln(s)
end;

18.

Задание 1.
Соедините процедуру с программой
и запустите ее

19.

Задание 2.
• Напишите функцию, которая возвращает первое
слово переданной ей символьной строки.
Пример:
Введите строку: Однажды в студёную зимнюю пору...
Первое слово: Однажды

20.

Задание 3.
Пример:
Введите имя файла: qq
Введите новое расширение: tmp
Результат: qq.tmp
Пример:
Введите имя файла: qq.exe
Введите новое расширение: tmp
Результат: qq.tmp
• Напишите функцию,
которая заменяет
расширение файла на
заданное новое
расширение.

21.

Домашнее задание
• Читать конспект и презентацию
• Еще раз посмотреть примеры из презентации
• Выполнить задания из презентации
English     Русский Rules