Символьные переменные. Символьные переменные. © «МОУ СОШ 13» + © К.Ю. Поляков,
2 Их значениями являются символы: буквы, цифры, знаки. Заключаются в кавычки, например, 'A', 'B', 'C', '4', '7', ' '(пробел). Символьные переменные описываются предложением: Var имя переменной: char;
3 Каждый символ имеет свой двоичный код. Коды всех символов сведены в таблицу. Первая половина таблицы стала международным стандартом - ASCII - American Standard Code Information Interchange. ("аски код") в ней кроме прочего содержится латинский алфавит, вторая имеет разные варианты для разных языков. Кириллица (русский алфавит) имеет несколько стандартов. В Паскале используется стандарт КОИ - 8. Сравниваются символы по их кодам: 'A'<'B'<...<'Z' 'a'<'b'<...<'z' '0'<'1'<...<'9' 'а'<'б'<...<'я' 'А'<'Б'<...<'Я Для символов допустимы все шесть операций сравнения: =, =,,<>.
4 Стандартные символьные функции. CHR(N) - возвращает в программу символ с кодом N, CHR(128) = Б ORD(S) - возвращает код символа S, ORD(':') = 58 PRED(S) - возвращает предыдущий символ PRED('Б') = А SUCC(S) - возвращает следующий символ SUCC('Г') = Д
5 Строковые переменные. Строка (строковый тип данных) – это последовательность символов кодовой таблицы ПК. Количество символов в строке (длина строки) может лежать в диапазоне от 0 до 255. Строковая константа – последовательность символов, заключенная в апострофы. Например, 237, это строковая константа. Определяется в разделе описания переменных: Var : string [ ]. Например, var Name: string[20]. В описании строки можно не указывать длину, в этом случае она равна максимальной величине – 255.
6 Элементы строки определяются именем строки с индексом, заключенным в квадратные скобки. Например, N[5]. Первый символ строки имеет номер 1 и т.д. Можно сказать, что строка представляет собой одномерный массив, элементами которого являются символы. Тип string и тип char совместимы, они могут употребляться в одних и тех же выражениях.
7 ФУНКЦИИ ДЛЯ РАБОТЫ СО СТРОКОВЫМИ ДАННЫМИ. LENGTH(переменная) - определяет длину символьной переменной A= информатика; k:=length(a); {11} COPY(A,K,L) - выделяет из строки заданную подстроку, где A - стринговая переменная; K - начальная позиция с которой начинается подстрока; L - количество рассматриваемых позиций. A= информатика; COPY (A,3,5) {форма } INSERT(X,A,L) - вставка подстроки в строку X - вставляемый фрагмент A - стринговая переменная, куда вставляется фрагмент L - позиция вставки DELETE(X,A,L) - удаление L символов из строки X, где X - стринговая переменная; A - позиция удаления; L - количество удаляемых символов.
8 5. POS(X,A) - находит в строке A подстроку X (позицию вхождения). Результат выполнения функции - целое число. 6. STR(X,A) - преобразует число X в строку A str(pi:6:2,st); {строка st содержит 3.14} 7. VAL(A,X,C) - преобразование строки A в число переменной X. Если параметр C содержит 0, значит преобразование прошло успешно, в противном случае С содержит номер позиции в строке A, где обнаружен неверный символ. Например, обращение val (' 123',k,i) пройдет успешно: k получит значений 123, в i будет помещен 0, в то время как обращение val (' 123 ', k, i) будет ошибочным: значение k не изменится, a i будет содержать CONCAT(S1,S2,...,SN) - сцепление строк S1, S2,...,SN STR_PR.pas STR_D1. pas 9. UPCASE(B) - функция типа char, преобразует латинские строчные буквы в заглавные. STR_PR.pas STR_D1.pas
9 9 Символьные строки Привет!¤¤¤…¤¤¤ длина строки рабочая часть s[1] s[2] s[3] s[4] var s: string; var s: string[20]; 20 1 Длина строки: n := length ( s ); var n: integer; В Delphi это ограничение снято! !
10 Операции со строками Объединение: добавить одну строку в конец другой. Запись нового значения: var s, s1, s2: string; s := 'Вася'; s1 := 'Привет'; s2 := 'Вася'; s := s1 + ', ' + s2 + '!'; s1 := 'Привет'; s2 := 'Вася'; s := s1 + ', ' + s2 + '!'; 'Привет, Вася!' Подстрока: выделить часть строки в другую строку. s := ' '; s1 := Copy ( s, 3, 6 ); s2 := Copy ( s1, 2, 3 ); s := ' '; s1 := Copy ( s, 3, 6 ); s2 := Copy ( s1, 2, 3 ); '345678' '456' с 3-его символа 6 штук
11 Удаление и вставка Удаление части строки: Вставка в строку: s := ' '; Delete ( s, 3, 6 ); s := ' '; Delete ( s, 3, 6 ); с 3-его символа 6 штук строка меняется! строка меняется! ' ' '129' s := ' '; Insert ( 'ABC', s, 3 ); Insert ( 'Q', s, 5 ); s := ' '; Insert ( 'ABC', s, 3 ); Insert ( 'Q', s, 5 ); куда вставляем что вставляем начиная с 3-его символа '12ABC ' '12ABQC '
12 Поиск в строке Поиск в строке: s := 'Здесь был Вася.'; n := Pos ( 'е', s ); if n > 0 then writeln('Буква е – это s[', n, ']') else writeln('Не нашли'); n := Pos ( 'Вася', s ); s1 := Copy ( s, n, 4 ); s := 'Здесь был Вася.'; n := Pos ( 'е', s ); if n > 0 then writeln('Буква е – это s[', n, ']') else writeln('Не нашли'); n := Pos ( 'Вася', s ); s1 := Copy ( s, n, 4 ); s[3] 3 3 n = 11 Особенности: функция возвращает номер символа, с которого начинается образец в строке если слова нет, возвращается 0 поиск с начала (находится первое слово) var n: integer;
13 Примеры s := 'Вася Петя Митя'; n := Pos ( 'Петя', s ); Delete ( s, n, 4 ); Insert ( 'Лена', s, n ); s := 'Вася Петя Митя'; n := Pos ( 'Петя', s ); Delete ( s, n, 4 ); Insert ( 'Лена', s, n ); 'Вася Лена Митя' s := 'Вася Петя Митя'; n := length ( s ); s1 := Copy ( s, 1, 4 ); s2 := Copy ( s, 11, 4 ); s3 := Copy ( s, 6, 4 ); s := s3 + s1 + s2; n := length ( s ); s := 'Вася Петя Митя'; n := length ( s ); s1 := Copy ( s, 1, 4 ); s2 := Copy ( s, 11, 4 ); s3 := Copy ( s, 6, 4 ); s := s3 + s1 + s2; n := length ( s ); 'Вася Митя' 14 'Вася' 'Митя' 'Петя' 'Петя ВасяМитя'
14 Преобразования «строка»-«число» Из строки в число: s := '123'; Val ( s, N, r ); { N = 123 } { r = 0, если ошибки не было r – номер ошибочного символа} s := ' '; Val ( s, X, r ); { X = } s := '123'; Val ( s, N, r ); { N = 123 } { r = 0, если ошибки не было r – номер ошибочного символа} s := ' '; Val ( s, X, r ); { X = } Из числа в строку: N := 123; Str ( N, s ); { '123' } X := ; Str ( X, s ); { ' E+002' } Str ( X:10:3, s ); { ' ' } N := 123; Str ( N, s ); { '123' } X := ; Str ( X, s ); { ' E+002' } Str ( X:10:3, s ); { ' ' } var N: integer; X: real; s: string; var N: integer; X: real; s: string;
15 Пример решения задачи Задача: Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилия-инициалы». Пример: Введите имя, фамилию и отчество: Василий Алибабаевич Хрюндиков Результат: Хрюндиков В.А. Алгоритм: найти первый пробел и выделить имя удалить имя с пробелом из основной строки найти первый пробел и выделить отчество удалить отчество с пробелом из основной строки «сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы…
16 Программа program qq; var s, name, otch: string; n: integer; begin writeln('Введите имя, отчество и фамилию'); readln(s); n := Pos(' ', s); name := Copy(s, 1, n-1); { вырезать имя } Delete(s, 1, n); n := Pos(' ', s); otch := Copy(s, 1, n-1); { вырезать отчество } Delete(s, 1, n); { осталась фамилия } s := s + ' ' + name[1] + '.' + otch[1] + '.'; writeln(s); end. program qq; var s, name, otch: string; n: integer; begin writeln('Введите имя, отчество и фамилию'); readln(s); n := Pos(' ', s); name := Copy(s, 1, n-1); { вырезать имя } Delete(s, 1, n); n := Pos(' ', s); otch := Copy(s, 1, n-1); { вырезать отчество } Delete(s, 1, n); { осталась фамилия } s := s + ' ' + name[1] + '.' + otch[1] + '.'; writeln(s); end.
17 САМОСТОЯТЕЛЬНАЯ РАБОТА. САМОСТОЯТЕЛЬНАЯ РАБОТА. 1. Используя копирование и конкатенацию, получить из слова – значения переменной А новые слова, совпадающие со значениями переменных В, С, и D. a := 'лекарство' Значения переменных B С D оскал воск лес 2. Выполнить преобразования слов: оскал – воск – лес. 3. В заданной строке А заменить выделенную подстроку на подстроку С. Фразу «Клавиатура – устройство вывода» обозначим переменной А, подстроку «вывода» – b, подстроку «ввода» – С.
18 Посимвольный ввод Задача: с клавиатуры вводится число N, обозначающее количество футболистов команды «Шайба», а затем – N строк, в каждой из которых – информация об одном футболисте таком формате: Все данные разделяются одним пробелом. Нужно подсчитать, сколько футболистов, родившихся в период с 1988 по 1990 год, не забили мячей вообще. Алгоритм: for i:=1 to N do begin { пропускаем фамилию и имя } { читаем год рождения Year и число голов Gol } if (1988 <= Year) and (Year <=1990) and (Gol = 0) then { увеличиваем счетчик } end; for i:=1 to N do begin { пропускаем фамилию и имя } { читаем год рождения Year и число голов Gol } if (1988 <= Year) and (Year <=1990) and (Gol = 0) then { увеличиваем счетчик } end;
19 Посимвольный ввод Пропуск фамилии: repeat read(c); until c = ' '; { пока не встретим пробел } repeat read(c); until c = ' '; { пока не встретим пробел } var c: char; Пропуск имени: repeat read(c); until c = ' '; Ввод года рождения: read(Year); { из той же введенной строки } var Year: integer; Ввод числа голов и переход к следующей строке: readln(Gol); { читать все до конца строки } var Gol: integer;
20 Программа program qq; var c: char; i, N, count, Year, Gol: integer; begin writeln('Количество футболистов'); readln(N); count := 0; for i:=1 to N do begin repeat read(c); until c = ' '; read(Year); readln(Gol); if (1988 <= Year) and (year <= 1990) and (Gol = 0) then count := count + 1; end; writeln(count); end. program qq; var c: char; i, N, count, Year, Gol: integer; begin writeln('Количество футболистов'); readln(N); count := 0; for i:=1 to N do begin repeat read(c); until c = ' '; read(Year); readln(Gol); if (1988 <= Year) and (year <= 1990) and (Gol = 0) then count := count + 1; end; writeln(count); end. repeat read(c); until c = ' '; read(Year); readln(Gol);
21 Посимвольный ввод Если фамилия нужна: fam := ''; { пустая строка } repeat read(c); { прочитать символ } fam := fam + c; { прицепить к фамилии } until c = ' '; fam := ''; { пустая строка } repeat read(c); { прочитать символ } fam := fam + c; { прицепить к фамилии } until c = ' '; Вместо read(Year) : s := ''; { пустая строка } repeat read(c); { прочитать символ } s := s + c; { прицепить к фамилии } until c = ' '; Val(s, Year, r); { строку – в число } s := ''; { пустая строка } repeat read(c); { прочитать символ } s := s + c; { прицепить к фамилии } until c = ' '; Val(s, Year, r); { строку – в число } var fam: string; var s: string;
22 Задача 1 : ввести строку с клавиатуры и заменить все буквы «а» на буквы «б». Алг замена букв (лит S ) Нач Ввод слова S Для I от 1 до длин(S) Если S[ I ] = а то S[ I ] = б всё Кц Вывод S Кон Zam_str.pas
23 Задача 1 : ввести строку с клавиатуры и заменить все буквы «а» на буквы «б». program Zam; 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 Zam; 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. readln(s); writeln(s); Length(s) ввод строки длина строки вывод строки Составить программу : В строке содержится четверостишие, строки которого разделяются косыми чертами. Представить данный текст обычным образом в виде четверостишия из четырёх строк.
24 Определить количество букв «Т» в заданном слове. Алг кол-во букв в слове (лит А, цел N) Арг А Рез N Нач N=0 Ввод слова А Для I от 1 до длин(А) Если А[ I : I ] = T то N=N+1 (всё) Кц Вывод N STR1. pas Кон STR1. pas Задача 2 :
25 program STR1; {количество букв в слове} Uses crt; Var A : string; I, L, N: integer; Begin N:=0; Writeln ('ввести слово'); Readln (A); L:= Length(A); for i:=1 to L do { for i:=1 to length(A) do } if copy(A,i,1) =Т' then N:= N + 1; writeln('кол-во букв Т =', N); end. П Р О Г Р А М М А:
26 3. Составить программу, которая данное слово запишет в обратном порядке. Проверить, является ли заданное слово палиндромом. Алг ПАЛИНДРОМ (лит А, B ) Арг А Рез В Нач Ввод слова А Для I от длин(А) до 1 шаг -1 В = В + А[ I : I ] Кц Вывод В Если A = B то вывод «палиндром» иначе «нет» STR2. pas Кон STR2. pas ШАЛАШ КОМОК НАГАН МАДАМ ПОТОП КАЗАК
27 ЕГЭ (кодификатор): 4. Поиск заданной подстроки (например,abc) в последовательности символов. ( + количество вхождений) STR4. pas Алг поиск подстроки (лит А,В, цел К) Арг В Рез К Нач В = abc ; К=0 Ввести последовательность А Для I от 1 до длин(А) Если А[I,3] = B то К=К+1 Кц Если К>0 то вывод К иначе вывод «нет» кон
28 5. Определить число слов в предложении. Алг число слов в предложении (лит Р, цел К,I) Арг Р, Рез К Нач К=0 Ввести предложение Р Для I от 1 до длин (Р) Если Р [I:I] = То К=К+1 Кц Вывод К+1 Кон STR4_d.pas
29 6. Определить наличие в символьном объекте латинской буквы. Алг наличие лат. буквы (лит А, A1 цел L) Арг А, A1, L Рез лат буква Нач Ввод слова А Для I от 1 до длин(А) А1 = A [ I : I ] L = код А1 Если L>=65 и L<=122 то вывод «да»; кон (всё) Кц Вывод «нет» Кон STR_Lat.pas
30 program STR_Lat; {наличие латинской буквы} Uses Crt; var A:string; A2:char; i: Integer; label 1; begin ClrScr; write('ввести слово '); readln(A); for i:=1 to length(A) do begin A2:=A[i]; if (ord(A2)>=65) and (ord(A2)<=122) then begin write('da'); goto 1; end; writeln('no'); readln; 1: end.
31 7. Составить программу перевода числа из десятичной с/с в двоичную с/с. алгоритм алгоритм САМОСТОЯТЕЛЬНО составить программы: 8. Для перевода десятичного числа в 8 с/с. 9. Для перевода десятичного числа в 16 с/с. 10. Для перевода числа из 2 с/с в 10 с/с. ТЕСТЫ_строки _(выборка):