'

Символьные переменные и строки

Понравилась презентация – покажи это...





Слайд 0

Символьные переменные и строки Решение задач Вербицкая Ольга Владимировна, Заозерная школа №16


Слайд 1

CHAR CHAR - символьный тип данных является порядковым, значения могут сравниваться между собой. Коды символов упорядочены, например: ‘A’<’B’<’C’<…<’Z’ ‘0’<’1’<’2’<…<’9’ Используемые функции: PRED() предыдущее значение, например PRED(‘B’)=’A’ SUCC() последующее значение, например SUCC(’A’)= ‘B’ ORD() определяет порядковый номер символа, например ORD(‘7’)-ORD(‘0’)=7 CHR() определяет символ по порядковому номеру. Функции CHR() и ORD() являются обратными по отношению друг к другу. CHR(ORD(‘a’))=’a’ ORD(CHR(7))=7 UPCASE() используется для преобразования строчных английских букв в прописные Символьные переменные могут использоваться как переменные цикла, например For I:=’Z’ downto ‘A’ Do или For I:= ‘A’ to’Z’ Do


Слайд 2

STRING У типа-строки может быть указан размер (от 1 до 255). Для строк выполняются операции сравнения (>,<,>=,<=), например ‘viv’<’viva’ (длина второй строки больше) ‘Balkon’<‘balkon’ ) (Ord(‘B’)<Ord(‘b’)) По сути, строка длины К представляет собой массив из К+1 символьных переменных, где нулевой элемент хранит значение длины строки: STRING[K]=ARRAY[0..K] of CHAR; К любому символу можно обращаться по его номеру, например: Str1[i] – это обращение к i-му элементу строки Str1. Строки вводятся и выводятся не поэлементно, как массивы, а сразу целиком.


Слайд 3

Функции COPY(s,p,n) Тип значения функции string S: string; P,n:integer Из строки s, начиная с позиции p, копируется n символов LENGTH(s) Тип значения функции integer S: string; Определяется длина s, т.е. число символов из которых она состоит POS(w,s) Тип значения функции integer S,w: string; В строке s отыскивается первое вхождение строки w(номер позиции). Если вхождения нет, то возвращается 0 CONCAT(s1,s2,…Sm) Тип значения функции string S1,s2,…Sm: string; Строки s1+s2+…+sm записываются одна за другой. Если результат превысит 255 символов, строка обрывается


Слайд 4

Процедуры DELETE(s,p,n) S: string;P,n:integer Удаляются n символов из строки s, начиная с позиции p INSERT(w,s,p,) S,w: string;P:integer В строку s, начиная с позиции p, вставляется строка w STR(v,s) Число v преобразуется в строку s VAL(s,v,w) Если строка s представляет собой правильную запись числа, то это число записывается в переменную v, при этом значение w равно 0. В противном случае (строка состоит не только из цифр) преобразование не выполняется, w?0 –признак ошибки


Слайд 5

Задача 1 Задача 2 Вывести в одну строку ABBCCC…ZZ…Z. Вывести в одну строку ZYY…AA…A


Слайд 6

Задача 3 ABC…Z BC…Z C…Z …... Z Вывести треугольник


Слайд 7

Задача 4 Для решения этой задачи нам понадобится объявить множество знаков препинания М. Затем, последовательно проверяя каждый символ строки на принадлежность этому множеству, найдем первый знак препинания. Найдя знак надо выйти из цикла. Дана строка символов. Удалить из нее первый знак препинания. Как нужно доработать программу, если знак препинания стоит на первой позиции? Дана строка символов. Удалить из нее все знаки препинания. Задача 5


Слайд 8

Задача 5 Дана строка символов. Удалить из нее все знаки препинания.


Слайд 9

Задача 8 При решении данной задачи следует обратить внимание на 3 важные особенности. Основная сложность заключается в том, что слова могут быть разделены группой пробелов. Если бы слово от слова отделялось только одним пробелом, то мы могли бы посчитать количество пробелов и вычислить количество слов. В нашем случае необходимо ввести логический флаг F, по которому можно определять начало слова (F:=TRUE) и конец слова (F:=FALSE). По условию задачи текст вводится до точки, т.е. все слова за первой точкой игнорируются. Последнее слово в тексте может обрабатываться не совсем корректно. Если между последним словом и точкой есть хотя бы один пробел, то флаг F позволит обработать его. Если последнее слово кончается на точку, то счетчик слов его не обработает, т.к. флаг не найдет конца слова. В этом случае значения счетчика слов нужно увеличивать на единицу по выходе из обработки цикла. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Подсчитать, сколько слов содержит данная строка.


Слайд 10

Задача 8 Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Подсчитать, сколько слов содержит данная строка. 1 способ решения


Слайд 11

Задача 8 2 способ решения Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Подсчитать, сколько слов содержит данная строка.


Слайд 12

Задачи повышенной сложности Задача На вход программе подается текст заклинания, состоящего не более чем из 200 символов, заканчивающийся точкой (символ «точка» во входных данных единственный). Оно было зашифровано Гарри Потером следующим образом. Сначала Гарри определил количество букв в самом длинном слове, обозначив полученное число К (словом называется непрерывная последовательность английских букв, слова друг от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Затем он заменил каждую английскую букву в заклинании на букву, стоящую в алфавите на К букв ранее (алфавит считается циклическим, то есть перед буквой А стоит буква Z), оставив другие символы неизменными. Строчные буквы при этом остались строчными, а прописные прописными. Требуется написать как можно более эффективную программу, которая будет выводить на экран текст зашифрованного заклинания. Например, если зашифрованный текст был таким: Zb Ra Ca,Dab Ra. То результат расшифровки должен быть следующим: Ce Ud Fd,Gde Ud.


Слайд 13

program str1; Var s:string; c,cnew:char; f: boolean; i,k,max:integer; begin s:=''; max:=0;k:=0; f:=false; repeat read(c); s:=s+c; if f then {слово началось } if c in ['a'..'z','A'..'Z'] then k:=k+1 else begin if k>max then max:=k; f:=false end else {f=false} if c in ['a'..'z','A'..'Z'] then begin f:=true; k:=1 end until c='.'; writeln(s,max); for i:=1 to length(s) do begin cnew:=chr(ord(s[i])+max); case s[i] of 'a'..'z':if cnew>'z' then write(chr(ord(cnew)-26)) else write(cnew); 'A'..'Z':if cnew>'Z' then write(chr(ord(cnew)-26)) else write(cnew); else write(s[i]) end; end; readln; readln; end. Комментарий Программа читает входные данные, сразу подсчитывая максимальную длину встречающихся слов. За второй проход исходных данных производится замена букв латинского алфавита и печать расшифрованного сообщения. Например, если зашифрованный текст был таким: Zb Ra Ca,Dab Ra. То результат расшифровки должен быть следующим: Ce Ud Fd,Gde Ud. РЕШЕНИЕ


Слайд 14

Задачи повышенной сложности Задача. На вход программе подаются строчные и прописные английские буквы. Ввод этих символов заканчивается точкой (другие символы, отличные от ‘.’,’a’..’z’,’A’..’Z’ во входных данных отсутствуют. Требуется написать программу, составляющую слово из тех букв английского алфавита, которые не встречаются во входных данных ни как строчные, ни как прописные, причем буквы должны идти в алфавитном порядке. Каждая буква должна быть распечатана один раз. Буквы построенного слова должны быть прописными. Если во входных данных встречаются все буквы английского алфавита, то следует вывести строчными буквами слово ‘no’. Например, пусть на вход подаются следующие символы: absCDKLMNOPvwXYabcprst. В данном случае программа должна вывести EFGHIJQUZ


Слайд 15

Решение program str2; Uses CRT; var a:array['A'..'Z'] of boolean; c:char; i,k:integer; begin clrscr; for c:='A' to 'Z' do a[c]:=false; read(c); c:=upcase(c); while c<>'.' do begin a[c]:=true; read(c); c:=upcase(c); end; k:=0; for c:='A' to 'Z' do if not a[c] then begin k:=k+1; write(c) end; if k=0 then write('no'); readln; readln; end. Комментарий Программа читает все входные символы до точки один раз, переводя строчные буквы в прописные и помечая в массиве, состоящем из 26 элементов, какие буквы встретились во входных данных. Сами входные символы при этом не запоминаются. За дополнительный проход этого массива печатаются те буквы, которые оказались не помеченными, в противном случае выводится слово ‘no’ На вход подаются следующие символы: absCDKLMNOPvwXYabcprst. В данном случае программа должна вывести EFGHIJQUZ


×

HTML:





Ссылка: