change encoding for all *.pas and *.cs files: cp1251 -> utf-8

This commit is contained in:
Artem Pelenitsyn 2015-12-28 14:25:15 +03:00
parent 8b3e964efc
commit 49378a6750
1765 changed files with 17107 additions and 17107 deletions

View file

@ -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
{ {

View file

@ -76,7 +76,7 @@ namespace PascalABCCompiler.SemanticTreeConverters
} }
catch (Exception) catch (Exception)
{ {
//если dll не нетовская //если dll не нетовская
} }
} }

View file

@ -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)

View file

@ -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;

View file

@ -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);

View file

@ -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>();

View file

@ -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;

View file

@ -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.

View file

@ -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;

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -1,4 +1,4 @@
/// Âûâîä ñ ïîìîùüþ Print /// Вывод с помощью Print
begin begin
Print(1,2,3) Print(1,2,3)
end. end.

View file

@ -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.

View file

@ -1,4 +1,4 @@
// При работе с вещественными числами невозможно получить ошибку выполнения // При работе с вещественными числами невозможно получить ошибку выполнения
begin begin
writeln(1/0); writeln(1/0);
writeln(sqrt(-1)); writeln(sqrt(-1));

View file

@ -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.

View file

@ -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;

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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

View file

@ -1,4 +1,4 @@
// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы // Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы
type type
A = class A = class
i: integer; i: integer;

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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);

View file

@ -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;

View file

@ -1,4 +1,4 @@
// Перегрузка имен подпрограмм // Перегрузка имен подпрограмм
procedure proc(i: integer); procedure proc(i: integer);
begin begin
writeln('integer'); writeln('integer');

View file

@ -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;

View file

@ -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.

View file

@ -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;

View file

@ -1,4 +1,4 @@
// Dll-áèáëèîòåêà // Dll-библиотека
library MyDll; library MyDll;
const n = 10; const n = 10;

View file

@ -1,6 +1,6 @@
// Это - главная программа // Это - главная программа
// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться, // Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться,
// не подключая пространства имен // не подключая пространства имен
{$reference mydll.dll} {$reference mydll.dll}
begin begin

View file

@ -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.

View file

@ -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.

View file

@ -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;

View file

@ -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.

View file

@ -1,4 +1,4 @@
// Модуль ABCObjects. Изменение свойств объекта // Модуль ABCObjects. Изменение свойств объекта
uses ABCObjects,GraphABC; uses ABCObjects,GraphABC;
const delay = 300; const delay = 300;

View file

@ -1,4 +1,4 @@
// Иллюстрация простейших возможностей GraphABC // Иллюстрация простейших возможностей GraphABC
uses GraphABC; uses GraphABC;
begin begin

View file

@ -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.

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -1,4 +1,4 @@
// Иллюстрация использования интерфейсов // Иллюстрация использования интерфейсов
type type
IShape = interface IShape = interface
procedure Draw; procedure Draw;

View file

@ -1,4 +1,4 @@
// 襄疱沭箸赅 铒屦圉栝 // Перегрузка операций
type type
Frac = record Frac = record
private private

View file

@ -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.

View file

@ -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);

View file

@ -1,4 +1,4 @@
// Демонстрация создания простого класса стека на базе массива // Демонстрация создания простого класса стека на базе массива
type type
Stack<T> = class Stack<T> = class
private private

View file

@ -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.

View file

@ -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);

View file

@ -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.

View file

@ -1,4 +1,4 @@
// Иллюстрация использования компонента WebBrowser // Иллюстрация использования компонента WebBrowser
{$apptype windows} {$apptype windows}
{$reference System.Windows.Forms.dll} {$reference System.Windows.Forms.dll}

View file

@ -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);

View file

@ -1,4 +1,4 @@
// Отражение типов. Выводятся все члены типа DateTime // Отражение типов. Выводятся все члены типа DateTime
uses System,System.Reflection; uses System,System.Reflection;
begin begin

View file

@ -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;

View file

@ -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.

View file

@ -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.

View file

@ -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;

View file

@ -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.

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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.

View file

@ -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;

View file

@ -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

View file

@ -1,4 +1,4 @@
// Демонстрация работы функции eoln // Демонстрация работы функции eoln
begin begin
while not eoln do while not eoln do
begin begin

View file

@ -1,5 +1,5 @@
// Первая программа // Первая программа
program HelloWorld; program HelloWorld;
begin begin
writeln('Привет, мир!'); writeln('Привет, мир!');
end. end.

View file

@ -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.

View file

@ -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.

View file

@ -1,8 +1,8 @@
// Ввод строки // Ввод строки
var s: string; var s: string;
begin begin
write('Введите Ваше имя: '); write('Введите Ваше имя: ');
readln(s); readln(s);
writeln('Здравствуйте, ',s); writeln('Здравствуйте, ',s);
end. end.

View file

@ -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);

View file

@ -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.

View file

@ -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;

View file

@ -1,4 +1,4 @@
// Сложение строк // Сложение строк
var s1: string := 'Pascal'; var s1: string := 'Pascal';
var s2: string := 'NET'; var s2: string := 'NET';

View file

@ -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.

View file

@ -1,5 +1,5 @@
// Исправьте ошибку компиляции. // Исправьте ошибку компиляции.
// Обратите внимание, что курсор позиционируется в конце слова, вызвавшего ошибку // Обратите внимание, что курсор позиционируется в конце слова, вызвавшего ошибку
var i: integer var i: integer
begin begin

View file

@ -1,4 +1,4 @@
// Исправьте ошибки компиляции. Опишите переменную r // Исправьте ошибки компиляции. Опишите переменную r
begin begin
r := 2.5; r := 2.5;
witeln(r); witeln(r);

View file

@ -1,4 +1,4 @@
// Исправьте ошибку компиляции. Не всегда надо "верить" тексту ошибки // Исправьте ошибку компиляции. Не всегда надо "верить" тексту ошибки
var k: real; var k: real;

View file

@ -1,4 +1,4 @@
// Исправьте ошибки компиляции, изменив тип переменной x // Исправьте ошибки компиляции, изменив тип переменной x
var x: integer; var x: integer;
begin begin

View file

@ -1,5 +1,5 @@
// Введите не число // Введите не число
// Посмотрите, как выглядит ошибка при выполнении программы // Посмотрите, как выглядит ошибка при выполнении программы
var i: integer; var i: integer;
begin begin

View file

@ -1,4 +1,4 @@
// Посмотрите, как выглядит ошибка выполнения при целочисленном делении на 0 // Посмотрите, как выглядит ошибка выполнения при целочисленном делении на 0
var i: integer := 0; var i: integer := 0;
begin begin

View file

@ -1,4 +1,4 @@
// При обычном делении на 0 ошибки не возникает // При обычном делении на 0 ошибки не возникает
var r: real := 0; var r: real := 0;
begin begin

View file

@ -1,4 +1,4 @@
// При работе с вещественными числами невозможно получить ошибку выполнения // При работе с вещественными числами невозможно получить ошибку выполнения
begin begin
writeln(sqrt(-1)); writeln(sqrt(-1));
end. end.

View file

@ -1,6 +1,6 @@
// Исполнитель Чертежник - отличное средство для начального обучения программированию // Исполнитель Чертежник - отличное средство для начального обучения программированию
// школьников младших и средних классов // школьников младших и средних классов
// Для генерации шаблона задания нажмите Ctrl-L и наберите DM и имя задания // Для генерации шаблона задания нажмите Ctrl-L и наберите DM и имя задания
uses Drawman; uses Drawman;
begin begin

View file

@ -1,6 +1,6 @@
// Исполнитель Робот - отличное средство для начального обучения программированию // Исполнитель Робот - отличное средство для начального обучения программированию
// школьников младших и средних классов // школьников младших и средних классов
// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания // Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания
uses Robot; uses Robot;
begin begin

View file

@ -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.

View file

@ -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.

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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

View file

@ -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