[링크드리스트]다항식 곱셈 부탁드립니다ㅠㅠ
MyWay
질문 내용 : 문제는 단순 연결 리스트로 만들어진 다항식 A(다항식의 차수, 내림차순으로 계수들 -이런 형식 저장 예를들면
4 3 0 5 1 이면 3x^4 + 5x^2 + 1)을 만들고
또 mulpoly(A,c,e) 라는 함수를 만들고 이 함수는 A라는 다항식과 다른 다항식의 c(계수) e (지수)를 곱한 값을 반환 하 는 함수를 짠후 addpoly 라는 함수를 만들어서 다 더해서 같은거 처리해주는게 문젠데..
지금까지 진행 상황은 listnode 라는 노드 구조체 와 headlist 헤드 구조체를 만들었고 파일에서 불른 다항식 정보를 저장했고
근데 정작 곱하는걸 못하겠네요.. 말했듯이 첫번째 다항식과 두번째의 한개의 항을곱한걸
리턴한것들을 addpoly 라는 함수를 만들어서 더하면서 원래 형식대로 저장하는게 문젠대..
mulpoly 에서 첫번째 다행식 원소들과 두번째 다행식 한 원소를 곱하니까 리턴타입을 listnode* 하고 곱한 결과를 리턴 한다음..
뭘로 받아야 할지 감이 안잡히네요.. 연결 리스트를 잘 짠건지도 구분이 안가고;;
도움좀 부탁드려요 ㅠㅠ
밑에는 제가 지금까지 한거입니다#includestdio.h
#includestdlib.h
typedef struct Listnode{
float coef;
int expo;
struct Listnode *next;
}listnode;
typedef struct Headnode{ //헤드 노드
listnode *head;
}headnode;
headnode* createheadnode(void) //헤드 노드 구성
{
headnode *L;
L=(headnode*)malloc(sizeof(headnode));
L-head=NULL;
return L;
}
listnode* getnode(headnode *a) // 노드 만들어 주기
{
listnode *newnode;
listnode *p;
newnode=(listnode*)malloc(sizeof(listnode));
p=(listnode*)malloc(sizeof(listnode));
newnode-next=NULL;
if(a-head==NULL)
{
a-head=newnode;
}
p-next=a-head;
while(p-next!=NULL) p=p-next;
p-next=NULL;
return newnode;
}
void freeall(headnode *H) // 헤드 노드 프리
{
listnode *p;
while(H-head!=NULL)
{
p=H-head;
H-head=H-head-next;
free(p);
p=NULL;
}
}
listnode* mulpoly(listnode *a,float c,int expo) //다항식 A의 전 항과 다항식 하나 원소의 곱
{
int j=0;
listnode *A3;
A3=(listnode*)malloc(sizeof(listnode));
while(a[j].next==NULL)
{
A3[j].coef=a[j].coef*c;
A3[j].expo=a[j].expo+expo;
j++;
}
return A3;
}void main()
{
int i,j;
int poly,copiedpoly,poly2,copiedpoly2;
headnode *H;
listnode *A;
headnode *H2;
listnode *A2;
headnode *H3;
listnode *A3;
FILE *fp;
//--------잠시 저장용-------//
fp=fopen(test.dat,wb);
fputs(5 2 3 0 1 3 0 4 3 1 2 2 -10,fp);
fclose(fp);
//----------Headnode 생성-----------//
H=createheadnode();
fp=fopen(test.dat,rb);fscanf(fp,%d,&poly);
for(i=0; ipoly+1; i++) // 상수항까지 합하면 항 하나 더있어서 +1
{
A=getnode(H);
}
copiedpoly=poly; //밑에 포문에서 뺄셈때매 폴리가 바껴서 복사해놈
for(i=0; ipoly+1; i++)
{
fscanf(fp,%f,&A[i].coef);
}
for(i=0; ipoly+1; i++)
{
if(A[i].coef==0)
{
printf(다항식에 계수 0인 횟수\n);
A[i].expo=0; //계수가 0인항, 한마디로 존재 하지 않는 곳엔 차수에 0 들어가있음
copiedpoly-=1;
}
else
{
A[i].expo=copiedpoly; // 계수를 하나씩 떨어뜨리면서 그걸 expo에 넣어줌
copiedpoly-=1;
}
}
for(i=0; ipoly+1; i++) //차수 +1 개 만큼 해야 다 출력
{
printf(expo[%d] 는 %d\n,i,A[i].expo);
printf(coef[%d] 는 %f\n,i,A[i].coef);
}
//----------------------다항식 A 입력 부분 끝---------------------//
printf(------------다항식 2------------------\n);
H2=createheadnode();fscanf(fp,%d,&poly2);
copiedpoly2=poly2; //밑에 포문에서 뺄셈때매 폴리가 바껴서 복사해놈for(i=0; ipoly2+1; i++)
{
A2=getnode(H2);
}
printf(다항식 2의 차수는 %d 입니다 \n,poly2);for(i=0; ipoly2+1; i++)
{
fscanf(fp,%f,&A2[i].coef);
}
for(i=0; ipoly2+1; i++)
{
if(A2[i].coef==0)
{
printf(다항식2 에 계수 0인 횟수\n);
A2[i].expo=0; //계수가 0인항, 한마디로 존재 하지 않는 곳엔 차수에 0 들어가있음
copiedpoly2-=1;
}
else
{
A2[i].expo=copiedpoly2; // 계수를 하나씩 떨어뜨리면서 그걸 expo에 넣어줌
copiedpoly2-=1;
}
}
for(i=0; ipoly2+1; i++) //차수 +1 개 만큼 해야 다 출력
{
printf(expo[%d] 는 %d\n,i,A2[i].expo);
printf(coef[%d] 는 %f\n,i,A2[i].coef);
}
//------------------------다항식 2 끝----------------------//
printf(------------다항식 3(결과값)------------------\n);
H3=createheadnode();for(i=0; ipoly2+poly; i++)
{
A3=getnode(H3);
}
//-------------------이 밑부터 짜다가 모르겠어서..-------------------------------------//
H3=(headnode*)malloc(sizeof(headnode));
for(i=0; i4; i++)
{
printf(계수 %f 지수 %d \n,A2[i].coef,A2[i].expo);
H3[i].head=mulpoly(A,A2[i].coef,A2[i].expo);
}
for(i=0; i3; i++)
{
printf(계수 %f 지수 %d \n,H3[i].head,A3[i].expo);
}
freeall(H);
freeall(H2);
}
-
커피우유 2025-01-30
아 근데 ㅠㅠ 이거 이해하기가 너무 어렵네요 ㅠㅠ 그런데다 제가 해야 할것은 임의의 항의 갯수를 가진 다항식인데 이건 정해져있네요 ㅠㅠ
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2693928 | &와 *의 사용에 관한 명확한 이해 | 제나 | 2025-05-06 |
2693903 | 반복문 설명좀요 ㅠㅠ (2) | 란새 | 2025-05-06 |
2693869 | stdio.h 는 왜 쓰는건가요? (1) | 큰꽃들 | 2025-05-06 |
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |
2693758 | txt파일 불러와서 행렬로 저장 | 큰애 | 2025-05-05 |
2693727 | scanf 오류 문제!! (2) | 큰나래 | 2025-05-04 |
2693704 | 구조체 주소록 문제인데 도와주세요 (2) | 도1도캣 | 2025-05-04 |
2693676 | 열혈강의 c언어 질문입니다 | 하양이 | 2025-05-04 |
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |
2693463 | 동적할당 이용시 fwrite사용을 어떻게 해야하나요..? (10) | 일본어못해요 | 2025-05-02 |
2693387 | 배열문제입니다 수정오류캡쳐했습니다 (6) | 연하얀 | 2025-05-01 |
2693356 | text 입출력 내림차순 질문입니다 ㅠ | 빛글 | 2025-05-01 |
2693328 | C언어를이용해서 .txt파일 외에 다른 확장자 파일 삭제가 가능한지.. (2) | 대나무 | 2025-05-01 |
2693299 | 파일입출력 바이너리파일 | 독특한 | 2025-04-30 |
2693273 | 오류 (1) | 귀1여운렩 | 2025-04-30 |
2693080 | visual studio 2008 express edition 등록키 말인데요 | 얀별 | 2025-04-28 |