bug fix issue #38

This commit is contained in:
Бондарев Иван 2016-01-03 11:25:01 +01:00
parent fd2ffcdf44
commit b4094c0b7e
3 changed files with 110 additions and 20 deletions

View file

@ -580,16 +580,18 @@ function ClientRectangle: System.Drawing.Rectangle;
//------------------------------------------
//// Рисование графиков функций
//------------------------------------------
/// Рисует график функции f на отрезке [a,b] в прямоугольнике, задаваемом координатами x1,y1,x2,y2,
procedure Draw(f: Func<real,real>; a,b: real; x1,y1,x2,y2: integer);
/// Рисует график функции f на отрезке [a,b] в прямоугольнике r
procedure Draw(f: Func<real,real>; a,b: real; r: System.Drawing.Rectangle);
/// Рисует график функции f на отрезке [-5,5] в прямоугольнике r
procedure Draw(f: Func<real,real>; r: System.Drawing.Rectangle);
/// Рисует график функции f на отрезке [a,b] на полное графическое окно
procedure Draw(f: Func<real,real>; a,b: real);
/// Рисует график функции f на отрезке [-5,5] на полное графическое окно
procedure Draw(f: Func<real,real>);
/// Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, в прямоугольнике, задаваемом координатами x1,y1,x2,y2,
procedure Draw(f: real -> real; a,b,min,max: real; x1,y1,x2,y2: integer);
/// Рисует график функции f, заданной на отрезке [a,b], в прямоугольнике, задаваемом координатами x1,y1,x2,y2,
procedure Draw(f: real -> real; a,b: real; x1,y1,x2,y2: integer);
/// Рисует график функции f, заданной на отрезке [a,b], в прямоугольнике r
procedure Draw(f: real -> real; a,b: real; r: System.Drawing.Rectangle);
/// Рисует график функции f, заданной на отрезке [-5,5], в прямоугольнике r
procedure Draw(f: real -> real; r: System.Drawing.Rectangle);
/// Рисует график функции f, заданной на отрезке [a,b], на полное графическое окно
procedure Draw(f: real -> real; a,b: real);
/// Рисует график функции f, заданной на отрезке [-5,5], на полное графическое окно
procedure Draw(f: real -> real);
//------------------------------------------
//// Рисование изображений
@ -3490,7 +3492,7 @@ end;
type FS = auto class
mx,my,a,max: real;
x0,y0: integer;
f: Func<real,real>;
f: real -> real;
function Apply(x: real): Point;
begin
@ -3498,7 +3500,15 @@ type FS = auto class
end;
end;
procedure Draw(f: Func<real,real>; a,b: real; x1,y1,x2,y2: integer);
procedure Draw(f: real -> real; a,b,min,max: real; x1,y1,x2,y2: integer);
begin
Rectangle(x1,y1,x2+1,y2+1);
var n := (x2-x1) div 3;
var fso := new FS((x2-x1)/(b-a),(y2-y1)/(max-min),a,max,x1,y1,f);
Polyline(Range(a,b,n).Select(fso.Apply).ToArray)
end;
procedure Draw(f: real -> real; a,b: real; x1,y1,x2,y2: integer);
begin
Rectangle(x1,y1,x2+1,y2+1);
var n := (x2-x1) div 3;
@ -3508,7 +3518,7 @@ begin
Polyline(Range(a,b,n).Select(fso.Apply).ToArray)
end;
procedure Draw(f: Func<real,real>; a,b: real; r: System.Drawing.Rectangle);
procedure Draw(f: real -> real; a,b: real; r: System.Drawing.Rectangle);
var x1 := r.X; y1 := r.Y;
x2 := r.X+r.Width-1;
y2 := r.Y+r.Height-1;
@ -3516,12 +3526,12 @@ begin
Draw(f,a,b,x1,y1,x2,y2);
end;
procedure Draw(f: Func<real,real>; r: System.Drawing.Rectangle);
procedure Draw(f: real -> real; r: System.Drawing.Rectangle);
begin
Draw(f,-5,5,r);
end;
procedure Draw(f: Func<real,real>; a,b: real);
procedure Draw(f: real -> real; a,b: real);
var x1 := 0; y1 := 0;
x2 := Window.Width-1;
y2 := Window.Height-1;
@ -3529,7 +3539,7 @@ begin
Draw(f,a,b,x1,y1,x2,y2);
end;
procedure Draw(f: Func<real,real>);
procedure Draw(f: real -> real);
begin
Draw(f,-5,5);
end;

View file

@ -1155,8 +1155,12 @@ function Power(x, y: integer): real;
function Power(x: BigInteger; y: integer): BigInteger;
/// Возвращает x, округленное до ближайшего целого
function Round(x: real): integer;
/// Возвращает целую часть числа x
/// Возвращает x, округленное до ближайшего большого целого
function RoundBigInteger(x: real): BigInteger;
/// Возвращает целую часть вещественного числа x
function Trunc(x: real): integer;
/// Возвращает целую часть вещественного числа x как BigInteger
function TruncBigInteger(x: real): BigInteger;
/// Возвращает целую часть числа x
function Int(x: real): real;
/// Возвращает дробную часть числа x
@ -2977,6 +2981,66 @@ end;
//------------------------------------------------------------------------------
// Extension methods for BigInteger
//------------------------------------------------------------------------------
function BigInteger.operator>(p: BigInteger; q: integer): boolean;
begin
Result := p > BigInteger.Create(q);
end;
function BigInteger.operator>(p: integer; q: BigInteger): boolean;
begin
Result := BigInteger.Create(p) > q;
end;
function BigInteger.operator<(p: BigInteger; q: integer): boolean;
begin
Result := p < BigInteger.Create(q);
end;
function BigInteger.operator<(p: integer; q: BigInteger): boolean;
begin
Result := BigInteger.Create(p) < q;
end;
function BigInteger.operator>=(p: BigInteger; q: integer): boolean;
begin
Result := p >= BigInteger.Create(q);
end;
function BigInteger.operator>=(p: integer; q: BigInteger): boolean;
begin
Result := BigInteger.Create(p) >= q;
end;
function BigInteger.operator<=(p: BigInteger; q: integer): boolean;
begin
Result := p <= BigInteger.Create(q);
end;
function BigInteger.operator<=(p: integer; q: BigInteger): boolean;
begin
Result := BigInteger.Create(p) <= q;
end;
function BigInteger.operator=(p: BigInteger; q: integer): boolean;
begin
Result := p = BigInteger.Create(q);
end;
function BigInteger.operator=(p: integer; q: BigInteger): boolean;
begin
Result := BigInteger.Create(p) = q;
end;
function BigInteger.operator<>(p: BigInteger; q: integer): boolean;
begin
Result := p <> BigInteger.Create(q);
end;
function BigInteger.operator<>(p: integer; q: BigInteger): boolean;
begin
Result := BigInteger.Create(p) <> q;
end;
procedure BigInteger.operator+=(var p: BigInteger; q: BigInteger);
begin
p := p + q;
@ -6095,11 +6159,21 @@ begin
Result := Convert.ToInt32(Math.Round(x));
end;
function RoundBigInteger(x: real): BigInteger;
begin
Result := BigInteger.Create(Math.Round(x));
end;
function Trunc(x: real): integer;
begin
Result := Convert.ToInt32(Math.Truncate(x));
end;
function TruncBigInteger(x: real): BigInteger;
begin
Result := BigInteger.Create(Math.Truncate(x));
end;
function Int(x: real): real;
begin
//if x>=0 then
@ -7169,7 +7243,7 @@ begin
end;
//------------------------------------------------------------------------------
// char ext
// char методы расширения
//------------------------------------------------------------------------------
// Преобразовать символ в цифру
function char.ToDigit(self: char): integer; extensionmethod;
@ -7230,7 +7304,7 @@ begin
end;
//------------------------------------------------------------------------------
// string ext
// string методы расширения
//------------------------------------------------------------------------------
/// Преобразует строку в целое
function string.ToInteger: integer;
@ -7238,6 +7312,12 @@ begin
Result := integer.Parse(Self);
end;
/// Преобразует строку в BigInteger
function string.ToBigInteger: BigInteger;
begin
Result := BigInteger.Parse(Self);
end;
/// Преобразует строку в вещественное
function string.ToReal: real;
begin

View file

@ -16102,7 +16102,7 @@ namespace PascalABCCompiler.TreeConverter
public List<type_node> visit_type_list_with_check(List<SyntaxTree.type_definition> types, List<generic_parameter_eliminations> gpe_list, bool where_checking)
{
List<type_node> tparams = new List<type_node>();
foreach (SyntaxTree.named_type_reference id in types)
foreach (SyntaxTree.type_definition id in types)
{
type_node tn = ret.visit(id);
CompilationErrorWithLocation not_useful = generic_parameter_eliminations.check_type_generic_useful(tn, get_location(id));