Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 31 kết quả

Đề tài: Bài toán tính toán số học với số nguyên lớn?

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    31

    Thumbs down Bài toán tính toán số học với số nguyên lớn?

    các bạn giúp mình với! mình viết 1 chương trình tính toán với số nguyên lớn! nhưng không biết lỗi ở đâu!
    C++ Code:
    1. /////////////////////////////////////////////////////////////////////////////
    2. //                                                                                                //
    3. //                                                                                                  //
    4. // The program allows to excute arithmetic operations with grand integer.  //
    5. //Each of the grand integer will be storaged by a double-liked list.       //
    6. //  <Chuong trinh cho phep thuc hien cac phep tinh so hoc tren nhung so    //
    7. // nguyen lon. Moi so nguyen se duoc luu tru bang 1 danh sach moc noi doi> //
    8. /////////////////////////////////////////////////////////////////////////////
    9. #include <iostream.h>
    10. #include <stdlib.h>
    11. #include <conio.h>
    12. #include <stdio.h>
    13. #include <string.h>
    14. #include <math.h>
    15. #include <ctype.h>
    16.  
    17. class Node
    18. {
    19.   private:                     //   _____ _______ _____
    20.     Node*  pLeft;          //  |_____|_______|_____|
    21.     Node*  pRight;
    22.     int data;
    23.   public:
    24.     Node() {data=0;pLeft=new Node;pRight=new Node;}    //cac ham khoi tao
    25.     Node(int x)
    26.     {
    27.         Node* temp= new Node;
    28.         temp->data= x;
    29.         temp->pLeft=new Node;
    30.         temp->pRight=new Node;
    31.     }
    32.     Node(const Node &x)
    33.     {
    34.                 pLeft=new Node;
    35.                 pRight=new Node;
    36.         pLeft=x.pLeft;
    37.         pRight=x.pRight;
    38.         data=x.data;
    39.     }
    40.     ~Node()
    41.     {
    42.         delete pLeft;
    43.  
    44.         delete pRight;
    45.  
    46.         data=0;
    47.     }
    48.     int GetDataNode()                    //tra lai gia tri cua 1 node
    49.     {
    50.         return data;
    51.     }
    52.     Node * GetLeftNode()
    53.     {
    54.         return pLeft;
    55.     }
    56.     Node * GetRightNode()
    57.     {
    58.         return pRight;
    59.     }
    60.     void SetDataNode(int x)
    61.     {
    62.         data=x;
    63.     }
    64.     void SetLeftNode(Node *x)
    65.     {
    66.         pLeft=x;
    67.     }
    68.     void SetRightNode(Node *x)
    69.     {
    70.         pRight=x;
    71.     }
    72.  
    73. };
    74.  
    75. //lop Linkedlist
    76. class LinkedList
    77. {
    78.   private:
    79.     Node*  pHead;          //consider the most left element is head
    80.     Node*  pTail;          //consider the most right element is tail
    81.     int count;             //count the number of LinkedList
    82.   public:
    83.     LinkedList() {pHead=new Node; pTail=new Node; count=0;}  //cac ham tao
    84.  
    85.     LinkedList(const LinkedList &x)
    86.     {
    87.                 pHead=new Node;
    88.                 pTail=new Node;
    89.         pHead=x.pHead;
    90.         pTail=x.pTail;
    91.         count=x.count;
    92.     }
    93.  
    94.     Node* GetHead () const {return pHead;}     //tra lai vi tri dau danh sach
    95.     Node* GetTail() const {return pTail;}      //tra lai vi tri cuoi danh sach
    96.     int GetCount() const {return count;}
    97.     void InsCount() {count++;}
    98.     void DeCount() {count--;}
    99.     void DeleteHeadNode()
    100.     {
    101.         (pHead->GetRightNode())->SetLeftNode(0);
    102.         pHead=pHead->GetRightNode();
    103.         count--;
    104.     }
    105.     void DeleteTailNode()
    106.     {
    107.         (pTail->GetLeftNode())->SetRightNode(0);
    108.         pTail=pTail->GetLeftNode();
    109.         count--;
    110.     }
    111.  
    112.     void  InsertTail(Node *x);                 //chen 1 node vao cuoi ds
    113.     void  InsertHead(Node *x);                 //chen 1 node vao dau ds
    114.     void  InsertTail(int x);                  //chen 1 so vao cuoi ds
    115.     void  InsertHead(int x);                  //chen 1 so vao dau ds
    116.  
    117. };
    118.  
    119. void LinkedList::InsertTail(Node *x)
    120. {
    121.   Node* temp=new Node;
    122.   temp=x;
    123.   temp->SetLeftNode(pTail);
    124.   temp->SetRightNode(0);
    125.   pTail->SetRightNode(temp);
    126.   pTail=temp;
    127.   count++;
    128. }
    129. void LinkedList::InsertHead(Node *x)
    130. {
    131.   Node* temp=new Node;
    132.   temp=x;
    133.   temp->SetRightNode(pHead);
    134.   temp->SetLeftNode(0);
    135.   pHead->SetLeftNode(temp);
    136.   pHead=temp;
    137.   count++;
    138. }
    139. void LinkedList::InsertTail(int x)
    140. {
    141.   Node* temp=new Node;
    142.   temp->SetDataNode(x);
    143.   temp->SetLeftNode(pTail);
    144.   temp->SetRightNode(0);
    145.   pTail->SetRightNode(temp);
    146.   pTail=temp;
    147.   count++;
    148. }
    149. void LinkedList::InsertHead(int x)
    150. {
    151.   Node* temp=new Node;
    152.   temp->SetDataNode(x);
    153.   temp->SetRightNode(pHead);
    154.   temp->SetLeftNode(0);
    155.   pHead->SetLeftNode(temp);
    156.   pHead=temp;
    157.   count++;
    158. }
    159.  
    160.  
    161.  
    162. class GrandInt                     //grand integer class
    163. {
    164.   private:
    165.     int         sign;            //sign of the grand integer: 0 if plus, 1 if minus
    166.     LinkedList *Value;          //the value of grand integer which performed
    167.                    //by a double-linked list
    168.   public:
    169.     //set up functions
    170.     GrandInt();
    171.     GrandInt(long);
    172.   //    GrandInt(char*);
    173.     GrandInt(LinkedList*,int);
    174.     GrandInt(const GrandInt &);
    175.     ~GrandInt();
    176.  
    177.     //defines assign operator
    178.     GrandInt& operator= (const GrandInt&);
    179.  
    180.     //these operator +,-,*,/ were declared like a friend function
    181.     friend GrandInt operator+ (const GrandInt&, const GrandInt&);
    182.     friend GrandInt operator- (const GrandInt&, const GrandInt&);
    183.     friend GrandInt operator* (const GrandInt&, const GrandInt&);
    184.     friend GrandInt operator/ (const GrandInt&, const GrandInt&);
    185.     friend GrandInt operator% (const GrandInt&, const GrandInt&);
    186.     friend GrandInt    mod    (const GrandInt&, const GrandInt&);
    187.  
    188.     //comparing operators
    189.     friend int operator== (const GrandInt&, const GrandInt&);
    190.     friend int operator>  (const GrandInt&, const GrandInt&);
    191.     friend int operator>= (const GrandInt&, const GrandInt&);
    192.     friend int operator<  (const GrandInt&, const GrandInt&);
    193.     friend int operator<= (const GrandInt&, const GrandInt&);
    194.     friend int operator!= (const GrandInt&, const GrandInt&);
    195.  
    196.     //reversing-sign operator and open assigning operators
    197.     GrandInt operator- () const;
    198.     GrandInt& operator+= (const GrandInt&);
    199.     GrandInt& operator-= (const GrandInt&);
    200.     GrandInt& operator*= (const GrandInt&);
    201.     GrandInt& operator/= (const GrandInt&);
    202.  
    203.     //Absolute function
    204.     GrandInt Abs();
    205.  
    206.     //input/output operator
    207.     friend ostream& operator<< (ostream&, const GrandInt&);
    208.     friend istream& operator>> (istream&, GrandInt&);
    209.  
    210.   private:
    211.     //assistance functions
    212.     static LinkedList* Plus   (LinkedList*, LinkedList*);
    213.     static LinkedList* Minus  (LinkedList*, LinkedList*);
    214.     static LinkedList* Multi  (LinkedList*, LinkedList*);
    215.     static int         Compare(LinkedList*, LinkedList*);
    216. };
    217.  
    218. //=============== Execute Part =====================\\
    219.  
    220. GrandInt::GrandInt() {sign=0;Value=new LinkedList;}
    221.  
    222. GrandInt::GrandInt(long l)
    223. {
    224.     sign= (l>=0) ? 0 : 1;
    225.     while(l%10!=0)
    226.     {
    227.     Value->InsertHead(l%10);
    228.     l=l%10;
    229.     }
    230. }
    231. /*GrandInt::GrandInt(char *s)
    232. {
    233.     sign=0;
    234.     int n=strlen(s)-1;
    235.     Value=new LinkedList;
    236.     do
    237.     {
    238.         switch(s[n])
    239.         {
    240.             case '-':
    241.                 sign=1;
    242.             case ' ':
    243.                 break;
    244.             default:
    245.                 Value->InsertHead(s[n]-'0');
    246.         }
    247.         n--;
    248.     } while(n>=0);
    249. } */
    250.  
    251. GrandInt::GrandInt(LinkedList *l,int _sign)
    252. {
    253.     Value=new LinkedList;
    254.     Value=l;
    255.     sign=_sign;
    256. }
    257. GrandInt::GrandInt(const GrandInt &s)
    258. {
    259.     sign=s.sign;
    260.     Value=new LinkedList;
    261.     Value=s.Value;
    262. }
    263. GrandInt::~GrandInt()
    264. {
    265.    delete Value;
    266. }
    267. GrandInt & GrandInt::operator=(const GrandInt &g)
    268. {
    269.     sign=g.sign;
    270.     Value=g.Value;
    271.     return *this;
    272. }
    273. GrandInt operator+ (const GrandInt &g1, const GrandInt &g2)
    274. {
    275.     if (g1.sign!=g2.sign)     //khac dau
    276.           {
    277.         int cmp= GrandInt::Compare(g1.Value,g2.Value);          //so sanh gia tri tuyet doi cua hai so
    278.         if (cmp==0) return GrandInt();
    279.         if (cmp>0)  return GrandInt(GrandInt::Minus(g1.Value,g2.Value),g1.sign);
    280.             else    return GrandInt(GrandInt::Minus(g2.Value,g1.Value),g2.sign);
    281.           }
    282.  
    283.      //cung dau
    284.      return GrandInt(GrandInt::Plus(g1.Value,g2.Value),g1.sign);
    285. }
    286. GrandInt operator- (const GrandInt &g1, const GrandInt &g2)
    287. {
    288.     return (g1+(-g2));
    289. }
    290. GrandInt operator* (const GrandInt &g1, const GrandInt &g2)
    291. {
    292.     return GrandInt(GrandInt::Multi(g1.Value,g2.Value),g1.sign!=g2.sign?1:0);
    293. }
    294. GrandInt operator/ (const GrandInt &g1, const GrandInt &g2)
    295. {
    296. /*  Phep chia:
    297.     Viec chia 2 so nguyen phai dua tren phep chia hai so duong voi cac tinh chat:
    298.     x=0,y!=0: x/y = 0, x%y = 0
    299.     x>0,y>0 : la phep chia 2 so duong
    300.     x<0,y<0 : x/y=-x/-y, x%y=-(x%-y)
    301.     x>0,y<0 : neu x%-y=0 thi x/y=-(x/-y), x%y=0
    302.           neu khong x/y=-(x/-y+1), x%y=x%-y+y
    303.     Trong moi truong hop x/y=x-(x/y)*y
    304.  
    305. */
    306.     if(g1==0) return GrandInt(0);
    307.     if((g1<0)&&(g2<0)) return ((-g1)/(-g2));
    308.     if((g1>0)&&(g2<0))
    309.     {
    310.         if(g1%(-g2)==0) return -(g1/(-g2));
    311.         else            return -(g1/(-g2)+1);
    312.     }
    313.     if((g1<0)&&(g2>0))
    314.     {
    315.         if((-g1)%g2==0) return ((-g1)/g2);
    316.         else        return -((-g1)/g2+1);
    317.     }
    318.     if(g1<g2)   return GrandInt();
    319.     //truong hop x>0,y>0 thuc hien phep chia
    320.     //su dung phep nhan 2 de tim ra so chia
    321.     //x/y = haimu_n + (x-y*haimu_n)/y
    322.  
    323.     GrandInt haimu_n(0);         //khai bao cac bien cuc bo de tinh toan
    324.     GrandInt yhaimu_n(g2);
    325.     GrandInt div(0);
    326.  
    327.     while (g1>=yhaimu_n*2)
    328.     {
    329.         haimu_n*=2;
    330.         yhaimu_n*=2;
    331.     }
    332.     div+=haimu_n+(g1-yhaimu_n)/g2;
    333.     return div;
    334. }
    335. GrandInt operator% (const GrandInt &g1,const GrandInt &g2)
    336. {
    337.     return (g1-(g1/g2)*g2);
    338. }
    339.  
    340. //cac toan tu so sanh
    341.  
    342. int operator== (const GrandInt &g1,const GrandInt &g2)
    343. {
    344.     return ((g1.sign==g2.sign)&&(GrandInt::Compare(g1.Value,g2.Value)==0));
    345. }
    346. int operator!= (const GrandInt &g1,const GrandInt &g2)
    347. {
    348.     return !(g1==g2);
    349. }
    350. int operator< (const GrandInt &g1,const GrandInt &g2)
    351. {
    352.     if(g1.sign)
    353.         return g2.sign?GrandInt::Compare(g1.Value,g2.Value)>0:1;
    354.     return  g2.sign?0:GrandInt::Compare(g1.Value,g2.Value)<0;
    355. }
    356. int operator<= (const GrandInt &g1,const GrandInt &g2)
    357. {
    358.     return ((g1==g2)||(g1<g2));
    359. }
    360. int operator> (const GrandInt &g1, const GrandInt &g2)
    361. {
    362.     if (g1.sign)
    363.         return (g2.sign? GrandInt::Compare(g1.Value,g2.Value)<0 : 0);
    364.     return (g2.sign? 1 : GrandInt::Compare(g1.Value,g2.Value)>0);
    365. }
    366. int operator>= (const GrandInt &g1, const GrandInt &g2)
    367. {
    368.     return ((g1==g2)||(g1>g2));
    369. }
    370.  
    371.  
    372. //cac toan tu mo rong
    373. GrandInt GrandInt::operator- () const
    374. {
    375.     return GrandInt(Value,!sign);
    376. }
    377. GrandInt& GrandInt::operator+= (const GrandInt& g)
    378. {
    379.     return (*this=*this + g);
    380. }
    381. GrandInt& GrandInt::operator-= (const GrandInt& g)
    382. {
    383.     return (*this=*this - g);
    384. }
    385. GrandInt& GrandInt::operator*= (const GrandInt& g)
    386. {
    387.     return (*this=*this*g);
    388. }
    389. GrandInt& GrandInt::operator/= (const GrandInt& g)
    390. {
    391. return (*this=*this/g);
    392. }
    393. GrandInt GrandInt::Abs()
    394. {
    395.     if(sign)
    396.         return GrandInt(Value,!sign);
    397.     return *this;
    398. }
    399.  
    400. //Xay dung toan tu sao ra cho so nguyen lon
    401.  
    402. ostream& operator<< (ostream& out, const GrandInt& g)
    403. {
    404.     if(g.sign) out << '-';
    405.     GrandInt *temp=new GrandInt;
    406.     *temp=g;
    407.     while(temp->Value->GetHead()!=temp->Value->GetTail())
    408.     {
    409.         out << temp->Value->GetHead()->GetDataNode();
    410.         temp->Value->DeleteHeadNode();
    411.     }
    412.     return out;
    413. }
    414. istream& operator>> (istream& in, GrandInt& g)
    415. {
    416.     //thuc hien quet 1 so
    417.  
    418.     char c;
    419.     in >> c;
    420.     switch (c)
    421.     {
    422.         case '-': g.sign=1;
    423.         case '+': in.get(c);
    424.     }
    425.     if(!isdigit(c))
    426.     {
    427.         g=GrandInt(0);
    428.         return in;
    429.     }
    430.  
    431.     do
    432.     {
    433.         g.Value->InsertHead(c-'0');
    434.         in.get(c);
    435.     } while (isdigit(c));          //diem ket thuc cua viec quet la 1 ki tu khac so
    436.  
    437.     return in;
    438. }
    439. /* xay dung cac ham bo tro
    440.    can chu y den phep nhan:
    441.    gia tri cua 1 cot cua phep nhan bang tong phep nhan cua cac cap chu so
    442.    cua hai so co tong chi so bang chi so cot voi phan nho.
    443.    Vd:
    444.     chi so sot 4 3 2 1 0
    445.  
    446.              1 2 3 4
    447.           x      3 4
    448.           ____________
    449.              4 9 3 6
    450.            3 7 0 2
    451.           ____________
    452.            4 1 9 5 6
    453.    trong do:
    454.       chi so cot 0: gia tri la 4(0)*4(0)=16 => dc 6 nho 1
    455.       chi so cot 1: 4(0)*3(1) + 3(1)*4(0) + 1(nho)=25 =>dc 5 nho 2
    456.       chi so cot 2: 3(1)*3(1) + 2(2)*4(0) + 2(nho)=19 =>dc 9 nho 1
    457.       chi so cot 3: 2(2)*3(1) + 1(3)*4(0) + 1(nho)=11 =>dc 1 nho 1
    458.       chi so cot 4: 1(3)*3(1) + 1(nho)=4 =>dc 4
    459.       trong do 4(0) co nghia la chu so 4 co cot co chi so la 0
    460. */
    461. // Can chu y la ta chi phai xay dung cac phep toan tren cac so duong
    462.  
    463. LinkedList* GrandInt::Plus   (LinkedList* l1, LinkedList* l2)
    464. {
    465.     LinkedList* tmp=new LinkedList;
    466.     LinkedList t1=*l1;
    467.     LinkedList t2=*l2;
    468.  
    469.  
    470.     if(t1.GetCount()<t2.GetCount())
    471.     {
    472.         for(int i=t1.GetCount(); i<t2.GetCount(); i++)
    473.             t1.InsertHead(0);
    474.  
    475.     } else
    476.     {
    477.  
    478.         for (int i=t2.GetCount(); i<t1.GetCount(); i++)
    479.             t2.InsertHead(0);
    480.     }
    481.     int mem=0;
    482.     for (int i=0; i<t1.GetCount(); i++)
    483.     {
    484.         int plus = t1.GetTail()->GetDataNode() + t2.GetTail()->GetDataNode() + mem;
    485.         if (plus>=10)
    486.         {
    487.             mem=1;
    488.             tmp->InsertHead(plus-10);
    489.         } else
    490.         {
    491.             mem=0;
    492.             tmp->InsertHead(plus);
    493.         }
    494.         t1.DeleteHeadNode();
    495.         t2.DeleteHeadNode();
    496.     }
    497.     if (mem==1) tmp->InsertHead(1);
    498.     return tmp;
    499. }
    500. LinkedList* GrandInt::Minus  (LinkedList*l1, LinkedList*l2)
    501. {
    502.     LinkedList* tmp=new LinkedList;
    503.     LinkedList t1=*l1;
    504.     LinkedList t2=*l2;
    505.  
    506.     //l1 luon lon hon l2
    507.     int mem=0;
    508.     int i;
    509.     for(i=t2.GetCount(); i<=t1.GetCount();i++)
    510.         t2.InsertHead(0);
    511.     for (i=0; i<t1.GetCount(); i++)
    512.     {
    513.         int x1 = t1.GetHead()->GetDataNode() - mem;
    514.         int x2 = t2.GetHead()->GetDataNode();
    515.         if(x1<x2)
    516.         {
    517.             x1+=10;
    518.             mem=1;
    519.         } else mem=0;
    520.         tmp->InsertHead(x1-x2);
    521.         t1.DeleteHeadNode();
    522.         t2.DeleteHeadNode();
    523.     }
    524.  
    525.     return tmp;
    526. }
    527. LinkedList* GrandInt::Multi  (LinkedList*l1, LinkedList*l2)
    528. {
    529.     LinkedList* tmp = new LinkedList;
    530.     LinkedList  t1,t2;
    531.     t1=*l1;
    532.     t2=*l2;
    533.     if(t1.GetHead()==0||t2.GetHead()==0) return 0;
    534.     int n=t1.GetCount() + t2.GetCount();
    535.     long mem=0;
    536.     for (int i=0; i<n; i++)
    537.     {
    538.         long val=mem;
    539.         for(int j=0;(j<=i&&j<t1.GetCount());j++)
    540.             if(i-j<t2.GetCount())
    541.                   val+=t1.GetHead()->GetDataNode()*t2.GetHead()->GetDataNode();
    542.         mem=val/10;
    543.         tmp->InsertHead(val%10);
    544.     }
    545.     while(mem)
    546.     {
    547.         tmp->InsertHead(mem%10);
    548.         mem/=10;
    549.     }
    550.     return tmp;
    551. }
    552.  
    553. int         GrandInt::Compare(LinkedList*l1, LinkedList*l2)
    554. {
    555.     if(l1->GetCount()<l2->GetCount()) return -1;
    556.     if(l1->GetCount()>l2->GetCount()) return 1;
    557.     int n=l1->GetCount();
    558.     //neu 2 so co do dai chu so bang nhau:
    559.     LinkedList  t1,t2;
    560.     t1=*l1;
    561.     t2=*l2;
    562.     for(int i=1;i<=n-1;i--)
    563.     {
    564.         if(t1.GetHead()->GetDataNode() < t2.GetHead()->GetDataNode()) return -1;
    565.         if(t1.GetHead()->GetDataNode() > t2.GetHead()->GetDataNode()) return -1;
    566.         t1.DeleteHeadNode();
    567.         t2.DeleteHeadNode();
    568.     }
    569.     return 0;
    570. }
    571.  
    572.  
    573. void main()
    574. {
    575.     GrandInt x,y;
    576.     cout<<"x= "; cin>>x;
    577.     cout<<"y= "; cin>>y;
    578.     cout<<"x+y= "<<(x+y)<<endl;
    579.     getch();
    580. }

    Error: NULL poiter assignment!!!!

    //PS: theo em thì hình như sai ở phần quá tải hàm >> và << hay sao ý! mà em cũng chả hiểu phải sửa như thế nào???
    nó đúng rồi mà
    Đã được chỉnh sửa lần cuối bởi punkrock : 02-04-2008 lúc 10:41 AM. Lý do: Sửa lại các hàm copy constructor
    MORE.........................

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Thứ nhất, tui không tin code này cậu tự viết cho nên tui sẽ không giúp. Mới cách đây vài ngày cậu còn hỏi tui giữa tham chiếu và con trỏ thì không cách gì cậu đủ sức viết bài này.
    Copy code sai rùi đòi người debug dùm : it not gonna happen ! Tập cách đi bằng chính đôi chân của mình.

  3. #3
    Ngày gia nhập
    10 2007
    Bài viết
    31

    ak! thế theo cậu thế nào là tự đi bằng chính đôi chân của mình? Lúc đầu khi mới học cậu chưa phải như tôi bây giờ ah? uh! Đúng là code trên 100% không phải là tôi viết ra!
    Đó! trên đó tôi có ghi rõ đề bài! đó là bài tập của tôi: xử lý các phép tính số học với các số nguyên lớn bằng cách biểu diễn số lớn bằng danh sách liên kết đôi! Tôi đã đọc sách và thấy có 1 bài toán hoàn toàn tương tự. Đó là bài toán "tính toán số học với các số nguyên lớn biểu diễn bằng string" trong sách "Bài tập Lập trình Hướng đối tượng với C++" của Nguyễn Thanh Thủy chủ biên của trường ĐH BACH KHOA HANOI trang 58!!!! Nhưng như bạn thấy đó, nó xử lý với string! còn tôi xử lý với double-linkedlist!
    Tôi đã dựa vào các ý tưởng trong quyển sách đó mà viết chương trình! Có sao cơ chứ? Đây hẳn là 1 bài toán cơ bản mà ai học lập trình C++ cũng đã làm! Vấn đề là đa số tôi thấy các bạn đều dùng string chứ chưa thấy ai dùng dslk! và khi tôi viết lại, dĩ nhiên, sự ảnh hưởng của quyển sách là rất lớn. Các hàm tôi viết trong code trên đều là các hàm overload cơ bản mà có thể tìm thấy ở bất kỳ 1 quyển sách nào! Tại sao bạn lại nghĩ là tôi đang ko đi trên đúng đôi chân của mình!!. Thật là bức xúc!
    Còn về trình độ của tôi! Bạn nghĩ bạn giỏi đến mức có thể nhìn qua nick mà đoán được trình độ người khác ah?? sorry! No. You were wrong!. OK! My level is low, but not too low as you thought...
    Sorry! Its my opinion!
    MORE.........................

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Đầu tiên tui không có ý châm chọc cậu nhưng cậu coi lại cái bài chính cậu post hỏi tui thì cậu hiểu tại sao tui nói như vậy.
    - Nếu cậu chỉ mới hiểu 1 ít về con trỏ và tham chiếu thì tui dám nói thẳng với cậu những bài dạng này cậu có làm cũng chỉ bằng niềm tin.
    - Đúng link list nhìn thì không có gì hết vì sao, nhưng để viết hoàn chỉnh là chẳng phải đơn giản (ít nhất đối với tui) tui debug nhiều khi cả ngày cả tuần.
    - Tui đã từng qua giai đoạn của cậu, cậu có cố sữa tui nhìn vẫn ra, vậy tui nói có gì oan cho cậu không ?, và tui nói là cách này sẽ chẳng có 1 chút lợi ích gì.
    Tôi đã dựa vào các ý tưởng trong quyển sách đó mà viết chương trình! Có sao cơ chứ? Đây hẳn là 1 bài toán cơ bản mà ai học lập trình C++ cũng đã làm
    Yes cơ bản, thử đóng sách hết vở tự viết thì bạn sẽ hiểu thế nào là cơ bản. Tui không thổi phồng nói nó khó hay gì hết nhưng tui biết làm thế nào để thực sự ta học được. Tin hay không thì tuỳ bạn, tui đã tự học phần này nên tui biết tại sao cách sữa code luôn chỉ có kết quả ngược lại.
    Đó là bài toán "tính toán số học với các số nguyên lớn biểu diễn bằng string" trong sách "Bài tập Lập trình Hướng đối tượng với C++" của Nguyễn Thanh Thủy chủ biên của trường ĐH BACH KHOA HANOI trang 58!!!!
    Xin lỗi là tui không hề biết sách này nó ở đâu cả. Tui chưa có dịp đọc 1 cuốn sách tin học nào của VN !!!.
    Còn về trình độ của tôi! Bạn nghĩ bạn giỏi đến mức có thể nhìn qua nick mà đoán được trình độ người khác ah??
    Đúng tôi không giỏi đến mức tui nhìn nick mà biết được trình độ của bạn, nhưng trí nhớ của tui không bao h tồi và tôi nhớ tui chỉ bạn chỉ cách đây 1 tuần. Và tui dựa vào đó để nói như thế, có lẽ tui có thể sai vì bạn có thể tiến bộ 1 cách thần tốc hơn người bình thường. Nhưng đối với tôi đó là không thể (vì tôi chỉ có thể suy nghĩ được theo cách 1 người học bình thường ).
    Bạn không phải ngại tui là mod gì hết, nếu tui sai -> chửi ! I will be willing to listen. No problem.
    Nhưng tui đã từng làm bài số lớn này 1 lần, làm với mãng, chuỗi, con trỏ... Nhưng khi tui làm thử với Link list thì nó là cả 1 vấn đề. Nếu bạn nói tui thích thổi phồng sự thật thì tôi chịu.
    -Còn vấn đề giúp mà bạn quăng cả bài lên thì tui nghĩ chắc không có ai có can đảm đọc hết cho cậu.
    - Kinh nghiệm viết những dạng này cho tui biết :
    + Viết hàm nào đóng gói hàm đó, test thử, rùi mới viết hàm kế tiếp.
    + Phải có 1 hàm in ra các giá trị viết ở dạng template để debug.
    + Nếu thực sự bạn tự mày mò mà viết được bài này thì tui tin bạn sẽ tiến bộ rất và rất rất nhiều.
    - Và đó là ý kiến của tui. Nếu bạn cảm thấy bức xúc ok ! Tell me !

  5. #5
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    To punkrok
    Mình có góp ý thế này ha:
    - Nếu đúng là bạn làm thì một điều quan trọng là: lúc bạn chạy chương trình gặp báo lỗi ở đâu, và bạn tìm hiểu lỗi này, đến khi không thể hiểu vì sao? bạn hãy post đúng thực với lỗi đó. Cho nên những cầu nói chung chung như bạn post thì thực sự dẫn đến chuyện rook post những bài trên cũng có lý của anh ta.
    - Còn nếu để chứng thực rõ hơn đó là bài của bạn, thì ngay từ bài viết của rook bạn nên có bài viết về ý tưởng của mình (tuy lúc đầu bạn đọc qua sách). Dựa vào đó người khác đọc mới hiểu rõ hơn về ý tưởng đó của bạn.
    Không biết ghi gì luôn ...

  6. #6
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Mặc định Bài toán tính toán số học với số nguyên lớn?

    Bạn pullrock nà . THực ra mảng chuỗi hay danh sách liên kết chỉ là những cách biểu diễn cấu trúc dữ liệu khác nhau thôi . Theo mình thì mảng đơn giản hơn và thường được người mới học dùng . Bạn thử giải bài này = mảng đi . Nếu được rồi . Bạn bắt đầu học qua dslk xem nó là cái chi rùi thao tác trên nó sau nha .

  7. #7
    Ngày gia nhập
    10 2007
    Bài viết
    31

    @Forlorn_hope: Did u read my text?
    @sieuphuong: my nick is punkrock! còn đây là bài tập lớn của tớ mà! ko dc dùng mảng! mà sao ai cũng nghĩ mình gà thế nhỉ! tớ đã học pascal năm I, C năm II, giờ đang học C++ và lập trình OOP!
    Thanks for offerring!

    Mà thế này! tớ có search trên google, nó bảo lỗi của tớ là do tớ gán hay delete 1 con trỏ chưa được cấp phát! Hay nói chung là tớ đang sử dụng 1 vùng nhớ ko cho phép!... " A NULL pointer assignment is a runtime error
    It occurs due to various reasons one is that ur program has tried to access an illegal memory location.
    Illegal location means either the location is in the operating systems address space or in the other processes memory space.
    In stdio.h NULL is defined as 0
    So whenever your program tries to access 0th location the operating system kills your program with runtime assignment error because the 0th location is in the operating systems address space and operating system doesnt allow access to its address space by user program ."

    uh! thế nhưng tớ đã kiểm tra lại, mà vẫn không tìm thấy lỗi... ! uh thì có khó khăn thì mới phải nhờ các bạn giúp!
    MORE.........................

  8. #8
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Thật sự là mình ko thể nào đọc nổi hết code của bạn . Mình có chạy thử CT nhưng CT ko báo lỗi biên dịch mà lỗi này chỉ xảy ra trong lúc chạy CT . Nhữg lỗi như thế thật nếu ko phải do mình làm thì khó nhận ra và sửa chữa lắm . Mình khuyên bạn nên học thật kỹ lý thuyết đã . Code này liên quan đến phần nào , phần nào ...v...v . Và phải thật sự chú tâm vào bài tập này .Tự khắc sẽ nhận ra đâu là sai lầm thôi . Mình ko có được sự chú tâm như bạn . Chỉ khuyên bạn thế thôi .

  9. #9
    Ngày gia nhập
    12 2006
    Bài viết
    72

    Quan trọng và cũng là đau đầu trong những bài toán với danh sách liên kết là vấn đề cấp phát và quản lý bộ nhớ,mình chưa debug nhưng bạn nên có 1 cây bút và 1 mẩu giấy nhỏ rồi chạy thử chương trình bằng tay, rồi xem việc cấp phát trong chương trình có phù hợp với trình biên dịch mà bạn đang dùng không, do mỗi trình biên dịch có chế độ quản lý bộ nhớ khác nhau, từ đó bạn sẽ cho ra được giải pháp cụ thể. Chúc bạn thành công!

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Cho tui hỏi là cậu punrock đã test thử cái class Linklist chưa vậy. Chỗ copy constructor sao lạ quá :
    C++ Code:
    1. Node(const Node &x)
    2.     {
    3.         pLeft=x.pLeft;
    4.         pRight=x.pRight;
    5.         data=x.data;
    6.     }
    Làm sao gán khang như vậy được nhỉ. Với lại cái class Node của cậu viết cũng rất lạ, có thể 1 kĩ thuật nào đó mà tui chưa được biết.
    C++ Code:
    1. Node() {data=0;pLeft=new Node;pRight=new Node;}
    Cậu tính làm cái gì vậy ?
    Tui cũng cố debug cho cậu mà cảm giác cả lớp list của cậu bị sai, tui không chắc vì thấy kĩ thuật cậu sài lạ quá, tui đang viết lại class Double List. Có gì xong tui sẽ post cho cậu coi.

Các đề tài tương tự

  1. Bài tập C giải thuật nhập vào số nguyên n in ra n số nguyên tố đầu tiên?
    Gửi bởi LTC trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 48
    Bài viết cuối: 25-04-2013, 07:40 PM
  2. Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên.
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 19-06-2011, 01:05 PM
  3. Game Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên trên C#?
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 18
    Bài viết cuối: 08-06-2011, 11:12 PM
  4. Bài tập C++ chương trình đổi 1 số nguyên trong hệ thập phân sang hệ fibo và cộng 2 số nguyên được
    Gửi bởi nghiapro512 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 23-01-2011, 02:14 PM
  5. Lập trình C xin code cài đặt thuật toán sàng nguyên tố để liệt kê các số nguyên tố 2->480000
    Gửi bởi ngocdung_088 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 06-12-2010, 11:53 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn