Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемschool16.edu.tomsk.ru
1 Символьные переменные и строки Решение задач Вербицкая Ольга Владимировна, Заозерная школа 16
2 CHAR CHAR - символьный тип данных является порядковым, значения могут сравниваться между собой. Коды символов упорядочены, например: A
3 STRING У типа-строки может быть указан размер (от 1 до 255). Для строк выполняются операции сравнения (>, =,
4 Функции 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 символов, строка обрывается
5 Процедуры 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. В противном случае (строка состоит не только из цифр) преобразование не выполняется, w0 –признак ошибки
6 Задача 1 Задача 2 Вывести в одну строку ABBCCC…ZZ…Z. Вывести в одну строку ZYY…AA…A
7 Задача 3 ABC…Z BC…Z C…Z …... Z Вывести треугольник
8 Задача 4 Для решения этой задачи нам понадобится объявить множество знаков препинания М. Затем, последовательно проверяя каждый символ строки на принадлежность этому множеству, найдем первый знак препинания. Найдя знак надо выйти из цикла. Дана строка символов. Удалить из нее первый знак препинания. Как нужно доработать программу, если знак препинания стоит на первой позиции? Дана строка символов. Удалить из нее все знаки препинания. Задача 5
9 Дана строка символов. Удалить из нее все знаки препинания.
10 Задача 8 При решении данной задачи следует обратить внимание на 3 важные особенности. 1. Основная сложность заключается в том, что слова могут быть разделены группой пробелов. Если бы слово от слова отделялось только одним пробелом, то мы могли бы посчитать количество пробелов и вычислить количество слов. В нашем случае необходимо ввести логический флаг F, по которому можно определять начало слова (F:=TRUE) и конец слова (F:=FALSE). 2. По условию задачи текст вводится до точки, т.е. все слова за первой точкой игнорируются. 3. Последнее слово в тексте может обрабатываться не совсем корректно. Если между последним словом и точкой есть хотя бы один пробел, то флаг F позволит обработать его. Если последнее слово кончается на точку, то счетчик слов его не обработает, т.к. флаг не найдет конца слова. В этом случае значения счетчика слов нужно увеличивать на единицу по выходе из обработки цикла. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Подсчитать, сколько слов содержит данная строка.
11 Задача 8 Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Подсчитать, сколько слов содержит данная строка. 1 способ решения
12 Задача 8 2 способ решения Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Подсчитать, сколько слов содержит данная строка.
13 Задачи повышенной сложности Задача На вход программе подается текст заклинания, состоящего не более чем из 200 символов, заканчивающийся точкой (символ «точка» во входных данных единственный). Оно было зашифровано Гарри Потером следующим образом. Сначала Гарри определил количество букв в самом длинном слове, обозначив полученное число К (словом называется непрерывная последовательность английских букв, слова друг от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Затем он заменил каждую английскую букву в заклинании на букву, стоящую в алфавите на К букв ранее (алфавит считается циклическим, то есть перед буквой А стоит буква Z), оставив другие символы неизменными. Строчные буквы при этом остались строчными, а прописные прописными. Требуется написать как можно более эффективную программу, которая будет выводить на экран текст зашифрованного заклинания. Например, если зашифрованный текст был таким: Zb Ra Ca,Dab Ra. То результат расшифровки должен быть следующим: Ce Ud Fd,Gde Ud.
14 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. РЕШЕНИЕ
15 Задачи повышенной сложности Задача. На вход программе подаются строчные и прописные английские буквы. Ввод этих символов заканчивается точкой (другие символы, отличные от.,a..z,A..Z во входных данных отсутствуют. Требуется написать программу, составляющую слово из тех букв английского алфавита, которые не встречаются во входных данных ни как строчные, ни как прописные, причем буквы должны идти в алфавитном порядке. Каждая буква должна быть распечатана один раз. Буквы построенного слова должны быть прописными. Если во входных данных встречаются все буквы английского алфавита, то следует вывести строчными буквами слово no. Например, пусть на вход подаются следующие символы: absCDKLMNOPvwXYabcprst. В данном случае программа должна вывести EFGHIJQUZ
16 Решение 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
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.