Форум: "Потрепаться";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизЗадачка или почему это работает? Найти похожие ветки
← →
R.D.I. © (2005-02-19 19:35) [0]Почему переменная B всегда равна переменной A, хотя явного присваивания значения нет? %))))
Code just for fun:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Magic: Integer;
var
M: Integer;
begin
M:=M xor $fd64c90a;
Result:= M xor not $29b36f5;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
Loops = 10000;
var
i, Faileds: Integer;
S: string;
A, B: Integer;
begin
Randomize;
Faileds:=0;
Caption:="Count loops = " + IntToStr(Loops);
Memo1.Lines.BeginUpdate;
Memo1.Lines.Clear;
for i:=1 to Loops do
begin
A:=Random(High(Integer));
B:=Magic;
//Почему A всегда равно B?
S:=Format("A=%d,%sB=%d", [A,#9,B]);
if A = B then
S:="[ OK ] " + S
else
begin
S:="[FAILED] " + S;
Inc(Faileds);
end;
Memo1.Lines.Add(S);
end;
Memo1.Lines.EndUpdate;
MessageDlg("FAILEDS = "+IntToStr(Faileds), mtInformation, [mbOk], 0);
end;
end.
Код был написан под Delphi 7.
← →
Sergey_Masloff (2005-02-19 19:49) [1]Во-первых, замени свою Magic на
function Magic: Integer;
var
M: Integer;
begin
M:=M;
end;
Результат не поменялся? ;-)
Ладно продолжаем. В своем коде поменяй вызовы сначала присваивай B потом A. Ну как?
Из этих 2 фактов ответ найти легко.
← →
begin...end © (2005-02-19 19:50) [2]> R.D.I. © (19.02.05 19:35)
Очень просто. Значение M внутри функции Magic не инициализируется, поэтому оно равно старому содержимому регистра EAX, а именно переменной B. Ужимки внутри Magic приводят к тому же содержимому EAX на выходе, что и на входе.
← →
begin...end © (2005-02-19 19:51) [3]> begin...end © (19.02.05 19:50) [2]
> а именно переменной B
Следует читать: "а именно переменной А"
← →
R.D.I. © (2005-02-19 19:53) [4]Я то ответ знаю ;) можно вообще
%)
function Magic: Integer;
begin
end;
← →
begin...end © (2005-02-19 19:55) [5]> R.D.I. © (19.02.05 19:53) [4]
Да, так ещё проще. В этом случае содержимое EAX внутри функции, можно сказать, вообще не трогается.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c