에러코드는 중간에 설명을 하엿습니다..
고맙습니다.
procedure TForm1.btn_getClick(Sender: TObject);
var
get_power:integer;
begin
// 사용자가 입력한 자승을 매개 변수로 power 하무를 호출한다.
get_power := power(StrToInt(edt_value.Text));
//바로 위에 있는 부분에서 에러가 나거든요....
// 참고로 이것은 2의 자승구하는건데...로직은 알겠는데..
// 아직 델파이 인터페이스에 익숙하지 않아서요..
//이 프로시져가 함수를 호출해서 값을 계산한 후에 다시
//다시 프로시져에게 값을 전달한 다음 이것을 뿌리는건데.,
//책에서의 예제인데..저가 보기에도 로직은 이상이 없는데..
// 무슨 일인지 모르겟네요././.
//다음은 에러코드 입니다..
// [Error] U_power.pas(37): Undeclared identifier: 'power'
//[Error] U_power.pas(47): Type of expression must be BOOLEAN
//[Fatal Error] Project1.dpr(5): Could not compile used unit 'U_power.pas'
edt_result.Text := IntToStr(get_power);
end;
function power(num:integer):integer;
var
i, temp : integer;
begin
temp := 1;
if num := 0 then
begin
result := 1; // 0일 경우 값은 당연히 1 이다.
end else
begin
// 입력한 숫자의 2의 자승을 구하는 부분
for i := 0 to num - 1 do
begin
temp := temp * 2;
end;
result := temp;
end;
end;
end.
첫번째 에러는 Power가 정의되지 않았다는 것입니다. 범위(scope)문제인데요. Power함수를 btn_getClick메소드위에다 선언을 하세요.
두번째는 if문에서 대입문을 썼군요. if문은 어떤 값을 참이냐 거짓이냐로 평가하는 것입니다. 그러니까 대입문이 아니라 비교문을 써야죠.
> if num := 0 then // := 이 아니라 =를 쓰셔야죠...
2의 자승은 shift연산을 쓰시면 아주 빠르게 구할 수 있습니다.
function Power(Num: Integer): Integer;
// 양의 정수만 사용가능하도록 했습니다.
begin
if Num >= 0 then
begin
if Num = 0 then
Result := 1
else
Result := (1 shl Num);
end
else
Result := 0; // 음수가 들어올경우 0으로 처리...
end;
procedure TForm1.btn_getClick(Sender: TObject);
var
get_power: Integer;
begin
get_power := Power( StrToInt(edt_value.Text) );
edt_result.Text := IntToStr(get_power);
end;
winsight wrote:
> 에러코드는 중간에 설명을 하엿습니다..
> 고맙습니다.
>
> procedure TForm1.btn_getClick(Sender: TObject);
> var
> get_power:integer;
> begin
>
> // 사용자가 입력한 자승을 매개 변수로 power 하무를 호출한다.
> get_power := power(StrToInt(edt_value.Text));
>
> //바로 위에 있는 부분에서 에러가 나거든요....
> // 참고로 이것은 2의 자승구하는건데...로직은 알겠는데..
> // 아직 델파이 인터페이스에 익숙하지 않아서요..
> //이 프로시져가 함수를 호출해서 값을 계산한 후에 다시
> //다시 프로시져에게 값을 전달한 다음 이것을 뿌리는건데.,
> //책에서의 예제인데..저가 보기에도 로직은 이상이 없는데..
> // 무슨 일인지 모르겟네요././.
> //다음은 에러코드 입니다..
> // [Error] U_power.pas(37): Undeclared identifier: 'power'
> //[Error] U_power.pas(47): Type of expression must be BOOLEAN
> //[Fatal Error] Project1.dpr(5): Could not compile used unit 'U_power.pas'
>
>
>
> edt_result.Text := IntToStr(get_power);
>
> end;
>
> function power(num:integer):integer;
> var
> i, temp : integer;
> begin
> temp := 1;
> if num := 0 then
> begin
> result := 1; // 0일 경우 값은 당연히 1 이다.
> end else
> begin
> // 입력한 숫자의 2의 자승을 구하는 부분
> for i := 0 to num - 1 do
> begin
> temp := temp * 2;
> end;
>
> result := temp;
> end;
> end;
>
> end.
>
>