Transcript Document

Программирование
на алгоритмическом
языке. Часть II
Тема 4. Символьные строки
 К. Поляков, 2010 -2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
2
Чем плох массив символов?
Это массив символов:
симтаб s[1:10]
• каждый символ – отдельный объект;
• массив имеет длину, которая задана при
объявлении
Что нужно:
• обрабатывать последовательность символов как
единое целое
• строка должна иметь переменную длину
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
3
Символьные строки
Объявление строки:
s[3]
1
лит s
s[4]
2
П р и в е
т
!
¤
рабочая часть
s[1]
s[2]
Длина строки:
цел n
 К. Поляков, 2010-2012
n:= длин(s)
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
4
Символьные строки
Задача: ввести строку с клавиатуры и заменить все
буквы «а» на буквы «б».
алг Замена а на б
нач
лит s
вывод "Введите строку: "
ввод s
цел i
нц для i от 1 до длин(s)
если s[i] = "а"
длина строки
то s[i]:= "б"
все
кц
вывод s
кон
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
5
Задания
«3»: Ввести символьную строку и заменить все буквы «а» на
буквы «б», как заглавные, так и строчные.
Пример:
Введите строку:
ааббссААББСС
Результат:
ббббссББББСС
«4»: Ввести символьную строку и заменить все буквы «а» на
буквы «б» и наоборот, как заглавные, так и строчные.
Пример:
Введите строку:
ааббссААББСС
Результат:
ббаассББААСС
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
6
Задания
«5»: Ввести символьную строку и проверить, является ли она
палиндромом (палиндром читается одинаково в обоих
направлениях).
Пример:
Пример:
Введите строку:
Введите строку:
АБВГДЕ
КАЗАК
Результат:
Результат:
Не палиндром.
Палиндром.
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
7
Операции со строками
лит s, s1, s2
Запись нового значения:
s:= "Вася"
Объединение: добавить одну строку в конец другой.
s1:= "Привет"
s2:= "Вася"
s := s1 + ", " + s2 + "!" | "Привет, Вася!"
Подстрока: выделить часть строки в другую строку.
s:= "123456789"
s1:= s[3:8]
| "345678"
| "456"
s2:= s1[2:4]
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
8
Удаление и вставка
Удаление части строки:
6 штук
s:= "123456789"
s:= удалить(s, 3, 6);
строка
меняется!
Вставка в строку:
начиная с 3-его символа
'12ABC3456789'
куда
вставляем
s:= вставить( "Q", s, 5 )
 К. Поляков, 2010-2012
'129'
с 3-его символа
s:= "123456789"
s:= вставить("ABC", s, 3)
что
вставляем
'123456789'
'12ABQC3456789'
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
9
Поиск в строке (найти)
Поиск в строке:
s[3]
цел n
s:= "Здесь был Вася."
n:= найти("е", s)
3
если n > 0 то
вывод "Буква е – это s[", n, "]"
иначе вывод "Не нашли"
все
n = 11
n:= найти("Вася", s)
s1:= s[n:n+3]
Вася
Особенности:
• функция найти возвращает номер символа, с
которого начинается образец в строке
• если образец не найден, возвращается -1
• поиск с начала (находится первое слово)
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
10
Примеры
s:= "Вася Петя Митя"
n:= найти( "Петя", s )
s:= удалить(s, n, 4)
s:= вставить("Куку", s, n )
6
'Вася Митя'
'Вася Куку Митя'
s:= "Вася Петя Митя"
n:= длин( s )
s1:= s[1:4]
s2:= s[11:14]
s3:= s[6:9]
s:= s3 + s1 + s2
n:= длин( s )
14
'Вася'
'Митя'
'Петя'
'ПетяВасяМитя'
12
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
11
Пример решения задачи
Задача: Ввести имя, отчество и фамилию. Преобразовать их к
формату «фамилия-инициалы».
Пример:
Введите имя, отчество и фамилию:
Василий Алибабаевич Хрюндиков
Результат:
Хрюндиков В.А.
Алгоритм:
• найти первый пробел и выделить имя
• удалить имя с пробелом из основной строки
• найти первый пробел и выделить отчество
• удалить отчество с пробелом из основной строки
• «сцепить» фамилию, первые буквы имени и фамилии,
точки, пробелы…
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
12
Программа
использовать Строки
алг ФИО
нач
лит s, имя, отчество
цел n
вывод "Введите имя, отчество и фамилию"
ввод s
n:= найти(" ", s);
имя:= s[1:n-1] | вырезать имя
s:= удалить(s, 1, n)
n:= найти(" ", s)
отчество:= s[1:n-1] | вырезать отчество
s:= удалить(s, 1, n) | осталась фамилия
s:= s + " " + имя[1] + "." + отчество[1] + "."
вывод s
кон
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
13
Задания
«3»: Ввести в одну строку фамилию, имя и отчество, разделив
их пробелом. Вывести инициалы и фамилию.
Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
Результат:
П.С. Иванов
«4»: Ввести имя файла (возможно, без расширения) и изменить
его расширение на «.exe».
Пример:
Введите имя файла:
qqq
Результат:
qqq.exe
 К. Поляков, 2010-2012
Введите имя файла:
qqq.com
Результат:
qqq.exe
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
14
Задания
«5»: Ввести путь к файлу и «разобрать» его,
выводя каждую вложенную папку с новой строки
Пример:
Введите путь к файлу:
C:\Мои документы\10-Б\Вася\qq.exe
Результат:
C:
Мои документы
10-Б
Вася
qq.exe
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
15
Задачи на обработку строк
Задача: с клавиатуры вводится символьная строка,
представляющая собой сумму двух целых чисел,
например:
12+35
Вычислить эту сумму:
12+35=47
Алгоритм:
1) найти знак «+»
2) выделить числа слева и справа в отдельные строки
3) перевести строки в числа
4) сложить
5) вывести результат
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
16
Преобразования «строка»-«число»
Из строки в число:
да или нет
s:= "123"
N:= лит_в_цел(s, OK)
если не OK то вывод
s:= "123.456";
X:= лит_в_вещ(s, OK)
если не OK то вывод
цел N, вещ X,
лит s, лог OK
| N = 123
"Ошибка!" все
| X = 123.456
"Ошибка!" все
Из числа в строку:
N:= 123
s:= цел_в_лит(N) | "123"
X:= 123.456
s:= вещ_в_лит(X) | "123.456"
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
17
Программа
использовать Строки
алг Калькулятор слагаемые-строки
нач
лит s, s1, s2 слагаемые-числа
цел n, n1, n2, sum
сумма
лог OK
вывод "Введите выражение (сумму двух чисел): "
ввод s
n:= найти("+", s)
s1:= s[1:n-1]
слагаемые-строки
s2:= s[n+1:длин(s)]
n1:= лит_в_цел(s1, OK)
слагаемые-числа
n2:= лит_в_цел(s2, OK)
sum:= n1 + n2
вывод n1, "+", n2, "=", sum
кон
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
18
Задания
«3»: Ввести арифметическое выражение: разность двух
чисел. Вычислить эту разность.
Пример:
25-12
Ответ: 13
«4»: Ввести арифметическое выражение: сумму трёх
чисел. Вычислить эту сумму.
Пример:
25+12+34
Ответ: 71
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
19
Задания
«5»: Ввести арифметическое выражение c тремя числами,
в котором можно использовать сложение и
вычитание. Вычислить это выражение.
Пример:
25+12+34
Ответ: 71
Пример:
25+12-34
Ответ: 3
Пример:
25-12+34
Ответ: 47
Пример:
25-12-34
Ответ: -21
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru
Программирование на алгоритмическом языке. Часть II
20
Задания
«6»: Ввести арифметическое выражение c тремя числами,
в котором можно использовать сложение, вычитание
и умножение. Вычислить это выражение.
Пример:
25+12*3
Ответ: 61
Пример:
25*2-34
Ответ: 16
Пример:
25-12+34
Ответ: 47
Пример:
25*2*3
Ответ: 150
 К. Поляков, 2010-2012
http://kpolyakov.narod.ru