playXP

서브 메뉴

Page. 157 / 271 [내 메뉴에 추가]
글쓰기
작성자 낙원의새
작성일 2010-11-27 17:42:44 KST 조회 787
제목
트리거 및 C언어 질문입니다.

C언어로 작성된 소스를 트리거로 옴기는 수작업을 할려고 하는데

문제가 .. C언어 소스 중 알아보기 어려운 부분이 많아서요 ..;;

제데로 하는 있는건지도 잘 모르겠지만 일단 무작정 달리는거죠.

else if(PQ->Node->frequency > new->Node->frequency) {

        new->next = PQ;

        PQ = new;   

}

위 내용을 아래 "예시" 처럼 풀어서 알려주실 분을 구합니다. -_-;;

트리거로 변경해서 알려주시면 더욱 좋지만

 

 

예시)

if(PQ == NULL){

        PQ = new;

        return PQ;

}

"만일 PQ가 비었을 경우 PQ 를 new 로 변경하고 PQ 값을 반환한다."

트리거를 이용해서 함수로 만들어보면 아래와 같이 되겠죠? 맞을려나 ..;; (PQ 가 문자열일 경우)

함수 AAA

매개변수 문자열 "PQ"

반환유형 "문자열"

If (PQ = 없음)

Then 변수 - PQ 를 변수(문자열: new) 으로 설정한다.

        반환 - PQ

지속적인 허위 신고시 신고자가 제재를 받을 수 있습니다.
신고 사유를 입력하십시오:

발도장 찍기
아이콘 LoreSin (2010-11-27 18:23:36 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
뭔 뜻이여 . . .
드론프라임 (2010-11-27 19:00:59 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
화살표는 뭐지..
아이콘 LlIiEe (2010-11-27 19:36:14 KST)
0↑ ↓0
센스 이미지
->는 포인터로 받아온 클래스나 구조체 내의 맴버를 읽을때 쓰구요..
PQ라는 클래스의 상속된 맴버 중 Node, 또 Node의 맴버중 frequency와
new라는 클래스의 상속된 맴버 중 Node, 또 Node의 맴버중 frequency가 동일하면,
new라는 클래스의 맴버 next를 PQ로 지정한다..
그리고 PQ 클래스 포인터를 new 클래스 포인터로 지정한다..

근데 겔디터에서는 포인터가 없으니...
게다가 저 소스만으로는 용도를 파악하기 힘드네요.
클래스의 구조도 모를 뿐더러, 클래스안에 클래스나 구조체를 상속한 상태라서..
Nedsociety (2010-11-27 19:45:54 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
혹시 linked-list 정렬코드인가요?

1. 일단 예시로 주신 if 문의 해석은 다음과 같습니다.
"PQ가 아무것도 가리키지 않으면, PQ가 new가 가리키는 것을 가리키게 하고 PQ를 반환한다"

즉 PQ가 전역변수가 아니면 PQ = new; 구문은 빼고 return new;로 바꿔도 될 것 같습니다.


2. 질문하신 부분

"PQ가 가리키는 struct의 Node가 가리키는 struct의 frequency 값이,
new가 가리키는 struct의 Node가 가리키는 struct의 frequency 값보다 크다면
new가 가리키는 struct의 next가 PQ가 가리키는 것를 가리키게 하고,
PQ가 new가 가리키는 것을 가리키게 한다."

만일 제가 예상한 게 맞다면 struct 반환이 불가능하고 포인터 연산도 막혀있는지라, 포인터를 배열인덱스로 만들지 않는 한 단순히 트리거 에디터로 표현하는건 불가능에 가깝습니다만...

단 Andromeda에서는 class 기반 객체가 포인터 형태로 구현이 되기 때문에 가능합니다.
아이콘 LlIiEe (2010-11-27 19:46:35 KST)
0↑ ↓0
센스 이미지
아.. 이퀄이 아니고 >였구나...
낙원의새 (2010-11-27 20:34:24 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
Nedsociety 님 답변에 의하면
만일 제가 예상한 게 맞다면 struct 반환이 불가능하고 포인터 연산도 막혀있는지라,
포인터를 배열인덱스로 만들지 않는 한 트리거 에디터로 표현하는건 불가능에 가깝습니다.
즉 -> "포인터를 배열인덱스로 만들어주면 트리거로 표현가는게 가능하다." 라고 생각되는데

배열변수로 PQ[K] 를 만들고 변수 K 의 변수유형은 "정수" 설정해서
변수 K 를 문자열의 합 (x+y) 으로 지정하게 한 후
포인터 Node 대신 정수[x] frequency 대신 정수[y] 를 이용해서
"PQ가 가리키는 구조체 중 x 가 가리키는 구조체 중 y 값을 지정할 수 있도록 만들고
마찮가지로 new가 가리키는 x 가 가리키는 y 값을 지정할 수 있도록 만들어서
PQ[xy]가 new[xy] 보다 크다면 new가 가리키는 구조체 중 z(next) 가 PQ[xy]가
가리키는 것를 가리키게 하고, PQ[xy]가 new[xy]가 가리키는 것을 가리키게 한다."
라고 해주면 되는 건가요;;?
Nedsociety (2010-11-27 20:42:46 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
배열 인덱스로 구현하실 거라면, PQ를 배열변수로 만드는 게 아니라 PQ와 new 둘 다 배열변수의 인덱스가 되겠지요.

문자열의 합으로 인덱스를 구현하는 건 무슨말씀인지 모르겠습니다만...
낙원의새 (2010-11-27 20:46:16 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
포인터와 struct 대해 알아봤는데 제가 제데로 이해한건지 모르겠네요;;
포인터는 데이터가 저장되어 있는 위치를 가르키는 메로리 주소.
라고 되어있으니 배열 수(정수)로 주소를 가르키게 만들어주고 ..
이해가 제데로 된게 맞는지도 모르겠네요.. 난감;;
낙원의새 (2010-11-27 20:53:07 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
PQ->Node->frequency
PQ 의 포인터가 Node(x) 이고 노드의 포인터가 frequency(y) 이니
PQ 와 new 둘다 이중 배열로 PQ[x][y] 으로 구현하면 되는걸까요 =_=;;?
위에 문자열 합은 이중 배열 없이 배열 하나로 두개의 포인터를
지정하는데 있어서 생각을 짧게 하다보니 나온 저의 헛소리에요 --;; (무시하세요)
Nedsociety (2010-11-27 20:53:22 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
배열은 메모리 풀이고, 배열의 인덱스는 주소를 대체하도록 만드는게 맞습니다. 메모리 풀이 가질 데이터가 struct 형의 꼴이면 각 멤버마다 각각의 메모리 풀을 만들어 저장하면 되겠지요.

솔직히 배열 인덱스 방식으로 하려면, 기존 코드에서 메모리 할당 및 해제하는 부분의 코드까지 맵에서 직접 짜주셔야 합니다. 포인터 개념이 이해가 잘 안 가시면, Andromeda에서 웬만큼 언어 차원에서 도구를 제공해주니 Andromeda로 코드의 부분 변환을 고려해보시죠.
Nedsociety (2010-11-27 21:00:58 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
PQ 자체가 포인터입니다. PQ 포인터가 가리키는 메모리 주소에 struct 객체가 있습니다.
이 struct 객체의 Node라는 멤버 역시 포인터입니다. 이 Node라는 포인터가 가리키는 메모리 주소에 역시 struct가 있습니다. 이 struct에 있는 frequency는 수입니다.

굳이 포인터배열로 만드시려면, 이 두가지 struct형 (PQ가 가리키는 struct, Node가 가리키는 struct) 모두의 메모리풀 배열을 만든 다음, 포인터란 포인터는 죄다 배열인덱스를 값으로 만드시면 됩니다. 이중배열을 쓸 필요는 없습니다.

다만 문제는 메모리 할당 및 해제 코드를 작성하는게 보통 귀찮은 일이 아니라...
낙원의새 (2010-11-27 21:08:04 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
헉? 안드로메다가 소프트웨어 이름이였나요!? -0- ..
다른 의미로 해셕했었답니다;; 한번 찾아봐야겠네요 ''
낙원의새 (2010-11-27 21:09:36 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
답변해주신 모든 분들 감사드립니다.
Nedsociety 님은 물론 LlIiEe 님까지 포함해서요.
낙원의새 (2010-11-27 21:19:56 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
아 -0- ...그.. 그런가요;; .. 부분이 아닌 전체를 말하자면 ..
제가 할려는 것은 허프만 알고리즘을 라이브러리로 구현할려고 하고 있습니다.
트리거로 처음부터 만드는 것보다 이미 C++ 으로 짜여진 허프만 알고리즘 소스를
참고해서 수작업으로 트리거로 변환하는 것이 더 쉬울 것이라 생각해서
이 질의를 한것이였는데 아직도 해당 부분을 어떻게 해야할지 모르겠고
도통 감이 잡히지 않네요;;
댓글을 등록하려면 로그인 하셔야 합니다. 로그인 하시려면 [여기]를 클릭하십시오.
롤토체스 TFT - 롤체지지 LoLCHESS.GG
소환사의 협곡부터 칼바람, 우르프까지 - 포로지지 PORO.GG
배그 전적검색은 닥지지(DAK.GG)에서 가능합니다
  • (주)플레이엑스피
  • 대표: 윤석재
  • 사업자등록번호: 406-86-00726

© PlayXP Inc. All Rights Reserved.