|
FAQ Часто задаваемые вопросы |
14.12.2005, 22:41
|
#1
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Вот пара функций, как напишу еще обязательно сюда пришлю.
1. Функция заменяющая в строке Str символы Chr1 на симвлолы Chr2
Function Repl(Str:String;Chr1,Chr2:Char):String;
var i:integer;
Begin
For i:=0 to Length(Str)-1 do
*If GetChar(str,i)=Chr1 then Str:=SetChar(str,Chr2,i)
*Repl:=Str;
End;
2. Функция возвращающая строку длинной Num из символов Chr
Function CreateCharStr(Chr:Char;Num:integer):String;
var i:integer;
*s:string;
Begin
S:='';
For i:=1 to Num do
*S:=S+Chr;
*CreateCharStr:=S;
End;
|
(Offline)
|
|
14.12.2005, 22:42
|
#2
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Вот две функции возвращающие знак числа:
Function ISgn(Val:Integer):Integer;
Begin
if val=0 then ISgn:=1 else
ISgn:=Val/Abs(Val);
End;
Function RSgn(Val:Real):Real;
Begin
if val=0 then RSgn:=1 else
RSgn:=Val/RAbs(Val);
End;
|
(Offline)
|
|
15.12.2005, 21:06
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ну вроде написал функции преобразования типа Real в тип String и обратно .
Правда работают немного не точно даж не знаю почему... если найдете ошибку, то исправьте пожалуйста.
1. Эта для того чтобы была
Function IntToReal(Val:Integer):Real;
Begin
IntToReal:=Val;
End;
2. X в положительной целочисленной степени
Function XStepY(X:Real;Y:Integer):Real;
var i:integer;
s:Real;
Begin
s:=1;
If Y>0 then
for i:=1 to Y do s:=s*x
else
If Y=0 then
S:=1
else
for i:=-1 downto Y do S:=S/X;
XStepY:=S;
End;
3. X в целочисленной степени
Function XStepY(X:Real;Y:Integer):Real;
var i,s:integer;
Begin
s:=1;
If Y>0 then
*for i:=1 to Y do s:=s*x
else
*If Y=0 then
* s:=1
*else
* * for i:=-1 downto Y do s:=s/x;;
XStepY:=s;
End;
4. Вещественное число в строку
Function RealToString(Val:Real):String;
Var I,N:Integer;
A,B:real;
S,Sgn:string;
Begin
S:='';
If Val>0 then
Sgn:=''
else
Begin
Sgn:='-';
Val:=-Val;
End;
A := Val-Frac(Val);
B := Val-A;
S:=Sgn + IntegerToString(Trunc(A))+ '.';
For I:=1 to 5 do
Begin
A:=B*XStepPY(10,I);
A:=A-Frac(A);
S:=S+IntegerToString(Trunc(A));
A:=A/XStepPY(10,I);
B:=B-A;
end;
RealToString:=S;
end;
5. Строку в вещественное число
Function String2Real(Val:String):Real;
Var P,i,Sgn,C:Integer;
*A,B:real;
*S,S1:string;
Begin
A:=0;B:=0; C:=0;
S:=Repl(Val,',','.');
P:=Pos(S,'.');
if (GetChar(S,0)<>'-') then Sgn:=1 else Begin Sgn:=-1; C:=1; end;
If P>=0 Then
*Begin
* S1:=Copy(S,C,P);
* for i:=Length(S1) downto 0 do
* *A:=A+StringToInteger(GetChar(S1,I))*IntToReal(XStepPY(10,Length(S1)-I-1));
*
* S1:=Copy(S,P+1,Length(S));
* for i:=0 to Length(S1) do
* *B:=B+StringToInteger(GetChar(S1,I))/IntToReal(XStepPY(10,I+1));
* String2Real:=(A+B)*Sgn;
*End
else
*Begin
* S1:=Copy(S,C,Length(S));
* for i:=Length(S1) downto 0 do
* *A:=A+StringToInteger(GetChar(S1,I))*IntToReal(XStepPY(10,Length(S1)-I-1));
* String2Real:=A*Sgn;
*End;
end;
|
(Offline)
|
|
15.12.2005, 21:31
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Положительный X в любой степени
Function RXStepY(X:Real;Y:Real):Real;
var s:Real;
Begin
If X<0 then
S:=-1
else
If X=0 then
S:=1
else
S:=exp(Y*log(X));
RXStepY:=S;
End;
|
(Offline)
|
|
16.12.2005, 02:23
|
#5
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
видать не получится сделать строку в вещественное число, и все из-за неточности вычислений паскаля...
вот накидал тут прогу:
program fff;
var str:string;
i:integer;
function s2r(sval:string):real;
var p:integer;
i,svall:integer;
s,s1,ind:real;
begin
p:=pos(sval,'.');
s:=0;
ind:=1;
svall:=length(sval);
for i:=0 to p do begin
s:=s+StringToInteger(GetChar(sval,p-i-1))*ind;
ind:=ind*10;
end;
ind:=10;
for i:=p+1 to svall do begin
s:=s+StringToInteger(GetChar(sval,i))/ind;
ind:=ind*10;
end;
s2r:=s;
end;
begin
str:='564.36';
SetColor(255, 255, 255);
FillRect(0, 0, GetWidth, GetHeight);
SetColor(0, 0, 0);
drawText('Source: '+str, 0, 0);
drawText('Target: '+S2R(str), 0, 20);
repaint;
delay(50000);
end.
и что ты думаешь? вот ставлю последнюю 6, результат идет 59... ставлю 5, идет 49...
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
16.12.2005, 10:56
|
#6
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
и что ты думаешь? вот ставлю последнюю 6, результат идет 59... ставлю 5, идет 49...
|
Вот и я не знаю...
А вот эта строчка меня заинтересовала...
drawText('Target: '+S2R(str), 0, 20);
тоесть получается, что не надо было писать функцию преобразования RealToString...
А я старался
|
(Offline)
|
|
16.12.2005, 11:14
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
И еще, когда я делал свою фунцию, то столкнулся с проблемой: если передать в функцию целое число, то все вычисления будут неверными... надо бы в твоей такую проверку сделать... и еще надо сделать проверку на отрицательные числа... т.к. паскаль в функции StringToInteger(GetChar(sval,p-i-1))*ind при первом минусе вернет 0...
вот пока такие рассуждения
|
(Offline)
|
|
17.12.2005, 09:22
|
#8
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Короче выход такой... надо (мне по крайней мере) достать Java SDK и писать расширение на чистой яве и подключать к паскалю как модуль... другого выхода я пока не вижу... может на яве будет правильно работать...
PS: скачать с нета 50 метров думаю крутовато будет... хотя посмотрим...
|
(Offline)
|
|
17.12.2005, 16:23
|
#9
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
да, решение видишь правильное, но только к 50 метрам SDK тебе еще надо будет среду программирования гденить скачать...
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
17.12.2005, 17:20
|
#10
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ну редактор есть в VS.Net 2003, а компилить буду через коммандную строку... как это описано в справке по мидлетпаскалю...
|
(Offline)
|
|
17.12.2005, 17:34
|
#11
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
если будешь писать либы, то цены тебе не будет!
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
17.12.2005, 17:44
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Originally posted by SubZer0@Dec 17 2005, 05:34 PM
если будешь писать либы, то цены тебе не будет!
|
Да, но 50 метров...
|
(Offline)
|
|
17.12.2005, 18:02
|
#13
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
Originally posted by PAX@Dec 17 2005, 04:44 PM
Да, но 50 метров...
|
а что? всего 5 минут закачки...
ЗЫ флуд вообщето в FAQ мастдай... я потом все это почищу...
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
17.12.2005, 19:15
|
#14
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Стирай стирай, потом в аське поболтаем
|
(Offline)
|
|
31.03.2006, 18:28
|
#15
|
AnyKey`щик
Регистрация: 30.03.2006
Сообщений: 11
Написано 0 полезных сообщений (для 0 пользователей)
|
Originally posted by PAX@15.12.2005, 18:06
Ну вроде написал функции преобразования типа Real в тип String и обратно .
Правда работают немного не точно даж не знаю почему... если найдете ошибку, то исправьте пожалуйста.
1. Эта для того чтобы была
Function IntToReal(Val:Integer):Real;
Begin
IntToReal:=Val;
End;
2. X в положительной целочисленной степени
Function XStepY(X:Real;Y:Integer):Real;
var i:integer;
s:Real;
Begin
s:=1;
If Y>0 then
for i:=1 to Y do s:=s*x
else
If Y=0 then
S:=1
else
for i:=-1 downto Y do S:=S/X;
XStepY:=S;
End;
3. X в целочисленной степени
Function XStepY(X:Real;Y:Integer):Real;
var i,s:integer;
Begin
s:=1;
If Y>0 then
for i:=1 to Y do s:=s*x
else
If Y=0 then
s:=1
else
for i:=-1 downto Y do s:=s/x;;
XStepY:=s;
End;
4. Вещественное число в строку
Function RealToString(Val:Real):String;
Var I,N:Integer;
A,B:real;
S,Sgn:string;
Begin
S:='';
If Val>0 then
Sgn:=''
else
Begin
Sgn:='-';
Val:=-Val;
End;
A := Val-Frac(Val);
B := Val-A;
S:=Sgn + IntegerToString(Trunc(A))+ '.';
For I:=1 to 5 do
Begin
A:=B*XStepPY(10,I);
A:=A-Frac(A);
S:=S+IntegerToString(Trunc(A));
A:=A/XStepPY(10,I);
B:=B-A;
end;
RealToString:=S;
end;
5. Строку в вещественное число
Function String2Real(Val:String):Real;
Var P,i,Sgn,C:Integer;
A,B:real;
S,S1:string;
Begin
A:=0;B:=0; C:=0;
S:=Repl(Val,',','.');
P:=Pos(S,'.');
if (GetChar(S,0)<>'-') then Sgn:=1 else Begin Sgn:=-1; C:=1; end;
If P>=0 Then
Begin
S1:=Copy(S,C,P);
for i:=Length(S1) downto 0 do
A:=A+StringToInteger(GetChar(S1,I))*IntToReal(XStepPY(10,Length(S1)-I-1));
S1:=Copy(S,P+1,Length(S));
for i:=0 to Length(S1) do
B:=B+StringToInteger(GetChar(S1,I))/IntToReal(XStepPY(10,I+1));
String2Real:=(A+B)*Sgn;
End
else
Begin
S1:=Copy(S,C,Length(S));
for i:=Length(S1) downto 0 do
A:=A+StringToInteger(GetChar(S1,I))*IntToReal(XStepPY(10,Length(S1)-I-1));
String2Real:=A*Sgn;
End;
end;
|
Функция преобразования из real в string не работает, нужна функция B*XStepPY.
Дадите?)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:28.
|