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