- •7. Вычитание в двоичной системе
- •При представлении с фиксированной запятой
- •20. Форматы данных
- •21. Представление числа в форме с плавающей запятой.
- •23. Форматы данных
- •Расширенная форма Бэкуса-Наура
- •25. Технология структурного программирования при разработке серьезных программных комплексов, основана на следующих принципах:
- •Типы интерпретаторов
- •Структура компилятора
- •Синтаксис:
- •38. Типы данных
- •Арифметические операции
- •Логические операции
- •43. С#Операции отношения:
- •Pascal Операции отношения
- •44. C# Операция присваивания
- •45. Стандартные процедуры и функции
- •46. 1) Класс Math:
- •Заголовок программы
- •Раздел меток (label)
- •Раздел констант (const)
- •Раздел типов (type)
- •Раздел переменных (var)
- •Раздел процедур и функций
- •Раздел действий (операторов)
- •Операторы ввода данных
- •Операторы вывода данных
- •54. Оператор case (оператор выбора)
- •55. Оператор if
- •Оператор switch
- •59. Оператор goto
- •Оператор return
- •Оператор throw
- •Исключительные ситуации
- •61. Класс
- •62. Состав классов
- •Модификаторы параметров методов
- •67. Статические конструкторы
- •68. Статические классы
- •Двумерные массивы
- •Создание массивов
- •Копирование массивов
- •Сортировка и поиск
Синтаксис:
#IFDEF Имя
Строки, которые следуют за этой директивой, будут прочитаны только в том случае, если ключевое слово Имя определено.
Чтение выполняется до тех пор, пока не будет найдено ключевое слово #ELSE или #ENDIF, после которого возобновится нормальный процесс компиляции.
Пример:
#IFDEF VER2_2_0
-Fu/usr/lib/fpc/2.2.0/linuxunits
#ENDIF
В этом примере /usr/lib/fpc/2.2.0/linuxunits будет добавлено в путь, если вы используете версию компилятора 2.2.0.
IFNDEF
Синтаксис:
#IFNDEF Имя
Строки, которые следуют за этой директивой, будут прочитаны только в том случае, если ключевое слово Имя НЕ определено.
Чтение выполняется до тех пор, пока не будет найдено ключевое слово #ELSE или #ENDIF, после которого возобновится нормальный процесс компиляции.
Пример:
#IFNDEF VER2_2_0
-Fu/usr/lib/fpc/2.2.0/linuxunits
#ENDIF
В этом примере /usr/lib/fpc/2.2.0/linuxunits будет добавлено в путь, если вы используете любую версию компилятора, кроме версии 2.2.0.
ELSE
Синтаксис:
#ELSE
Директива #ELSE может быть указана после директив #IFDEF или #IFNDEF как альтернатива. Строки, которые следуют за этой директивой, будут прочитаны только в том случае, если ключевое не выполнилось условие директив #IFDEF или #IFNDEF.
Чтение выполняется до тех пор, пока не будет найдено ключевое слово #ENDIF, после которого возобновится нормальный процесс компиляции.
Пример:
#IFDEF VER2_2_2
-Fu/usr/lib/fpc/2.2.2/linuxunits
#ELSE
-Fu/usr/lib/fpc/2.2.0/linuxunits
#ENDIF
В этом примере /usr/lib/fpc/2.2.2/linuxunits будет добавлено в путь, если вы используете версию компилятора 2.2.2, иначе будет добавлено /usr/lib/fpc/2.2.0/linuxunits.
ENDIF
Синтаксис:
#ENDIF
Директива #ENDIF отмечает конец блока, который начинается директивой #IF(N)DEF, возможно с директивой #ELSE между ними.
DEFINE
Синтаксис:
#DEFINE Имя
Директива #DEFINE определяет новое ключевое слово. Она имеет тот же эффект, что и параметр командной строки –dname.
UNDEF
Синтаксис:
#UNDEF Имя
Директива #UNDEF отменяет определение ключевого слова, если оно существует. Директива имеет тот же эффект, что параметр командной строки –uname.
WRITE
Синтаксис:
#WRITE Текст сообщения
Директива #WRITE выводит Текст сообщения на экран. Это может оказаться полезным для вывода предупреждений, если какие-либо опции являются установленными.
Пример:
#IFDEF DEBUG
#WRITE Setting debugging ON...
-g
#ENDIF
Если DEBUG определено, то этот пример выведет строку
Setting debugging ON...
а затем включит вывод отладочной информации.
INCLUDE
Синтаксис:
#INCLUDE ИмяФайла
Директива #INCLUDE даёт команду компилятору читать содержимое файла ИмяФайла, перед продолжением чтения параметров в текущем файле.
Это может оказаться полезным, если вы редко используете конфигурационный файл для проекта (или работаете на LINUX в вашей домашней директории), но в то же время хотите использовать глобальные параметры в глобальном конфигурационном файле.
Пример:
#IFDEF LINUX
#INCLUDE /etc/fpc.cfg
#ELSE
#IFDEF GO32V2
#INCLUDE c:\pp\bin\fpc.cfg
#ENDIF
#ENDIF
Если вы работаете на LINUX-машине, то будет подключен конфигурационный файл /etc/fpc.cfg, а если вы работает на DOS-машине, то будет подключен конфигурационный файл c:\pp\bin\fpc.cfg.
SECTION
Синтаксис:
#SECTION Имя
Директива #SECTION действует как директива #IFDEF, только не требует директивы #ENDIF. Специальное имя COMMON всегда существует, то есть строки, которые следуют за #SECTION COMMON всегда будут читаться.
34. ЛИТЕРАЛ (literal). Содержащийся в тексте программы элемент данных, представленный в виде имеющих самостоятельное значение символа или последовательности символов. Л. являются непосредственно указанные в программе адреса, числовые или символьные константы, но не имена констант, переменных или других объектов программы. Например, в написанных на языке Паскаль операторах pi:= 3.14159; у:= 2*Р1*х; Л. является число 3.14159, а символы PI ни в первом, ни во втором операторах не являются самостоятельно значимыми и, следовательно, не образуют Л. Это просто имя константы. Аналогично, в написанных на языке Си директиве
35. В С# литералами называются постоянные значения, представленные в удобной для восприятия форме. Например, число 100 является литералом. Сами литералы и их назначение настолько понятны, что они применялись во всех предыдущих примерах программ без всяких пояснений. Но теперь настало время дать им формальное объяснение.
В С# литералы могут быть любого простого типа. Представление каждого литерала зависит от конкретного типа. Как пояснялось ранее, символьные литералы заключаются в одинарные кавычки. Например, 'а' и '%' являются символьными литералами.
Целочисленные литералы указываются в виде чисел без дробной части. Например, 10 и -100 — это целочисленные литералы. Для обозначения литералов с плавающей точкой требуется указывать десятичную точку и дробную часть числа. Например, 11.123 — это литерал с плавающей точкой. Для вещественных чисел с плавающей точкой в С# допускается также использовать экспоненциальное представление.
У литералов должен быть также конкретный тип, поскольку С# является строго типизированным языком. В этой связи возникает естественный вопрос: к какому типу следует отнести числовой литерал, например 2, 12 3987 или 0 .23? К счастью, для ответа на этот вопрос в С# установлен ряд простых для соблюдения правил:
Во-первых, у целочисленных литералов должен быть самый мелкий целочисленный тип, которым они могут быть представлены, начиная с типа int. Таким образом, у целочисленных литералов может быть один из следующих типов: int, uint, long или ulong в зависимости от значения литерала.
Литералы с плавающей точкой относятся к типу double.
Если вас не устраивает используемый по умолчанию тип литерала, вы можете явно указать другой его тип с помощью суффикса.
Так, для указания типа long к литералу присоединяется суффикс l или L. Например, 12 — это литерал типа int, a 12L — литерал типа long. Для указания целочисленного типа без знака к литералу присоединяется суффикс u или U. Следовательно, 100 — это литерал типа int, a 100U — литерал типа uint. А для указания длинного целочисленного типа без знака к литералу присоединяется суффикс ul или UL. Например, 984375UL — это литерал типа ulong.
Кроме того, для указания типа float к литералу присоединяется суффикс F или f. Например, 10.19F — это литерал типа float. Можете даже указать тип double, присоединив к литералу суффикс d или D, хотя это излишне. Ведь, как упоминалось выше, по умолчанию литералы с плавающей точкой относятся к типу double.
И наконец, для указания типа decimal к литералу присоединяется суффикс m или М. Например, 9.95М — это десятичный литерал типа decimal.
Несмотря на то что целочисленные литералы образуют по умолчанию значения типа int, uint, long или ulong, их можно присваивать переменным типа byte, sbyte, short или ushort, при условии, что присваиваемое значение может быть представлено целевым типом.
36. Идентификаторы - имена объектов и конструкций программы (меток, констант, типов, переменных, типов, процедур, функций, объектов, модулей, программ, полей в записях и т.д.). Имя может иметь любую длину, однако различимыми являются только первые 63 символа. Имя состоит из буквы, за которой могут следовать буквы, цифры или символ подчеркивания. (Имя может начинаться с символа подчеркивания, но этого не желательно делатель т.к. с него начинаются большинство системных программ) Нельзя в качестве имен использовать ключевые слова, и стандартные имена, которые служат для обозначения некоторых констант, типов, процедур, функций, файлов и др. объектов. Эти имена распознаются компилятором без их дополнительного описания в программе. Выбор имени желательно осуществлять в соответствии с логической или физической сущности именуемого объекта, что облегчает понимание программы и служит признаком хорошего стиля программирования.
37. Идентификаторы — это имена, которые мы даем переменным, определенным пользователем типам (классам и структурам) и членам этих типов. Идентификаторы чувствительны к регистру символов, поэтому identifier и Identifier являются разными переменными. В С# идентификаторы обязаны подчиняться двум правилам. Во-первых, идентификатор должен начинаться с буквы или знака подчеркивания, хотя он может содержать и цифры. Во-вторых, в качестве идентификаторов нельзя использовать ключевые слова С#. С# имеет 76 зарезервированных ключевых слов:
abstract |
do |
implicit |
params |
switch |
as |
double |
in |
private |
this |
base |
else |
int |
protected |
throw |
bool |
enum |
interface |
public |
true |
break |
event |
internal |
readonly |
try |
byte |
explicit |
is |
ref |
typeof |
case |
extern |
lock |
return |
uint |
catch |
false |
long |
sbyte |
ulong |
char |
finally |
namespace |
sealed |
unchecked |
checked |
fixed |
new |
short |
unsafe |
class |
float |
null |
sizeof |
ushort |
const |
for |
object |
stackalloc |
using |
continue |
foreach |
operator |
static |
virtual |
decimal |
goto |
out |
string |
void |
default |
if |
override |
struct |
while |
delegate |
|
|
|
|
Если одно из этих слов требуется использовать в качестве идентификатора (например, если осуществляется доступ к классу, написанному с применением другого языка), то перед ним ставится знак @, который указывает компилятору, что это слово необходимо трактовать как идентификатор, а не как ключевое слово С# (таким образом, abstract не является допустимым идентификатором, a @abstract является). Наконец, идентификаторы могут записываться с помощью символов Unicode, указанных с использованием синтаксиса \uXXXX, где ХХХХ — четырехзначный шестнадцатеричный код Unicode символа. Приведем примеры допустимых идентификаторов: Name, uberflu?, _Identifier, \u005fIdentifier Последние два идентификатора являются идентичными и взаимозаменяемыми (005f — Unicode-код для знака подчеркивания), поэтому они не могут быть объявлены оба в пределах одной области видимости. Отметим, что хотя и можно использовать в качестве идентификаторов знаки подчеркивания, все же не рекомендуется делать это, поскольку противоречит рекомендациям Microsoft по именованию идентификаторов, которые были созданы для стандартизации соглашений по именам и для облегчения чтения кода других программистов.
