Похожие презентации:
Преобразования число-строка
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.
Домашнее задание• Читать конспект и презентацию
• Еще раз посмотреть примеры из презентации
• Выполнить задания из презентации