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();
}