русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Определение типов


Дата добавления: 2013-12-23; просмотров: 897; Нарушение авторских прав


End.

Begin

Program Str6; Var

End.

Begin

Program Str5; Var

End.

Program Str4; Var S,B : String; I : Byte; Begin

End.

Program Str3; Var I : Byte; Begin

End.

Begin

Program Str2; Var

End.

Program Str1; Var S : String; Begin

Writeln('Введите последовательность символов');
Readln(S);
Writeln('Вы ввели строку из ',Length(S), ' символов')

Другой пример:
Решим задачу: "Введенную строку вывести на экран по одному символу в строке экрана".

S : String;
I : Byte;

Writeln('Введите строку');
Readln(S);
For I:=1 to Length(S) do {организуем цикл, начиная с первого символа}
Writeln(S[I]) {строки, до последнего (номер последнего}
{совпадает с количеством символов строки S) }

Какие же еще действия можно выполнять с переменными строкового типа?

Две строковые величины можно состыковывать. Эта операция называется конкатенацией и обозначается знаком "+".

Например, результатом выполнения следующих команд:
R:= 'kadabra';
H:= 'abra';
S:=H+R;
в переменной S будет значение 'abrakadabra'.

Для конкатенации результат зависит от порядка операндов (в отличие от операции сложения). Следует помнить о том, какой максимальной длины может быть результирующая переменная, так как в случае превышения значением выражения числа, указанного после String в описании переменной, "лишние" символы в переменную не попадут.

Строковые величины можно сравнивать между собой. Это относится также и к строковым переменным. Но как же компьютер определяет, какая строка больше:

  • та, которая длиннее?
  • та, которая содержит больше заглавных букв?

На самом деле такая проверка проходит довольно сложно: компьютер сравнивает сначала первые символы строк. Большим из двух считается тот, код которого больше (вспомните, что такое код символа). Если равны первые символы, то так же анализируется следующая пара до тех пор, пока не будет найдено различие. Если начало строк совпадает, а одна из них кончается раньше, то вторая автоматически называется большей.



Код символа в Паскале можно определить при помощи функции Ord.

Ее формат: Ord(C), где С - либо непосредственно указанный символ, либо переменная символьного типа, либо один символ строковой переменной. Вообще, функция Ord имеет более глубокий смысл, но об этом - позже. Есть и обратная функция, которая возвращает символ по известному коду. Это функция Chr(N), где N - выражение, приводящее к целому числу в интервале от 0 до 255 (возможные значения кода символа). Очевидно, что Chr(Ord(C))=C, Ord(Chr(N))=N.

Следующая маленькая программа выводит на экран кодовую таблицу:

For I:=32 to 255 do
Write('VV',I:4, '-',Chr(I))

Цикл в программе начинается с 32 потому, что символы с кодами от 0 до 31 являются управляющими и не имеют соответствующего графического представления.

Задача: "Определить, является ли введенная строка "перевертышем". Перевертышем называется такая строка, которая одинаково читается с начала и с конца. Например, "казак" и "потоп" - перевертыши, "канат" - не перевертыш".

Поступим следующим образом: из введенной строки сформируем другую строку из символов первой, записанных в обратном порядке, затем сравним первую строку со второй; если они окажутся равны, то ответ положительный, иначе - отрицательный. Естественно, предложенный способ решения не является единственно возможным.

Writeln('Введите строку');
Readln(S);
B:=''; {Переменной B присваиваем значение "пустая строка"}
For I:=1 to Length(S) do
B:=S[I]+B; {Конкатенация. Символы строки S пристыковываются к}
{переменной B слева. Самым левым окажется последний.}
If B=S Then Writeln('Перевертыш') Else Writeln('Не перевертыш')

Число, записанное в строковую переменную, естественно числом не является, но очень часто требуется его все же использовать в качестве числа. Для этого нужно произвести преобразование типа. Перевод строкового представления числа в числовое выполняет в Паскале оператор Val.

Его формат:
Val(S,X,C);

Здесь S - строка, содержащая число, X - числовая переменная, в которую будет помещен результат, С - переменная целочисленного типа, в которую помещается первого встреченного в S отличного от цифры символа. Если после выполнения оператора Val переменная С имеет значение 0, то это означает, что преобразование типа прошло совершенно успешно и в строке нецифровых символов не встретилось.

Противоположное действие осуществляет оператор Str. Формат оператора:
Str(X,S);
X - число (либо арифметическое выражение), S - строковая переменная.

В переменную S попадает строковое представление числа X. Это нужно, например, при необходимости выводить на экран числа в графическом режиме (будет изучено позже), так как стандартные процедуры вывода на экран там работают только со строковыми величинами.

Для иллюстрации рассмотрим такую задачу: "Найти сумму цифр введенного натурального числа". Используя только числовые переменные, решить ее можно, но предлагаемое здесь решение, по-моему, проще.

S : String;
I,X,A,C : Integer;

Writeln('Введите натуральное число');
Readln(S); {Число вводится в строковую переменную}
A:=0;
For I:=1 To Length(S) Do
Begin

Val(S[I],X,C); {Цифровой символ превращается в число}
A:=A+X {Цифры суммируются}

End;
Writeln('Сумма цифр равна ',A)

Теперь рассмотрим еще несколько действий над строками:

  • оператор DELETE(S,I,C) из строковой переменной S удаляет C символов, начиная с I-того;
  • оператор INSERT(SN,S,I) вставляет подстроку SN в строковую переменную S перед символом с номером I;
  • функция COPY(S,I,C) возвращает подстроку строки S из C символов, начиная с символа с номером I;
  • функция Pos(SN,S) возвращает номер символа, с которого в строке S начинается подстрока SN (позицию первого вхождения подстроки в строку). Если такой подстроки нет, то возвращается ноль.

Пример их использования:
"Во введенной строке заменить все вхождения подстроки 'ABC' на подстроки 'KLMNO'".

S : String;
A : Byte;

Writeln('Введите строку');
Readln(S);
While Pos('ABC',S)<>0 Do
Begin

A:= Pos('ABC',S);
Delete(S,A,3);
Insert('KLMNO',S,A)

End;
Writeln(S)

Как было упомянуто ранее, в изучаемом языке возможно определять новые типы переменных. После определения этот тип становится доступным для описания переменных, также как и стандартные типы.

Новый тип перед первым его использованием должен быть описан в соответствующем разделе описаний. Его заголовок - служебное слово Type.

Type
<Имя типа> = <Описание типа>;

Есть несколько способов описания. Иногда говорят даже о видах типов (как бы это странно ни звучало).

Итак, первым рассмотрим так называемый перечисляемый тип.

Перечисляемый тип используется для повышения наглядности программ, позволяя записывать в переменные этого типа названия разнообразных объектов, исследуемых программой. Этот тип представляет собой набор идентификаторов, с которыми могут совпадать значения параметров.

Формат описания следующий: <Имя типа> = (<Ид.1>, <Ид.2>,? <Ид.n>);

Далее можно определить любое число переменных уже описанного типа. Обратите внимание на то, что каждый идентификатор может участвовать в описании только одного перечисляемого типа.

Этим переменным можно присваивать только значения из списка, определенного при описании типа. Эти значения не являются ни числами, ни строковыми величинами, ни даже величинами логического типа, поэтому они не могут участвовать в арифметических, строковых, логических выражениях, а также не могут быть выведены на экран или принтер. Величины перечисляемого типа можно сравнивать между собой, над их множеством в языке Паскаль определены несколько функций:
Ord(X) - порядковый номер значения переменной X в списке идентификаторов.
Succ(X) - следующее значение для величины Х.
Pred(X) - предыдущее значение данного типа.

Обратите внимание на то, что для функции Ord нумерация среди значений идет, начиная от нуля. Для последнего значения нельзя применять функциюSucc, для первого - Pred.

Переменные различных перечисляемых типов несовместимы друг с другом.

Множество стандартных порядковых типов в языке Паскаль на самом деле определены как перечисляемые. Это типы Char, Integer, другие. Достоинства стандартных порядковых типов лишь в том, что над каждым из них уже определены специфические действия. Например, тип Boolean описан так:
Type
Boolean = (False, True);

Единственное его отличие от перечисляемых типов, определяемых программистом, состоит в том, что значения типа Boolean можно выводить на экран. Можете проверить, Ord(False)=0.

Интересно, что переменная перечисляемого типа может быть счетчиком в цикле "с параметром".

Пример:



<== предыдущая лекция | следующая лекция ==>
Строковые операции | Массивы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.