28/04/2004 1 Строки в Паскале (по учебному пособию С.И.Молчановой «Основы программирования Турбо-Паскаль 7.0»)

Презентация:



Advertisements
Похожие презентации
Символьные и строковые переменные. Общие понятия Для того чтобы ЭВМ могла обрабатывать тексты, она должна уметь оперировать не только с числами, но и.
Advertisements

Символы и строки. Процедуры и функции работы со строками.
Строки в Pascal
Строки – последовательность символов, к которой можно обращаться как к единому целому и к каждому элементу по отдельности. Строка.
Понятие строки. Операции со строковыми величинами. Стандартные процедуры и функции обработки строковых величин. Простые алгоритмы работы со строками на.
Познакомиться с основными принципами работы с символьными величинами Научиться применять процедуры и функции для их обработки.
Компьютеры могут обрабатывать данные различных типов. Вам уже приходилось иметь дело с числовыми типами данных: целым и вещественным. Не менее широко.
1 Строковый тип данных Строка – это последовательность символов определенной длины (от 0 до 255).
СТРОКИ Строковой называется последовательность символов определённой длины. Идентификатор типа – слово String Примеры описания: Var Str1 : String[10];
СТРОКИ Строковой называется последовательность символов определённой длины. Идентификатор типа – слово String Примеры описания: Var Str1 : String[10];
Основные принципы работы с символьными величинами Шутилина Л.А.,
Символьные переменные, операции с символьными переменными.
Основы алгоритмизации и программирования Чабанюк Виктория 10 класс.
Чувашия, с.Моргауши, МБОУ "Моргаушская СОШ" - Павлинова Раиса Мефодьевна, г. Тема: Паскаль «строковые переменные». Обработка строк текста МБОУ.
Обработка символьных величин. Цели урока Познакомиться с основными принципами работы с символьными величинами Познакомиться с основными принципами работы.
С ИМВОЛЬНЫЕ И С ТРОКОВЫЕ ВЕЛИЧИНЫ. О ГЛАВЛЕНИЕ Символьные и Строковые величины Сравнение переменных Сложение переменных Функция Concat Функция Concat.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Строки символов Строка в Паскале – упорядоченная последовательность символов. Количество символов в строке называется ее длиной. Длина строки в Паскале.
Массивы Вариант 1 Program upr1; Var s,a:real; I: integer; Begin S:=0; For I:=1 to 10 do Begin Writeln (введите очередное число'); Readln(a); S: =s+a; End;
Познакомиться с основными понятиями языка Pascal 2.
Транксрипт:

28/04/ Строки в Паскале (по учебному пособию С.И.Молчановой «Основы программирования Турбо-Паскаль 7.0»)

2 Содержание Введение Операции со строками Необходимые навыки при работе с текстом Стандартные процедуры и функции: Copy, delete, insert, pos Copydeleteinsertpos Числа как набор символов Процедуры Str, ValStrVal Задача 1 Задача 2 Задача 3 Задачи для самостоятельного решения Задачи повышенной сложности

3 Введение При решении лексических и синтаксических задач, мы используем данные литерного и символьного типа. Тип char (символьный) не совсем удобен, т.к. позволяет в переменной хранить только один символ, хотя желательно иметь инструмент для задания целых последовательностей литер. Таким инструментом являются строки STRING. Переменная, объявленная как переменная типа STRING содержит от 0 до N символов, но не может превышать 255.

4 Длину строки можно указывать в квадратных скобках рядом со служебным словом string. Пример: var st: string[25]; В том случае, если длина строки не указана, она принимается максимально возможной, т.е. N=255. Строки рассматриваются как цепочки символов. Тип string во многом похож на одномерный массив символов. Однако, в отличие от массива символов, количество символов в строке может меняться от 0 до N. К любому символу в строке можно обратиться точно так же, как к элементу массива, т.е. указав рядом с именем переменной типа string, в квадратных скобках индекс символа в строке: st[2], т.е. 2-ой символ в строке st; st[i] i-тый символ в строке st; Самый первый байт в строке имеет индекс равный 0 и содержит текущую длину строки.

5 Операции со строками 1. Операция объединения строк (конкатенация). Обозначается эта операция знаком + (но это не сложение!) st:= 'abcd '; stl:='efk'; st2:=st+stl; значение st2 'abcdefk' Примечание: если длина результирующей строки превысит допустимую (255) длину, то "лишние" символы отбрасываются. 2. Операции сравнения =, >=, >, ,

6 Тип данных String используется при обработке текстов, а это означает, что нам необходимо уметь: 1. копировать часть строки; 2. удалить часть строки; 3. вставлять подстроку (т.е. часть строки) в данную строку; 4. осуществлять поиск подстроки (т.е. часть строки) в данной строке. Для реализации этих операций в Турбо-Паскале существуют стандартные процедуры и функции.

7 Стандартные процедуры и функции 1. Копирование части строки функция copy (st, n, k), где st исходная строка, n начальная позиция, k количество символов, которые мы будем копировать. Пример: var st:='abcdef; stl:=copy(st,2,3); Значение строки stl 'bcd'.

8 Удаление части строки процедура delete(st,n,k), где st исходная строка, nначальная позиция (с какого символа начинаем удалять), kколичество удаляемых символов. Пример: var st:='abcdef' {st[0]=6;} delete(st,2,3);.. Значение строки st 'aef. Внимание! При удалении части строки ее длина автоматически уменьшается, st[0]=3. Стандартные процедуры и функции

9 Вставить подстроку в данную строку процедура insert(stl,st,n), где stl подстрока, stисходная строка, nпозиция символа, с которого начинается вставка. Пример: Пусть stисходная строка, stlподстрока. st:='?*-+/ab'; stl:='!%'; insert(stl,st,2) ; Значение строки st"?!%*-+/ab". Можно не вводить имя переменной для подстроки, указав значение переменной явно, т.е. insert('!%', st, 2); Стандартные процедуры и функции

10 Поиск подстроки в строке (первое вхождение). Поиск подстроки в строке осуществляется с помощью функции pos, k:=pos(stl,st), где stlподстрока, stстрока, kпозиция первого вхождения подстроки, либо 0, если подстрока отсутствует. Пример: Будем искать подстроку "г.Москва" в строке st, k:=pos('г.Mocквa',st); Ответ: k=18. Внимание! Повторим еще раз: 1. Значение функции posпеременная целого типа. 2. Функция pos ищет первое вхождение подстроки в строку. Стандартные процедуры и функции

11 Строка типа string помимо буквенных и других символов может содержать и цифры. Пример: var st, stl, st2: string; a, b: integer; st:='123' ; c: integer; stl:='254' Мы имеем набор символов, но не числа! Представление в памяти переменной st, объявленной как string, отличается от представления переменных а и b. Числовые переменные переводятся в двоичную систему счисления и, в зависимости от типа (целого или вещественного), хранятся в памяти ЭВМ (2, 4 или больше байт). В строке символов каждому символу соответствует свой код. Один символ занимает 1 байт. Сравните: st2:=st+stl; значение st2 - 'l23254' а:=123; b:=254; с:=а+b; значение с=377;

12 Процедура STR преобразует число любого вещественного или целого типов в строку символов. str(a,st); где: а числовая переменная; st строка символов. Пример: var a: integer; b: real; st, stl: string; …… a:=345; str(a,st); b:=l2.6789; str(b, stl); значение stl= E+01 ' str(b:2:2,stl); значение stl='12.67' Существует целый ряд задач, при решении которых необходимо уметь представить числовое данное в виде цепочки символов и, соответственно, выполнить обратное действие. В Турбо-Паскале существуют две процедуры, которые позволяют решить эти проблемы.

13 2. Процедура VAL преобразует строку, содержащую цифры в число, вещественное или целое. val(st,a,code); где: а числовая переменная; st строка; code переменная целого типа, по значению которой можно определить, успешно или нет прошел перевод. Если перевод из строки символов в число прошел успешно, значение переменной code равно 0. var a: integer; b: real; code: integer; st: string; ……… st:='345'; val(st,a,code); значение переменной а равно 345. st:=' '; val(st,b,code); значение переменной b равно Е+01.

Задача 1. Строка содержит только цифры. Удалить все впереди стоящие нули. Исходная строка: , результат: Program del; Var st: string; i: byte; begin writeln('введите строку'); readln(st); i:=length(st); while ((i>0)and(st[l]='0')) do begin delete(st,l,1); i:=i-l end; writeln(st) end. Внимание! При выполнении таких программ необходимо помнить о том, что в экстремальных ситуациях, например, когда строка содержит только нули, возможно зацикливание (т.е. не произойдет выход из тела цикла), поэтому добавляется еще одно условие: i>0: предварительно в i запишем длину строки, а затем уже в цикле будем уменьшать значение переменной i на единицу. В том случае, когда строка содержала только нули выход из цикла произойдет при нарушении условия i>0, т.е. как только i примет значение 0. Строка после удаления всех нулей будет пустой.

Задача 2. Строка символов st содержит только цифры это число в некоторой р -ной системе счисления. Выполнить перевод в десятичную систему счисления =3·7 2 +2·7' +6·7° =6·7 0 +2·7' +3·7 2 Мы видим два базовых алгоритма: 1) вычисление суммы; 2) вычисление а n. Пусть переменная S используется для накопления суммы, переменная р для вычисления 7 n. Опишем алгоритм словесно. Переменной S присвоим нуль. Переменной р присвоим 1. Организуем цикл, количество повторений которого равно длине слова. Цифры числа будем рассматривать, начиная с последней. В цикле вычисляем 7 i и суммируем полученные произведения. Фрагмент текста программы: ………… S:=0; р:=1; for i:=length(st) downto 1 do begin val(st[i],a,code); {перевод цифры из символа в число} р:=р*7; S:=S+p*a end;

Задача 3. Строка символов содержит слова, разделенные одним или несколькими пробелами. Подсчитать количество слов в строке. Номера позиций символов: Символы: Для того чтобы подсчитать количество слов в строке, необходимо каждое слово "вырезать". Для этого мы будем использовать функцию сору. Для начала ответим на следующие вопросы: 1) с какого символа мы начинаем вырезать? 2) сколько символов необходимо вырезать? Чтобы ответить на них, нам необходимо вычислить позиции левой и правой границы слова. Используем то обстоятельство, что слова разделены пробелами. Начальная позиция первого слова равна 4, позиция первого пробела за словом равна 10, если из позиции пробела равной 10 вычесть начальную позицию слова, равную 6, то мы получим длину слова. Делаем вывод, что наша задача следить за позицией пробела, просматривая все символы строки.

Задача 3 (продолжение). k:=0; {счетчик слов} r:=1; {правая граница слова} while r

18 Задачи для самостоятельного решения. 1. Дана строка символов, содержащая слова, определить количество слов: 1) начинающихся с буквы а; 2) имеющих четную длину; 3) первый и последний символы которых совпадают; 4) последний и предпоследний символы которых совпадают. 2. Строка символов содержит только цифры, вывести на экран номера позиций цифры Определить количество трехзначных чисел в строке, содержащей группы цифр, разделенных пробелом.

19 Задачи повышенной сложности 1. Найти минимальное число, которое представляется суммой четырех квадратов натуральных чисел не единственным образом. 2. Задан числовой массив А(n). Найти длину самой длинной последовательности подряд идущих элементов массива, равных нулю. 3. Напечатать в порядке возрастания все простые несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают Задан массив натуральных чисел Р(n). Найти минимальное натуральное число, не представимое суммой никаких элементов массива Р. Сумма может состоять и из одного слагаемого, но каждый элемент массива может входить в нее только один раз. 5. Задан числовой массив А(n). Найти отрезок массива максимальной длины, в котором первое число равно последнему, второе предпоследнему и т.д. Напечатать длину этого отрезка. 6. Задано натуральное число N. Найти и напечатать все его простые делители.