게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
질문드립니다... 함수의 배열 인자? 받는거?
게시물ID : programmer_16436짧은주소 복사하기
작성자 : 작성자구남친
추천 : 0
조회수 : 605회
댓글수 : 2개
등록시간 : 2016/03/31 01:50:59
옵션
  • 본인삭제금지
A와 B라는 txt파일에 담겨있는 인자를 다항식으로 인식하여 < 계수, 지수>의 방식으로 받아서
새로운 다항식 D라는 식에 A+B의 값을 넣은뒤에 다시 표시하는 프로그램인데요...

제가 멍청해선지 함수 인자 받는 부분이 잘 모르겠네요

다항식 struct : polynomial 이라는 구조체를 설정하고
다항식을 담을 polynomial 형 배열 Terms[]를 설정했습니다.

이제 이거를 읽고(readPoly) 더하고(padd) 그 값을 표현(printPoly)하는 프로그램입니다.

근데 제가 잘 모르겠는게..
디버깅을 하면서 한칸씩 따라가니깐

readPoly 식에서
array[avail].coef랑 array[avail].expon에는 값이 제대로 들어가는 걸로 보입니다.
근데 제가 이 array를 받는 인자로 (Terms)를 집어넣으면
이게 포인터로 Terms[avail].coef, Terms[avail].expon으로 들어가는게 아닌건가요?

디버깅시에는 Terms[0].coef, Terms[0].expon은 다 알수없는 값으로 나오네요...
array[0].coef에는 잘 들어가는데...

제가 도대체 뭘 모르는 걸까요.. 고치고 싶은데.. 고칠수가 ㅇ벗어요 ㅠㅠ.ㅠ.ㅠ.ㅠ.ㅠ
밑에는 프로그램 코드 첨부해볼게요.. 

함수파트 알았다고 생각하는데 맨날 돌려보면 안된데 ㅠ.ㅠ




#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX_TERMS 100

int starta = 0, startb = 0, finisha = 0, finishb = 0, avail = 0;

typedef struct {
int coef;
int expon;
} polynomial;

void readPoly(int* startd, int* finishd, polynomial array[]) {

FILE *fp = fopen("A.txt", "r");
int number=0, temp, count = 1;
int i = 0;

while (~fscanf(fp, "%d", &temp)) number++;
fclose(fp);
finisha = starta + number;

fp = fopen("A.txt", "r");
for(i = 0; i < number;i++){
if (count % 2 == 1) {
fscanf(fp, "%d", &array[avail].coef);
count++;
}
else {
fscanf(fp, "%d", &array[avail].expon);
count++;
avail++;
}
}
fclose(fp);
number = 0;
startb = finisha + 1;

fp = fopen("B.txt", "r");
while (fscanf(fp,"%d",&temp)) number++;
fclose(fp);
finishb = startb + number;


fp = fopen("B.txt", "r");
for (i = 0; i < number;i++){
if (count % 2 == 1) {
fscanf(fp, "%d", &array[avail].coef);
count++;
}
else {
fscanf(fp, "%d", &array[avail].expon);
count++;
avail++;
}
}
fclose(fp);
}

int COMPARE(int num1, int num2) {
if (num1>num2)
return -1;
if (num1 == num2)
return 0;
if (num1<num2)
return 1;
}


void attatch(int coef, int expon, polynomial array[]) {
array[avail].coef = coef;
array[avail].expon = expon;
avail++;
}


void padd(int* startd, int* finishd, polynomial array[]) {
int coefficient;

*startd = avail;
while (starta <= finisha && startb <= finishb) 
switch (COMPARE(array[starta].expon, array[startb].expon)) {
case - 1 :
attatch(array[starta].coef, array[starta].expon, array);
starta++;
break;
case 0 :
coefficient = array[starta].coef + array[startb].coef;
attatch(coefficient, array[starta].expon, array);
starta++, startb++;
break;

case 1 :
attatch(array[startb].coef, array[startb].expon, array);
startb++;
break;
}
*finishd = avail - 1;
}


void printPoly(polynomial array[],int* startd, int* finishd) {
while (*startd <= *finishd) {
printf("( ");
printf("%d", array[*startd].coef);
printf(" , ");
printf("%d", array[*startd].expon);
printf(" )\n");

*startd=*startd+1;
}


}


void main() {
polynomial Terms[MAX_TERMS];
int startd1 = 0, finishd1 = 0;
int* startd=&startd1;
int* finishd=&finishd1;

readPoly(startd, finishd,Terms);
padd(startd, finishd, Terms);

printPoly(Terms,startd, finishd);

getchar();
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호