SlideShare uma empresa Scribd logo
1 de 28
과제수행일지

 소속                                            조원

  B2    조장 : 최완철            자료조사 : 강승우, 김남희                 프로그래밍 : 고충욱, 정준용

과제수행
                                                3일
 기간

                                      I. 계획의 작성


연구제목 Linked List



       학습한 내용에 대해 이해를 하고, Linked List 의 정의를 알고,
연구배경
       이것을 프로그램으로 만들어 봄으로써 활용법을 안다.




             http://ko.wikipedia.org/wiki/%EB%A7%81%ED%81%AC%EB%93%9C_%EB%A6%AC
        참
             %EC%8A%A4%ED%8A%B8
        고
참고자료         -> 링크드 리스트의 정의와 종류
        UR
             http://blog.naver.com/skout123?Redirect=Log&logNo=50134180161
        L
             -> 연결리스트와 용어에 대한 설명, 사진 (본문에 포함)




                                      II. 계획의 실행

첫째 날                                 2012 년 4 월 12 일 목요일

오늘의
                                       계획수립 및 역할 분담
 작업
조장 : 최완철

        자료조사 : 강승우, 김남희

        프로그래밍 : 고충욱, 정준용
토의 내용
        위와 같이 조원의 업무 분담을 하였으며, 3 번째 과제와 관련된 링크드 리스트에 대한

        자료조사를 최우선적으로 하기로 했다.

        그리고 역할 분담은 각자가 하고 싶은 역할 위주로 정하였다.

과제준비
        첫날에 아무것도 모르는 상황이라서 토의 진행이 되지 않았었다.
 에서
        그 때문에 사전 자료조사의 중요성을 느끼게 되었다.
느낀 점

둘째 날                       2012 년 4 월 17 일 화요일

오늘의
            링크드 리스트에 대한 자료를 이용하여 개념 이해 및 소스 구현방법 이해
 작업


        링크드 리스트 과제를 수행하기 위해서는 개념 이해가 중요하다고 느꼈다.

        그래서 자료조사팀에서 조사한 내용을 가지고 이해하였다.




토의 내용
과제준비
        링크드 리스트의 개념과 구조를 알게 되었으나, 소스로 구현하게 된다면 예상하지 못한
 에서
        문제들이 발생할 것 같다고 느꼈다.
느낀 점



셋째 날                    2012 년 4 월 19 일 목요일

오늘의
                      소스 초안 확인 및 개선방향 설정
 작업



        소스초안에서는 다항식 연산에서 덧셈과 뺄셈만 구현하였다.
토의 내용
        소스 초안의 연산 과정에 있어서 특별한 문제는 없었다.
아직 곱셈과 나눗셈 연산은 구현하지 못했기 때문에 이 부분에 대해서 초안에

       추가적으로 구현을 하기로 하였다.




과제준비 곱셈 및 나눗셈 연산에서 지수가 같은 경우를 걸러내는 방법을 구현하는데 난관을

 에서    겪었다.

느낀 점 곱셈과 나눗셈에 대한 더 많은 공부가 필요하다고 느끼게 되었다.

넷째 날                                        2012 년 4 월 24 일 화요일

오늘의
                                             프로그램 소스 초안 코딩
 작업

       #include <stdio.h>

       #include <stdlib.h>

       typedef struct ListNode {

       int coef;

       int expon;

       struct ListNode *link;

       } ListNode;

       typedef struct ListHeader {

       int length;
 초안
       ListNode *head;

       ListNode *tail;

       } ListHeader;

       void init(ListHeader *plist)

       {

       plist->length = 0;

       plist->head = plist->tail = NULL;

       }

       void insert_node_last(ListHeader *plist, int coef, int expon)
{

ListNode *temp = (ListNode *)malloc(sizeof(ListNode));

if( temp == NULL ){

fprintf(stderr,"메모리 할당 에러n");

exit(1);

}

temp->coef=coef;

temp->expon=expon;

temp->link=NULL;

if( plist->tail == NULL ){

plist->head = plist->tail = temp;

}

else {

plist->tail->link = temp;

plist->tail = temp;

}

plist->length++;

}

void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 )

{

ListNode *a = plist1->head;

ListNode *b = plist2->head;

int sum;

while(a && b){

if( a->expon == b->expon ){

sum = a->coef + b-> coef;

if( sum != 0 ) insert_node_last(plist3, sum, a->expon);

a=a->link; b=b->link;

}
else if( a->expon > b->expon ){

insert_node_last(plist3, a->coef, a->expon);

a=a->link;

}

else {

insert_node_last(plist3, b->coef, b->expon);

b=b->link;

}

}

for( ; a != NULL; a=a->link)

insert_node_last(plist3, a->coef, a->expon);

for( ; b != NULL; b=b->link)

insert_node_last(plist3, b->coef, b->expon);

}

void poly_print(ListHeader *plist)

{

ListNode *p=plist->head;

for(;p;p=p->link){

printf("%d %dn", p->coef, p->expon);

}

}

main()

{

ListHeader list1, list2, list3;

init(&list1);

init(&list2);

init(&list3);

insert_node_last(&list1, 3,12);

insert_node_last(&list1, 2,8);
insert_node_last(&list1, 1,0);

        insert_node_last(&list2, 8,12);

        insert_node_last(&list2, -3,10);

        insert_node_last(&list2, 10,6);

        poly_add(&list1, &list2, &list3);

        poly_print(&list3);

        }

문제점 덧셈 연산만 가능함

해결 방안 덧셈 연산을 응용하여 뺄셈 연산을 구현하고 곱셈 및 나눗셈 연산도 구현해야 함

다섯째 날                                         2012 년 4 월 25 일 수요일

오늘의
                                            2 안 소스 확인 및 개선 방향 설정
 작업

        #include <stdio.h>

        #include <stdlib.h>

        #include <math.h>

        typedef struct ListNode {

        float coef;

        int expon;

 2안     struct ListNode *link;

        } ListNode;

        typedef struct ListHeader {

        int length;

        ListNode *head;

        ListNode *tail;

        } ListHeader;
void init(ListHeader *plist);

void free_poly(struct ListHeader *list);

void insert_node_last(ListHeader *plist, float coef, int expon);

void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 );

void poly_sub(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 );

void poly_mul(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 );

void poly_op(ListHeader *plist);

void poly_print(ListHeader *plist);

main()

{

ListHeader list1, list2, list3;

int choice, a, i;

init(&list1);

init(&list2);

init(&list3);

printf("첫번째 다항식의 입력할 항 수를 정하시오");

scanf("%d", &a);

for(i=0; i<a; i++)

{

float coef;

int expon;

printf("계수를 입력하시오.(실수) ");

scanf("%f", &coef);

printf("지수를 입력하시오.(정수) ");
scanf("%d", &expon);

insert_node_last(&list1, coef, expon);

}

printf("두번째 다항식의 입력할 항 수를 정하시오");

scanf("%d", &a);

for(i=0; i<a; i++)

{

float coef;

int expon;

printf("계수를 입력하시오.(실수) ");

scanf("%f", &coef);

printf("지수를 입력하시오.(정수) ");

scanf("%d", &expon);

insert_node_last(&list2, coef, expon);

}

printf("1. 다항식 덧셈n");

printf("2. 다항식 뺄셈n");

printf("3. 다항식 곱셈n");

printf("4. 1 번다항식 연산n");

printf("5. 2 번다항식 연산n");

printf("6. 끝내기nn");

printf("원하는 항목을 선택하시오 : ");

scanf("%d", &choice);

if(choice==1)
{

poly_add(&list1, &list2, &list3);

poly_print(&list3);

}

else if(choice==2)

{

poly_sub(&list1, &list2, &list3);

poly_print(&list3);

}

else if(choice==3)

{

poly_mul(&list1, &list2, &list3);

poly_print(&list3);

}

else if(choice==4)

poly_op(&list1);

else if(choice==5)

poly_op(&list2);

else if(choice==6)

printf("감사합니다.");

else

printf("잘못입력하였습니다.");

system("PAUSE");

}
void init(ListHeader *plist)

{

plist->length = 0;

plist->head = plist->tail = NULL;

}

void free_poly(struct ListHeader *list)

{

free(list);

}

void insert_node_last(ListHeader *plist, float coef, int expon)

{

ListNode *p = plist->head;

ListNode *temp = (ListNode *)malloc(sizeof(ListNode));

if( temp == NULL )

{

fprintf(stderr,"메모리 할당 에러n");

exit(1);

}

temp->coef=coef;

temp->expon=expon;

temp->link=NULL;

if( plist->tail == NULL )

{

plist->head = plist->tail = temp;
}

else

{

plist->tail->link = temp;

plist->tail = temp;

}

plist->length++;

}

void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 )

{

ListNode *a = plist1->head;

ListNode *b = plist2->head;

float sum;

while(a && b)

{

if( a->expon == b->expon )

{

sum = a->coef + b-> coef;

if( sum != 0 ) insert_node_last(plist3, sum, a->expon);

a=a->link; b=b->link;

}

else if( a->expon > b->expon )

{

insert_node_last(plist3, a->coef, a->expon);
a=a->link;

}

else

{

insert_node_last(plist3, b->coef, b->expon);

b=b->link;

}

}

for( ; a != NULL; a=a->link)

insert_node_last(plist3, a->coef, a->expon);

for( ; b != NULL; b=b->link)

insert_node_last(plist3, b->coef, b->expon);

}

void poly_sub(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 )

{

ListNode *a = plist1->head;

ListNode *b = plist2->head;

float sub;

while(a && b)

{

if( a->expon == b->expon )

{

sub = a->coef - b-> coef;

if( sub != 0 ) insert_node_last(plist3, sub, a->expon);
a=a->link; b=b->link;

}

else if( a->expon > b->expon )

{

insert_node_last(plist3, a->coef, a->expon);

a=a->link;

}

else

{

insert_node_last(plist3, b->coef, b->expon);

b=b->link;

}

}

for( ; a != NULL; a=a->link)

insert_node_last(plist3, a->coef, a->expon);

for( ; b != NULL; b=b->link)

insert_node_last(plist3, b->coef, b->expon);

}

void poly_mul(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 )

{

ListNode *a = plist1->head;

ListNode *b = plist2->head;

ListNode *p = plist3->head;

float mul_coef;
int mul_expon;

while(a)

{

while(b)

{

mul_coef = a->coef * b->coef;

mul_expon = a->expon + b->expon;

insert_node_last(plist3, mul_coef, mul_expon);

b=b->link;

}

b=plist2->head;

a=a->link;

}

}

void poly_op(ListHeader *plist)

{

ListNode *a = plist->head;

float x,c,value=0;

printf("x 값을 입력하시오 : ");

scanf("%f", &x);

for(; a != NULL; )

{

c=pow(x,a->expon);

c*=a->coef;
value+=c;

    a=a->link;

    }

    printf("%f",value);

    }

    void poly_print(ListHeader *plist)

    {

    ListNode *p=plist->head;

    for(;p;p=p->link)

    {

    printf("%.3fx^%d ", p->coef, p->expon);

    }

    free_poly(plist);

    }

문제점 다항식 곱셈연산에서 지수가 같은 항의 계수부분이 연산 되지 않음


                                         III. 결과
#include <stdio.h>

       #include <stdlib.h>

       #include <math.h>

       typedef struct ListNode {

       float coef;

       int expon;

       struct ListNode *link;

       } ListNode;

       typedef struct ListHeader {

       int length;

       ListNode *head;
최종
       ListNode *tail;
프로그램
       } ListHeader;
소스
       void init(ListHeader *plist);

       void free_poly(struct ListHeader *list);

       void insert_node_last(ListHeader *plist, float coef, int expon);

       void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 );

       void poly_sub(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 );

       void poly_mul(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 );

       void poly_op(ListHeader *plist);

       void poly_print(ListHeader *plist);

       main()

       {

       ListHeader list1, list2, list3;
int choice, a, i;

init(&list1);

init(&list2);

init(&list3);

printf("첫번째 다항식의 입력할 항 수를 정하시오");

scanf("%d", &a);

for(i=0; i<a; i++)

{

float coef;

int expon;

printf("계수를 입력하시오.(실수) ");

scanf("%f", &coef);

printf("지수를 입력하시오.(정수) ");

scanf("%d", &expon);

insert_node_last(&list1, coef, expon);

}

printf("두번째 다항식의 입력할 항 수를 정하시오");

scanf("%d", &a);

for(i=0; i<a; i++)

{

float coef;

int expon;

printf("계수를 입력하시오.(실수) ");

scanf("%f", &coef);
printf("지수를 입력하시오.(정수) ");

scanf("%d", &expon);

insert_node_last(&list2, coef, expon);

}

printf("1. 다항식 덧셈n");

printf("2. 다항식 뺄셈n");

printf("3. 다항식 곱셈n");

printf("4. 1 번다항식 연산n");

printf("5. 2 번다항식 연산n");

printf("6. 끝내기nn");

printf("원하는 항목을 선택하시오 : ");

scanf("%d", &choice);

if(choice==1)

{

poly_add(&list1, &list2, &list3);

poly_print(&list3);

}

else if(choice==2)

{

poly_sub(&list1, &list2, &list3);

poly_print(&list3);

}

else if(choice==3)

{
poly_mul(&list1, &list2, &list3);

poly_print(&list3);

}

else if(choice==4)

poly_op(&list1);

else if(choice==5)

poly_op(&list2);

else if(choice==6)

printf("감사합니다.");

else

printf("잘못입력하였습니다.");

system("PAUSE");

}

void init(ListHeader *plist)

{

plist->length = 0;

plist->head = plist->tail = NULL;

}

void free_poly(struct ListHeader *list)

{

free(list);

}

void insert_node_last(ListHeader *plist, float coef, int expon)

{
ListNode *p = plist->head;

ListNode *temp = (ListNode *)malloc(sizeof(ListNode));

if( temp == NULL )

{

fprintf(stderr,"메모리 할당 에러n");

exit(1);

}

temp->coef=coef;

temp->expon=expon;

temp->link=NULL;

if( plist->tail == NULL )

{

plist->head = plist->tail = temp;

}

else

{

plist->tail->link = temp;

plist->tail = temp;

}

plist->length++;

}

void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 )

{

ListNode *a = plist1->head;
ListNode *b = plist2->head;

float sum;

while(a && b)

{

if( a->expon == b->expon )

{

sum = a->coef + b-> coef;

if( sum != 0 ) insert_node_last(plist3, sum, a->expon);

a=a->link; b=b->link;

}

else if( a->expon > b->expon )

{

insert_node_last(plist3, a->coef, a->expon);

a=a->link;

}

else

{

insert_node_last(plist3, b->coef, b->expon);

b=b->link;

}

}

for( ; a != NULL; a=a->link)

insert_node_last(plist3, a->coef, a->expon);

for( ; b != NULL; b=b->link)
insert_node_last(plist3, b->coef, b->expon);

}

void poly_sub(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 )

{

ListNode *a = plist1->head;

ListNode *b = plist2->head;

float sub;

while(a && b)

{

if( a->expon == b->expon )

{

sub = a->coef - b-> coef;

if( sub != 0 ) insert_node_last(plist3, sub, a->expon);

a=a->link; b=b->link;

}

else if( a->expon > b->expon )

{

insert_node_last(plist3, a->coef, a->expon);

a=a->link;

}

else

{

insert_node_last(plist3, b->coef, b->expon);

b=b->link;
}

}

for( ; a != NULL; a=a->link)

insert_node_last(plist3, a->coef, a->expon);

for( ; b != NULL; b=b->link)

insert_node_last(plist3, b->coef, b->expon);

}

void poly_mul(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 )

{

ListNode *a = plist1->head;

ListNode *b = plist2->head;

ListNode *p = plist3->head;

float mul_coef;

int mul_expon;

while(a)

{

while(b)

{

mul_coef = a->coef * b->coef;

mul_expon = a->expon + b->expon;

insert_node_last(plist3, mul_coef, mul_expon);

b=b->link;

}

b=plist2->head;
a=a->link;

}

}

void poly_op(ListHeader *plist)

{

ListNode *a = plist->head;

float x,c,value=0;

printf("x 값을 입력하시오 : ");

scanf("%f", &x);

for(; a != NULL; )

{

c=pow(x,a->expon);

c*=a->coef;

value+=c;

a=a->link;

}

printf("%f",value);

}

void poly_print(ListHeader *plist)

{

ListNode *p=plist->head;

for(;p;p=p->link)

{

printf("%.3fx^%d + ", p->coef, p->expon);
if (p->link == NULL){

printf("%c%c",8,8);

}

}

free_poly(plist);

}
1. 덧셈 연산

        입력 : P(X) = 3x^4 + 5x^6

        S(X) = 3x^4 + 5x^6

        결과 : 6x^4 + 10x^6

        2. 곱셈 연산 (문제점)

        입력 : P(X) = 3x^4 + 5x^6

        S(X) = 3x^4 + 5x^6

        출력 : 9x^8 + 15x^10 + 15x^10 + 25x^12

        1. 덧셈 연산

결과 출력




        2. 곱셈 연산 (문제점)
Ⅳ. 반성

과제를 연결 리스트에 대해 많이 알게 되었지만, 과제를 확실하게 마무리 하지 못해 아쉬운

마치면서 점이 많이 남는 프로젝트였습니다.

느낀 점 사전 자료조사에 대한 중요성을 다시 한번 알게 되었습니다.

Mais conteúdo relacionado

Mais procurados

Mais procurados (6)

자구4번
자구4번자구4번
자구4번
 
자료구조04
자료구조04자료구조04
자료구조04
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4
 
2012 Ds 03
2012 Ds 032012 Ds 03
2012 Ds 03
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
PHP 사용하기
PHP 사용하기PHP 사용하기
PHP 사용하기
 

Destaque

자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1KoChungWook
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentationdogtipper
 
数学之美与浪潮之巅
数学之美与浪潮之巅数学之美与浪潮之巅
数学之美与浪潮之巅wangqunbaidu
 
Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Jane Frankland
 
이산치수학 Project4
이산치수학 Project4이산치수학 Project4
이산치수학 Project4KoChungWook
 
이산치수학 Project6
이산치수학 Project6이산치수학 Project6
이산치수학 Project6KoChungWook
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivasJOSEYENIBORGES
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Story board
Story boardStory board
Story board10ggo
 
Equations & Expressions Sub Unit B
Equations & Expressions Sub Unit BEquations & Expressions Sub Unit B
Equations & Expressions Sub Unit Bmrsfrasure
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivasJOSEYENIBORGES
 
이산치수학 Project5
이산치수학 Project5이산치수학 Project5
이산치수학 Project5KoChungWook
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3KoChungWook
 
Tugas praktik bahasa rakitan 2
Tugas praktik bahasa rakitan 2Tugas praktik bahasa rakitan 2
Tugas praktik bahasa rakitan 2Taufik Setiawan
 

Destaque (20)

자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation
 
数学之美与浪潮之巅
数学之美与浪潮之巅数学之美与浪潮之巅
数学之美与浪潮之巅
 
Azteca Mango
Azteca MangoAzteca Mango
Azteca Mango
 
Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)
 
이산치수학 Project4
이산치수학 Project4이산치수학 Project4
이산치수학 Project4
 
이산치수학 Project6
이산치수학 Project6이산치수학 Project6
이산치수학 Project6
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivas
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Story board
Story boardStory board
Story board
 
Equations & Expressions Sub Unit B
Equations & Expressions Sub Unit BEquations & Expressions Sub Unit B
Equations & Expressions Sub Unit B
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivas
 
Klik today
Klik todayKlik today
Klik today
 
이산치수학 Project5
이산치수학 Project5이산치수학 Project5
이산치수학 Project5
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3
 
Tugas praktik bahasa rakitan 2
Tugas praktik bahasa rakitan 2Tugas praktik bahasa rakitan 2
Tugas praktik bahasa rakitan 2
 

Semelhante a 자료구조 Project3

Project#3다항식의연산 Hwp
Project#3다항식의연산 HwpProject#3다항식의연산 Hwp
Project#3다항식의연산 HwpKimjeongmoo
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdfkd19h
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02chl132435
 
2012 Ds A1 05
2012 Ds A1 052012 Ds A1 05
2012 Ds A1 05seonhyung
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서KimChangHoen
 
chatbot-seminar-1806
chatbot-seminar-1806chatbot-seminar-1806
chatbot-seminar-1806juneyoungdev
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
2012 Dm C3 06
2012 Dm C3 062012 Dm C3 06
2012 Dm C3 06chl132435
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택JinTaek Seo
 
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POPChiwon Song
 
자료구조 02 최종 보고서
자료구조 02 최종 보고서자료구조 02 최종 보고서
자료구조 02 최종 보고서pkok15
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7mil23
 
PHP Answerable Bulletin Board
PHP Answerable Bulletin BoardPHP Answerable Bulletin Board
PHP Answerable Bulletin BoardSeonSangWon
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfkd19h
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfjinwookhong
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6KoChungWook
 

Semelhante a 자료구조 Project3 (20)

Project#3다항식의연산 Hwp
Project#3다항식의연산 HwpProject#3다항식의연산 Hwp
Project#3다항식의연산 Hwp
 
3. linked list
3. linked list3. linked list
3. linked list
 
자료구조02
자료구조02자료구조02
자료구조02
 
자구2번
자구2번자구2번
자구2번
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
2012 Ds A1 05
2012 Ds A1 052012 Ds A1 05
2012 Ds A1 05
 
Object C - RIP
Object C - RIPObject C - RIP
Object C - RIP
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서
 
chatbot-seminar-1806
chatbot-seminar-1806chatbot-seminar-1806
chatbot-seminar-1806
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
2012 Dm C3 06
2012 Dm C3 062012 Dm C3 06
2012 Dm C3 06
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP
 
자료구조 02 최종 보고서
자료구조 02 최종 보고서자료구조 02 최종 보고서
자료구조 02 최종 보고서
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7
 
PHP Answerable Bulletin Board
PHP Answerable Bulletin BoardPHP Answerable Bulletin Board
PHP Answerable Bulletin Board
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6
 

자료구조 Project3

  • 1. 과제수행일지 소속 조원 B2 조장 : 최완철 자료조사 : 강승우, 김남희 프로그래밍 : 고충욱, 정준용 과제수행 3일 기간 I. 계획의 작성 연구제목 Linked List 학습한 내용에 대해 이해를 하고, Linked List 의 정의를 알고, 연구배경 이것을 프로그램으로 만들어 봄으로써 활용법을 안다. http://ko.wikipedia.org/wiki/%EB%A7%81%ED%81%AC%EB%93%9C_%EB%A6%AC 참 %EC%8A%A4%ED%8A%B8 고 참고자료 -> 링크드 리스트의 정의와 종류 UR http://blog.naver.com/skout123?Redirect=Log&logNo=50134180161 L -> 연결리스트와 용어에 대한 설명, 사진 (본문에 포함) II. 계획의 실행 첫째 날 2012 년 4 월 12 일 목요일 오늘의 계획수립 및 역할 분담 작업
  • 2. 조장 : 최완철 자료조사 : 강승우, 김남희 프로그래밍 : 고충욱, 정준용 토의 내용 위와 같이 조원의 업무 분담을 하였으며, 3 번째 과제와 관련된 링크드 리스트에 대한 자료조사를 최우선적으로 하기로 했다. 그리고 역할 분담은 각자가 하고 싶은 역할 위주로 정하였다. 과제준비 첫날에 아무것도 모르는 상황이라서 토의 진행이 되지 않았었다. 에서 그 때문에 사전 자료조사의 중요성을 느끼게 되었다. 느낀 점 둘째 날 2012 년 4 월 17 일 화요일 오늘의 링크드 리스트에 대한 자료를 이용하여 개념 이해 및 소스 구현방법 이해 작업 링크드 리스트 과제를 수행하기 위해서는 개념 이해가 중요하다고 느꼈다. 그래서 자료조사팀에서 조사한 내용을 가지고 이해하였다. 토의 내용
  • 3. 과제준비 링크드 리스트의 개념과 구조를 알게 되었으나, 소스로 구현하게 된다면 예상하지 못한 에서 문제들이 발생할 것 같다고 느꼈다. 느낀 점 셋째 날 2012 년 4 월 19 일 목요일 오늘의 소스 초안 확인 및 개선방향 설정 작업 소스초안에서는 다항식 연산에서 덧셈과 뺄셈만 구현하였다. 토의 내용 소스 초안의 연산 과정에 있어서 특별한 문제는 없었다.
  • 4. 아직 곱셈과 나눗셈 연산은 구현하지 못했기 때문에 이 부분에 대해서 초안에 추가적으로 구현을 하기로 하였다. 과제준비 곱셈 및 나눗셈 연산에서 지수가 같은 경우를 걸러내는 방법을 구현하는데 난관을 에서 겪었다. 느낀 점 곱셈과 나눗셈에 대한 더 많은 공부가 필요하다고 느끼게 되었다. 넷째 날 2012 년 4 월 24 일 화요일 오늘의 프로그램 소스 초안 코딩 작업 #include <stdio.h> #include <stdlib.h> typedef struct ListNode { int coef; int expon; struct ListNode *link; } ListNode; typedef struct ListHeader { int length; 초안 ListNode *head; ListNode *tail; } ListHeader; void init(ListHeader *plist) { plist->length = 0; plist->head = plist->tail = NULL; } void insert_node_last(ListHeader *plist, int coef, int expon)
  • 5. { ListNode *temp = (ListNode *)malloc(sizeof(ListNode)); if( temp == NULL ){ fprintf(stderr,"메모리 할당 에러n"); exit(1); } temp->coef=coef; temp->expon=expon; temp->link=NULL; if( plist->tail == NULL ){ plist->head = plist->tail = temp; } else { plist->tail->link = temp; plist->tail = temp; } plist->length++; } void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ) { ListNode *a = plist1->head; ListNode *b = plist2->head; int sum; while(a && b){ if( a->expon == b->expon ){ sum = a->coef + b-> coef; if( sum != 0 ) insert_node_last(plist3, sum, a->expon); a=a->link; b=b->link; }
  • 6. else if( a->expon > b->expon ){ insert_node_last(plist3, a->coef, a->expon); a=a->link; } else { insert_node_last(plist3, b->coef, b->expon); b=b->link; } } for( ; a != NULL; a=a->link) insert_node_last(plist3, a->coef, a->expon); for( ; b != NULL; b=b->link) insert_node_last(plist3, b->coef, b->expon); } void poly_print(ListHeader *plist) { ListNode *p=plist->head; for(;p;p=p->link){ printf("%d %dn", p->coef, p->expon); } } main() { ListHeader list1, list2, list3; init(&list1); init(&list2); init(&list3); insert_node_last(&list1, 3,12); insert_node_last(&list1, 2,8);
  • 7. insert_node_last(&list1, 1,0); insert_node_last(&list2, 8,12); insert_node_last(&list2, -3,10); insert_node_last(&list2, 10,6); poly_add(&list1, &list2, &list3); poly_print(&list3); } 문제점 덧셈 연산만 가능함 해결 방안 덧셈 연산을 응용하여 뺄셈 연산을 구현하고 곱셈 및 나눗셈 연산도 구현해야 함 다섯째 날 2012 년 4 월 25 일 수요일 오늘의 2 안 소스 확인 및 개선 방향 설정 작업 #include <stdio.h> #include <stdlib.h> #include <math.h> typedef struct ListNode { float coef; int expon; 2안 struct ListNode *link; } ListNode; typedef struct ListHeader { int length; ListNode *head; ListNode *tail; } ListHeader;
  • 8. void init(ListHeader *plist); void free_poly(struct ListHeader *list); void insert_node_last(ListHeader *plist, float coef, int expon); void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ); void poly_sub(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ); void poly_mul(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ); void poly_op(ListHeader *plist); void poly_print(ListHeader *plist); main() { ListHeader list1, list2, list3; int choice, a, i; init(&list1); init(&list2); init(&list3); printf("첫번째 다항식의 입력할 항 수를 정하시오"); scanf("%d", &a); for(i=0; i<a; i++) { float coef; int expon; printf("계수를 입력하시오.(실수) "); scanf("%f", &coef); printf("지수를 입력하시오.(정수) ");
  • 9. scanf("%d", &expon); insert_node_last(&list1, coef, expon); } printf("두번째 다항식의 입력할 항 수를 정하시오"); scanf("%d", &a); for(i=0; i<a; i++) { float coef; int expon; printf("계수를 입력하시오.(실수) "); scanf("%f", &coef); printf("지수를 입력하시오.(정수) "); scanf("%d", &expon); insert_node_last(&list2, coef, expon); } printf("1. 다항식 덧셈n"); printf("2. 다항식 뺄셈n"); printf("3. 다항식 곱셈n"); printf("4. 1 번다항식 연산n"); printf("5. 2 번다항식 연산n"); printf("6. 끝내기nn"); printf("원하는 항목을 선택하시오 : "); scanf("%d", &choice); if(choice==1)
  • 10. { poly_add(&list1, &list2, &list3); poly_print(&list3); } else if(choice==2) { poly_sub(&list1, &list2, &list3); poly_print(&list3); } else if(choice==3) { poly_mul(&list1, &list2, &list3); poly_print(&list3); } else if(choice==4) poly_op(&list1); else if(choice==5) poly_op(&list2); else if(choice==6) printf("감사합니다."); else printf("잘못입력하였습니다."); system("PAUSE"); }
  • 11. void init(ListHeader *plist) { plist->length = 0; plist->head = plist->tail = NULL; } void free_poly(struct ListHeader *list) { free(list); } void insert_node_last(ListHeader *plist, float coef, int expon) { ListNode *p = plist->head; ListNode *temp = (ListNode *)malloc(sizeof(ListNode)); if( temp == NULL ) { fprintf(stderr,"메모리 할당 에러n"); exit(1); } temp->coef=coef; temp->expon=expon; temp->link=NULL; if( plist->tail == NULL ) { plist->head = plist->tail = temp;
  • 12. } else { plist->tail->link = temp; plist->tail = temp; } plist->length++; } void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ) { ListNode *a = plist1->head; ListNode *b = plist2->head; float sum; while(a && b) { if( a->expon == b->expon ) { sum = a->coef + b-> coef; if( sum != 0 ) insert_node_last(plist3, sum, a->expon); a=a->link; b=b->link; } else if( a->expon > b->expon ) { insert_node_last(plist3, a->coef, a->expon);
  • 13. a=a->link; } else { insert_node_last(plist3, b->coef, b->expon); b=b->link; } } for( ; a != NULL; a=a->link) insert_node_last(plist3, a->coef, a->expon); for( ; b != NULL; b=b->link) insert_node_last(plist3, b->coef, b->expon); } void poly_sub(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ) { ListNode *a = plist1->head; ListNode *b = plist2->head; float sub; while(a && b) { if( a->expon == b->expon ) { sub = a->coef - b-> coef; if( sub != 0 ) insert_node_last(plist3, sub, a->expon);
  • 14. a=a->link; b=b->link; } else if( a->expon > b->expon ) { insert_node_last(plist3, a->coef, a->expon); a=a->link; } else { insert_node_last(plist3, b->coef, b->expon); b=b->link; } } for( ; a != NULL; a=a->link) insert_node_last(plist3, a->coef, a->expon); for( ; b != NULL; b=b->link) insert_node_last(plist3, b->coef, b->expon); } void poly_mul(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ) { ListNode *a = plist1->head; ListNode *b = plist2->head; ListNode *p = plist3->head; float mul_coef;
  • 15. int mul_expon; while(a) { while(b) { mul_coef = a->coef * b->coef; mul_expon = a->expon + b->expon; insert_node_last(plist3, mul_coef, mul_expon); b=b->link; } b=plist2->head; a=a->link; } } void poly_op(ListHeader *plist) { ListNode *a = plist->head; float x,c,value=0; printf("x 값을 입력하시오 : "); scanf("%f", &x); for(; a != NULL; ) { c=pow(x,a->expon); c*=a->coef;
  • 16. value+=c; a=a->link; } printf("%f",value); } void poly_print(ListHeader *plist) { ListNode *p=plist->head; for(;p;p=p->link) { printf("%.3fx^%d ", p->coef, p->expon); } free_poly(plist); } 문제점 다항식 곱셈연산에서 지수가 같은 항의 계수부분이 연산 되지 않음 III. 결과
  • 17. #include <stdio.h> #include <stdlib.h> #include <math.h> typedef struct ListNode { float coef; int expon; struct ListNode *link; } ListNode; typedef struct ListHeader { int length; ListNode *head; 최종 ListNode *tail; 프로그램 } ListHeader; 소스 void init(ListHeader *plist); void free_poly(struct ListHeader *list); void insert_node_last(ListHeader *plist, float coef, int expon); void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ); void poly_sub(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ); void poly_mul(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ); void poly_op(ListHeader *plist); void poly_print(ListHeader *plist); main() { ListHeader list1, list2, list3;
  • 18. int choice, a, i; init(&list1); init(&list2); init(&list3); printf("첫번째 다항식의 입력할 항 수를 정하시오"); scanf("%d", &a); for(i=0; i<a; i++) { float coef; int expon; printf("계수를 입력하시오.(실수) "); scanf("%f", &coef); printf("지수를 입력하시오.(정수) "); scanf("%d", &expon); insert_node_last(&list1, coef, expon); } printf("두번째 다항식의 입력할 항 수를 정하시오"); scanf("%d", &a); for(i=0; i<a; i++) { float coef; int expon; printf("계수를 입력하시오.(실수) "); scanf("%f", &coef);
  • 19. printf("지수를 입력하시오.(정수) "); scanf("%d", &expon); insert_node_last(&list2, coef, expon); } printf("1. 다항식 덧셈n"); printf("2. 다항식 뺄셈n"); printf("3. 다항식 곱셈n"); printf("4. 1 번다항식 연산n"); printf("5. 2 번다항식 연산n"); printf("6. 끝내기nn"); printf("원하는 항목을 선택하시오 : "); scanf("%d", &choice); if(choice==1) { poly_add(&list1, &list2, &list3); poly_print(&list3); } else if(choice==2) { poly_sub(&list1, &list2, &list3); poly_print(&list3); } else if(choice==3) {
  • 20. poly_mul(&list1, &list2, &list3); poly_print(&list3); } else if(choice==4) poly_op(&list1); else if(choice==5) poly_op(&list2); else if(choice==6) printf("감사합니다."); else printf("잘못입력하였습니다."); system("PAUSE"); } void init(ListHeader *plist) { plist->length = 0; plist->head = plist->tail = NULL; } void free_poly(struct ListHeader *list) { free(list); } void insert_node_last(ListHeader *plist, float coef, int expon) {
  • 21. ListNode *p = plist->head; ListNode *temp = (ListNode *)malloc(sizeof(ListNode)); if( temp == NULL ) { fprintf(stderr,"메모리 할당 에러n"); exit(1); } temp->coef=coef; temp->expon=expon; temp->link=NULL; if( plist->tail == NULL ) { plist->head = plist->tail = temp; } else { plist->tail->link = temp; plist->tail = temp; } plist->length++; } void poly_add(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ) { ListNode *a = plist1->head;
  • 22. ListNode *b = plist2->head; float sum; while(a && b) { if( a->expon == b->expon ) { sum = a->coef + b-> coef; if( sum != 0 ) insert_node_last(plist3, sum, a->expon); a=a->link; b=b->link; } else if( a->expon > b->expon ) { insert_node_last(plist3, a->coef, a->expon); a=a->link; } else { insert_node_last(plist3, b->coef, b->expon); b=b->link; } } for( ; a != NULL; a=a->link) insert_node_last(plist3, a->coef, a->expon); for( ; b != NULL; b=b->link)
  • 23. insert_node_last(plist3, b->coef, b->expon); } void poly_sub(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ) { ListNode *a = plist1->head; ListNode *b = plist2->head; float sub; while(a && b) { if( a->expon == b->expon ) { sub = a->coef - b-> coef; if( sub != 0 ) insert_node_last(plist3, sub, a->expon); a=a->link; b=b->link; } else if( a->expon > b->expon ) { insert_node_last(plist3, a->coef, a->expon); a=a->link; } else { insert_node_last(plist3, b->coef, b->expon); b=b->link;
  • 24. } } for( ; a != NULL; a=a->link) insert_node_last(plist3, a->coef, a->expon); for( ; b != NULL; b=b->link) insert_node_last(plist3, b->coef, b->expon); } void poly_mul(ListHeader *plist1, ListHeader *plist2, ListHeader *plist3 ) { ListNode *a = plist1->head; ListNode *b = plist2->head; ListNode *p = plist3->head; float mul_coef; int mul_expon; while(a) { while(b) { mul_coef = a->coef * b->coef; mul_expon = a->expon + b->expon; insert_node_last(plist3, mul_coef, mul_expon); b=b->link; } b=plist2->head;
  • 25. a=a->link; } } void poly_op(ListHeader *plist) { ListNode *a = plist->head; float x,c,value=0; printf("x 값을 입력하시오 : "); scanf("%f", &x); for(; a != NULL; ) { c=pow(x,a->expon); c*=a->coef; value+=c; a=a->link; } printf("%f",value); } void poly_print(ListHeader *plist) { ListNode *p=plist->head; for(;p;p=p->link) { printf("%.3fx^%d + ", p->coef, p->expon);
  • 26. if (p->link == NULL){ printf("%c%c",8,8); } } free_poly(plist); }
  • 27. 1. 덧셈 연산 입력 : P(X) = 3x^4 + 5x^6 S(X) = 3x^4 + 5x^6 결과 : 6x^4 + 10x^6 2. 곱셈 연산 (문제점) 입력 : P(X) = 3x^4 + 5x^6 S(X) = 3x^4 + 5x^6 출력 : 9x^8 + 15x^10 + 15x^10 + 25x^12 1. 덧셈 연산 결과 출력 2. 곱셈 연산 (문제점)
  • 28. Ⅳ. 반성 과제를 연결 리스트에 대해 많이 알게 되었지만, 과제를 확실하게 마무리 하지 못해 아쉬운 마치면서 점이 많이 남는 프로젝트였습니다. 느낀 점 사전 자료조사에 대한 중요성을 다시 한번 알게 되었습니다.