c언어 3차원배열 함수 포인터리턴

c언어 3차원배열 함수 포인터리턴

QA

c언어 3차원배열 함수 포인터리턴

본문

급한 질문이 하나 생겨서 해도 될까 모르겠습니다.

 

먼저 내분점을 구해주는 함수를 만들어놓고

xy좌표평면상에 점의 갯수를 입력받으면 3차원 배열을 생성하고

각각의 점의 x좌표와 y좌표를 입력받아서 3차원 배열 가장 아래층에 입력하고

내분비율(0보다 크고 1보다 작은 값)을 입력받아서

내분점을 구해주는 함수를 호출하여 포인터로 리턴받고

가장 마지막의 x좌표 y좌표를 출력하는 프로그램입니다.

 

어디가 잘못되었는지 수정을 못하겠습니다.

도와주시면 감사하겠습니다.


#include <stdio.h>
#include <stdlib.h>
 
float* InternalDivision(float* p1, float* p2, float t) {
//내분점을 구해주는 함수
 
   float* p_InternalDivision = (float*) malloc(sizeof(float)*2);
   //동적메모리를 할당한다
 
   p_InternalDivision[0] = t * p2[0] + (1-t) * p1[0];
   //내분점의 x좌표값을 계산한다
   p_InternalDivision[1] = t * p2[1] + (1-t) * p1[1];
   //내분점의 y좌표값을 계산한다
 
   return p_InternalDivision; //float* 포인터를 리턴한다
}
 
int main() {
   int N_total; //시작점들의 갯수
   scanf("%d", &N_total); //시작점들의 갯수를 입력받는다
   printf("시작점들의 갯수를 입력하시오: ");
 
   float P[N_total][N_total][2]; //시작점들과 내분점들은 차례로 계단형의 3차원 배열을 이룬다
   int P_layer = N_total; //점들로 이루어진 3차원 배열의 층 개수
   int i; //3차원 배열에서 층의 순서
   int j; //각 층에서 점들의 순서
 
   for(j=0; j < N_total ; j++) {
      scanf("%f", &P[0][j][0]); //시작점들의 각각 x좌표값
      scanf("%f", &P[0][j][1]); //시작점들의 각각 y좌표값
   }
 
   float T_ratio; //내분 비율
   scanf("%f", &T_ratio); //내분 비율을 입력받는다
   printf("===========\n");
 
   for(i=0; i < (P_layer-1); i++) { //3차원 배열의 마지막 층의 바로 아래층에서 계산이 끝난다
      for(j = 0; j < (N_total-1-i); j++) { //층이 한계단 올라가면 j의 범위가 하나 감소한다
         P[i+1][j] = InternalDivision(P[i][j], P[i][j+1], T_ratio);
      }
   }
 
   printf("%.2f %.2f\n", P[P_layer-1][0][0], P[P_layer-1][0][1]);
   //3차원 배열의 마지막 층에 있는 점의 x좌표와 y좌표를 출력한다
   return 0;
}

이 질문에 댓글 쓰기 :

답변 2


for(j = 0; j < (N_total-1-i); j++) {     //층이 한계단 올라가면 j의 범위가 하나 감소한다

이부분이 좀 이상한듯 합니다.

 

층이 한계단 올라가면 j의 범위가 하나 감소한다는데

실제로는 앞뒤로 감소하는 효과일것 같은데요

범위가 확 줄어들 형태입니다.

 

예를들어 N_total 이 5일경우

바깥의 i가 0일때 j < N_total - 1 - j 라서 범위가 4이하 이지만

j 가 2가 되면  j < N_total - 1 - j = 2가 되서 돌지 대상이 안되는

..

답변을 작성하시기 전에 로그인 해주세요.
전체 131
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT