change encoding for all *.pas and *.cs files: cp1251 -> utf-8
This commit is contained in:
parent
8b3e964efc
commit
49378a6750
|
|
@ -6,7 +6,7 @@ using System.Text;
|
||||||
using PascalABCCompiler.SemanticTreeConverters;
|
using PascalABCCompiler.SemanticTreeConverters;
|
||||||
using PascalABCCompiler.Errors;
|
using PascalABCCompiler.Errors;
|
||||||
|
|
||||||
///Â ðàçðàáîòêå DarkStar
|
///В разработке DarkStar
|
||||||
|
|
||||||
namespace PascalABCCompiler
|
namespace PascalABCCompiler
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ namespace PascalABCCompiler.SemanticTreeConverters
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
//если dll не нетовская
|
//если dll не нетовская
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ namespace PascalABCCompiler
|
||||||
{
|
{
|
||||||
int read = s.EndRead(ar);
|
int read = s.EndRead(ar);
|
||||||
|
|
||||||
// Новое поле byteoffset говорит о том, что с прошлого раза мы учли дополнительный байт
|
// Новое поле byteoffset говорит о том, что с прошлого раза мы учли дополнительный байт
|
||||||
read += so.byteoffset;
|
read += so.byteoffset;
|
||||||
if (read > 0)
|
if (read > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -121,8 +121,8 @@ namespace PascalABCCompiler
|
||||||
|
|
||||||
string str = en.GetString(so.buffer, 0, read);
|
string str = en.GetString(so.buffer, 0, read);
|
||||||
|
|
||||||
// К сожалению, ошибочный байт устанавливается за счет разницы длин str и newstr
|
// К сожалению, ошибочный байт устанавливается за счет разницы длин str и newstr
|
||||||
// Надо бы оптимизировать
|
// Надо бы оптимизировать
|
||||||
|
|
||||||
byte prevbyte = 0;
|
byte prevbyte = 0;
|
||||||
if (str.Length != newstr.Length)
|
if (str.Length != newstr.Length)
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ public abstract class ScanBase : AbstractScanner<ValueType,LexLocation> {
|
||||||
public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
{
|
{
|
||||||
// Verbatim content from oberon00.y
|
// Verbatim content from oberon00.y
|
||||||
public syntax_tree_node root; // Корневой узел синтаксического дерева
|
public syntax_tree_node root; // Корневой узел синтаксического дерева
|
||||||
public GPPGParser(AbstractScanner<ValueType, LexLocation> scanner) : base(scanner) { }
|
public GPPGParser(AbstractScanner<ValueType, LexLocation> scanner) : base(scanner) { }
|
||||||
// End verbatim content from oberon00.y
|
// End verbatim content from oberon00.y
|
||||||
|
|
||||||
|
|
@ -257,16 +257,16 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
// END, ident, COMMA
|
// END, ident, COMMA
|
||||||
{
|
{
|
||||||
if (ValueStack[ValueStack.Depth-8].id.name != ValueStack[ValueStack.Depth-2].id.name)
|
if (ValueStack[ValueStack.Depth-8].id.name != ValueStack[ValueStack.Depth-2].id.name)
|
||||||
PT.AddError("Имя "+ValueStack[ValueStack.Depth-2].id.name+" должно совпадать с именем модуля "+ValueStack[ValueStack.Depth-8].id.name,LocationStack[LocationStack.Depth-2]);
|
PT.AddError("Имя "+ValueStack[ValueStack.Depth-2].id.name+" должно совпадать с именем модуля "+ValueStack[ValueStack.Depth-8].id.name,LocationStack[LocationStack.Depth-2]);
|
||||||
|
|
||||||
// Подключение стандартной библиотеки
|
// Подключение стандартной библиотеки
|
||||||
ident_list il = new ident_list();
|
ident_list il = new ident_list();
|
||||||
il.Add(new ident("Oberon00System"));
|
il.Add(new ident("Oberon00System"));
|
||||||
unit_or_namespace un = new unit_or_namespace(il);
|
unit_or_namespace un = new unit_or_namespace(il);
|
||||||
uses_list ul = new uses_list();
|
uses_list ul = new uses_list();
|
||||||
ul.units.Insert(0, un);
|
ul.units.Insert(0, un);
|
||||||
|
|
||||||
// Формирование главного модуля
|
// Формирование главного модуля
|
||||||
var b = new block(ValueStack[ValueStack.Depth-6].decl, ValueStack[ValueStack.Depth-4].sl, LocationStack[LocationStack.Depth-6].Merge(LocationStack[LocationStack.Depth-2]));
|
var b = new block(ValueStack[ValueStack.Depth-6].decl, ValueStack[ValueStack.Depth-4].sl, LocationStack[LocationStack.Depth-6].Merge(LocationStack[LocationStack.Depth-2]));
|
||||||
var r = new program_module(null, ul, b, null,CurrentLocationSpan);
|
var r = new program_module(null, ul, b, null,CurrentLocationSpan);
|
||||||
r.Language = LanguageId.Oberon00;
|
r.Language = LanguageId.Oberon00;
|
||||||
|
|
@ -274,7 +274,7 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: // module -> INVISIBLE, expr
|
case 3: // module -> INVISIBLE, expr
|
||||||
{ // Для Intellisense
|
{ // Для Intellisense
|
||||||
root = ValueStack[ValueStack.Depth-1].ex;
|
root = ValueStack[ValueStack.Depth-1].ex;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,27 @@
|
||||||
// (c) Mikst, Juliet 2010
|
// (c) Mikst, Juliet 2010
|
||||||
/// Системный модуль для языка Oberon
|
/// Системный модуль для языка Oberon
|
||||||
unit Oberon00System;
|
unit Oberon00System;
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
type
|
type
|
||||||
/// Логический тип (TRUE | FALSE)
|
/// Логический тип (TRUE | FALSE)
|
||||||
BOOLEAN = System.boolean;
|
BOOLEAN = System.boolean;
|
||||||
/// Целое число
|
/// Целое число
|
||||||
INTEGER = System.Int32;
|
INTEGER = System.Int32;
|
||||||
/// Короткое целое число
|
/// Короткое целое число
|
||||||
SHORTINT = System.byte;
|
SHORTINT = System.byte;
|
||||||
/// Длинное целое число
|
/// Длинное целое число
|
||||||
LONGINT = System.int64;
|
LONGINT = System.int64;
|
||||||
/// Вещественное число
|
/// Вещественное число
|
||||||
REAL = System.double;
|
REAL = System.double;
|
||||||
/// Длинное вещественное число
|
/// Длинное вещественное число
|
||||||
LONGREAL = System.double;
|
LONGREAL = System.double;
|
||||||
/// Символ
|
/// Символ
|
||||||
CHAR = System.char;
|
CHAR = System.char;
|
||||||
/// Строка
|
/// Строка
|
||||||
STRING = System.string;
|
STRING = System.string;
|
||||||
/// Множество целых
|
/// Множество целых
|
||||||
iset = array of integer;
|
iset = array of integer;
|
||||||
|
|
||||||
procedure Print(o: object);
|
procedure Print(o: object);
|
||||||
|
|
@ -38,7 +38,7 @@ begin
|
||||||
Console.Write(o);
|
Console.Write(o);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
/// Вывести значение
|
/// Вывести значение
|
||||||
procedure Println(o: object);
|
procedure Println(o: object);
|
||||||
begin
|
begin
|
||||||
Console.WriteLine(o);
|
Console.WriteLine(o);
|
||||||
|
|
|
||||||
|
|
@ -685,7 +685,7 @@ int NextState() {
|
||||||
case eofNum:
|
case eofNum:
|
||||||
switch (currentStart) {
|
switch (currentStart) {
|
||||||
case 50:
|
case 50:
|
||||||
PT.AddError("Комментарий не закрыт", yylloc);
|
PT.AddError("Комментарий не закрыт", yylloc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (yywrap())
|
if (yywrap())
|
||||||
|
|
@ -779,7 +779,7 @@ int tryParseInt;
|
||||||
yylval.lVal = tryParseLong;
|
yylval.lVal = tryParseLong;
|
||||||
return (int)Tokens.LONGINTNUM;
|
return (int)Tokens.LONGINTNUM;
|
||||||
}
|
}
|
||||||
PT.AddError("Слишком длинное целое", yylloc);
|
PT.AddError("Слишком длинное целое", yylloc);
|
||||||
break;
|
break;
|
||||||
case 26:
|
case 26:
|
||||||
yylval.sVal = PT.GetStringContent(yytext);
|
yylval.sVal = PT.GetStringContent(yytext);
|
||||||
|
|
@ -791,7 +791,7 @@ try{
|
||||||
return (int)Tokens.CHAR_CONST;
|
return (int)Tokens.CHAR_CONST;
|
||||||
}
|
}
|
||||||
catch (System.ArgumentException){
|
catch (System.ArgumentException){
|
||||||
PT.AddError("Некорректный код символа", yylloc);
|
PT.AddError("Некорректный код символа", yylloc);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 28:
|
case 28:
|
||||||
|
|
@ -802,7 +802,7 @@ double tryParseDouble;
|
||||||
yylval.rVal = tryParseDouble;
|
yylval.rVal = tryParseDouble;
|
||||||
return (int)Tokens.REALNUM;
|
return (int)Tokens.REALNUM;
|
||||||
}
|
}
|
||||||
PT.AddError("Слишком длинное вещественное", yylloc);
|
PT.AddError("Слишком длинное вещественное", yylloc);
|
||||||
break;
|
break;
|
||||||
case 29:
|
case 29:
|
||||||
var _yytext = yytext.Substring(0, yytext.Length - 1);
|
var _yytext = yytext.Substring(0, yytext.Length - 1);
|
||||||
|
|
@ -816,7 +816,7 @@ var _yytext = yytext.Substring(0, yytext.Length - 1);
|
||||||
yylval.lVal = tryParseHexLong;
|
yylval.lVal = tryParseHexLong;
|
||||||
return (int)Tokens.LONGINTNUM;
|
return (int)Tokens.LONGINTNUM;
|
||||||
}
|
}
|
||||||
PT.AddError("Слишком длинное шестнадцатеричное целое", yylloc);
|
PT.AddError("Слишком длинное шестнадцатеричное целое", yylloc);
|
||||||
break;
|
break;
|
||||||
case 31:
|
case 31:
|
||||||
return (int)Tokens.DOUBLEPOINT;
|
return (int)Tokens.DOUBLEPOINT;
|
||||||
|
|
@ -945,7 +945,7 @@ static int mlCommentCnt = 0;
|
||||||
PT.AddError(errorMsg,yylloc);
|
PT.AddError(errorMsg,yylloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Статический класс, определяющий ключевые слова языка
|
// Статический класс, определяющий ключевые слова языка
|
||||||
public static class Keywords
|
public static class Keywords
|
||||||
{
|
{
|
||||||
private static Dictionary<string, int> keywords = new Dictionary<string, int>();
|
private static Dictionary<string, int> keywords = new Dictionary<string, int>();
|
||||||
|
|
|
||||||
|
|
@ -39,40 +39,40 @@ public struct ValueType
|
||||||
public bool bVal;
|
public bool bVal;
|
||||||
public string sVal;
|
public string sVal;
|
||||||
public int iVal;
|
public int iVal;
|
||||||
public long lVal; // Длинное целое
|
public long lVal; // Длинное целое
|
||||||
public char cVal;
|
public char cVal;
|
||||||
public double rVal;
|
public double rVal;
|
||||||
public pascal_set_constant sc; // Константа - множество
|
public pascal_set_constant sc; // Константа - множество
|
||||||
public named_type_reference ntr; // Именованное определение типа
|
public named_type_reference ntr; // Именованное определение типа
|
||||||
public type_definition tdef; // Сам тип
|
public type_definition tdef; // Сам тип
|
||||||
public diapason dpsn; // Тип диапазон
|
public diapason dpsn; // Тип диапазон
|
||||||
public array_type arrt; // Тип массив
|
public array_type arrt; // Тип массив
|
||||||
public class_definition cldef; // Определение записи
|
public class_definition cldef; // Определение записи
|
||||||
public indexers_types indts; // Тип типы индексов массива
|
public indexers_types indts; // Тип типы индексов массива
|
||||||
public ref_type rft; // Тип указатель
|
public ref_type rft; // Тип указатель
|
||||||
public ident_list il; // Список идентификаторов
|
public ident_list il; // Список идентификаторов
|
||||||
public ident id; // Идентификатор
|
public ident id; // Идентификатор
|
||||||
public oberon_ident_with_export_marker obrid; // Обероновский уточненный идентификатор
|
public oberon_ident_with_export_marker obrid; // Обероновский уточненный идентификатор
|
||||||
public oberon_export_marker obrem; // Обероновская экспортная метка
|
public oberon_export_marker obrem; // Обероновская экспортная метка
|
||||||
public var_def_statement vds; // Описание переменных
|
public var_def_statement vds; // Описание переменных
|
||||||
public variable_definitions vdss; // Секция описания переменных
|
public variable_definitions vdss; // Секция описания переменных
|
||||||
public type_declarations td; // Секция определения типов
|
public type_declarations td; // Секция определения типов
|
||||||
public type_declaration tdec; // Описание типа
|
public type_declaration tdec; // Описание типа
|
||||||
public expression ex; // Выражение
|
public expression ex; // Выражение
|
||||||
public expression_list el; // Список выражений
|
public expression_list el; // Список выражений
|
||||||
public Operators ops; // Операторы (операции)
|
public Operators ops; // Операторы (операции)
|
||||||
public block bl; // Программный блок
|
public block bl; // Программный блок
|
||||||
public statement st; // Оператор программный
|
public statement st; // Оператор программный
|
||||||
public statement_list sl; // Список операторов
|
public statement_list sl; // Список операторов
|
||||||
public case_variants cvars; // Список вариантов оператора CASE
|
public case_variants cvars; // Список вариантов оператора CASE
|
||||||
public case_variant cvar; // Вариант оператора CASE
|
public case_variant cvar; // Вариант оператора CASE
|
||||||
public declaration decsec; // Описание
|
public declaration decsec; // Описание
|
||||||
public declarations decl; // Список описаний
|
public declarations decl; // Список описаний
|
||||||
public simple_const_definition scd; // Определение константы
|
public simple_const_definition scd; // Определение константы
|
||||||
public consts_definitions_list cdl; // Список описаний констант
|
public consts_definitions_list cdl; // Список описаний констант
|
||||||
public procedure_definition pd; // Описание процедуры
|
public procedure_definition pd; // Описание процедуры
|
||||||
public dot_node dn; // Узел в точечной нотации
|
public dot_node dn; // Узел в точечной нотации
|
||||||
public addressed_value adrv; // Адресованное значение
|
public addressed_value adrv; // Адресованное значение
|
||||||
}
|
}
|
||||||
// Abstract base class for GPLEX scanners
|
// Abstract base class for GPLEX scanners
|
||||||
public abstract class ScanBase : AbstractScanner<ValueType,LexLocation> {
|
public abstract class ScanBase : AbstractScanner<ValueType,LexLocation> {
|
||||||
|
|
@ -84,8 +84,8 @@ public abstract class ScanBase : AbstractScanner<ValueType,LexLocation> {
|
||||||
public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
{
|
{
|
||||||
// Verbatim content from oberon00.y
|
// Verbatim content from oberon00.y
|
||||||
// Эти объявления добавляются в класс GPPGParser, представляющий собой парсер, генерируемый системой gppg
|
// Эти объявления добавляются в класс GPPGParser, представляющий собой парсер, генерируемый системой gppg
|
||||||
public syntax_tree_node root; // Корневой узел синтаксического дерева
|
public syntax_tree_node root; // Корневой узел синтаксического дерева
|
||||||
public GPPGParser(AbstractScanner<ValueType, LexLocation> scanner) : base(scanner) { }
|
public GPPGParser(AbstractScanner<ValueType, LexLocation> scanner) : base(scanner) { }
|
||||||
// End verbatim content from oberon00.y
|
// End verbatim content from oberon00.y
|
||||||
|
|
||||||
|
|
@ -527,17 +527,17 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
case 2: // module -> MODULE, ident, SEMICOLUMN, mainblock, ident, COMMA
|
case 2: // module -> MODULE, ident, SEMICOLUMN, mainblock, ident, COMMA
|
||||||
{
|
{
|
||||||
if (ValueStack[ValueStack.Depth-5].id.name != ValueStack[ValueStack.Depth-2].id.name)
|
if (ValueStack[ValueStack.Depth-5].id.name != ValueStack[ValueStack.Depth-2].id.name)
|
||||||
PT.AddError("Имя " + ValueStack[ValueStack.Depth-2].id.name + " должно совпадать с именем модуля " + ValueStack[ValueStack.Depth-5].id.name, LocationStack[LocationStack.Depth-2]);
|
PT.AddError("Имя " + ValueStack[ValueStack.Depth-2].id.name + " должно совпадать с именем модуля " + ValueStack[ValueStack.Depth-5].id.name, LocationStack[LocationStack.Depth-2]);
|
||||||
|
|
||||||
// Подключение стандартного модуля Oberon00System, написанного на PascalABC.NET
|
// Подключение стандартного модуля Oberon00System, написанного на PascalABC.NET
|
||||||
var ul = new uses_list("Oberon00System");
|
var ul = new uses_list("Oberon00System");
|
||||||
|
|
||||||
// Формирование модуля основной программы (используется фабричный метод вместо конструктора)
|
// Формирование модуля основной программы (используется фабричный метод вместо конструктора)
|
||||||
root = program_module.create(ValueStack[ValueStack.Depth-5].id, ul, ValueStack[ValueStack.Depth-3].bl, CurrentLocationSpan);
|
root = program_module.create(ValueStack[ValueStack.Depth-5].id, ul, ValueStack[ValueStack.Depth-3].bl, CurrentLocationSpan);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: // module -> INVISIBLE, expr
|
case 3: // module -> INVISIBLE, expr
|
||||||
{ // Для Intellisense
|
{ // Для Intellisense
|
||||||
root = ValueStack[ValueStack.Depth-1].ex;
|
root = ValueStack[ValueStack.Depth-1].ex;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -892,7 +892,7 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
expression step;
|
expression step;
|
||||||
if (ValueStack[ValueStack.Depth-4].ex != null) step = ValueStack[ValueStack.Depth-4].ex;
|
if (ValueStack[ValueStack.Depth-4].ex != null) step = ValueStack[ValueStack.Depth-4].ex;
|
||||||
else step = new int32_const(1, LocationStack[LocationStack.Depth-4]);
|
else step = new int32_const(1, LocationStack[LocationStack.Depth-4]);
|
||||||
// Будем моделировать цикл через while
|
// Будем моделировать цикл через while
|
||||||
statement_list forStmnt = GetForThroughWhile(ValueStack[ValueStack.Depth-9].id, ValueStack[ValueStack.Depth-7].ex, ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-2].sl, step, LocationStack[LocationStack.Depth-8], CurrentLocationSpan);
|
statement_list forStmnt = GetForThroughWhile(ValueStack[ValueStack.Depth-9].id, ValueStack[ValueStack.Depth-7].ex, ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-2].sl, step, LocationStack[LocationStack.Depth-8], CurrentLocationSpan);
|
||||||
CurrentSemanticValue.st = forStmnt;
|
CurrentSemanticValue.st = forStmnt;
|
||||||
CurrentSemanticValue.st.source_context = CurrentLocationSpan;
|
CurrentSemanticValue.st.source_context = CurrentLocationSpan;
|
||||||
|
|
@ -901,21 +901,21 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
case 85: // ForStep -> BY, ConstExpr
|
case 85: // ForStep -> BY, ConstExpr
|
||||||
{
|
{
|
||||||
int32_const step32 = ValueStack[ValueStack.Depth-1].ex as int32_const;
|
int32_const step32 = ValueStack[ValueStack.Depth-1].ex as int32_const;
|
||||||
if (step32 != null) { // шаг является просто целым числом (без знака)
|
if (step32 != null) { // шаг является просто целым числом (без знака)
|
||||||
if (step32.val == 0) PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]);
|
if (step32.val == 0) PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]);
|
||||||
else CurrentSemanticValue.ex = new int32_const(step32.val, CurrentLocationSpan);
|
else CurrentSemanticValue.ex = new int32_const(step32.val, CurrentLocationSpan);
|
||||||
}
|
}
|
||||||
else { // в значении шага либо присутствует знак, либо это вообще не целое
|
else { // в значении шага либо присутствует знак, либо это вообще не целое
|
||||||
un_expr stepMinus = ValueStack[ValueStack.Depth-1].ex as un_expr;
|
un_expr stepMinus = ValueStack[ValueStack.Depth-1].ex as un_expr;
|
||||||
int32_const stepMinusTerm = stepMinus.subnode as int32_const;
|
int32_const stepMinusTerm = stepMinus.subnode as int32_const;
|
||||||
bool signMinus = (stepMinusTerm != null) && (stepMinus.operation_type == Operators.Minus);
|
bool signMinus = (stepMinusTerm != null) && (stepMinus.operation_type == Operators.Minus);
|
||||||
if (signMinus)
|
if (signMinus)
|
||||||
if (stepMinusTerm.val == 0)
|
if (stepMinusTerm.val == 0)
|
||||||
PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]);
|
PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]);
|
||||||
else
|
else
|
||||||
CurrentSemanticValue.ex = new un_expr(stepMinusTerm, Operators.Minus, LocationStack[LocationStack.Depth-1]);
|
CurrentSemanticValue.ex = new un_expr(stepMinusTerm, Operators.Minus, LocationStack[LocationStack.Depth-1]);
|
||||||
else
|
else
|
||||||
PT.AddError("Шаг цикла должен быть целым числом", LocationStack[LocationStack.Depth-2]);
|
PT.AddError("Шаг цикла должен быть целым числом", LocationStack[LocationStack.Depth-2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -1121,7 +1121,7 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
break;
|
break;
|
||||||
case 122: // ArrayType -> ARRAY, OF, TypeDef
|
case 122: // ArrayType -> ARRAY, OF, TypeDef
|
||||||
{
|
{
|
||||||
// открытый массив
|
// открытый массив
|
||||||
diapason dp = new diapason(new int32_const(0), new int32_const(0));
|
diapason dp = new diapason(new int32_const(0), new int32_const(0));
|
||||||
indexers_types inxr = new indexers_types();
|
indexers_types inxr = new indexers_types();
|
||||||
inxr.Add(dp);
|
inxr.Add(dp);
|
||||||
|
|
@ -1130,7 +1130,7 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
break;
|
break;
|
||||||
case 123: // ArrayType -> ARRAY, LengthList, OF, TypeDef
|
case 123: // ArrayType -> ARRAY, LengthList, OF, TypeDef
|
||||||
{
|
{
|
||||||
// Будем искать array n of char, чтобы заменить на строку
|
// Будем искать array n of char, чтобы заменить на строку
|
||||||
named_type_reference ntr = ValueStack[ValueStack.Depth-1].tdef as named_type_reference;
|
named_type_reference ntr = ValueStack[ValueStack.Depth-1].tdef as named_type_reference;
|
||||||
bool complexArr = (ntr != null) && (ntr.names.Count == 1) &&
|
bool complexArr = (ntr != null) && (ntr.names.Count == 1) &&
|
||||||
(ntr.names[0].name == "char");
|
(ntr.names[0].name == "char");
|
||||||
|
|
@ -1161,14 +1161,14 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
break;
|
break;
|
||||||
case 127: // Length -> ConstExpr
|
case 127: // Length -> ConstExpr
|
||||||
{
|
{
|
||||||
// В обероне в массиве указывается целочисленная длина
|
// В обероне в массиве указывается целочисленная длина
|
||||||
// Поэтому надо проверить, что выражение относится к целому типу
|
// Поэтому надо проверить, что выражение относится к целому типу
|
||||||
object[] types = {ValueStack[ValueStack.Depth-1].ex};
|
object[] types = {ValueStack[ValueStack.Depth-1].ex};
|
||||||
bool isLength = typeof(int32_const) == System.Type.GetTypeArray(types)[0];
|
bool isLength = typeof(int32_const) == System.Type.GetTypeArray(types)[0];
|
||||||
if (isLength)
|
if (isLength)
|
||||||
CurrentSemanticValue.dpsn = GetDiapasonByArrLength(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan);
|
CurrentSemanticValue.dpsn = GetDiapasonByArrLength(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan);
|
||||||
else
|
else
|
||||||
PT.AddError("Длина должна быть целым числом", LocationStack[LocationStack.Depth-1]);
|
PT.AddError("Длина должна быть целым числом", LocationStack[LocationStack.Depth-1]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 128: // PointerType -> POINTER, TO, TypeDef
|
case 128: // PointerType -> POINTER, TO, TypeDef
|
||||||
|
|
@ -1218,8 +1218,8 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
if (ValueStack[ValueStack.Depth-1].decsec != null)
|
if (ValueStack[ValueStack.Depth-1].decsec != null)
|
||||||
ValueStack[ValueStack.Depth-2].decl.Add(ValueStack[ValueStack.Depth-1].decsec);
|
ValueStack[ValueStack.Depth-2].decl.Add(ValueStack[ValueStack.Depth-1].decsec);
|
||||||
CurrentSemanticValue.decl = ValueStack[ValueStack.Depth-2].decl;
|
CurrentSemanticValue.decl = ValueStack[ValueStack.Depth-2].decl;
|
||||||
CurrentSemanticValue.decl.source_context = CurrentLocationSpan; // Необходимо показать место в программе, т.к. неявно это не сделано
|
CurrentSemanticValue.decl.source_context = CurrentLocationSpan; // Необходимо показать место в программе, т.к. неявно это не сделано
|
||||||
// (например, в конструкторе)
|
// (например, в конструкторе)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 137: // ProcedureDeclarationSect -> PROCEDURE, ident, maybeformalparams, maybereturn,
|
case 137: // ProcedureDeclarationSect -> PROCEDURE, ident, maybeformalparams, maybereturn,
|
||||||
|
|
@ -1287,11 +1287,11 @@ public class GPPGParser: ShiftReduceParser<ValueType, LexLocation>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Возвращает последовательность операторов, соответсвующую
|
/* Возвращает последовательность операторов, соответсвующую
|
||||||
циклу for, моделируемому через while */
|
циклу for, моделируемому через while */
|
||||||
public static statement_list GetForThroughWhile(ident id, expression expr, expression endExpr, statement_list stmnts,
|
public static statement_list GetForThroughWhile(ident id, expression expr, expression endExpr, statement_list stmnts,
|
||||||
expression step, SourceContext assignSC, SourceContext wholeSC){
|
expression step, SourceContext assignSC, SourceContext wholeSC){
|
||||||
// Будем моделировать цикл через while
|
// Будем моделировать цикл через while
|
||||||
statement_list forStmnt = new statement_list();
|
statement_list forStmnt = new statement_list();
|
||||||
ident endFor = new ident("_oberon_for_end_");
|
ident endFor = new ident("_oberon_for_end_");
|
||||||
forStmnt.Add(new var_statement(new var_def_statement(
|
forStmnt.Add(new var_statement(new var_def_statement(
|
||||||
|
|
@ -1302,14 +1302,14 @@ public static statement_list GetForThroughWhile(ident id, expression expr, expre
|
||||||
false))
|
false))
|
||||||
);
|
);
|
||||||
forStmnt.Add( new assign(id, expr, Operators.Assignment, assignSC) );
|
forStmnt.Add( new assign(id, expr, Operators.Assignment, assignSC) );
|
||||||
statement_list posStatementList = new statement_list(); // при положительном шаге
|
statement_list posStatementList = new statement_list(); // при положительном шаге
|
||||||
posStatementList.Add(stmnts);
|
posStatementList.Add(stmnts);
|
||||||
posStatementList.Add( new assign(id, step, Operators.AssignmentAddition) );
|
posStatementList.Add( new assign(id, step, Operators.AssignmentAddition) );
|
||||||
while_node posWhile = new while_node(
|
while_node posWhile = new while_node(
|
||||||
new bin_expr(id, endFor, Operators.LessEqual),
|
new bin_expr(id, endFor, Operators.LessEqual),
|
||||||
posStatementList,
|
posStatementList,
|
||||||
WhileCycleType.While);
|
WhileCycleType.While);
|
||||||
statement_list negStatementList = new statement_list(); // при отрицательном шаге
|
statement_list negStatementList = new statement_list(); // при отрицательном шаге
|
||||||
negStatementList.Add(stmnts);
|
negStatementList.Add(stmnts);
|
||||||
negStatementList.Add( new assign(id, step, Operators.AssignmentAddition) );
|
negStatementList.Add( new assign(id, step, Operators.AssignmentAddition) );
|
||||||
while_node negWhile = new while_node(
|
while_node negWhile = new while_node(
|
||||||
|
|
@ -1324,8 +1324,8 @@ public static statement_list GetForThroughWhile(ident id, expression expr, expre
|
||||||
return forStmnt;
|
return forStmnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Возвращает многомерный массив, в котором при необходимости
|
/* Возвращает многомерный массив, в котором при необходимости
|
||||||
массив символов заменен на строку */
|
массив символов заменен на строку */
|
||||||
public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList,
|
public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList,
|
||||||
SourceContext lenListSC, SourceContext wholeSC){
|
SourceContext lenListSC, SourceContext wholeSC){
|
||||||
List<type_definition> indxrs = lenList.indexers;
|
List<type_definition> indxrs = lenList.indexers;
|
||||||
|
|
@ -1333,15 +1333,15 @@ public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList
|
||||||
int32_const len = new int32_const();
|
int32_const len = new int32_const();
|
||||||
len.val = (dp.right as int32_const).val + 1;
|
len.val = (dp.right as int32_const).val + 1;
|
||||||
type_definition result = new string_num_definition(len, new ident("string", lenListSC), wholeSC);
|
type_definition result = new string_num_definition(len, new ident("string", lenListSC), wholeSC);
|
||||||
if (indxrs.Count > 1) { // надо делать массив массивов ... строк
|
if (indxrs.Count > 1) { // надо делать массив массивов ... строк
|
||||||
indxrs.RemoveAt(indxrs.Count - 1);
|
indxrs.RemoveAt(indxrs.Count - 1);
|
||||||
result = new array_type(lenList, result, wholeSC);
|
result = new array_type(lenList, result, wholeSC);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Возвращает диапазон 0..Length-1, полученный по обероновской длине
|
/* Возвращает диапазон 0..Length-1, полученный по обероновской длине
|
||||||
массива, и необходимый для паскалевского синтаксического узла */
|
массива, и необходимый для паскалевского синтаксического узла */
|
||||||
public static diapason GetDiapasonByArrLength(expression lenExpr, SourceContext lenSC){
|
public static diapason GetDiapasonByArrLength(expression lenExpr, SourceContext lenSC){
|
||||||
int32_const zero = new int32_const();
|
int32_const zero = new int32_const();
|
||||||
zero.val = 0;
|
zero.val = 0;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова
|
// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова
|
||||||
var
|
var
|
||||||
&begin,&end: integer;
|
&begin,&end: integer;
|
||||||
begin
|
begin
|
||||||
&begin := 1;
|
&begin := 1;
|
||||||
&end := 2;
|
&end := 2;
|
||||||
var t: System.Type := &begin.GetType; // в System.Type использовать & не надо
|
var t: System.Type := &begin.GetType; // в System.Type использовать & не надо
|
||||||
write(&begin,' ',&end,' ',t);
|
write(&begin,' ',&end,' ',t);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Присваивания += -= *= /=
|
// Присваивания += -= *= /=
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
r: real;
|
r: real;
|
||||||
|
|
@ -6,9 +6,9 @@ var
|
||||||
begin
|
begin
|
||||||
i := 1;
|
i := 1;
|
||||||
writeln('i := 1; i = ',i);
|
writeln('i := 1; i = ',i);
|
||||||
i += 2; // Увеличение на 2
|
i += 2; // Увеличение на 2
|
||||||
writeln('i += 2; i = ',i);
|
writeln('i += 2; i = ',i);
|
||||||
i *= 3; // Умножение на 3
|
i *= 3; // Умножение на 3
|
||||||
writeln('i *= 3; i = ',i);
|
writeln('i *= 3; i = ',i);
|
||||||
writeln;
|
writeln;
|
||||||
r := 6;
|
r := 6;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Автоопределение типа переменной
|
// Автоопределение типа переменной
|
||||||
// Описание переменной в заголовке цикла for
|
// Описание переменной в заголовке цикла for
|
||||||
begin
|
begin
|
||||||
var x := 2;
|
var x := 2;
|
||||||
for var i:=1 to 10 do
|
for var i:=1 to 10 do
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
// Перемена местами значений двух переменных с использованием третьей
|
// Перемена местами значений двух переменных с использованием третьей
|
||||||
var x,y: real;
|
var x,y: real;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
write('Введите x,y: ');
|
write('Введите x,y: ');
|
||||||
readln(x,y);
|
readln(x,y);
|
||||||
var v: real := x; // вспомогательная переменная
|
var v: real := x; // вспомогательная переменная
|
||||||
x := y;
|
x := y;
|
||||||
y := v;
|
y := v;
|
||||||
writeln('Новые значения x,y: ',x,' ',y);
|
writeln('Новые значения x,y: ',x,' ',y);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,24 +1,24 @@
|
||||||
// Пример иллюстрирует возможности оператора foreach
|
// Пример иллюстрирует возможности оператора foreach
|
||||||
var
|
var
|
||||||
a: array [1..5] of integer := (1,3,5,7,9);
|
a: array [1..5] of integer := (1,3,5,7,9);
|
||||||
s: set of integer;
|
s: set of integer;
|
||||||
l: List<integer>;
|
l: List<integer>;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
write('foreach по обычному массиву: ':35);
|
write('foreach по обычному массиву: ':35);
|
||||||
foreach x: integer in a do
|
foreach x: integer in a do
|
||||||
Print(x);
|
Print(x);
|
||||||
writeln;
|
writeln;
|
||||||
|
|
||||||
s := [2..5,10..14];
|
s := [2..5,10..14];
|
||||||
write('foreach по множеству: ':35);
|
write('foreach по множеству: ':35);
|
||||||
foreach var x in s do
|
foreach var x in s do
|
||||||
Print(x);
|
Print(x);
|
||||||
writeln;
|
writeln;
|
||||||
|
|
||||||
l := new List<integer>;
|
l := new List<integer>;
|
||||||
l.Add(7); l.Add(2); l.Add(5);
|
l.Add(7); l.Add(2); l.Add(5);
|
||||||
write('foreach по динамическому массиву: ':35);
|
write('foreach по динамическому массиву: ':35);
|
||||||
foreach var x in l do
|
foreach var x in l do
|
||||||
Print(x);
|
Print(x);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/// Âûâîä ñ ïîìîùüþ Print
|
/// Вывод с помощью Print
|
||||||
begin
|
begin
|
||||||
Print(1,2,3)
|
Print(1,2,3)
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Генерация случайного числа в заданном диапазоне
|
// Генерация случайного числа в заданном диапазоне
|
||||||
begin
|
begin
|
||||||
var i := Random(2,5);
|
var i := Random(2,5);
|
||||||
writeln('Случайное целое в диапазоне 2..5: ',i);
|
writeln('Случайное целое в диапазоне 2..5: ',i);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// При работе с вещественными числами невозможно получить ошибку выполнения
|
// При работе с вещественными числами невозможно получить ошибку выполнения
|
||||||
begin
|
begin
|
||||||
writeln(1/0);
|
writeln(1/0);
|
||||||
writeln(sqrt(-1));
|
writeln(sqrt(-1));
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,27 @@
|
||||||
// Простейшие новые возможности языка PascalABC.NET
|
// Простейшие новые возможности языка PascalABC.NET
|
||||||
|
|
||||||
// Инициализация переменной при описании
|
// Инициализация переменной при описании
|
||||||
var i: integer := 1;
|
var i: integer := 1;
|
||||||
|
|
||||||
// Автоопределение типа переменной при инициализации
|
// Автоопределение типа переменной при инициализации
|
||||||
var r := 2.5;
|
var r := 2.5;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
// Внутриблочные описания переменных
|
// Внутриблочные описания переменных
|
||||||
var s: real := 1.0;
|
var s: real := 1.0;
|
||||||
|
|
||||||
// Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла)
|
// Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла)
|
||||||
for j: integer := 1 to 10 do
|
for j: integer := 1 to 10 do
|
||||||
s += j; // Операция += для чисел
|
s += j; // Операция += для чисел
|
||||||
|
|
||||||
var p := 1;
|
var p := 1;
|
||||||
|
|
||||||
// Описание переменной в заголовке цикла с автоопределением типа
|
// Описание переменной в заголовке цикла с автоопределением типа
|
||||||
for var j := 1 to 10 do
|
for var j := 1 to 10 do
|
||||||
p *= j; // Операция *=
|
p *= j; // Операция *=
|
||||||
|
|
||||||
var str := '';
|
var str := '';
|
||||||
for c: char := 'a' to 'z' do
|
for c: char := 'a' to 'z' do
|
||||||
str += c; // Операция += для строк
|
str += c; // Операция += для строк
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
/// Ñòàíäàðòíûå ðàçìåðíûå òèïû äàííûõ è èõ ðàçìåð
|
/// Стандартные размерные типы данных и их размер
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
j: shortint;
|
j: shortint;
|
||||||
k: smallint;
|
k: smallint;
|
||||||
l: longint; // ñèíîíèì integer
|
l: longint; // синоним integer
|
||||||
i64: int64;
|
i64: int64;
|
||||||
b: byte;
|
b: byte;
|
||||||
w: word;
|
w: word;
|
||||||
lw: longword;
|
lw: longword;
|
||||||
car: cardinal; // ñèíîíèì longword
|
car: cardinal; // синоним longword
|
||||||
ui64: uint64;
|
ui64: uint64;
|
||||||
r: real;
|
r: real;
|
||||||
d: double; // ñèíîíèì real
|
d: double; // синоним real
|
||||||
sn: single;
|
sn: single;
|
||||||
c: char;
|
c: char;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
/// Вывод различных типов процедурой write
|
/// Вывод различных типов процедурой write
|
||||||
begin
|
begin
|
||||||
// Вывод, целого, строки, вещественного
|
// Вывод, целого, строки, вещественного
|
||||||
Writeln(1,' ',2.5);
|
Writeln(1,' ',2.5);
|
||||||
// Вывод множества
|
// Вывод множества
|
||||||
Writeln([1..10]);
|
Writeln([1..10]);
|
||||||
// Вывод логического
|
// Вывод логического
|
||||||
Writeln(True);
|
Writeln(True);
|
||||||
var a: array [1..10] of integer;
|
var a: array [1..10] of integer;
|
||||||
// Вывод массива (выводится его тип)
|
// Вывод массива (выводится его тип)
|
||||||
Writeln(a);
|
Writeln(a);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
/// Использование процедуры WritelnFormat
|
/// Использование процедуры WritelnFormat
|
||||||
begin
|
begin
|
||||||
// Вывод в обратном порядке
|
// Вывод в обратном порядке
|
||||||
WritelnFormat('{2},{1},{0}',1,2,3);
|
WritelnFormat('{2},{1},{0}',1,2,3);
|
||||||
// Вывод фигурных скобочек
|
// Вывод фигурных скобочек
|
||||||
WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке');
|
WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке');
|
||||||
// Задание ширины поля вывода
|
// Задание ширины поля вывода
|
||||||
WritelnFormat('{0,10:f}',3.1415);
|
WritelnFormat('{0,10:f}',3.1415);
|
||||||
// Задание количества знаков после запятой для вещественного числа
|
// Задание количества знаков после запятой для вещественного числа
|
||||||
WritelnFormat('{0:f3}',3.1415);
|
WritelnFormat('{0:f3}',3.1415);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode
|
// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode
|
||||||
var
|
var
|
||||||
c: char;
|
c: char;
|
||||||
i: integer;
|
i: integer;
|
||||||
|
|
@ -6,14 +6,14 @@ var
|
||||||
begin
|
begin
|
||||||
writeln('sizeof(char) = ',sizeof(char));
|
writeln('sizeof(char) = ',sizeof(char));
|
||||||
writeln;
|
writeln;
|
||||||
c := 'Ж';
|
c := 'Ж';
|
||||||
i := Ord(c);
|
i := Ord(c);
|
||||||
writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i);
|
writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i);
|
||||||
c := Chr(i);
|
c := Chr(i);
|
||||||
writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c);
|
writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c);
|
||||||
writeln;
|
writeln;
|
||||||
i := OrdUnicode(c);
|
i := OrdUnicode(c);
|
||||||
writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i);
|
writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i);
|
||||||
c := ChrUnicode(i);
|
c := ChrUnicode(i);
|
||||||
writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c);
|
writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Процедуры и методы работы с динамическим массивом
|
// Процедуры и методы работы с динамическим массивом
|
||||||
uses System;
|
uses System;
|
||||||
|
|
||||||
procedure Print(a: array of integer);
|
procedure Print(a: array of integer);
|
||||||
|
|
@ -11,30 +11,30 @@ end;
|
||||||
var a: array of integer;
|
var a: array of integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
SetLength(a,10); // выделение памяти. А можно так: a := new integer[10];
|
SetLength(a,10); // выделение памяти. А можно так: a := new integer[10];
|
||||||
|
|
||||||
// Заполнение массива
|
// Заполнение массива
|
||||||
for var i:=0 to a.Length-1 do
|
for var i:=0 to a.Length-1 do
|
||||||
a[i] := PABCSystem.Random(100);
|
a[i] := PABCSystem.Random(100);
|
||||||
|
|
||||||
// Вывод всех элементов массива
|
// Вывод всех элементов массива
|
||||||
Print(a);
|
Print(a);
|
||||||
|
|
||||||
// Сортировка массива (знак & используется для того,
|
// Сортировка массива (знак & используется для того,
|
||||||
// чтобы воспользоваться ключевым словом array при обозначении
|
// чтобы воспользоваться ключевым словом array при обозначении
|
||||||
// класса Array)
|
// класса Array)
|
||||||
&Array.Sort(a);
|
&Array.Sort(a);
|
||||||
Print(a);
|
Print(a);
|
||||||
|
|
||||||
// Обращение массива
|
// Обращение массива
|
||||||
&Array.Reverse(a);
|
&Array.Reverse(a);
|
||||||
Print(a);
|
Print(a);
|
||||||
|
|
||||||
// Изменение размерамассиав с сохранением элементов. То же делает SetLength
|
// Изменение размерамассиав с сохранением элементов. То же делает SetLength
|
||||||
&Array.Resize(a,a.Length+2);
|
&Array.Resize(a,a.Length+2);
|
||||||
Print(a);
|
Print(a);
|
||||||
|
|
||||||
// Поиск вхождения элемента в массив
|
// Поиск вхождения элемента в массив
|
||||||
var i := &Array.IndexOf(a, 50);
|
var i := &Array.IndexOf(a, 50);
|
||||||
Writeln(i);
|
Writeln(i);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Перечислимый тип
|
// Перечислимый тип
|
||||||
type Months = (January,February,March,April,May,June,July,August,September,October,November,December);
|
type Months = (January,February,March,April,May,June,July,August,September,October,November,December);
|
||||||
|
|
||||||
var m: Months;
|
var m: Months;
|
||||||
|
|
@ -6,20 +6,20 @@ var m: Months;
|
||||||
begin
|
begin
|
||||||
m := February;
|
m := February;
|
||||||
writeln(m);
|
writeln(m);
|
||||||
// Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант
|
// Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант
|
||||||
m := Months.April;
|
m := Months.April;
|
||||||
writeln('Следующий месяц: ',m);
|
writeln('Следующий месяц: ',m);
|
||||||
Inc(m);
|
Inc(m);
|
||||||
writeln('Следующий месяц: ',m);
|
writeln('Следующий месяц: ',m);
|
||||||
m := Succ(m);
|
m := Succ(m);
|
||||||
writeln('Следующий месяц: ',m);
|
writeln('Следующий месяц: ',m);
|
||||||
m := Pred(m);
|
m := Pred(m);
|
||||||
writeln('Предыдующий месяц: ',m);
|
writeln('Предыдующий месяц: ',m);
|
||||||
Dec(m);
|
Dec(m);
|
||||||
writeln('Предыдующий месяц: ',m);
|
writeln('Предыдующий месяц: ',m);
|
||||||
writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m));
|
writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m));
|
||||||
// Ошибки нет
|
// Ошибки нет
|
||||||
writeln('Месяц перед январем - выход за границы: ',pred(Months.January));
|
writeln('Месяц перед январем - выход за границы: ',pred(Months.January));
|
||||||
// Ошибки нет
|
// Ошибки нет
|
||||||
writeln('Месяц после декабря - выход за границы: ',succ(Months.December));
|
writeln('Месяц после декабря - выход за границы: ',succ(Months.December));
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Èíèöèàëèçàòîðû ïîëåé çàïèñè
|
// Инициализаторы полей записи
|
||||||
type
|
type
|
||||||
Frac = record
|
Frac = record
|
||||||
num: integer := 0;
|
num: integer := 0;
|
||||||
denom := 1; // àâòîîïðåäåëåèíå òèïà - denom: integer
|
denom := 1; // автоопределеине типа - denom: integer
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы
|
// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы
|
||||||
type
|
type
|
||||||
A = class
|
A = class
|
||||||
i: integer;
|
i: integer;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Выделение динамической памяти
|
// Выделение динамической памяти
|
||||||
// Использование указателей для создания односвязного списка
|
// Использование указателей для создания односвязного списка
|
||||||
type
|
type
|
||||||
PNode = ^TNode;
|
PNode = ^TNode;
|
||||||
TNode = record
|
TNode = record
|
||||||
|
|
@ -18,13 +18,13 @@ var first: PNode;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
first := nil;
|
first := nil;
|
||||||
// Добавляем в начало односвязного списка
|
// Добавляем в начало односвязного списка
|
||||||
first := NewNode(3,first);
|
first := NewNode(3,first);
|
||||||
first := NewNode(7,first);
|
first := NewNode(7,first);
|
||||||
first := NewNode(5,first);
|
first := NewNode(5,first);
|
||||||
|
|
||||||
// Вывод односвязного списка
|
// Вывод односвязного списка
|
||||||
writeln('Содержимое односвязного списка: ');
|
writeln('Содержимое односвязного списка: ');
|
||||||
var p := first;
|
var p := first;
|
||||||
while p<>nil do
|
while p<>nil do
|
||||||
begin
|
begin
|
||||||
|
|
@ -32,12 +32,12 @@ begin
|
||||||
p := p^.next;
|
p := p^.next;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Разрушение односвязного списка
|
// Разрушение односвязного списка
|
||||||
p := first;
|
p := first;
|
||||||
while p<>nil do
|
while p<>nil do
|
||||||
begin
|
begin
|
||||||
var p1 := p;
|
var p1 := p;
|
||||||
p := p^.next;
|
p := p^.next;
|
||||||
Dispose(p1); // Память обязательно возвращать
|
Dispose(p1); // Память обязательно возвращать
|
||||||
end;
|
end;
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Использование ссылок вместо указателей для создания односвязного списка
|
// Использование ссылок вместо указателей для создания односвязного списка
|
||||||
// Мы рекомендуем именно этот способ
|
// Мы рекомендуем именно этот способ
|
||||||
type
|
type
|
||||||
Node = class
|
Node = class
|
||||||
data: integer;
|
data: integer;
|
||||||
|
|
@ -11,18 +11,18 @@ type
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором
|
// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором
|
||||||
var first: Node;
|
var first: Node;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
first := nil;
|
first := nil;
|
||||||
// Добавляем в начало односвязного списка
|
// Добавляем в начало односвязного списка
|
||||||
first := new Node(3,first);
|
first := new Node(3,first);
|
||||||
first := new Node(7,first);
|
first := new Node(7,first);
|
||||||
first := new Node(5,first);
|
first := new Node(5,first);
|
||||||
|
|
||||||
// Вывод односвязного списка. ^ отсутствуют
|
// Вывод односвязного списка. ^ отсутствуют
|
||||||
writeln('Содержимое односвязного списка (использование ссылок вместо указателей): ');
|
writeln('Содержимое односвязного списка (использование ссылок вместо указателей): ');
|
||||||
var p := first;
|
var p := first;
|
||||||
while p<>nil do
|
while p<>nil do
|
||||||
begin
|
begin
|
||||||
|
|
@ -30,6 +30,6 @@ begin
|
||||||
p := p.next;
|
p := p.next;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Разрушение односвязного списка
|
// Разрушение односвязного списка
|
||||||
first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает
|
first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
// Работа с множествами
|
// Работа с множествами
|
||||||
// Базовый тип для множества может быть произвольным
|
// Базовый тип для множества может быть произвольным
|
||||||
var
|
var
|
||||||
s1: set of string := ['Иванов','Попов','Сидорова','Петров'];
|
s1: set of string := ['Иванов','Попов','Сидорова','Петров'];
|
||||||
s2: set of string := ['Козлов','Петров','Иванов'];
|
s2: set of string := ['Козлов','Петров','Иванов'];
|
||||||
begin
|
begin
|
||||||
writeln('Множество s1: ',s1);
|
writeln('Множество s1: ',s1);
|
||||||
writeln('Множество s2: ',s2);
|
writeln('Множество s2: ',s2);
|
||||||
writeln('Объединение множеств s1 и s2: ',s1+s2);
|
writeln('Объединение множеств s1 и s2: ',s1+s2);
|
||||||
writeln('Пересечение множеств s1 и s2: ',s1*s2);
|
writeln('Пересечение множеств s1 и s2: ',s1*s2);
|
||||||
writeln('Разность множеств s1 и s2: ',s1-s2);
|
writeln('Разность множеств s1 и s2: ',s1-s2);
|
||||||
Include(s1,'Умнов');
|
Include(s1,'Умнов');
|
||||||
Exclude(s1,'Иванов');
|
Exclude(s1,'Иванов');
|
||||||
writeln('Множество s1: ',s1);
|
writeln('Множество s1: ',s1);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
// Преобразование целое <-> строка в новом стиле
|
// Преобразование целое <-> строка в новом стиле
|
||||||
var
|
var
|
||||||
s: string;
|
s: string;
|
||||||
i: integer;
|
i: integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
// Преобразование целого в строку
|
// Преобразование целого в строку
|
||||||
i := 234;
|
i := 234;
|
||||||
s := i.ToString;
|
s := i.ToString;
|
||||||
writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s);
|
writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s);
|
||||||
|
|
||||||
// Преобразование строки в целое
|
// Преобразование строки в целое
|
||||||
s := '567';
|
s := '567';
|
||||||
if integer.TryParse(s,i) then
|
if integer.TryParse(s,i) then
|
||||||
writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i);
|
writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
// Строки. Методы класса string
|
// Строки. Методы класса string
|
||||||
var
|
var
|
||||||
s: string := ' Pascal__NET ';
|
s: string := ' Pascal__NET ';
|
||||||
s1: string := 'NET';
|
s1: string := 'NET';
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Исходная строка: ''',s,'''');
|
writeln('Исходная строка: ''',s,'''');
|
||||||
s := s.Trim;
|
s := s.Trim;
|
||||||
writeln('После вызова s.Trim: ''',s,'''');
|
writeln('После вызова s.Trim: ''',s,'''');
|
||||||
var p := s.IndexOf(s1); // Индексация - с нуля
|
var p := s.IndexOf(s1); // Индексация - с нуля
|
||||||
writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p);
|
writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p);
|
||||||
s := s.Remove(6,2);
|
s := s.Remove(6,2);
|
||||||
writeln('После удаления символов __: ',s);
|
writeln('После удаления символов __: ',s);
|
||||||
s := s.Insert(6,'ABC.');
|
s := s.Insert(6,'ABC.');
|
||||||
writeln('После вставки подстроки ''ABC.'': ',s);
|
writeln('После вставки подстроки ''ABC.'': ',s);
|
||||||
writeln('Первая часть строки: ',s.Substring(0,9));
|
writeln('Первая часть строки: ',s.Substring(0,9));
|
||||||
writeln('Последняя часть строки: ',s.Substring(10,3));
|
writeln('Последняя часть строки: ',s.Substring(10,3));
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
// Ñòðîêè string, string[n], shortstring
|
// Строки string, string[n], shortstring
|
||||||
var
|
var
|
||||||
s: string; // ïàìÿòü, çàíèìàåìàÿ s, çàâèñèò îò åå äëèíû
|
s: string; // память, занимаемая s, зависит от ее длины
|
||||||
s10: string[10]; // ïàìÿòü ïîä ss ôèêñèðîâàíà
|
s10: string[10]; // память под ss фиксирована
|
||||||
ss: shortstring := s;
|
ss: shortstring := s;
|
||||||
f: file of string[10];
|
f: file of string[10];
|
||||||
// f: file of string; - îøèáêà
|
// f: file of string; - ошибка
|
||||||
|
|
||||||
begin
|
begin
|
||||||
s := '12345678901234567890';
|
s := '12345678901234567890';
|
||||||
s10 := s; // îáðåçàíèå
|
s10 := s; // обрезание
|
||||||
writeln(s10);
|
writeln(s10);
|
||||||
s += s; s += s;
|
s += s; s += s;
|
||||||
s += s; s += s;
|
s += s; s += s;
|
||||||
writeln(s);
|
writeln(s);
|
||||||
writeln('Äëèíà ñòðîêè = ',s.Length);
|
writeln('Длина строки = ',s.Length);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность
|
// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность
|
||||||
var
|
var
|
||||||
a: array of integer;
|
a: array of integer;
|
||||||
a1: array of integer;
|
a1: array of integer;
|
||||||
|
|
@ -18,6 +18,6 @@ begin
|
||||||
a := a1;
|
a := a1;
|
||||||
s := s1;
|
s := s1;
|
||||||
p := p1;
|
p := p1;
|
||||||
r := r1; // В Delphi ни одно из этих присваиваний не сработает
|
r := r1; // В Delphi ни одно из этих присваиваний не сработает
|
||||||
proc(a,s,p,r); // Этот вызов - тоже
|
proc(a,s,p,r); // Этот вызов - тоже
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Бестиповые файлы
|
// Бестиповые файлы
|
||||||
var
|
var
|
||||||
f: file;
|
f: file;
|
||||||
i: integer;
|
i: integer;
|
||||||
|
|
@ -8,11 +8,11 @@ var
|
||||||
begin
|
begin
|
||||||
assign(f,'a.dat');
|
assign(f,'a.dat');
|
||||||
rewrite(f);
|
rewrite(f);
|
||||||
// Записываем в файл данные любых типов
|
// Записываем в файл данные любых типов
|
||||||
write(f,1,2.5,'Hello');
|
write(f,1,2.5,'Hello');
|
||||||
close(f);
|
close(f);
|
||||||
reset(f);
|
reset(f);
|
||||||
// Считываем эти данные из файла
|
// Считываем эти данные из файла
|
||||||
read(f,i,r,s);
|
read(f,i,r,s);
|
||||||
write(i,' ',r,' ',s);
|
write(i,' ',r,' ',s);
|
||||||
close(f);
|
close(f);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Переменное число параметров
|
// Переменное число параметров
|
||||||
function Sum(params arg: array of integer): integer;
|
function Sum(params arg: array of integer): integer;
|
||||||
begin
|
begin
|
||||||
Result := 0;
|
Result := 0;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Перегрузка имен подпрограмм
|
// Перегрузка имен подпрограмм
|
||||||
procedure proc(i: integer);
|
procedure proc(i: integer);
|
||||||
begin
|
begin
|
||||||
writeln('integer');
|
writeln('integer');
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
// Все возможные способы инициализации поцедурной переменной
|
// Все возможные способы инициализации поцедурной переменной
|
||||||
// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -=
|
// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -=
|
||||||
|
|
||||||
procedure pp;
|
procedure pp;
|
||||||
begin
|
begin
|
||||||
writeln('Вызов обычной процедуры');
|
writeln('Вызов обычной процедуры');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
@ -17,11 +17,11 @@ type
|
||||||
end;
|
end;
|
||||||
procedure pp;
|
procedure pp;
|
||||||
begin
|
begin
|
||||||
writeln('Вызов метода класса, значение поля равно ',x);
|
writeln('Вызов метода класса, значение поля равно ',x);
|
||||||
end;
|
end;
|
||||||
class procedure ppstatic;
|
class procedure ppstatic;
|
||||||
begin
|
begin
|
||||||
writeln('Вызов классового метода класса');
|
writeln('Вызов классового метода класса');
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Îáîáùåííûå ôóíêöèè
|
// Обобщенные функции
|
||||||
// Âûâåäåíèå òèïà T ïî òèïàì ïàðàìåòðîâ
|
// Выведение типа T по типам параметров
|
||||||
|
|
||||||
procedure Swap<T>(var a,b: T);
|
procedure Swap<T>(var a,b: T);
|
||||||
begin
|
begin
|
||||||
|
|
@ -11,13 +11,13 @@ end;
|
||||||
begin
|
begin
|
||||||
var a := 2;
|
var a := 2;
|
||||||
var b := 3;
|
var b := 3;
|
||||||
writelnFormat('Äî Swap a={0}, b={1}',a,b);
|
writelnFormat('До Swap a={0}, b={1}',a,b);
|
||||||
Swap(a,b);
|
Swap(a,b);
|
||||||
writelnFormat('Ïîñëå Swap a={0}, b={1}',a,b);
|
writelnFormat('После Swap a={0}, b={1}',a,b);
|
||||||
var c := 2.5;
|
var c := 2.5;
|
||||||
var d := 3.3;
|
var d := 3.3;
|
||||||
writeln;
|
writeln;
|
||||||
writelnFormat('Äî Swap c={0}, d={1}',c,d);
|
writelnFormat('До Swap c={0}, d={1}',c,d);
|
||||||
Swap(c,d);
|
Swap(c,d);
|
||||||
writelnFormat('Ïîñëå Swap c={0}, d={1}',c,d);
|
writelnFormat('После Swap c={0}, d={1}',c,d);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Вызов статического метода add класса Class1, помещенного в пространство имен ClassLibrary1
|
// Вызов статического метода add класса Class1, помещенного в пространство имен ClassLibrary1
|
||||||
// Класс Class1 помещен в библиотеку ClassLibrary1.dll, откомпилированную на C#
|
// Класс Class1 помещен в библиотеку ClassLibrary1.dll, откомпилированную на C#
|
||||||
|
|
||||||
{$reference ClassLibrary1.dll}
|
{$reference ClassLibrary1.dll}
|
||||||
uses ClassLibrary1;
|
uses ClassLibrary1;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Dll-áèáëèîòåêà
|
// Dll-библиотека
|
||||||
library MyDll;
|
library MyDll;
|
||||||
|
|
||||||
const n = 10;
|
const n = 10;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// Это - главная программа
|
// Это - главная программа
|
||||||
// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться,
|
// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться,
|
||||||
// не подключая пространства имен
|
// не подключая пространства имен
|
||||||
{$reference mydll.dll}
|
{$reference mydll.dll}
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// Âûçîâ ôóíêöèè èç îáû÷íîé dll
|
// Вызов функции из обычной dll
|
||||||
function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // îáúÿâëåíèå âíåøíåé ôóíêöèè
|
function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // объявление внешней функции
|
||||||
|
|
||||||
begin // îñíîâíàÿ ïðîãðàììà
|
begin // основная программа
|
||||||
writeln(add(2,3));
|
writeln(add(2,3));
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
uses MyUnit; // подключили модуль
|
uses MyUnit; // подключили модуль
|
||||||
|
|
||||||
var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6);
|
var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Максимальный элемент в массиве = ',Max(a));
|
writeln('Максимальный элемент в массиве = ',Max(a));
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
/// Модуль упрощенной структуры
|
/// Модуль упрощенной структуры
|
||||||
unit MyUnit; // имя модуля должно совпадать с именем файла
|
unit MyUnit; // имя модуля должно совпадать с именем файла
|
||||||
|
|
||||||
// Документирующие комментарии отображаются при наведении на имя курсора мыши
|
// Документирующие комментарии отображаются при наведении на имя курсора мыши
|
||||||
/// Возвращает максимальный элемент в массиве
|
/// Возвращает максимальный элемент в массиве
|
||||||
function Max(a: array of integer): integer;
|
function Max(a: array of integer): integer;
|
||||||
begin
|
begin
|
||||||
Result := integer.MinValue;
|
Result := integer.MinValue;
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem
|
// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem
|
||||||
uses System;
|
uses System;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
// Имя Random, определенное в пространстве имен System, перекрывает имя Random
|
// Имя Random, определенное в пространстве имен System, перекрывает имя Random
|
||||||
// в модуле PABCSystem, который неявно подключается первым
|
// в модуле PABCSystem, который неявно подключается первым
|
||||||
var r: Random := new Random();
|
var r: Random := new Random();
|
||||||
writeln(r.Next(10));
|
writeln(r.Next(10));
|
||||||
// Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится
|
// Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится
|
||||||
var i: integer := PABCSystem.Random(10);
|
var i: integer := PABCSystem.Random(10);
|
||||||
writeln(i);
|
writeln(i);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Модуль ABCObjects. Изменение свойств объекта
|
// Модуль ABCObjects. Изменение свойств объекта
|
||||||
uses ABCObjects,GraphABC;
|
uses ABCObjects,GraphABC;
|
||||||
|
|
||||||
const delay = 300;
|
const delay = 300;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Иллюстрация простейших возможностей GraphABC
|
// Иллюстрация простейших возможностей GraphABC
|
||||||
uses GraphABC;
|
uses GraphABC;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Иллюстрация обработки событий мыши
|
// Иллюстрация обработки событий мыши
|
||||||
uses GraphABC;
|
uses GraphABC;
|
||||||
|
|
||||||
procedure MouseDown(x,y,mb: integer);
|
procedure MouseDown(x,y,mb: integer);
|
||||||
|
|
@ -12,7 +12,7 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
// Привязка обработчиков к событиям
|
// Привязка обработчиков к событиям
|
||||||
OnMouseDown := MouseDown;
|
OnMouseDown := MouseDown;
|
||||||
OnMouseMove := MouseMove
|
OnMouseMove := MouseMove
|
||||||
end.
|
end.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Все типы кроме указателей - производные от Object
|
// Все типы кроме указателей - производные от Object
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
r: real;
|
r: real;
|
||||||
|
|
@ -10,5 +10,5 @@ begin
|
||||||
o := r;
|
o := r;
|
||||||
writeln(o.GetType);
|
writeln(o.GetType);
|
||||||
if o.GetType=typeof(real) then
|
if o.GetType=typeof(real) then
|
||||||
writeln('В переменной o - вещественный тип');
|
writeln('В переменной o - вещественный тип');
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
// Упаковка-распаковка размерных типов
|
// Упаковка-распаковка размерных типов
|
||||||
var
|
var
|
||||||
i: integer := 2;
|
i: integer := 2;
|
||||||
r: real := 3.14;
|
r: real := 3.14;
|
||||||
o: object;
|
o: object;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа,
|
o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа,
|
||||||
// котрый и присваивается переменной o
|
// котрый и присваивается переменной o
|
||||||
// Преобразование типов при упаковке - неявное
|
// Преобразование типов при упаковке - неявное
|
||||||
writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение
|
writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение
|
||||||
// Преобразование типов при распаковке - явное
|
// Преобразование типов при распаковке - явное
|
||||||
o := r;
|
o := r;
|
||||||
writeln(real(o));
|
writeln(real(o));
|
||||||
|
|
||||||
try // При неверном преобразовании типов генерируется исключение InvalidCastException
|
try // При неверном преобразовании типов генерируется исключение InvalidCastException
|
||||||
writeln(shortint(o));
|
writeln(shortint(o));
|
||||||
except
|
except
|
||||||
on e: Exception do
|
on e: Exception do
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
// Пример использования классового (статического) конструктора
|
// Пример использования классового (статического) конструктора
|
||||||
type
|
type
|
||||||
Person = class
|
Person = class
|
||||||
private
|
private
|
||||||
class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом.
|
class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом.
|
||||||
name: string;
|
name: string;
|
||||||
age: integer;
|
age: integer;
|
||||||
public
|
public
|
||||||
class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода
|
class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода
|
||||||
begin
|
begin
|
||||||
writeln(' Вызван классовый конструктор');
|
writeln(' Вызван классовый конструктор');
|
||||||
SetLength(arr,3);
|
SetLength(arr,3);
|
||||||
arr[0] := new Person('Иванов',20);
|
arr[0] := new Person('Иванов',20);
|
||||||
arr[1] := new Person('Петрова',19);
|
arr[1] := new Person('Петрова',19);
|
||||||
arr[2] := new Person('Попов',35);
|
arr[2] := new Person('Попов',35);
|
||||||
end;
|
end;
|
||||||
constructor (n: string; a: integer);
|
constructor (n: string; a: integer);
|
||||||
begin
|
begin
|
||||||
|
|
@ -21,16 +21,16 @@ type
|
||||||
end;
|
end;
|
||||||
function ToString: string; override;
|
function ToString: string; override;
|
||||||
begin
|
begin
|
||||||
Result := Format('Имя: {0} Возраст: {1}',name,age);
|
Result := Format('Имя: {0} Возраст: {1}',name,age);
|
||||||
end;
|
end;
|
||||||
class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям
|
class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям
|
||||||
begin
|
begin
|
||||||
Result := arr[Random(3)];
|
Result := arr[Random(3)];
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Случайные персоны');
|
writeln('Случайные персоны');
|
||||||
for var i:=1 to 5 do
|
for var i:=1 to 5 do
|
||||||
writeln(Person.RandomPerson); // Вызов классового метода
|
writeln(Person.RandomPerson); // Вызов классового метода
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Сборка мусора: для освобождения объекта присвойте переменной nil
|
// Сборка мусора: для освобождения объекта присвойте переменной nil
|
||||||
var l := new List<integer>;
|
var l := new List<integer>;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
@ -7,5 +7,5 @@ begin
|
||||||
l.Add(2);
|
l.Add(2);
|
||||||
foreach var x in l do
|
foreach var x in l do
|
||||||
Print(x);
|
Print(x);
|
||||||
l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора
|
l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Иллюстрация использования интерфейсов
|
// Иллюстрация использования интерфейсов
|
||||||
type
|
type
|
||||||
IShape = interface
|
IShape = interface
|
||||||
procedure Draw;
|
procedure Draw;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// 襄疱沭箸赅 铒屦圉栝
|
// Перегрузка операций
|
||||||
type
|
type
|
||||||
Frac = record
|
Frac = record
|
||||||
private
|
private
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,30 @@
|
||||||
// Описание методов внутри интерфейса класса
|
// Описание методов внутри интерфейса класса
|
||||||
// Удобство: методы можно реализовывать сразу после объявления
|
// Удобство: методы можно реализовывать сразу после объявления
|
||||||
// Неудобство: для больших классов интерфейс трудно читается
|
// Неудобство: для больших классов интерфейс трудно читается
|
||||||
type
|
type
|
||||||
Person = class
|
Person = class
|
||||||
private
|
private
|
||||||
// Поля класса, как правило, приватны. Доступ к ним - через методы и свойства
|
// Поля класса, как правило, приватны. Доступ к ним - через методы и свойства
|
||||||
name: string;
|
name: string;
|
||||||
age: integer;
|
age: integer;
|
||||||
public
|
public
|
||||||
// Конструктор неявно имеет имя Create
|
// Конструктор неявно имеет имя Create
|
||||||
constructor (n: string; a: integer);
|
constructor (n: string; a: integer);
|
||||||
begin
|
begin
|
||||||
name := n; age := a;
|
name := n; age := a;
|
||||||
end;
|
end;
|
||||||
procedure Print;
|
procedure Print;
|
||||||
begin
|
begin
|
||||||
writeln('Имя: ',name,' Возраст: ',age);
|
writeln('Имя: ',name,' Возраст: ',age);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var p,p1: Person;
|
var p,p1: Person;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется)
|
p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется)
|
||||||
p.Print;
|
p.Print;
|
||||||
p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется)
|
p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется)
|
||||||
p1.Print;
|
p1.Print;
|
||||||
// Деструкторы отсутствуют, вместо них - автоматическая сборка мусора
|
// Деструкторы отсутствуют, вместо них - автоматическая сборка мусора
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Иллюстрация конструкторов и методов в записях
|
// Иллюстрация конструкторов и методов в записях
|
||||||
// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln
|
// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln
|
||||||
type
|
type
|
||||||
SexType = (Male, Female);
|
SexType = (Male, Female);
|
||||||
Person = record
|
Person = record
|
||||||
|
|
@ -15,11 +15,11 @@ type
|
||||||
end;
|
end;
|
||||||
function ToString: string; override;
|
function ToString: string; override;
|
||||||
begin
|
begin
|
||||||
Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight);
|
Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln(p);
|
writeln(p);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Демонстрация создания простого класса стека на базе массива
|
// Демонстрация создания простого класса стека на базе массива
|
||||||
type
|
type
|
||||||
Stack<T> = class
|
Stack<T> = class
|
||||||
private
|
private
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Секция Where - ограничение на типы параметров
|
// Секция Where - ограничение на типы параметров
|
||||||
uses System,System.Collections.Generic;
|
uses System,System.Collections.Generic;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
@ -15,7 +15,7 @@ type
|
||||||
|
|
||||||
var
|
var
|
||||||
m: MyClass<IntArr,integer>;
|
m: MyClass<IntArr,integer>;
|
||||||
//m1: MyClass<integer>; // ошибка
|
//m1: MyClass<integer>; // ошибка
|
||||||
|
|
||||||
begin
|
begin
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Иллюстрация конструкторов и методов в записях
|
// Иллюстрация конструкторов и методов в записях
|
||||||
// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln
|
// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln
|
||||||
type
|
type
|
||||||
SexType = (Male, Female);
|
SexType = (Male, Female);
|
||||||
Person = record
|
Person = record
|
||||||
|
|
@ -15,11 +15,11 @@ type
|
||||||
end;
|
end;
|
||||||
function ToString: string; override;
|
function ToString: string; override;
|
||||||
begin
|
begin
|
||||||
Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex);
|
Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
var p: Person := new Person('Иванов',20,70,SexType.Male);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln(p);
|
writeln(p);
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,31 @@
|
||||||
Uses System;
|
Uses System;
|
||||||
|
|
||||||
var d1, d2, d3: DateTime; // Объекты для хранения даты и времени
|
var d1, d2, d3: DateTime; // Объекты для хранения даты и времени
|
||||||
ts: TimeSpan; // Объект для хранения промежутков времени
|
ts: TimeSpan; // Объект для хранения промежутков времени
|
||||||
|
|
||||||
begin
|
begin
|
||||||
// Получение текущей даты - вызов статического метода
|
// Получение текущей даты - вызов статического метода
|
||||||
d1 := DateTime.Now;
|
d1 := DateTime.Now;
|
||||||
Writeln(d1);
|
Writeln(d1);
|
||||||
|
|
||||||
// Дата и время через один месяц
|
// Дата и время через один месяц
|
||||||
d2 := d1.AddMonths(1);
|
d2 := d1.AddMonths(1);
|
||||||
Writeln(d2);
|
Writeln(d2);
|
||||||
|
|
||||||
// Дата и время на 12 часов раньше
|
// Дата и время на 12 часов раньше
|
||||||
d2 := d1.AddHours(-12);
|
d2 := d1.AddHours(-12);
|
||||||
Writeln(d2);
|
Writeln(d2);
|
||||||
|
|
||||||
// Формирование даты - вызов конструктора объекта (год, месяц,число)
|
// Формирование даты - вызов конструктора объекта (год, месяц,число)
|
||||||
d3 := new DateTime(2001, 1, 1);
|
d3 := new DateTime(2001, 1, 1);
|
||||||
Writeln(d3);
|
Writeln(d3);
|
||||||
|
|
||||||
// Определение времени, прошедшего с начала тысячелетия (разность дат)
|
// Определение времени, прошедшего с начала тысячелетия (разность дат)
|
||||||
ts := d1.Subtract(d3);
|
ts := d1.Subtract(d3);
|
||||||
|
|
||||||
// Промежуток времени в днях (результат - вещественное число)
|
// Промежуток времени в днях (результат - вещественное число)
|
||||||
Writeln(ts.TotalDays);
|
Writeln(ts.TotalDays);
|
||||||
|
|
||||||
// Промежуток времени в днях, часах, минутах и секундах
|
// Промежуток времени в днях, часах, минутах и секундах
|
||||||
Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds);
|
Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Иллюстрация использования компонента WebBrowser
|
// Иллюстрация использования компонента WebBrowser
|
||||||
{$apptype windows}
|
{$apptype windows}
|
||||||
{$reference System.Windows.Forms.dll}
|
{$reference System.Windows.Forms.dll}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора
|
// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора
|
||||||
uses System.Collections,System.Collections.Generic;
|
uses System.Collections,System.Collections.Generic;
|
||||||
|
|
||||||
procedure print(l: ICollection);
|
procedure print(l: ICollection);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Отражение типов. Выводятся все члены типа DateTime
|
// Отражение типов. Выводятся все члены типа DateTime
|
||||||
uses System,System.Reflection;
|
uses System,System.Reflection;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Создание оконного приложения
|
// Создание оконного приложения
|
||||||
{$apptype windows}
|
{$apptype windows}
|
||||||
{$reference System.Windows.Forms.dll}
|
{$reference System.Windows.Forms.dll}
|
||||||
|
|
||||||
|
|
@ -17,9 +17,9 @@ end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
myForm := new Form;
|
myForm := new Form;
|
||||||
myForm.Text := 'Оконное приложение';
|
myForm.Text := 'Оконное приложение';
|
||||||
myButton := new Button;
|
myButton := new Button;
|
||||||
myButton.Text := ' Закрыть окно ';
|
myButton.Text := ' Закрыть окно ';
|
||||||
myButton.AutoSize := True;
|
myButton.AutoSize := True;
|
||||||
myButton.Left := 90;
|
myButton.Left := 90;
|
||||||
myButton.Top := 110;
|
myButton.Top := 110;
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
// Использование вспомогательных переменных
|
// Использование вспомогательных переменных
|
||||||
var r: real;
|
var r: real;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
write('Введите r: ');
|
write('Введите r: ');
|
||||||
readln(r);
|
readln(r);
|
||||||
var r2,r4,r8: real; // вспомогательные переменные
|
var r2,r4,r8: real; // вспомогательные переменные
|
||||||
r2 := r * r;
|
r2 := r * r;
|
||||||
r4 := r2 * r2;
|
r4 := r2 * r2;
|
||||||
r8 := r4 * r4;
|
r8 := r4 * r4;
|
||||||
writeln(r,' в степени 8 = ',r8);
|
writeln(r,' в степени 8 = ',r8);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
// Перемена местами значений двух переменных с использованием третьей
|
// Перемена местами значений двух переменных с использованием третьей
|
||||||
var x,y: real;
|
var x,y: real;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
write('Введите x,y: ');
|
write('Введите x,y: ');
|
||||||
readln(x,y);
|
readln(x,y);
|
||||||
var v: real; // вспомогательная переменная
|
var v: real; // вспомогательная переменная
|
||||||
v := x;
|
v := x;
|
||||||
x := y;
|
x := y;
|
||||||
y := v;
|
y := v;
|
||||||
writeln('Новые значения x,y: ',x,' ',y);
|
writeln('Новые значения x,y: ',x,' ',y);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Присваивания += -= *= /=
|
// Присваивания += -= *= /=
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
r: real;
|
r: real;
|
||||||
|
|
@ -6,9 +6,9 @@ var
|
||||||
begin
|
begin
|
||||||
i := 1;
|
i := 1;
|
||||||
writeln('i := 1; i = ',i);
|
writeln('i := 1; i = ',i);
|
||||||
i += 2; // Увеличение на 2
|
i += 2; // Увеличение на 2
|
||||||
writeln('i += 2; i = ',i);
|
writeln('i += 2; i = ',i);
|
||||||
i *= 3; // Увеличение в 3 раза
|
i *= 3; // Увеличение в 3 раза
|
||||||
writeln('i *= 3; i = ',i);
|
writeln('i *= 3; i = ',i);
|
||||||
writeln;
|
writeln;
|
||||||
r := 6;
|
r := 6;
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
// Логический тип. Логические выражения с and, or и not
|
// Логический тип. Логические выражения с and, or и not
|
||||||
var
|
var
|
||||||
b: boolean;
|
b: boolean;
|
||||||
x: integer;
|
x: integer;
|
||||||
begin
|
begin
|
||||||
write('Введите x (от 1 до 9): ');
|
write('Введите x (от 1 до 9): ');
|
||||||
readln(x);
|
readln(x);
|
||||||
b := x=5;
|
b := x=5;
|
||||||
writeln('x=5? ',b);
|
writeln('x=5? ',b);
|
||||||
b := (x>=3) and (x<=5);
|
b := (x>=3) and (x<=5);
|
||||||
writeln('x=3,4 или 5? ',b);
|
writeln('x=3,4 или 5? ',b);
|
||||||
b := (x=3) or (x=4) or (x=5);
|
b := (x=3) or (x=4) or (x=5);
|
||||||
writeln('x=3,4 или 5? ',b);
|
writeln('x=3,4 или 5? ',b);
|
||||||
b := not Odd(x);
|
b := not Odd(x);
|
||||||
writeln('x - четное? ',b);
|
writeln('x - четное? ',b);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Вывод результатов вычислений
|
// Вывод результатов вычислений
|
||||||
begin
|
begin
|
||||||
writeln('Вычисления:');
|
writeln('Вычисления:');
|
||||||
// Вывод пустой строки
|
// Вывод пустой строки
|
||||||
writeln;
|
writeln;
|
||||||
writeln('121 + 363 = ',121+363);
|
writeln('121 + 363 = ',121+363);
|
||||||
writeln('121 - 363 = ',121-363);
|
writeln('121 - 363 = ',121-363);
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
// Вывод результатов вычислений. Используются именованные константы
|
// Вывод результатов вычислений. Используются именованные константы
|
||||||
const
|
const
|
||||||
a = 121;
|
a = 121;
|
||||||
b = 363;
|
b = 363;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Вычисления:');
|
writeln('Вычисления:');
|
||||||
writeln;
|
writeln;
|
||||||
writeln(a,' + ',b,' = ',a+b);
|
writeln(a,' + ',b,' = ',a+b);
|
||||||
writeln(a,' - ',b,' = ',a-b);
|
writeln(a,' - ',b,' = ',a-b);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Вывод результатов вычислений. Используются переменные и процедура ввода
|
// Вывод результатов вычислений. Используются переменные и процедура ввода
|
||||||
var a,b: integer;
|
var a,b: integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeln('Введите a и b:');
|
writeln('Введите a и b:');
|
||||||
readln(a,b);
|
readln(a,b);
|
||||||
writeln;
|
writeln;
|
||||||
writeln(a,' + ',b,' = ',a+b);
|
writeln(a,' + ',b,' = ',a+b);
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
// Îďĺđŕöčč div č mod
|
// Операции div и mod
|
||||||
var a: integer;
|
var a: integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
write('Ââĺäčňĺ a: ');
|
write('Введите a: ');
|
||||||
readln(a);
|
readln(a);
|
||||||
writeln('Ďîńëĺäí˙˙ öčôđŕ ÷čńëŕ: ',a mod 10);
|
writeln('Последняя цифра числа: ',a mod 10);
|
||||||
writeln('×čńëî áĺç ďîńëĺäíĺé öčôđű: ',a div 10);
|
writeln('Число без последней цифры: ',a div 10);
|
||||||
writeln('Ĺńëč ÷čńëî a ÷ĺňíî, ňî 0: ',a mod 2);
|
writeln('Если число a четно, то 0: ',a mod 2);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
// Операции div и mod
|
// Операции div и mod
|
||||||
var a: integer := 247;
|
var a: integer := 247;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
write('Цифры числа в обратном порядке: ');
|
write('Цифры числа в обратном порядке: ');
|
||||||
// Выводим последнюю цифру
|
// Выводим последнюю цифру
|
||||||
write(a mod 10,' ');
|
write(a mod 10,' ');
|
||||||
// Отбрасываем последнюю цифру
|
// Отбрасываем последнюю цифру
|
||||||
a := a div 10;
|
a := a div 10;
|
||||||
write(a mod 10,' ');
|
write(a mod 10,' ');
|
||||||
a := a div 10;
|
a := a div 10;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Демонстрация работы функции eof. Запускать по Shift-F9
|
// Демонстрация работы функции eof. Запускать по Shift-F9
|
||||||
var s: char;
|
var s: char;
|
||||||
begin
|
begin
|
||||||
while not eof do
|
while not eof do
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Демонстрация работы функции eoln
|
// Демонстрация работы функции eoln
|
||||||
begin
|
begin
|
||||||
while not eoln do
|
while not eoln do
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Первая программа
|
// Первая программа
|
||||||
program HelloWorld;
|
program HelloWorld;
|
||||||
begin
|
begin
|
||||||
writeln('Привет, мир!');
|
writeln('Привет, мир!');
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
// Генерация случайного числа
|
// Генерация случайного числа
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
r: real;
|
r: real;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
i := Random(100);
|
i := Random(100);
|
||||||
writeln('Случайное целое в диапазоне 0..99: ',i);
|
writeln('Случайное целое в диапазоне 0..99: ',i);
|
||||||
i := Random(2,5);
|
i := Random(2,5);
|
||||||
writeln('Случайное целое в диапазоне 2..5: ',i);
|
writeln('Случайное целое в диапазоне 2..5: ',i);
|
||||||
r := Random;
|
r := Random;
|
||||||
writeln('Случайное вещественное в диапазоне [0,1): ',r);
|
writeln('Случайное вещественное в диапазоне [0,1): ',r);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
// Бросание кубиков
|
// Бросание кубиков
|
||||||
|
|
||||||
var k1,k2: integer;
|
var k1,k2: integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
k1 := Random(1,6);
|
k1 := Random(1,6);
|
||||||
k2 := Random(1,6);
|
k2 := Random(1,6);
|
||||||
writeln('Очки на кубиках: ',k1,' ',k2);
|
writeln('Очки на кубиках: ',k1,' ',k2);
|
||||||
writeln('Сумма очков: ',k1+k2);
|
writeln('Сумма очков: ',k1+k2);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Ввод строки
|
// Ввод строки
|
||||||
var s: string;
|
var s: string;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
write('Введите Ваше имя: ');
|
write('Введите Ваше имя: ');
|
||||||
readln(s);
|
readln(s);
|
||||||
writeln('Здравствуйте, ',s);
|
writeln('Здравствуйте, ',s);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// Демонстрация операции shl
|
// Демонстрация операции shl
|
||||||
begin
|
begin
|
||||||
writeln('Степени двойки');
|
writeln('Степени двойки');
|
||||||
writeln(' n 2^n');
|
writeln(' n 2^n');
|
||||||
for var i:=0 to 30 do
|
for var i:=0 to 30 do
|
||||||
writeln(i:2,(1 shl i):12);
|
writeln(i:2,(1 shl i):12);
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
// Стандартные функции
|
// Стандартные функции
|
||||||
var x: real;
|
var x: real;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
write('Введите x: ');
|
write('Введите x: ');
|
||||||
readln(x);
|
readln(x);
|
||||||
writeln('Квадрат ',x,' равен ',sqr(x));
|
writeln('Квадрат ',x,' равен ',sqr(x));
|
||||||
writeln(x,' в степени 5 равно ',power(x,5));
|
writeln(x,' в степени 5 равно ',power(x,5));
|
||||||
writeln('Квадратный корень из ',x,' равен ',sqrt(x));
|
writeln('Квадратный корень из ',x,' равен ',sqrt(x));
|
||||||
writeln('Модуль ',x,' равен ',abs(x));
|
writeln('Модуль ',x,' равен ',abs(x));
|
||||||
writeln('Натуральный логарифм ',x,' равен ',ln(x));
|
writeln('Натуральный логарифм ',x,' равен ',ln(x));
|
||||||
writeln('Синус ',x,' равен ',sin(x));
|
writeln('Синус ',x,' равен ',sin(x));
|
||||||
writeln('Косинус ',x,' равен ',cos(x));
|
writeln('Косинус ',x,' равен ',cos(x));
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
/// Ñòàíäàðòíûå ðàçìåðíûå òèïû äàííûõ è èõ ðàçìåð
|
/// Стандартные размерные типы данных и их размер
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
j: shortint;
|
j: shortint;
|
||||||
k: smallint;
|
k: smallint;
|
||||||
l: longint; // ñèíîíèì integer
|
l: longint; // синоним integer
|
||||||
i64: int64;
|
i64: int64;
|
||||||
b: byte;
|
b: byte;
|
||||||
w: word;
|
w: word;
|
||||||
lw: longword;
|
lw: longword;
|
||||||
car: cardinal; // ñèíîíèì longword
|
car: cardinal; // синоним longword
|
||||||
ui64: uint64;
|
ui64: uint64;
|
||||||
r: real;
|
r: real;
|
||||||
d: double; // ñèíîíèì real
|
d: double; // синоним real
|
||||||
sn: single;
|
sn: single;
|
||||||
c: char;
|
c: char;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Сложение строк
|
// Сложение строк
|
||||||
var s1: string := 'Pascal';
|
var s1: string := 'Pascal';
|
||||||
var s2: string := 'NET';
|
var s2: string := 'NET';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
/// Использование процедуры WritelnFormat
|
/// Использование процедуры WritelnFormat
|
||||||
begin
|
begin
|
||||||
// Вывод в обратном порядке
|
// Вывод в обратном порядке
|
||||||
WritelnFormat('{2},{1},{0}',1,2,3);
|
WritelnFormat('{2},{1},{0}',1,2,3);
|
||||||
// Вывод фигурных скобочек
|
// Вывод фигурных скобочек
|
||||||
WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке');
|
WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке');
|
||||||
// Задание количества знаков после запятой для вещественного числа
|
// Задание количества знаков после запятой для вещественного числа
|
||||||
WritelnFormat('{0:f3}',3.1415);
|
WritelnFormat('{0:f3}',3.1415);
|
||||||
// Задание ширины поля вывода
|
// Задание ширины поля вывода
|
||||||
WritelnFormat('{0,10:f}',3.1415);
|
WritelnFormat('{0,10:f}',3.1415);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Исправьте ошибку компиляции.
|
// Исправьте ошибку компиляции.
|
||||||
// Обратите внимание, что курсор позиционируется в конце слова, вызвавшего ошибку
|
// Обратите внимание, что курсор позиционируется в конце слова, вызвавшего ошибку
|
||||||
var i: integer
|
var i: integer
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Исправьте ошибки компиляции. Опишите переменную r
|
// Исправьте ошибки компиляции. Опишите переменную r
|
||||||
begin
|
begin
|
||||||
r := 2.5;
|
r := 2.5;
|
||||||
witeln(r);
|
witeln(r);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Исправьте ошибку компиляции. Не всегда надо "верить" тексту ошибки
|
// Исправьте ошибку компиляции. Не всегда надо "верить" тексту ошибки
|
||||||
|
|
||||||
var k: real;
|
var k: real;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Исправьте ошибки компиляции, изменив тип переменной x
|
// Исправьте ошибки компиляции, изменив тип переменной x
|
||||||
var x: integer;
|
var x: integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// Введите не число
|
// Введите не число
|
||||||
// Посмотрите, как выглядит ошибка при выполнении программы
|
// Посмотрите, как выглядит ошибка при выполнении программы
|
||||||
var i: integer;
|
var i: integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Посмотрите, как выглядит ошибка выполнения при целочисленном делении на 0
|
// Посмотрите, как выглядит ошибка выполнения при целочисленном делении на 0
|
||||||
var i: integer := 0;
|
var i: integer := 0;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// При обычном делении на 0 ошибки не возникает
|
// При обычном делении на 0 ошибки не возникает
|
||||||
var r: real := 0;
|
var r: real := 0;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// При работе с вещественными числами невозможно получить ошибку выполнения
|
// При работе с вещественными числами невозможно получить ошибку выполнения
|
||||||
begin
|
begin
|
||||||
writeln(sqrt(-1));
|
writeln(sqrt(-1));
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// Исполнитель Чертежник - отличное средство для начального обучения программированию
|
// Исполнитель Чертежник - отличное средство для начального обучения программированию
|
||||||
// школьников младших и средних классов
|
// школьников младших и средних классов
|
||||||
// Для генерации шаблона задания нажмите Ctrl-L и наберите DM и имя задания
|
// Для генерации шаблона задания нажмите Ctrl-L и наберите DM и имя задания
|
||||||
uses Drawman;
|
uses Drawman;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// Исполнитель Робот - отличное средство для начального обучения программированию
|
// Исполнитель Робот - отличное средство для начального обучения программированию
|
||||||
// школьников младших и средних классов
|
// школьников младших и средних классов
|
||||||
// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания
|
// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания
|
||||||
uses Robot;
|
uses Robot;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Графика. Линии. Размеры окна. Заголовок окна
|
// Графика. Линии. Размеры окна. Заголовок окна
|
||||||
uses GraphABC;
|
uses GraphABC;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Window.Title := 'Первая графическая программа';
|
Window.Title := 'Первая графическая программа';
|
||||||
Line(0,0,Window.Width-1,Window.Height-1);
|
Line(0,0,Window.Width-1,Window.Height-1);
|
||||||
Line(0,Window.Height-1,Window.Width-1,0);
|
Line(0,Window.Height-1,Window.Width-1,0);
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Графика. Точка. Случайный цвет. Скорость работы
|
// Графика. Точка. Случайный цвет. Скорость работы
|
||||||
uses GraphABC,Utils;
|
uses GraphABC,Utils;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
for var i:=1 to 100000 do
|
for var i:=1 to 100000 do
|
||||||
SetPixel(Random(Window.Width),Random(Window.Height),clRandom);
|
SetPixel(Random(Window.Width),Random(Window.Height),clRandom);
|
||||||
writeln('Время работы: ',Milliseconds/1000,' секунд');
|
writeln('Время работы: ',Milliseconds/1000,' секунд');
|
||||||
end.
|
end.
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Графика. Свойства кисти и пера
|
// Графика. Свойства кисти и пера
|
||||||
uses GraphABC;
|
uses GraphABC;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Window.Title := 'Свойства кисти и пера';
|
Window.Title := 'Свойства кисти и пера';
|
||||||
Pen.Color := Color.Red;
|
Pen.Color := Color.Red;
|
||||||
Pen.Width := 3;
|
Pen.Width := 3;
|
||||||
Pen.Style := psDashDot;
|
Pen.Style := psDashDot;
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Графика. Draw и Fill - процедуры
|
// Графика. Draw и Fill - процедуры
|
||||||
uses GraphABC;
|
uses GraphABC;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Window.Title := 'Draw и Fill - процедуры';
|
Window.Title := 'Draw и Fill - процедуры';
|
||||||
for var i := 1 to 100 do
|
for var i := 1 to 100 do
|
||||||
begin
|
begin
|
||||||
Pen.Color := clRandom;
|
Pen.Color := clRandom;
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
// Ăđŕôčęŕ. Pie
|
// Графика. Pie
|
||||||
uses GraphABC;
|
uses GraphABC;
|
||||||
|
|
||||||
const r = 200;
|
const r = 200;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Window.Title := 'Ęđóăîâŕ˙ ăčńňîăđŕěěŕ';
|
Window.Title := 'Круговая гистограмма';
|
||||||
var x := Window.Center.X;
|
var x := Window.Center.X;
|
||||||
var y := Window.Center.Y;
|
var y := Window.Center.Y;
|
||||||
Brush.Color := clRandom;
|
Brush.Color := clRandom;
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// Графика. Прозрачность
|
// Графика. Прозрачность
|
||||||
uses GraphABC;
|
uses GraphABC;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Window.Title := 'Демонстрация прозрачности';
|
Window.Title := 'Демонстрация прозрачности';
|
||||||
|
|
||||||
Brush.Color := clRed;
|
Brush.Color := clRed;
|
||||||
FillRectangle(50,50,100,Window.Height - 50);
|
FillRectangle(50,50,100,Window.Height - 50);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Графика. Сохраниение изображения графического окна в файл и загрузка из файла
|
// Графика. Сохраниение изображения графического окна в файл и загрузка из файла
|
||||||
uses GraphABC;
|
uses GraphABC;
|
||||||
|
|
||||||
const
|
const
|
||||||
|
|
@ -6,7 +6,7 @@ const
|
||||||
filename = 'GraphWindow.bmp';
|
filename = 'GraphWindow.bmp';
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Window.Title := 'Window.Save и Window.Load';
|
Window.Title := 'Window.Save и Window.Load';
|
||||||
SetWindowSize(320,240);
|
SetWindowSize(320,240);
|
||||||
|
|
||||||
for var x:=0 to Window.Width - 1 do
|
for var x:=0 to Window.Width - 1 do
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
// Графика. Сглаживание
|
// Графика. Сглаживание
|
||||||
uses GraphABC;
|
uses GraphABC;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Window.Title := 'Демонстрация сглаживания';
|
Window.Title := 'Демонстрация сглаживания';
|
||||||
TextOut(40,20,'Со сглаживанием');
|
TextOut(40,20,'Со сглаживанием');
|
||||||
Pen.Width := 2;
|
Pen.Width := 2;
|
||||||
|
|
||||||
Ellipse(40,60,300,200);
|
Ellipse(40,60,300,200);
|
||||||
|
|
@ -11,7 +11,7 @@ begin
|
||||||
Line(600,130,340,200);
|
Line(600,130,340,200);
|
||||||
|
|
||||||
SetSmoothingOff;
|
SetSmoothingOff;
|
||||||
TextOut(40,240,'Без сглаживания');
|
TextOut(40,240,'Без сглаживания');
|
||||||
Ellipse(40,280,300,420);
|
Ellipse(40,280,300,420);
|
||||||
Line(340,280,600,350);
|
Line(340,280,600,350);
|
||||||
Line(600,350,340,420);
|
Line(600,350,340,420);
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue