№ | Слайд | Текст |
1 |
 |
Символьные и строковые переменные в Turbo Pascal |
2 |
 |
Содержание:Введение Символьный тип CHAR Управляющие символы Сравнивание символов Операции над символами Массив символов Строковый тип STRING Операции над строками Слияние строк Хранение строк Сравнение строк Процедуры и функции Тест по строковым переменным Задачи |
3 |
 |
В математике под переменной обычно понимают некую величину, значениякоторой могут быть только числами. В языках программирования почти все данные, с которыми работают программы, хранятся в виде переменных. В частности, бывают переменные для хранения текстовых данных: предложений, слов и отдельных символов. Язык Turbo Pascal поддерживает стандартный символьный тип Char и динамические строки, описываемые типом String или String[n]. |
4 |
 |
Символьный типЯзык Turbo Pascal поддерживает стандартный символьный тип Char К символьным переменным относятся: прописные латинские буквы 'А', 'В', 'С', ..., 'Z', строчные 'а', 'Ь', 'с', ..., 'z'. цифры '0', 1', '2', ..., '9', знаки препинания, всевозможные скобки, русские буквы и т. д. В программах их значения всегда заключаются в апострофы. Внутри каждого такого ряда коды символов упорядочены: ‘А' < 'В' < 'С' < ... < 'Z' 'а' < 'Ь' < 'с' < ... < 'z' '0' < 1' < '2' < ... < '9' 'А' < 'Б' < 'В' < ... < 'Я' 'а' < 'б' < 'в'< ... < 'я' |
5 |
 |
Символьные переменные в памяти компьютера хранятся в виде числовыхкодов. Под хранение символа выделяется 1 байт (8 бит), поэтому всего можно закодировать 2^8=256 различных символов. Кодировка символов, которая используется в Турбо-Паскале, называется ASCII (американский стандартный код для обмена информацией). Если в качестве кода используется конкретное число, а не выражение и не переменная, то можно использовать символ "#" #97 = chr(97) = ‘a’ (символ ‘а’) #0 = chr(0) = (нулевой символ) #32 = chr(32) = ‘ ‘ (пробел) |
6 |
 |
Некоторые символы (с кодами, меньшими 32) являются управляющими, привыводе таких символов на экран происходит какое либо действие, например: Символ с кодом 10 переносит курсор на новую строку, с кодом 7 - вызывает звуковой сигнал, с кодом 8 - сдвигает курсор на одну позицию влево. Управляющие символы могут быть представлены их “клавиатурными” обозначениями - значком “^” или служебным знаком (для диапазона 27...31): ^A = #1 = Chr(1) ^B = #2 = Chr(2) . . . ^ = #26 = Chr(26) ^[ = #27 = Chr(27) . . . ^_ = #31 = Chr(31) |
7 |
 |
Напишем программу, которая выдаёт на экран таблицу с кодами символов:program ASCII; var ch: char; begin for ch:=#32 to #255 do write(ord(ch),'->',ch,' '); readln; end. В этой программе в качестве счётчика цикла была использована символьная переменная, это разрешается, поскольку цикл for может использовать в качестве счётчика переменные любого типа, значения которого хранятся в виде целых чисел. |
8 |
 |
Для символьных данных не определены никакие арифметические операции,но они могут сравниваться по своим кодам, участвовать в чтении, печати, операторах присваивания. Таблица ASCII составлена таким образом, что коды букв (латинских и большинства русских) возрастают при движении в алфавитном порядке, а коды цифр расположены по порядку: ord('0')=48, ord('1')=49, ... ord('9')=57. Сравнения символов можно использовать везде, где требуются логические выражения: в операторе if, в циклах и т.п. |
9 |
 |
Операции над символамиSucc(х) (от succeedent - последующий) - она выдаёт символ со следующим кодом. Pred(х) (от predecessor - предшественник) - выдаёт символ с предыдущим кодом. Readkey - программа передает значение нажатого символа без нажатия на клавишу Enter и вывода на экран вводимого символа. Пример записи: A:=readkey Ord(x) - Определяет код символа. Например: Ord(‘A’) - 65 Chr(x) - Определяет символ по коду. Например: Chr(65) - ’A’ |
10 |
 |
Приведем пример: программа читает символ и выводит его числовой код:PROGRAM prog#6; VAR c: CHAR; BEGIN write('Введите символ: '); readln(c); writeln('Код символа ', c, ' – ', ord(c)); END. Окно ввода/вывода: Введите символ: G Код символа G – 71 Как вы видите, в операторе вывода вместо переменной используется выражение (функция), возвращающее нужное для вывода значение. |
11 |
 |
Последовательность символов - это строкаСтроку можно представить как массив. Так как массивы символов являются обычными массивами с элементами типа CHAR, они обладают всеми свойствами массивов. Например: Из набора 10 любых символов напечатать только заглавные английские буквы и их коды. program lr2; type sl =array [1..10] of char; var s: sl; {описание массива символов} i: integer; begin writeln ('введите 10 символов'): for i:=l to 10 do readln (s[i]); {ввод массива} for i:=l to 10 do if (s[i]>='A') and (s[i]<= 'Z') then writeln ('Символ :', s[i], ' его код =', ord(s[i]); readln; end. |
12 |
 |
Строковый типПоследовательность символов, заключенная в апострофы, называется строкой и описывается в Турбо-Паскале типом STRING: 'ASEWQ', 'zxczxczxc', 'хи-хи' и т. д. Очень часто требуется работать не с одним символом, а с несколькими (например, ввести имена и фамилии учащихся и вывести их в алфавитном порядке). Строки, состоящие всего из одного символа, называются символьными константами. |
13 |
 |
Значениями строковых переменных могут быть последовательностиразличной длины (от нуля и более, длине 0 соответствует пустая строка). Объявить строковую переменную можно двумя способами: Var s: string; var s: string[n]; (максимальная длина - n символов, n - константа или конкретное число). Var S32: string[32]; {строчные знач., Длиной не более 32} S255: string[255];{строчные знач., Длиной не более 255} S: string; {без указания длины - string[255]} |
14 |
 |
Операции над строкамиДля того чтобы положить значение в строковую переменную используются те же приёмы, что и при работе с символами. В случае присваивания конкретной строки она должна записываться в апострофах (s:='Hello, world!') Приведём пример со строками: программа спрашивает имя у пользователя, а затем приветствует его: program Hello; var s: string; begin write('Как Вас зовут: '); readln(s); write('Привет, ',s,'!'); readln; end. |
15 |
 |
Слияние строк записывается в естественном видеЕсли сумма получается длиннее, чем описанная длина левой части оператора присваивания, излишек отсекается. Var S1, S2, S3: String; Begin S1:= ‘Вам ‘; S2:= ‘привет’; S3:= S1 + S2; { S3 = ‘Вам привет’} S3:= S3 + ‘ ! ‘; { S3 = ‘Вам привет !’} End. К строкам можно применять операцию "+", при этом результатом будет строка, состоящая из последовательно записанных "слагаемых". Пример: после действия s:= 'abc'+'def'+'ghi'; переменная s будет содержать 'abcdefghi' |
16 |
 |
Хранение строкВ памяти компьютера строка хранится в виде последовательности из символьных переменных, у них нет индивидуальных имён, но есть номера, начинающиеся с 1. Для того чтобы в программе получить доступ к n-му символу строки используется запись s[n]. |
17 |
 |
Сравнение строкСтроки сравниваются последовательно, по символам. Сравниваются первые символы строк, если они равны - то вторые, и т. д. Если на каком-то этапе появилось различие в символах, то меньшей будет та строка, в которой меньший символ. Если строки не различались, а затем одна из них закончилась, то она и считается меньшей. Примеры: 'ананас'<'кокос' 'свинья'>'свинина' 'hell'<'hello‘ ‘abcd’ >‘abcD’ { ‘d’>‘D’ } ‘abcd’ >‘abc’ { ‘d’>‘‘ } ‘aBcd’<‘ab’ { ‘B’ <‘b’ } ‘ ‘ >‘‘ { #32>‘‘ }. |
18 |
 |
Процедуры и функции для работы со строкамиCONCAT (STRI, STR2) - Возвращает объединение строк STRI, STR2 конкатенируемые строки COPY(STR, I, J) - Возвращает копию подстроки из J символов, которые располагаются в строке STR, начиная с позиции I LENGTH(STR) - Возвращает длину строки POS(TEXT, STR) - Возвращает номер позиции, начиная с которой располагается подстрока TEXT в строке STR DELETE (STR, I, J) - Удаляет из строки STR J символов, начиная с позиции I INSERT(TEXT,STR, I) - Вставляет подстроку TEXT в строку STR, начиная с позиции I Str ( X, St ) - Преобразует числовое значение Х в строковое St VAL (STR, X,CODE) - Преобразовывает строку STR в двоичное число X, где CODE – код неправильного символа UpCase (S) – преобразует строковый латинский символ S в прописной |
19 |
 |
Рассмотрим несколько примеровC:=LENGTH(str); - переменной С будет присвоено целое значение, показывающее количество символов в строковой переменной str. Str:=concat(st1,st2,...,Stn); str - переменная типа string, состоящая из строк st1, ..., stn. S3:=concat ( S1, S2 ); {то же, что S3 := S1 + S2} s3:=concat ( S3, S1, S2 );{то же, что S3 := S3 + S1 + S2 } P:=POS (st1, st2); Р-целое число, показывающее номер позиции, с которой начинается строка st1 в строкe st2. P:=Pos ( ‘ss’, ‘Mississippu’ ); { P = 3 } S:=‘СТРОКА’; delete ( S, 2, 4 ) { S = ‘CA’ } |
20 |
 |
S:=‘Начало-конец’; Insert ( ‘середина-’, S, 8 );{ S =‘Начало-середина-конец’} S1:=COPY( str, I, J); Sl - символьная подстрока, выделенная из строки str с позиции I, длиной J символов. S1:= Copy(‘Информатика’,3,5); {S1 = ‘форма’ } Str ( 6.66 : 8 : 2, S ); { S =‘ 6.66’ } Str ( 6.66 : -8 : 2, S ); { S =‘6.66 ‘ } Str ( 6.66 : 8 : 0, S ); { S =‘ 7’ } VAL(‘1015’,X, C) – переменной Х будет присвоено целое значение 1015 |
21 |
 |
РешениеРешение Решение Задача 5. Подсчитать количество слов во введенной с клавиатуры строке. Решение Решение Решение Решение Решение Решение Решение Решение Решение Решение Решение Решение Решение Задача 1. Вывести в одну строку А В ВССС... ZZ... Z. Задача 2. Вывести в одну строку ZYY... А А... А.. Задача 3. Вывести треугольник А В С... Z В С... Z Задача 4. Дана строка символов. Удалить из нее все знаки препинания. Задача 6. Дана строка символов. Заменить в ней все 'A' на 'AAA' Задача 7. Присвоить переменной а значение 'G', считать значение другой переменной из окна ввода/вывода и вывести значения обеих переменных. Задача 8. Подсчитать сколько раз среди символов заданной строки встречается буква, заданная с клавиатуры. Задача 9. Составить программу, которая печатает заданное слово задом наперед Задача 10. Найти заданный символ в заданной строке Задача 11. Определяющая длину строки в символах Задача 12. Дана строка символов. Заменить в ней восклицательные знаки на точки Задача 13. Выводит строку, с эффектом раздвижения и звуковым сигналом Uses Crt; Задача 14. Перевод числа из символьной строки {$R-} Задача 15. Дана строка символов. Удалить из нее первый знак препинания. Задача 16. Данная программа запрашивает ваше имя, а потом здоровается с вами |
22 |
 |
Тест составлен в программе «Microsoft Excel»Пять вариантов, в каждом варианте 6 вопросов. Для каждого вопроса дается по четыре варианта ответа, надо выбрать правильный. Выставляется оценка: 6 правильных ответов – 5, 5 правильных ответов – 4, 4 правильных ответов – 3, остальные – 2 |
23 |
 |
Program prg34_1; var i: char; к, j:integer; begin к := 1; for i := 'a'to 'z' do i" begin for j := 1 to к do write(i); к := к +1 end; writeln end. Для решения задачи: • формируем тело программы и описываем переменные; • цикл FOR I := 'A' TO 'Z' DO определяет, какую букву выводим на печать; • цикл FOR J := 1 ТО К DO определяет, сколько раз будет печататься буква; • после вывода всех букв закрываем строку оператором WRITELN. Переменные: 1 - переменная цикла; определяет, какая буква выводится; К - количество повторений буквы; J - переменная цикла. |
24 |
 |
Program prg34_2; var i: char; к, j: integer; begin к := 1; for i :=‘z' down id 'а' do begin for j := 1 to к do write(i); к := к + 1 end; writeln end. Для решения задачи: • формируем тело программы и описываем переменные; • цикл FOR I := 'Z‘ DOWN TO 'A' DO определяет, какую букву выводим на печать; • цикл FOR J := 1 ТО К DO определяет, сколько раз будет печататься буква; • после вывода всех букв закрываем строку оператором WRITELN. Переменные: 1 - переменная цикла; определяет, какая буква выводится; К - количество повторений буквы; J - переменная цикла. |
25 |
 |
PROGRAM PRG34_3; VAR I, L : CHAR; J: INTEGER; BEGIN L := 'A'; FOR J :=1 TO 26 DO BEGIN FOR I := 'A' TO L DO WRITEC(‘ '); FOR I :== L TO 'Z' DO WRITE(I); WRITELN; L := SUCC(L); END; END. Для решения задачи: • формируем тело программы и описываем переменные; • цикл FOR J:= 1 ТО 26 DO определяет, сколько строк будет печататься; • цикл FOR I:= 'A' TO L DO определяет, сколько пробелов выводим на печать в начале строки; • FOR I:= L TO 'Z' DO определяет, какую букву выводим на печать; • после вывода всех букв закрываем каждую строку оператором WRITELN. Переменные: 1 - переменная цикла; определяет, какая буква выводится; L - вспомогательная переменная; J - переменная цикла; определяет, сколько строк будет печататься |
26 |
 |
Program prg34_4; var str: string; l, i: integer; m : set of char:begin m := ['.', ',', '!', ':', ';', '?', '-']; writeln(‘введите текст'); readln(str); l := length(str); writeln('преобразный текст'); for i := 1 to l do if not(str[1] in m) then write(str[1]); writeln; readln; end. Для решения задачи: • формируем тело программы и описываем переменные; • задаем значение множества М - множества знаков препинания; • цикл FOR I := I TO L DO осуществляет вывод строки без знаков препинания; • после вывода закрываем строку оператором WRITELN. Переменные: 1 - переменная цикла; L - длина строки; STR - строка текста; М - множество знаков препинания. |
27 |
![Program lr2; var s: string[30]; kol, i, n: integer; begin writeln](/up/thumbs/246043/027.jpg) |
Program lr2; var s: string[30]; kol, i, n: integer; begin writeln('введите строку'); readln (s); kol:=0; {счетчик количества слов} n:= length(s); {определяем длину введенного текста} s:= concat(' ',s); {добавляем пробел к первому слову} for i:=1 to n do if (copy (s,i,1)=' ') and (copy (s,i+1,1)<>' ') then kol := kol+1; {подсчет количества слов} writeln (s,'количество слов= ', kol); readln end. |
28 |
 |
Program prg34_6; var str: string; l, i : integer; beginwriteln(‘введите текст'); readln(str); l := length(str); writeln(‘преобразованный текст'); for i := 1 to l do if str[i]='а' then write('ааа') else writel(str{i}); writeln; readln end. Для решения задачи: • формируем тело программы и описываем переменные; • цикл FOR I:= I TO L DO осуществляет вывод строки с заменой 'А" на "ААА" • после вывода закрываем строку оператором WRITELN. Переменные: 1 - переменные циклов; L - длина строки; STR - строка текста. |
29 |
 |
PROGRAM prog#7; VAR a, b: CHAR; BEGIN writeln('Введи символ'); a :='G'; readln(b); writeln(a, b); END. Окно ввода/вывода: Введи символ: Я GЯ |
30 |
 |
Задача 8Input”введите строку”;s$ input”введите искомую букву”;с$ k=0 for i=1 to len(s$) if mid$(s$,i,1)=c$ then k=k+1 next i print “буква”;с$;”встретилась”;к;”раз” Задача 9 Input”введите слово”; s$ for i=len(s$) to 1 step -1 ? mid$(s$,i,1) next i |
31 |
 |
PROGRAM prog#10; VAR s: STRING; i: INTEGER; BEGIN write('Введитестроку: '); readln(s); write('Введите номер символа: '); readln(i); writeln(i, '–й символ строки – ', s[i]); END. Окно ввода/вывода: Введите строку: Вася Введите номер символа: 3 3–й символ строки – с Если указать индекс больше, чем длина строки, то может возникнуть ошибка [2], поэтому лучше не пытаться этого делать. |
32 |
 |
PROGRAM prog#11; VAR s: STRING; BEGIN write('Введите строку: ');readln(s); writeln('Длина строки – ', ORD(s[0]), ' символов'); END. Окно ввода/вывода: Введите строку: Маша Длина строки – 4 символов |
33 |
 |
Данная программа представляет собой примитивный транслятор, которыйтранслирует все символы в строки как они есть, а восклицательные знаки транслирует в точки. PROGRAM PRG34_12; VAR STR: STRING; L, I : INTEGER; BEGIN WRITELN(‘ВВЕДИТЕ ТЕКСТ'); READLN(STR); L := LENGTH(STR); WRITELN(‘ПРЕОБРАЗОВАННЫЙ ТЕКСТ'); FOR I := 1 TO L DO IF STR[I]='!' THEN WRITE('.') ELSE WRITEL(STR{I}); WRITELN; READLN END. Для решения задачи: • формируем тело программы и описываем переменные; • цикл FOR 1 := I TO L DO осуществляет вывод строки с заменой '!" на "." • после вывода закрываем строку оператором WRITELN. Переменные: 1 - переменные циклов; L - длина строки; STR - строка текста. |
34 |
 |
{ Процедура ExplodeString выводит строку S в позиции (X, Y), сэффектом раздвижения и звуковым сигналом } Procedure ExplodeString ( X,Y : Byte; S : String; C : Word ); Var I, L2: Byte; Begin L2 := (Length ( S ) div 2 ) + 1; { середина строки } If X < 12 then X := L2; For I := 0 to L2-1 do Begin GotoXY ( X-I, Y );{ Вывод расширяющейся центральной части строки} Write (Copy ( S, L2-I, 2*I+1) ); Sound ( I*50 ); Delay (C); NoSound End End; Begin ClrScr; ExplodeString ( 40, 12, ‘12345678900987654321’, 100); Repeat until Keypressed End. |
35 |
 |
Var LongV: LongInt; WordV: Word; . . WordV:= 0; Val (S, LongV, ErrCode ); If ErrCode= 0 then Begin If ( LongV >= 0 ) and ( LongV <= 65535 ) then WordV:=LongV else WriteLn (‘Ошибка диапазона при преобразовании‘, LongV) End else Writeln (‘Ошибка в строке ‘, S, ‘в символе‘, S[ErrCode] ); |
36 |
 |
Program prg34_15; var str: string; l, i, j : integer; m : set of char;begin m := ['.', ',', '!', ':', ';', '?', '-']; writeln(‘введите текст'); readln(str); l := length(str); for i := 1 to l do if not(str[1] in m) then write(str[1]) else break; for j := i + 1 to l do write(str[j]); writeln end. Для решения данной задачи нам понадобится объявить множество знаков препинания М. Затем, последовательно проверяя каждый символ строки на принадлежность этому множеству, найдем первый знак препинания. Найдя знак, необходимо досрочно выйти из цикла проверки, например с помощью оператора BREAK. Для решения задачи: • формируем тело программы и описываем переменные; • задаем значение множества М - множества знаков препинания; • цикл FOR 1 := I TO L DO осуществляет вывод строки до первого знака препинания; • цикл FOR J := 1 + I TO L DO выводит строку после первого знака препинания; • после вывода закрываем строку оператором WRITELN. Переменные: 1, J - переменные циклов; L - длина строки; STR - строка текста; М - множество знаков препинания. |
37 |
 |
PROGRAM prog#16; VAR s: STRING; BEGIN writeln('Как Вас зовут'); readln(s); writeln('Привет, ', s, '!'); END. Окно ввода/вывода: Как Вас зовут? Вася Привет, Вася! |
«Символьные и строковые переменные в Turbo Pascal» |
http://900igr.net/prezentacija/algebra/simvolnye-i-strokovye-peremennye-v-turbo-pascal-246043.html