К.Ю. Поляков, Е.А. Ерёмин, Программирование на языке Паскаль § 66. Символьные строки 1
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Зачем нужны символьные строки? 2 var s: array[1..80] of char; { массив символов } var s: array[1..80] of char; { массив символов } элементы массива – отдельные объекты сложно работать со строками переменной длины Хочется: строка – единый объект длина строки может меняться во время работы программы var s: string; { символьная строка } строка
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Символьные строки 3 Присваивание: s:= 'Вася пошёл гулять'; Ввод с клавиатуры: readln(s); Вывод на экран: writeln(s); А если массив? ? Отдельный символ: s[4]:= 'a'; Длина строки: var n: integer;... n:= Length(s); var n: integer;... n:= Length(s); var s: string;
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Символьные строки 4 program ReplaceAB; var s: string; i: integer; begin writeln('Введите строку'); readln(s); for i:=1 to Length(s) do if s[i]= 'а' then s[i]:= 'б'; writeln(s); end. program ReplaceAB; var s: string; i: integer; begin writeln('Введите строку'); readln(s); for i:=1 to Length(s) do if s[i]= 'а' then s[i]:= 'б'; writeln(s); end. Задача: заменить в строке все буквы 'а' на буквы 'б'. Программа >>>>>>
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 5 «A»: Ввести с клавиатуры символьную строку и заменить в ней все буквы «а» на «б» и все буквы «б» на «а» (заглавные на заглавные, строчные на строчные). Пример: Введите строку: сааб ААББссСС Результат: база ББААссСС
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 6 «B»: Ввести с клавиатуры символьную строку и определить, сколько в ней слов. Словом считается последовательности непробельных символов, отделенная с двух сторон пробелами (или стоящая с краю строки). Слова могут быть разделены несколькими пробелами, в начале и в конце строки тоже могут быть пробелы. Пример: Введите строку: Вася пошел гулять Найдено слов: 3
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 7 «C»: Ввести с клавиатуры символьную строку и найдите самое длинное слово и его длину. Словом считается последовательности непробельных символов, отделенная с двух сторон пробелами (или стоящая с краю строки). Слова могут быть разделены несколькими пробелами, в начале и в конце строки тоже могут быть пробелы. Пример: Введите строку: Вася пошел гулять Самое длинное слово: гулять, длина 6
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Операции со строками 8 Объединение (конкатенация) : s1:= 'Привет'; s2:= 'Вася'; s := s1 + ', ' + s2 + '!'; s1:= 'Привет'; s2:= 'Вася'; s := s1 + ', ' + s2 + '!'; 'Привет, Вася!' Срез: s:= ' '; s1:= Copy(s, 3, 5); { '34567' } s:= ' '; s1:= Copy(s, 3, 5); { '34567' } с какого символа откуда 5 сколько символов сколько символов
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Операции со строками 9 Вставка: s:= ' '; Insert('ABC', s, 3); { '12ABC ' } s:= ' '; Insert('ABC', s, 3); { '12ABC ' } что куда с какого символа Удаление: s:= ' '; Delete(s, 3, 6); { '129' } s:= ' '; Delete(s, 3, 6); { '129' } с какого символа сколько символов
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Поиск в строках 10 s:= 'Здесь был Вася.'; n:= Pos('с', s) if n > 0 then write('Номер символа ', n) else write('Символ не найден.'); s:= 'Здесь был Вася.'; n:= Pos('с', s) if n > 0 then write('Номер символа ', n) else write('Символ не найден.'); что где Находит первое слева вхождение подстроки! !
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Пример обработки строк 11 Задача: Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилия-инициалы». Пример: Введите имя, отчество и фамилию: Василий Алибабаевич Хрюндиков Результат: Хрюндиков В.А. Алгоритм: найти первый пробел и выделить имя удалить имя с пробелом из основной строки найти первый пробел и выделить отчество удалить отчество с пробелом из основной строки «сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы… Алибабаевич Хрюндиков Хрюндиков Хрюндиков В.А.
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Пример обработки строк 12 program FIO; var s, name, name2: string; n: integer; begin write('Введите имя, отчество и фамилию: '); readln(s); n:= Pos(' ', s); name:= Copy(s, 1, n-1); { взять имя } Delete(s, 1, n); n:= Pos(' ', s); name2:= Copy(s, 1, n-1);{ взять отчество } Delete(s, 1, n); { осталась фамилия } s:= s + ' ' + name[1] + '.' + name2[1] + '.'; writeln(s) end. program FIO; var s, name, name2: string; n: integer; begin write('Введите имя, отчество и фамилию: '); readln(s); n:= Pos(' ', s); name:= Copy(s, 1, n-1); { взять имя } Delete(s, 1, n); n:= Pos(' ', s); name2:= Copy(s, 1, n-1);{ взять отчество } Delete(s, 1, n); { осталась фамилия } s:= s + ' ' + name[1] + '.' + name2[1] + '.'; writeln(s) end.
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 13 «A»: Ввести с клавиатуры в одну строку фамилию, имя и отчество, разделив их пробелом. Вывести фамилию и инициалы. Пример: Введите фамилию, имя и отчество: Иванов Петр Семёнович П.С. Иванов
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 14 «B»: Ввести адрес файла и «разобрать» его на части, разделенные знаком '/'. Каждую часть вывести в отдельной строке. Пример: Введите адрес файла: C:/Фото/2013/Поход/vasya.jpg C: Фото 2013 Поход vasya.jpg
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 15 «C»: Напишите программу, которая заменяет во всей строке одну последовательность символов на другую. Пример: Введите строку: (X > 0) and (Y Y) and (Z <> 5) Что меняем: and Чем заменить: & Результат (X > 0) & (Y Y) & (Z <> 5)
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Преобразования «строка» – «число» 16 Из строки в число: s:= '123'; Val(s, N, r); { N = 123 } s:= ' '; Val(s, X, r); { X = } s:= '123'; Val(s, N, r); { N = 123 } s:= ' '; Val(s, X, r); { X = } Из числа в строку: N:= 123; Str(N, s); { s = '123' } X:= ; Str(X, s); { s =' E+002' } Str(X:10:3, s); { s = ' ' } N:= 123; Str(N, s); { s = '123' } X:= ; Str(X, s); { s =' E+002' } Str(X:10:3, s); { s = ' ' } var N: integer; X: real; s: string; r: integer; var N: integer; X: real; s: string; r: integer; 0 или номер неверного символа Программа >>>>>>
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 17 «A»: Напишите программу, которая вычисляет сумму трех чисел, введенную в форме символьной строки. Все числа целые. Пример: Введите выражение: Ответ: 60 «B»: Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются только знаки «+» или «–»). Выражение вводится как символьная строка, все числа целые. Пример: Введите выражение: Ответ: 54
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 18 «C»: Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки « + », « – », « * » и « / »). Выражение вводится как символьная строка, все числа целые. Операция « / » выполняется как целочисленное деление ( div ). Пример: Введите выражение: 12*3+45 Ответ: 81
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Задачи 19 «D»: Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки « + », « – », « * » и « / ») и круглых скобок. Выражение вводится как символьная строка, все числа целые. Операция « / » выполняется как целочисленное деление ( div ). Пример: Введите выражение: 2*(3+45)+4 Ответ: 100
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики ГБОУ СОШ 163, г. Санкт-Петербург ЕРЕМИН Евгений Александрович к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь
Алгоритмизация и программирование, Паскаль, 10 класс К.Ю. Поляков, Е.А. Ерёмин, Источники иллюстраций иллюстрации художников издательства «Бином» 3. авторские материалы