E D R , A S I H C RSS

Polynomial

λͺ©μ 

λ‹€ν•­μ‹μ˜ κ³±μ…ˆμ„ μ΄μš©ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•œλ‹€.

자료ꡬ쑰

ν•˜λ‚˜μ˜ 항은 coefficient 와 exponent 둜 κ΅¬μ„±λœλ‹€. ν•˜λ‚˜μ˜ ν•­(단항식)을 ν‘œν˜„ν•˜λŠ” μžλ£Œκ΅¬μ‘°λŠ” λ‹€μŒμ²˜λŸΌ κ΅¬μ‘°μ²΄λΌ μ‚¬μš©ν•œλ‹€. (μ—¬κΈ°μ„œλŠ” μ§€μˆ˜μ™€ λ°‘λͺ¨λ‘ integerλΌ μ‚¬μš©ν•œλ‹€)

~cpp 
  struct Node {
   int coef; // λ°‘
   int exp; // μ§€μˆ˜   
  };
 

닀항식을 ν‘œν˜„ν•˜λŠ”μžλ£Œκ΅¬μ‘°λŠ” 크게 λ‘κ°€μ§€λ‘œ 생각해 λ³Ό 수 μžˆλ‹€. linked list 와 array 이닀. 배열은 λͺ¨λ‘λ“€ 잘 μ•Œκ² κ³  linked list λŠ” λ™μ μœΌλ‘œ storageλΌ ν• λ‹Ήλ°›μ•„ 각 λ…Έλ“œλΌ ν¬μΈν„°λ‘œ μ—°κ²°ν•œ μžλ£Œκ΅¬μ‘°λΌ λ§ν•œλ‹€..(라고 μš°μ„  μ„λͺ…λ§Œ 해둬야지 μ •ν™•ν•œ μ •μ˜λŠ” 내리지 λͺ»ν•˜κ² λ‹€..-_-). λ¬Όλ‘  λ™μ μœΌλ‘œ 할당받지 μ•Šκ³ λ„ linked list λΌ κ΅¬ν˜„ν• μˆ˜ μžˆμ§€λ§Œ 그럴꺼면 λ°°μ—΄λ‘œ ν•˜λŠ”κ²Œ 낫지 κ·Έ λ…Έκ°€λ‹€λΌ λ­ν•˜λŸ¬ ν•˜λ‚˜...-_-

  • 배열을 μ‚¬μš©ν•œ 방법

    ~cpp 
       Node expr_1[SIZE];  // 이와 같은 μ‹μœΌλ‘œ ν‘œν˜„ν•œλ‹€.
       Node expr_2[SIZE];  
      

  • linked list λΌ μ‚¬μš©ν•œ 방법

    ~cpp 
       // μœ„μ˜ μ •μ˜ν•œ ꡬ쑰체에 포인터 λ³€μˆ˜ λ‘κ°œκ°€ 더 ν•„μš”ν•˜λ‹€.
       struct Node {
        int coef;
        int exp;
        Node *prev;
        Node *next;
       };
    
       Node *n1 = new Node;
       Node *n2 = new Node;
       n1->next = n2;
       n1->prev = NULL;
       n2->next = NULL;
       n2->prev = n1;
       
      

    이 방법을 μ‚¬μš©ν• λ•Œ λ°œμƒν• μˆ˜ μžˆλŠ” λ¬Έμ œμ μ€ memory leakage (λ©”λͺ¨λ¦¬ λˆ„μˆ˜)이닀. Java같은 κ²½μš°λŠ” μ“°λ ˆκΈ° μˆ˜μ§‘κΈ°κ°€ μžˆμ§€λ§Œ c λŠ” 코더(-_-)κ°€ 일일이 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” μžμ›μ„ νšŒμˆ˜ν•΄μ€˜μ•Ό ν•œλ‹€. 그렇지 μ•ŠμœΌλ©΄ κ·Έ μžμ›μ„ λ‹€μ‹œ μ‚¬μš©ν•  수 μ—†κ²Œ λœλ‹€.

specification

λ‹€μŒκ³Ό 같은 prototype 을 κ°–λŠ” ν•¨μˆ˜λΌ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. (이름은 달리해도 상관없닀..)

~cpp 
   Node* mul(Node *n1, Node *n2);  // 두 λ‹€ν•­μ‹μ˜ 곱을 ν‘œν˜„ν•˜λŠ” μƒˆλ‘œμš΄ 닀항식을 λ¦¬ν„΄ν•œλ‹€.
   Node* add(Node *n1, Node *n2);  // 두 λ‹€ν•­μ‹μ˜ 합을 ν‘œν˜„ν•˜λŠ” μƒˆλ‘œμš΄ 닀항식을 λ¦¬ν„΄ν•œλ‹€.
   Node* add(Node *n1, Node *n2);  // 두 λ‹€ν•­μ‹μ˜ μ°¨λΌ ν‘œν˜„ν•˜λŠ” μƒˆλ‘œμš΄ 닀항식을 λ¦¬ν„΄ν•œλ‹€.
   /* 문제점 : λ‹€μŒκ³Ό 같은 κ²½μš°λŠ” μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Ό ν• κΉŒ?
   n1 = mul(n1, n2);  // n1 이 쀑볡 μ‚¬μš©λ˜μ—ˆλ‹€..
   */
   Node* input();                 // μ‚¬μš©μžμ—κ²Œ 값을 μž…λ ₯λ°›μ•„ μƒˆλ‘œμš΄ 닀항식을 μƒμ„±ν•˜μ—¬ λ¦¬ν„΄ν•œλ‹€.
   void delete(Node *node)        // 닀항식을 μ‚­μ œν•œλ‹€.
   void sort(Node *node)          // 닀항식을 λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ¦¬ν•œλ‹€.
  

input data

λ‹€μŒκ³Ό 같은 자료의 ν•©, μ°¨, 곱을 λ¦¬ν„΄ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€

~cpp 
    식1 : 2x^5 + 3x^2 - 2x + 10
    식2 : 2x^4 + x^3 - 5x^2 +3
  

μž‘λ‹΄

  • 닀항식을 ν‘œν˜„ν•˜λŠ” ν΄λž˜μŠ€λΌ λ§Œλ“€μ–΄μ„œ operator overloading 을 μ‚¬μš©ν•΄λ„ λ˜κ² μ§€λ§Œ μ΄λŠ” μœ„μ— λ§ν•œ λ‚΄μš©μ„ μ΄λΈ κ΅¬ν˜„ν•œ ν›„ 이걸 클래슀둜 포μž₯ν•˜λŠ”κ±°κΈ°λ•Œλ¬Έμ— μ§€κΈˆμˆ˜μ€μ—μ„œλŠ” 무리라고 생각됨... - μž„μΈνƒ
  • 이거 μž‘λ…„μ— ν–ˆλ‹€κ°€ ν•œλͺ…("영창이")만 겨우 ν’€μ—ˆμ–΄μš” 저도 이거 ν•˜λ‹€ ν¬κΈ°ν–ˆκ³  1ν•™λ…„μ—κ²Œ λ„˜ μ–΄λ €μš΄ λ¬Έμ œκ°€ μ•„λ‹λŸ°μ§€...-μž¬λ™


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:24:00
Processing time 0.0131 sec