Автор: Пользователь скрыл имя, 07 Марта 2013 в 02:12, курс лекций
Лекция 1. Представление алгоритмов на языке Программирования ПаскальАВС.
Лекция 2. Построение линейных алгоритмов
Лекция 3. Алгоритмы, содержащие структуру ветвления.
Лекция 4. Алгоритмы, содержащие структурные операторы циклов.
...
Лекция 9. Файловый тип данных
Лекция 6.
Символьный и строковый тип данных.
В лекции рассматриваются следующие вопросы:
1.Понятие символьной переменной.
2.Объявление символьной переменной в программе.
3.Решение задач с
использованием символьных
4.Объявление строковой переменной в программе.
5.Операции над строковыми переменными.
6.Процедуры
и функции работы со
1.Понятие символьной переменной.
В языке Pascal возможно использование переменных, в которых может храниться один символ (буква, знак или любой символ клавиатуры). Как известно символьная информация в компьютере кодируется. Это значит каждому символу поставлено в соответствие некоторое целое число. Чтобы в таких кодировках не было разночтения, Институт стандартизации США ввел в действие систему кодирования ASCII (American Ctandard Code for Information Interchande – стандартный код информационного обмена США). В системе АSCII закреплены две таблицы кодирования – базовая и расширенная. Базовая таблица закрепляет значения кодов от 0 до 127, а расширенная относится к символам с номерами от 128 до 255.
Первые 32 кода базовой таблицы, начиная с нулевого, отданы производителям аппаратных средств (в первую очередь производителям компьютеров и печатающих устройств). В этой области размещаются так называемые управляющие коды, которым не соответствуют никакие символы языков. Эти коды не выводятся ни на экран, ни на устройства печати. Например, клавиши Enter, Backspase и другие.
Начиная с 32 по код 127 размещены коды символов английского алфавита, знаков препинания, цифр, арифметических операций и некоторых других вспомогательных символов. Для национальных языков отводятся коды со 128 по 255.
2.Объявление
символьной переменной в
Символьный тип переменных объявляется служебным словом CHAR.
Для работы с переменными символьного типа можно использовать следующие функции и процедуры:
Chr(a) – функция, которая определяет символ по коду а.
Ord(x) – функция, которая по символу х определяет его код.
UpCase(x) – функция, которая преобразует малые буквы в большие английского алфавита.
Pred(x) – функция, которая находит символ из таблицы ASCII, предшествующий символу из переменной х.
Succ(x) – функция, которая находит символ из таблицы ASCII, следующий за символом из переменной х.
3.Решение задач с использованием символьных переменных.
Задача. Составить таблицу кодов и символов, которые этим кодам соответствуют.
Решение. Поскольку коды ASCII имеют значения 0 до 255, то используя цикл можно на экран вывести необходимую таблицу.
Program a31;
Uses Crt;
Var I:Integer;
Begin
Writeln(‘Таблица кодов’);
For I:=1 to 255 do
Write(‘код – ‘,I,’символ - ’, Chr(i):2);
Readln;
End.
4.Объявление строковой переменной в программе.
Для работы с текстами, и вообще, наборами слов используются данные строкового типа. Формат объявления строковой переменной имеет следующий вид:
1 способ Type Имя типа = String; Var Имя преременной : имя типа; |
2 способ Var Имя переменной : String; |
STRING – служебное слово переводится “строка”.
5.Операции над строковыми переменными.
Для работы со строковыми переменными используются свои операции и свои процедуры и функции. Строковой константой, как вы уже знаете, является последовательность символов заключенная в апострофы. Выражения, операндами которых являются строковые константы или переменные, называются строковыми выражениями.
Для присваивания значения строковой переменной служит оператор присваивания. Значения строковых переменных можно вводить с клавиатуры, как и значения числовых переменных. Строковая переменная, которая не содержит ни одного символа, является пустой строкой или нуль-строкой (например, а:=’’).
Для объединения нескольких строк и одну строку служит операция сцепления или конкатенации и обозначается знаком “+”. При операции сцепления необходимо учитывать, чтобы длина полученной строки не превышала максимальной длины, иначе все лишние символы отбрасываются.
Операции отношения проводят сравнение строк. Строки считаются равными, если они имеют одинаковую длину, состоят из одних и тех же символов, которые идут в одинаковом порядке. Сравнение строк идет слева направо до первого неодинакового символа. Если длины строк одинаковые, то большей считается та строка, у которой код несовпадающего символа больший. Если же строки состоят из одинаковых символов, то большей считается строка с большей длиной.
6.Процедуры и функции работы со строковыми переменными
Для работы со строковыми переменными используются специальные процедуры и функции:
Функции | ||
Length(имя строковой переменной) |
Определение длины строки | |
Pos(st1, st2) |
Нахождение первого появления в строке st2 строки st1 | |
Copy(st, начальная позиция, количество копируемых позиций) |
Выделение со строки st подстроки от начальной позиции указанное количество позиций | |
Процедуры | ||
Delete(st, начальная позиция, количество удаляемых символов) |
Удаление со строки st символов от начальной позиции указанное количество позиций | |
Insert(st1, st2, начальная позиция) |
Вставка строки st1 в строку st2 с отмеченной позиции | |
Str(арифметическое выра-жение, строковая пере-менная) |
Преобразование
числового значения арифметического
выражения в строковую | |
Val(строковая переменная, числовая переменная, cod) |
Преобразование строковой переменной в числовую переменную. В строковой переменной не должно быть пробелов. Если во время перевода ошибок не было, то переменной cod присвоится значение 0. Если же ошибки были, то переменной cod присвоится значение той позиции строковой переменной, в которой стоит символ, который невозможно перевести в число. |
Задача. Дано слово. Подсчитать, сколько раз в нем встречается данная буква и заменить ее на символ “ - “.
Program a39;
Var
s,a,x :String;
l,i,k:Integer;
Begin
Writeln('Ввести слово'); Readln(s);
l:=Length(s); {Определение длины слова}
Writeln('Ввести букву'); Readln(a);
x:=''; {новое слово пока пустое}
k:=0; {счетчик количества данной буквы}
For i:=1 to l do
If copy(s,i,1)=a {если текущая буква слова равна данной букве}
Then Begin x:=x+'-'; k:=k+1; End
{то к новому слову прибавляем символ «-» и к счетчику прибавляем 1}
Else x:=x+copy(s,i,1);
{иначе к новому
слову прибавляем текущую
Writeln('Данное слово -- ', s);
Writeln('Буква ',a,' встречается ',k,' раз');
Writeln('Полученное слово -- ',x);
End.
Задача. Дан текст. Слова в тексте отделяются одно от другого одним пробелом. Определить, есть ли в тексте данное слово.
Program a40;
Var
t,t1,x,y :String;
l,k,z:Integer;
Begin
Writeln('Ввести текст'); Readln(t);
l:=Length(t); {Определение длины текста}
t1:=t; {копирование текста, т.к. при работе с текстом исходный текст может пострадать}
Writeln('Ввести слово Х'); Readln(x);
k:=0;
{Переменная, которая будет являться дополнительной переменной. Сначала этой переменной присвоим значение 0, а затем, если в тексте обнаружим искомое слово, то значение этой переменной изменим, например на 5}
{Алгоритм будет заключаться в следующем. Поскольку слова в тексте отделяются друг от друга одним пробелом, то будем находить позицию пробела в тексте. Сделаем копию от начала текста до этой позиции – это есть слово текста. Сравним полученное слово текста и данное слово. Если они равны, то изменим значение дополнительной переменной. После этого слово из текста вместе с пробелом удалим. В конце получим, что исходный текст станет пустым.}
While t<>’’ do {пока текст не пустой}
Begin
Z:=Pos(‘ ‘,t); {поиск позиции пробела в тексте}
Y:=Copy(t,1,z-1); {копирование слова из текста}
If x=y {если данное слово ч равно слову из текста}
Then k:=5;
Delete(t,1,z); {удаление слова из текста}
End;
If k=0
Then Writeln(‘В тексте ’,t1,’ нет слова ’, x)
Else Writeln(‘В тексте ’,t1,’ есть слово ’,x);
End.
Задача. Дан текст. Слова в тексте отделяются одно от другого одним пробелом. Заменить одно данное слово Х другим данным словом У.
Program a41;
Var
t,t1,t2,x,y,s :String;
l,z:Integer;
Begin
Writeln('Ввести текст'); Readln(t);
l:=Length(t); {Определение длины текста}
t1:=t; {копирование текста, т.к. при работе с текстом исходный текст может пострадать}
Writeln('Ввести слово Х'); Readln(x);
Writeln('Ввести слово У'); Readln(у);
T2:=’’;
{Алгоритм будет заключаться в следующем. Поскольку слова в тексте отделяются друг от друга одним пробелом, то будем находить позицию пробела в тексте. Сделаем копию от начала текста до этой позиции – это есть слово текста. Сравним полученное слово текста и данное слово. Если они равны, то к новому тексту прибавим новое слово. Если же они не равны, то к новому тексту прибавим слово из старого текста. Затем из старого текста слово удаляем.}
While t1<>’’ do {пока текст не пустой}
Begin
Z:=Pos(‘ ‘,t1); {поиск позиции пробела в тексте}
s:=Copy(t1,1,z-1); {копирование слова из текста}
If x=s {если данное слово х равно слову у их текста }
Then t2:=t2+’ ‘+s {к новому тексту прибавляем слово из исходного текста}
Else t2:=t2+’ ‘+y; {к новому тексту прибавляем данное слово y }
Delete(t1,1,z); {удаление слова из текста}
End;
Writeln(‘Исходный текст ’,t1);
Writeln(‘Полученный текст ’,t2);
End.
Задача. С клавиатуры вводится длинное целое число, не менее 50 цифр. Определить сумму цифр данного числа.
Program а42;
Var
t,x :String;
l,s,z,I,cod:Integer;
Begin
{Введем число как
текст, т.е. набор символов-
Writeln('Ввести текст'); Readln(t);
l:=Length(t); {Определение длины текста}
{Будем выделять по одному символу из текста, переводить этот символ в цифру и прибавлять ее к сумме}
s:=0;
For i:=1 to l do
Begin
x:=Copy(t,I,1); {выделение одного символа из текста}
Val(x, z, cod); {перевод символа х в цифру z}
If cod=0 {Если перевод прошел без ошибок, то переменная cod принимает значение 0}
Then s:=s+z
Else Writeln(’при переводе ’,I,’ символа обнаружена ошибка’);
End;
Writeln(‘Сумма цифр исходного числа =’,s);
End.
Информация о работе Лекции по "Языкам и методам программирования" (PascalABC)