![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторная работа №5. Программирование с использованием строковых переменныхСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Цель работы: познакомить с понятием "стринг" и выработать навыки работы с символьной информацией в языке программирования Pascal научиться использовать строки символов и множества при решении задач. Общие сведения Переменные типа String аналогичны массивам типа Char. Их отличием является то, что число символов (длина строки) может динамически меняться в интервале от единицы до заданного верхнего значения. Тип String (строка) в Турбо Паскале широко используется для обработки текстов. Этот тип является стандартным и во многом похож на одномерный массив символов Array [0..N] of Char. Значение N соответствует количеству символов в строке и может меняться от 0 до 255. Символы, входящие в строку, занимают позиции с 1 до N. Начальный байт строки с индексом 0 содержит информацию о ее длине, т.е. это символ с кодом, равным длине строки. Можно, также описывать переменные типа String[K], где K - целое число не больше 255. Так определяются строки с длиной не больше K. Этот тип уже не является стандартным. С символами строки можно работать как с элементами массива из символов, но в отличие от массивов, строки можно вводить целиком, сравнивать друг с другом и сцеплять операцией "+". Сравнение строк выполняется посимвольно в соответствии с их кодами до первого несовпадения. Если одна из строк закончилась до первого несовпадения, то она считается меньшей. Пустая строка меньше любой строки. ПРИМЕР: Сравнение строк. 'abcd' > 'abcD' { 'd'>'D' } 'abcd' > 'abc' { 'd'>'' } 'abc' < 'axxc' { 'b'<'x' } 'abcd' = 'abcd'Переменная строкового типа (String) может рассматриваться как массив элементов символьного типа (Char). Например, если в программе определены переменные S: string; C: char; и задано S:='Москва', то S[1]='М', S[2]='о' и т. д. и возможно присвоение, например: C:= S[1]; Таким образом строка может рассматриваться как линейный массив символов. Элементы массива, составляющие строку можно переставлять местами и получать новые слова, например: for i:= 1 to N div 2 do begin C:= S[i]; S[i]:= S[N-i+1]; S[N-i+1]:= C Writeln(S); end; { исходное слово выведется справа налево: "авксоМ" }Здесь N:= ord(S[0]); - число символов в переменной "S" хранится в переменной S[0]. Функция "ord" преобразует символьный тип в целый. N div 2 - количество перестановок для слова из "N" символов. В переменной "C" запоминается значение i-го элемента, который меняется с элементом, симметричным относительно середины строки.
Можно производить поиск и замену заданного символа в строке, например: for i:=1 to N do if S[i]=' ' then writeln ('найден символ пробел'); for i:=1 to N do if S[i]='/' then S[i]:='\'; {замена символа "/" на "\"}Заменяя или переставляя символы в строке по определенной схеме (закону) можно зашифровать строку. Для дешифровки используется, как правило, схема обратной перестановки или замены символов. Например: for i:=1 to N do S[i]:= chr(ord(S[i])+2); {преобразование исходных символов в символы с кодом большим на две единицы}Напомним, что все используемые в MS-DOS символы имеют ASCII коды от 0 до 255. Здесь удобно также использовать функции Pred(C); и Succ(C); Существует ряд стандартных функций и процедур для работы со строками. · Функция Length(s) выдает длину строки s. · Функция Concat(s1,s2,..,sn) возращает строку s1+s2+..+sn. · Функция Copy(s,p,k) возвращает фрагмент строки s, который начинается в позиции p и имеет длину k. · Функция Pos(s1,s) ищет первое вхождение подстроки s1 в строку s и возвращает номер первого символа s1 в строке s или 0 если не нашли. · Процедура Delete(s,p,k) удаляет из строки s фрагмент, который начинается в позиции p и имеет длину k. · Процедура Insert(s,s1,p) вставляет в строку s1 подстроку s, начиная с заданной позиции p. Турбо паскаль позволяет производить преобразования числовых значений в строковые и наоборот. Для этого используются процедуры Str(X:n:d,S) и Val(S,X,e). Первая получает их числа X строку S с изображением этого числа, в которой не менее n символов и из них d знаков после запятой. Параметры n и d необязательные. Вторая процедура получает из строки S число X. При успешном результате e=0. ПРИМЕР: Работа со строками. var s,x,y,z: string; begin x:= 'turbo'; y:= 'pascal'; z:= x+' '+y; { z='turbo pascal' } s:= ''; { пустая строка } for c:='a' to 'z' do s:=s+c; { s='abcd..xyz' } writeln(s); end.Примеры Пример1. Дан текст, слова в котором, могут разделяться пробелами, запятыми, точками и т.д. Требуется напечатать все слова с удвоенной буквой "н". 1. Разобьем задачу на несколько блоков
2. Реализуем эти блоки на Паскале a)program example1; var st, st1:string; i,j,k,n:integer; flag:boolean; const znak=[' ','.',',',':',';','!','?']; begin end. Назначение переменных: t- содержит введенный текст st1 - хранит первое слово текста i,j,k,n - вспомогательные переменные flag - указывает, что данное слово искомоеб) writeln('Введите текст'); readln(st);в) repeat while st[1] in znak do delete(st,1,1);г) i:=1 while (not (st[i] in znak)) and (i<=length(st)) do inc(i); st1:=copy(st,1,i-1); flag:= false;д) while (pos('н',st1)>0) and (not flag) do beginе) j:=pos('н',st1); n:=j; k:=0; while st1[n]='н' do begin inc(n); inc(k); end; if k=2 then flag:= true; delete(st1,j,k) end;ж) if flag then writeln(copy(st,1,i-1));з) delete(st,1,i);и) until st=''; Приведем программу целиком:program example1;var st, st1:string; i,j,k,n:integer; flag:boolean;const znak=[' ','.',',',':',';','!','?']; begin writeln('Введите текст'); readln(st); repeat while st[1] in znak do delete(st,1,1); i:=1; while (not (st[i] in znak)) and (i<=length(st)) do inc(i); st1:=copy(st,1,i-1); flag:= false; while (pos('н',st1)>0) and (not flag) do begin j:=pos('н',st1); n:=j; k:=0; while st1[n]='н' do begin inc(n); inc(k); end; if k=2 then flag:= true; delete(st1,j,k) end; if flag then writeln(copy(st,1,i-1)); delete(st,1,i); until st=''; readln;end. Контрольные вопросы 1. Как описываются строковые переменные? 2. Какая максимальная длина строки допустима в Pascal? 3. Какие операции допустимы над строковыми данными? 4. В чем отличие строковой переменной от массива символов? 5. Какие стандартные процедуры и функции для работы со строками вы знаете? 6. Что выведет функция Copy(x,Pos(' ',x)+1,18), если x='Сила есть - ума не надо'? 7. Чему равно значение x[0] после присваивания x:='вопрос'?
Задания 1. Вывести строку длины N (N - четное), которая состоит из чередующихся символов C1 и C2, начиная с C1. 2. Дана строка. Вывести строку, содержащую те же символы, но расположенные в обратном порядке. 3. Дана строка. Если она представляет собой запись целого числа, то вывести 1; если вещественного (с дробной частью), то вывести 2; если строку нельзя преобразовать в число, то вывести 0. 4. Дана строка S и число N. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы "." (точка). 5. Даны два числа: N1 и N2, и две строки: S1 и S2. Получить из этих строк новую строку, объединив N1 первых символов строки S1 и N2 последних символов строки S2. 6. Даны две строки: S1 и S2. Определить количество вхождений строки S2 в строку S1. 7. Даны строки S1, S2 и символ C. После каждого вхождения символа C в строку S1 вставить строку S2. 8. Даны две строки: S1 и S2. Удалить из строки S1 все подстроки, совпадающие с S2. Если таких подстрок нет, то вывести S1 без изменений. 9. Даны три строки: S1, S2, S3. Заменить в строке S1 первое1|последнее2|все3 вхождения строки S2 на S3. 10. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить количество слов в строке. 11. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить количество слов, которые a) начинаются и заканчиваются одной и той же буквой б) содержат хотя бы одну букву "А". 12. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить длину самого короткого и длинного слова. 13. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова (разделенные одним пробелом), но расположенные в обратном порядке. 14. Дана строка-предложение на русском языке. Подсчитать количество содержащихся в строке знаков препинания.
15. Дана строка-предложение, содержащая избыточные пробелы. Преобразовать ее так, чтобы между словами был ровно один пробел. 16. Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно имя и расширение. Выделить из этой строки имя файла. 17. Дана строка, содержащая полное имя файла. Выделить из строки название последнего каталога (без символов "\"). Если файл содержится в корневом каталоге, то вывести символ "\". 18. Дана строка-предложение. Зашифровать ее, поместив вначале все символы, расположенные на четных местах, а затем, в обратном порядке, все символы, расположенные на нечетных местах (например, строка "Программа" превратится в "ргамамроП"). 19. Дана строка, содержащая несколько круглых скобок. Если скобки расставлены правильно (то есть каждой открывающей соответствует одна закрывающая), то вывести число 0. В противном случае вывести или номер позиции, в которой расположена первая ошибочная закрывающая скобка, или, если закрывающих скобок не хватает, число -1. Обработка текста: В следующих заданиях под словом "текст" понимается строка символов, слова в которой, разделены пробелами, ",",".","!","?",";",":" (одним или несколькими).
Задачи повышенной сложности
|
|||||||||
Последнее изменение этой страницы: 2016-08-06; просмотров: 1133; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.113.43 (0.009 с.) |