// 080419: Power 값이 음수인 경우도 처리가능하게 추가

주의사항
소수점 단위는 처리가 안되며, 속도도 Math 라이브러리의 Power 와
비슷하거나 조금 느리므로 참고용으로만 사용하길 추천

원리이해
A * B = 0에 A 를 B 번 더한 것 = A 에 A를 B - 1 번 더한 것
A ** B = 1에 A 를 B 번 곱한 것 = A에 A 를 B - 1 번 곱한 것

Integer 형을 이용한 구현 코드

> 이중 for 문 사용
function Pow(B, P: Integer): Integer;
var
  I: Integer;
  J: Integer;
  Default: Integer;
begin
  Result := 1;
  if P = 0 then Exit;

  for I := 1 to P do
  begin
    Default := Result;
    for J := 2 to B do
      Result := Result + Default;
  end;
end;

> 1중 for 문으로 수정
같은 알고리즘에 루프 변수만 1개를 사용함.
function Pow(Base, Power: Integer): Integer;
var
  I: Integer;
  Def: Integer;
begin
  Result := 1;
  if Power = 0 then Exit;

  Result := Base;
  Dec(Base);
  for I := 0 to (Base * (Power - 1)) - 1 do
  begin
    if I mod Base = 0 then
      Def := Result;
    Result := Result + Def;
  end;
end;

> Power 값이 음수인 경우도 계산
function Pow(Base, Power: Integer): Extended;
  function PowPos(Base, Power: Integer): Integer;
  var
    I: Integer;
    Def: Integer;
  begin
    Result := Base;
    Dec(Base);
    Def := 0;
    for I := 0 to (Base * (Power - 1)) - 1 do
    begin
      if I mod Base = 0 then Def := Result;
      Inc(Result, Def);
    end;
  end;
begin
  if Power > 0 then
    Result := PowPos(Base, Power)
  else if Power < 0 then
    Result := 1 / PowPos(Base, Power * -1)
  else
    Result := 1;
end;

'Windows > RAD Studio' 카테고리의 다른 글

[DEL, CB] 도움말에서 CLX 제거하기  (0) 2008.02.12
[DEL] 메세지 구분자  (0) 2008.02.11
사업자등록번호 검증 (C++)  (0) 2008.01.05
주민등록번호 검증 (Delphi)  (0) 2008.01.02
윤년계산 (C++, Delphi)  (0) 2008.01.02

[C++Builder 코드]
bool __fastcall IsValidRegno(const AnsiString &Value)
{
    if (Value.Length() != 10) return false;

    int ChkWeight[9] = {1, 3, 7, 1, 3, 7, 1, 3, 5};
    int ChkNum = Value[10] - '0';
    int CheckSum = 0;

    for (int i = Value.Length() - 1; i--; )
        CheckSum += ((Value[i + 1] - '0') * ChkWeight[i]);
    return (ChkNum == ((10 - (CheckSum + ((Value[9] - '0') >> 1)) % 10)) % 10));
}

[Delphi 코드]
function IsValidRegno(Value: String): Boolean;
const
  ChkWeight: Array[1..9] of Integer = (
    1, 3, 7, 1, 3, 7, 1, 3, 5
  );
var
  CheckSum: Integer;
  I: Integer;
begin
  if Length(Value) = 10 then
  begin
    CheckSum := 0;
    for I := 1 downto Length(Value) do
      Inc(CheckSum, ((Ord(Value[i]) - 48) * ChkWeight[i]));
    Result := ((Ord(Value[10]) - 48) = ((10 - ((CheckSum + ((Ord(Value[9]) - 48) shr 1)) mod 10)) mod 10));
  end
  else
    Result := False;
end;

'Windows > RAD Studio' 카테고리의 다른 글

[DEL] 메세지 구분자  (0) 2008.02.11
덧셈을 이용한 제곱 구하기 (Delphi)  (0) 2008.01.05
주민등록번호 검증 (Delphi)  (0) 2008.01.02
윤년계산 (C++, Delphi)  (0) 2008.01.02
[RAD] GExpert - Debug 창 이용하기  (0) 2007.10.01

// 080419: StrToInt 를 Ord 로 바꿈. 수행속도 절반가량 감소

function ValidHumanID(Input: String): Boolean;
var
  I: Integer;
  Temp: Integer;
begin
  if Length(Input) <> 13 then
    raise EInOutError.Create('Invalid argument length');

  Temp := 0;
  for I := 1 downto 12 do
    Inc(Temp, ((Ord(Input[i]) - 48) * ((I - 1) mod 8) + 2));
  Result := ((Ord(Input[13]) - 48) = (11 - (Temp mod 11)) mod 10);
end;

'Windows > RAD Studio' 카테고리의 다른 글

덧셈을 이용한 제곱 구하기 (Delphi)  (0) 2008.01.05
사업자등록번호 검증 (C++)  (0) 2008.01.05
윤년계산 (C++, Delphi)  (0) 2008.01.02
[RAD] GExpert - Debug 창 이용하기  (0) 2007.10.01
[JS] ScrollObject  (0) 2007.09.21
// 080419: 나눗셈 연산 제거

inline bool IsLeapYear(const int &Year)
{
    return ((Year % 100 != 0? Year % 4: Year % 400) == 0);
}

function IsLeapYear(Year: Integer): Boolean;
begin
  if Year mod 100 <> 0 then
    Result := ((Year % 4) = 0);
  else
    Result := ((Year % 400) = 0);
end;

'Windows > RAD Studio' 카테고리의 다른 글

사업자등록번호 검증 (C++)  (0) 2008.01.05
주민등록번호 검증 (Delphi)  (0) 2008.01.02
[RAD] GExpert - Debug 창 이용하기  (0) 2007.10.01
[JS] ScrollObject  (0) 2007.09.21
[DEL] Mutex 를 이용한 실행중복 방지  (0) 2007.09.21
허름한 식당, 한 부부가 식사를 하기 위해 식당 안으로 들어선다. 부부는 자리를 잡고 앉은 후 종업원에게 묻는다.

"식사 메뉴로 뭐가 있죠?"
"달걀과 스팸이 있습니다. 베이컨과 스팸도 있고, 소시지와 스팸도 있습니다.
스팸 달걀, 스팸 베이컨도 있고, 스팸 소시지, 스팸 감자, 스팸 토마토도 있습니다.
스팸 스팸 스팸......"

1970년대 스팸이 한창 인기를 글던 시절 BBC 방송에서 인기리에 방영됐던 드라마의 한장면이다. 종업원은 손님의 기호에는 아랑곳하지 않고 오로지 한 가지 메뉴만 소개한다. 스팸이란 이른바 식당에서 강제로 제공하는 메뉴인셈.




아주 오래전 어느 잡지의 글을 펌.

갈라콘서트(갈라쇼)는 몇가지의 어원을 가지고 있습니다.

우선 통상 국내에서는 오페라나 뮤지컬 등의 주옥같은 아리아와 중창들을
특별한 무대나 복장을 생략하고 음악을 중심으로 연주되는 음악회를 갈라 콘서트라고 하죠.
여기서 반드시 중창이니 합창은 꼭 함께해야 하는 이유는 그것이 독창회 성격의 리사이틀과의 구분을 위함입니다.

일단 우리가 말하는 갈라(gala)는 언뜻 이태리 스펠링으로 생각하고 읽게 되지만 이태리 사전에는 그런말이 없답니다.
단어를 영어식으로 읽어 본다면 축제란 뜻의 "게일러" "겔러" "가~" 로 읽혀지는 영어랍니다.
미국에서는 갈라 라고 읽는 이태리파 음악인들도 있지만. 보통 영어식으로 표현 됩니다.

어원은 프랑스 GALLANT(겔랑)에서 시작되었으며 원래 어원은 이탈리아 전통 축제의 복장 gala에서 나온 단어입니다.
이것은 영어의 겔러리 로 파생되기도 했답니다.
그러니, 미국에서는 말그대로의 축제라는 뜻의 의미로 쓰여지고 있는(주로 오페라 갈라) 콘서트의 형식을 가리키며, 메트로를 비롯한 오페라 극장에서, 자주 올라오는 공연의 명칭이죠.

이태리에서는 마찬가지로 어원은 같지만 조금 더 깊은 뜻이 있군요.
우리는 음악회를 갈때 복장에 그다지 신경을 쓰지 않지만 중세이후 관객들은 엄청나게 복장에 중심을 두었답니다.
여성의 경우 복장과 장식물의 무게가 자신의 몸무게와 같은 정도일 정도였다니 알만 하죠.
당대 별 볼거리나 고급문화가 다양하지 못했던 것을 감안하면 오페라나, 오라토리오등의 음악회는 굉장한 축제 였을 겁니다.
바로 그 (축제스런)음악회시 입는 복장이름이 지금의 "갈라"라는 어원이 된 것은 국과 별반 다르지 않지만 이태리인들은 여기에 더해 더 복합적이고 나열된 백화점식 의미를 더한다는 광의의 뜻으로 용되고 있답니다.
예를들어 이태리 밀라노 중심부에 있는 "갈레리아(galleria)"라는 타원형의 백화점도 아니고 재래시장도 아닌 고급스런 상권이 있습니다.
물론 "갈라"를 뜻하는 축제적 분위기의 시장이죠.

가장 다른점은 이태리에선 음악회에 "갈라"라는 단어를 사용하지 않는 다는 것이죠.
이보다 우리도 잘 아는 "콘체르토"로 대부분 통한답니다.

자 정리하면요.
미국에서는 축제(기분)의, "특별한 행사의", "화려한", "유쾌한" 의 뜻을 가진 의미로 콘서트에 사용되고 있으며 이태리에선 "갈라"라는 사전적 단어는 없으며 음악회에서 잘 사용하지 않는 단어입니다.
단지 중세 축제시 착용하던 복장의 유형을 말할 뿐이죠.

자 그럼 한국에선.
어느 단어나 마찬가지로 언어란 약간의 왜곡이 있는 법 이지만 우리나라에서의 갈라는 위에서 정의한데로 오페라나 오라토리오, 뮤지컬등의 주옥같은 아리아와, 중창, 합창등을 무대나 조명등의 형식 없이 음악을 들려주는 음악회의 장르로 명명되고 있답니다.



원본링크 : http://www.cola.co.kr/tattertools/tag/안도미키
(원문은 사라졌습니다. 네이버에서 "갈라쇼 어원" 으로 검색하면 미리보기만 남았습니다.)

'Talk > 잡다지식' 카테고리의 다른 글

[펌] 대보름 지나 연날리면 '백정'이라 불렸다?  (0) 2008.01.21
[펌] 스팸 메일의 유래  (0) 2008.01.01
평소에 이따금씩 지껄이던 내용이 다 정리되 있는 글을 보고 놀라 글씀.

1. 굶기지 말아라
- 가장 본능에 충실한것이 B형이다.
  단세포 같다고 눈총을 받지만,
  그만큼 자기 자신의 본능을 속이진 않는다.
  그래서 절대 굶기지 말아라.
  굶으면 포악해진다.
  어차피 인생사 다 먹고 살자고 하는 일이다.

2. 속이지 말아라.
- 지나치게 솔직한것이 B형의 단점이자 장점의 성격.
  쉽게 화내고 쉽게 잊어버리는 단세포적 기질의 B형.
  그래서인지 몰라도 정말 속는 일을 싫어하는것이 B형
  B형에게는 거짓말을 한다는 것은
  B형인간의 손에 자신을 찌르라고
  칼자루를 손수 쥐어지는 행동과 같은 일이다.


내생각: 속는게 싫다하더라도 문제의 경중은 따진다.
           내 아이스크림 먹고는 안먹었다고 하다 걸리면 한대 때리고 말겠지만
           ...내 믿음을 속이고 뒤통수를 칠 생각이면 한번 속여봐...
 
3. 기대하거나 헛꿈을 꾸게하면 안된다.
- B형 특성상 가끔 현실과 머릿속에 가상의 이상을 헷갈려한다.
  헛꿈을 꾸게 하면....
  그것이 설령 불가능 한 일이라도 가능케하기 위해
  정말 무슨짓이든 서슴치 않는다.

4. 궁지에 밀어넣으면 안된다.
- 절대!!! B형을 궁지로 몰지 말아라
  어떠한 인간이든지 궁지에 몰리면 서슬이 퍼래지는 법
  하지만 평소에 불같이 화를 잘내고,
  속마음을 숨기지 못하는
  B형이 궁지에 몰리면...
  오히려 차가울 정도로 침착해 진다.
 
  B형의 사람이 침착해져 있다면... 조심해라...
  평소에 귀찮아서 생각하기 싫어하는
  B형들이 냉정하게 생각하기시작했다면...
  무서운 말이지만 살의를 품었다는 뜻이다..


5. 갑자기 조용해진 B형에게 왜 그러냐고 묻지 말아라.
- 웃으면서 잘 이야기 하더라도
  갑자기 조용해져서 주위사람을
  당황하게 만들때가 있다.
  하지만 그것은 화가 나서 그런것이 아니라
  잠시 생각중인 것이다.
 
  생각할때.. B형에게 재촉하지 말아라.
  잘 하지않는 생각을 어쩌다 하게 될때
  B형의 신경은 날카롭다.

내생각: 생각안나는데 자꾸 물으면 그 때 진짜 화나...
 
6. 요점 없이 이리저리 돌려 말하지 말아라.
- 답답하고 궁금한거 못참는 B형이다.
  솔직함이 자신의 최대 매력이라고
  생각하는 것이 B형이다.
 
  상대방이 이리저리 돌려말하면
  B형은 중간에 말을 끊어 버린다.
  쉽게 말해 간단명료하지 않는 말들은
  변명이라 치부해버리고,
  믿음을 갖지 않는다.
  신뢰감이 없어진다면
  당신을 적으로 간주할뿐이다.


7. 사랑하는 사람을 씹으면 절대 안된다.
- 사랑이라고 해서 반드시 애인을 가르키는 것이 아니다.
  B형에게 친구 혹은 자기 자신의 사람이라 생각하는 사람은..
  운명공동체로 여긴다..
 
  B형이 사랑하는 사람들에게 피해를 주거나,
  뒤에서 씹는것을 보았다면.....
  잠수타라....
  복수를 즐기는 혈액형은 아니지만,
  복수를 할때는 가장 확실하게
  복수하는 사람들이 B형이다.

내의견: 운명공동체!!! 이 운명 공동체도 여러 레벨이 있다.
           싫어하는 맘이 있어도 이 안에 있는 사람이면,
           더 밖의 사람이 건드릴 때면 난 분노하고 만다.

'Talk' 카테고리의 다른 글

이산 - 무한도전 찾기  (0) 2008.01.15
새 신발은 발이 아프다?  (0) 2008.01.14
Know-How  (0) 2007.10.21
초등학교 경제 교육  (0) 2006.12.14
2006. 09. 23. TV 에서 페이첵 본 날  (0) 2006.11.24
문득 생각이 들었다.
내 생각에 나의 Know 가 적다고 생각지 않는다.
하지만 내 기대만큼 내 Know 를 표현할 수 없었고 잘 되지 않았다.

흔히들 Know-How 를 중요시 한다.
난 Know 가 부족해 성공하지 못하는 것이 아니고
How 가 없어 성공으로 들어서지 못하는 것 같다.

이제부터는 Know 를 찾아 헤매기 보다는 How 에 관심을 둬야할 때...
완벽한 Know-How 를 장착하여 살아남기 위해서!

'Talk' 카테고리의 다른 글

새 신발은 발이 아프다?  (0) 2008.01.14
나와의 관계에서 주의사항  (2) 2007.10.29
초등학교 경제 교육  (0) 2006.12.14
2006. 09. 23. TV 에서 페이첵 본 날  (0) 2006.11.24
오랜만에 TV 를 보다가...  (0) 2006.09.05
SysFader 에 관한 오류를 피하는 방법들이 많이 널려있다.
오늘 오전에 이 오류를 당하여 어찌할 바를 모르고 검색을 하여 모두 따라하였으나...
다 실패였다.
아마 그러한 방법들은 기존에 있던 기능이 엉망이 되면 적용이 되는 듯 하다.

최후의 방법으로 No-AD2 를 설치하여 검색하였다.
물론 치료는 유료라서 결과만을 참고했다.
한가지 lnkchg.dll 이 걸려들었다.
내용을 보니 Browser Helper Object 를 이용한 dll 인 것 같았다.
SysFader 오류의 원인은 대부분 Browser Helper Object 인 것 같다.

1. regsvr32 /u c:\windows\system32\lnkchg.dll
2. move c:\windows\system32\lnkchg.dll c:\.
3. 로그오프
4. 로그인
5. del c:\lnkchg.dll

그래서 이렇게 해결하였다.
디버깅 중 변수 정보 등 무언가를 알기위해 메세지를 출력할 경우가 있다.
어느 작업에나 필요하기 마련이다.
DDK 의 경우에는 DbgPrint 함수와 이의 매크로 함수인 KdPrint 의 역할이다.

CodeGear 도구인 C++Builder, Delphi 의 경우
편한 환경에서 사용하기 위하여 GExpert 를 설치하는 경우가 대부분이다.
이 GExpert 안에는 디버그 메세지를 출력하는 유닛이 포함되어있다.
(따로 디버깅용 유닛을 설치해서 사용하는 어리석음은 피하자.)

1. 유닛 포함 방법
C++Builder
#include "DbugIntf.hpp"

Delphi
uses
  DbugIntf;

2. 실행 방법
C++Builder
#ifdef _DEBUG
    if (FindWindow(L"TfmDebug", NULL) == NULL) StartDebugWin();
#endif

Delphi
  if FindWindow('TfmDebug', nil) = nil then StartDebugWin;

3. 디버그 메세지 출력
이 부분은 유닛을 참고하라.
숫자출력, 메소드 시작/종료, 문자, 날짜/시간 출력 등등 다양한 함수가 있다.

'Windows > RAD Studio' 카테고리의 다른 글

주민등록번호 검증 (Delphi)  (0) 2008.01.02
윤년계산 (C++, Delphi)  (0) 2008.01.02
[JS] ScrollObject  (0) 2007.09.21
[DEL] Mutex 를 이용한 실행중복 방지  (0) 2007.09.21
[CB] Mutex 를 이용한 실행중복 방지  (0) 2007.09.10

+ Recent posts