Giúp em với,C+ bài tập về mảng 2 chiều

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi buitrungthanh, 24/11/06.

  1. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    nói rõ 1 chút được ko machan. Chọn 1 trong 3 cách: mảng của các ký số, mảng của các số nguyên và danh sách liên kết các số nguyên để làm àh? hay là làm cả 3.
     
  2. PMQ

    PMQ Donkey Kong

    Tham gia ngày:
    8/7/03
    Bài viết:
    374
    Nơi ở:
    Thành Phố Ma
    em mới học C có ai bít cách sắp xếp số theo thứ tự tăng dần ko chỉ em(ko dùng mảng với có dùng luôn) vd nhập 2 5 4 7 1 thì kết quả sẽ là 1 2 4 5 7
     
  3. machan

    machan Mr & Ms Pac-Man

    Tham gia ngày:
    1/8/06
    Bài viết:
    146
    Dùng cả 3 ạ.Tức là số nguyên quá lớn thì được lưu theo định dạng mảng chứ ko phải là 1 biến :D ;;) ;;) :x Bác huunhon giúp em nhé. :x :x :x
     
  4. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    Mới làm được 2 phép toán cộng và nhân sử dụng danh sách liên kết thôi. Xem thử xem đúng yêu cầu chưa nha bạn. Nếu có lỗi gì thì báo lại để tui sửa, vì mới viết chưa kiểm tra kĩ các trường hợp.
    Còn phép chia lấy dư để mai làm tiếp, bây giờ buồn ngủ quá rồi

    Hôm nay mới rảnh để viết cho xong.
    Bạn fix lại hàm del_zero và thêm vào hàm chia lấy phần dư là xong project rồi đó.
    Nếu chạy có lỗi gì thì cứ báo, mình sẽ fix lại.

    PHP:
    void del_zero(List &list)//xoa ky tu 0 vo nghia 
    {
        while (list.
    head->entry==0&&list.head->next!=NULL)
        {
            list.
    head=list.head->next;
            list.
    count--;
        }
        
    }
    void mod(List b1,List b2,List &kq)//chia lay phan du
    {
        List 
    temp,temp1,temp2;
        
    Node *p=b1.head,*q=b2.head;
        
    int d2=b2.size();
        while (
    p!=NULL)
        {
            do
            {
                
    temp.insert(temp.size(),p->entry);
                
    p=p->next;
            }
            while (
    compare(temp,b2)==-1);
            while (
    compare(temp,b2)!=-1)
            {
                
    temp1.clear();
                
    simple_subtract(temp,b2,temp1);
                
    temp=temp1;
                
    temp.count=temp1.count;
            }
        }
        
    kq=temp;
        
    kq.dau=b1.dau*b2.dau;
    }
     

    Các file đính kèm:

  5. machan

    machan Mr & Ms Pac-Man

    Tham gia ngày:
    1/8/06
    Bài viết:
    146
    Cảm ơn huunhon nhiều lắm.Mấy hôm nghỉ tết phải ngồi nghiên cứu mới được

    Cho em post bài liên tiếp cái, vì cần gấp
    To Huunhon: Bài tập của mình thầy yêu cầu hướng đối tượng theo dạng : khai báo hàm ở file*.h còn định nghĩa hàm ở file *.cpp( ví dụ có lớp list thì khai báo các hàm list(), insert() ,... ở file list.h còn định nghĩa hàm thì ở file list.cpp) và tất cả các hàm đều viết trong lớp( quan trọng nhất là các hàm cộng, nhân, lấy dư ).Riêng các biến của lớp thì để private chứ ko để public.Và dữ liệu đầu vào có dạng "11111111111111 + 1111111111111111".Tại hôm qua mới đọc được bài bác đã thử sửa theo yêu cầu nhưng vẫn có lỗi bác sửa hộ em được không ?Giúp em nhá
     
  6. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    Mình nghĩ những yêu cầu này bạn nên tự làm để hiểu rõ hơn, vì tương đối đơn giản. Mình chỉ giúp về giải thuật thôi.
     
  7. jupiter0402

    jupiter0402 Legend of Zelda

    Tham gia ngày:
    6/6/05
    Bài viết:
    950
    Nơi ở:
    Hệ mặt trời
    Cho mình hỏi bài này cái::-/
    Tính tổng các giá trị cực trị trong ma trận số thực.một giá trị được gọi là cực trị khi lớn hơn hoặc nhỏ hơn tất cả phần tử lân cận(tối đa 8 phần tử):-s
    huunhon chỉ hộ mình cách xét mấy trường hợp ở biên sao cho đơn giản.:whew: ..chứ ngồi liệt kê các trường hợp thì thấy dài quá.Các trường hợp nằm giữa thì mình đã có cách rùi.Thx nhìu
     
  8. lebien

    lebien Youtube Master Race

    Tham gia ngày:
    8/8/06
    Bài viết:
    4
    sac bai nay cung~ ma can su giup do~ cua? quan` than` a` chan' qua'
     
  9. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    Chưa nghĩ ra cách nào đơn giản hơn, chịu khó ngồi liệt kê vậy
    PHP:
    void tong(float *a[],int n)
    {
        
    float tong=0;
        for (
    int i=0;i<n;i++) 
        { 
            for (
    int j=0;j<n;j++) 
            {
                if (
    i==&& j==0)
                {
                    if ((
    a[i][j]>a[i+1][j] && a[i][j]>a[i+1][j+1] && a[i][j]>a[i][j+1]) || (a[i][j]<a[i+1][j] && a[i][j]<a[i+1][j+1] && a[i][j]<a[i][j+1]))
                        
    tong+=a[i][j];
                }
                else if (
    i==&& j==n-1)
                {
                    if ((
    a[i][j]>a[i+1][j] && a[i][j]>a[i+1][j-1] && a[i][j]>a[i][j-1]) || (a[i][j]<a[i+1][j] && a[i][j]<a[i+1][j-1] && a[i][j]<a[i][j-1]))
                        
    tong+=a[i][j];
                }
                else if (
    i==n-&& j==0)
                {
                    if ((
    a[i][j]>a[i-1][j] && a[i][j]>a[i-1][j+1] && a[i][j]>a[i][j+1]) || (a[i][j]<a[i-1][j] && a[i][j]<a[i-1][j+1] && a[i][j]<a[i][j+1]))
                        
    tong+=a[i][j];
                }
                else if (
    i==n-&& j==n-1)
                {
                    if ((
    a[i][j]>a[i-1][j] && a[i][j]>a[i-1][j-1] && a[i][j]>a[i][j-1]) || (a[i][j]<a[i-1][j] && a[i][j]<a[i-1][j-1] && a[i][j]<a[i][j-1]))
                        
    tong+=a[i][j];
                }
                else if (
    i==0)
                {
                    if ((
    a[i][j]>a[i][j-1] && a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j-1] && a[i][j]>a[i+1][j] && a[i][j]>a[i+1][j+1]) || (a[i][j]<a[i][j-1] && a[i][j]<a[i][j+1] && a[i][j]<a[i+1][j-1] && a[i][j]<a[i+1][j] && a[i][j]<a[i+1][j+1]))
                        
    tong+=a[i][j];
                }
                else if (
    i==n-1)
                {
                    if ((
    a[i][j]>a[i][j-1] && a[i][j]>a[i][j+1] && a[i][j]>a[i-1][j-1] && a[i][j]>a[i-1][j] && a[i][j]>a[i-1][j+1]) || (a[i][j]<a[i][j-1] && a[i][j]<a[i][j+1] && a[i][j]<a[i-1][j-1] && a[i][j]<a[i-1][j] && a[i][j]<a[i-1][j+1]))
                        
    tong+=a[i][j];
                }
                else if (
    j==0)
                {
                    if ((
    a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j] && a[i][j]>a[i+1][j+1] && a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j+1]) || (a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j] && a[i][j]>a[i+1][j+1] && a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j+1]))
                        
    tong+=a[i][j];
                }
                else if (
    j==n-1)
                {
                    if ((
    a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j] && a[i][j]>a[i+1][j-1] && a[i][j]>a[i][j-1] && a[i][j]>a[i+1][j-1]) || (a[i][j]>a[i+1][j] && a[i][j]>a[i-1][j] && a[i][j]>a[i+1][j-1] && a[i][j]>a[i][j-1] && a[i][j]>a[i+1][j-1]))
                        
    tong+=a[i][j];
                }
                else 
                {
                    if ((
    a[i][j]>a[i-1][j-1] && a[i][j]>a[i-1][j] && a[i][j]>a[i-1][j+1] && a[i][j]>a[i][j-1] && a[i][j]>a[i][j+1] && a[i][j]>a[i+1][j-1] && a[i][j]>a[i+1][j] && a[i][j]>a[i+1][j+1]) || (a[i][j]<a[i-1][j-1] && a[i][j]<a[i-1][j] && a[i][j]<a[i-1][j+1] && a[i][j]<a[i][j-1] && a[i][j]<a[i][j+1] && a[i][j]<a[i+1][j-1] && a[i][j]<a[i+1][j] && a[i][j]<a[i+1][j+1]))
                        
    tong+=a[i][j];
                }
            }
        }
        
    printf("Tong cua cac cuc tri: %f",tong);
    }
     
  10. jupiter0402

    jupiter0402 Legend of Zelda

    Tham gia ngày:
    6/6/05
    Bài viết:
    950
    Nơi ở:
    Hệ mặt trời
    Mình mới nghĩ ra cách này huunhon coi được ko góp ý kiến với...thx
    PHP:
    int vitridautien(int a[],int b[],int m,int n,int d,int c)
    {
        for(
    int i=0;i<8;i++)
            if(
    d+a[i]>=0&&d+a[i]<m&&c+b[i]>=0&&c+b[i]<n)
                return 
    i;
    }
    int ktcuctri(float a[][100],int m,int n,int d,int c)
    {
        
    int dong[8]={-1,-1,-1,0,1,1,1,0};
        
    int cot[8]={-1,0,1,1,1,0,-1,-1};
        
    int vt=vitridautien(dong,cot,m,n,d,c);
        for(
    int i=0;i<8;i++)
        {
            if(
    d+dong[i]==-1||d+dong[i]==m||c+cot[i]==-1||c+cot[i]==n)
                continue;
            if((
    a[d][c]-a[d+dong[vt]][c+cot[vt]])*(a[d][c]-a[d+dong[i]][c+cot[i]])<=0)
                return 
    0;
        }
        return 
    1;
    }

    float tongcuctri(float a[][100],int m,int n)
    {
        
    float s=0;
        for(
    int i=0;i<m;i++)
            for(
    int j=0;j<n;j++)
                if(
    ktcuctri(a,m,n,i,j)==1)
                    
    s+=a[i][j];
        return 
    s;
    }
     
  11. huunhon

    huunhon Donkey Kong

    Tham gia ngày:
    15/8/05
    Bài viết:
    342
    Cách bạn làm quá hay rồi :). Chỉ góp ý 1 chút ở vòng lặp này, bạn chỉ cần chạy từ vị trí i=vt trở đi thôi, vì từ i=0 ->i=vt đã kiểm tra rồi:
    PHP:
        for(int i=vt;i<8;i++) 
        { 
            if(
    d+dong[i]==-1||d+dong[i]==m||c+cot[i]==-1||c+cot[i]==n
                continue; 
            if((
    a[d][c]-a[d+dong[vt]][c+cot[vt]])*(a[d][c]-a[d+dong[i]][c+cot[i]])<=0
                return 
    0
        }
     
  12. chan__doi

    chan__doi Mr & Ms Pac-Man

    Tham gia ngày:
    30/10/06
    Bài viết:
    159
    Nơi ở:
    Vương quốc ăn ngủ
    anh huunhon có biết cái web nào down cái C này về không vậy, ::( em search hoài mà không có ra (+.+)
     
  13. jupiter0402

    jupiter0402 Legend of Zelda

    Tham gia ngày:
    6/6/05
    Bài viết:
    950
    Nơi ở:
    Hệ mặt trời
    Hix..huunhon ơi coi hộ bài này cái.::)
    Đây là bài tập bên trừu tượng hóa dữ liệu.
    Nó yêu cầu nhập vào 1 tam giác trong không gian Oxy.Cho bít dạng tam giác đó :đều,vuông cân,vuông,cân,thường.
    Mình vít hàm đó như sau,và nó chạy sai cho 1 trường hợp là tam giác vuông=(( (vụ không phải tam giác thì đã có hàm khác kiểm tra rùi)
    Nhưng kì ở chỗ là khi chạy debug thì nó dở chứng sao ấy:
    giả sử tam giác vuông ở A đi,chạy debug thì rõ ràng a*a =b*b+c*c ,cả bảng debug cũng hiện ra vậy mà biến vuong ko đổi....vẫn bằng 0 ==>sai
    PHP:
    struct DIEM
    {
        
    float x;
        
    float y;
    };
    struct TAMGIAC
    {
        
    DIEM A;
        
    DIEM B;
        
    DIEM C;
    };
    float khoangcach(DIEM P,DIEM Q)
    {
        return 
    sqrt( (P.x-Q.x)*(P.x-Q.x)+(P.y-Q.y)*(P.y-Q.y) ) ;
    }
    int ktdang(TAMGIAC X)
    {
        
    float a,b,c;
        
    khoangcach(X.X.B);
        
    khoangcach(X.X.C);
        
    khoangcach(X.X.B);
        
    int can=0,vuong=0,deu=0;
        if(
    a==b&&b==c)
            
    deu=1;
        if(
    a==b||b==c||c==a)
            
    can=1;
        if(
    a*a==b*b+c*||b*b==a*a+c*||c*c==a*a+b*b)
            
    vuong=1;
        if(
    deu==1)
            return -
    2;
        if(
    vuong==1&&can==1)
            return -
    1;
        if(
    vuong==1)
            return 
    0;
        if(
    can==1)
            return 
    1;
        return 
    2;
    }
     
  14. dangacno

    dangacno Youtube Master Race

    Tham gia ngày:
    18/1/07
    Bài viết:
    38
    Em mới học lập trình các anh chỉ dùm em bài tập này với : vẽ ngôi sao ra màn hình dùng : do...while, while, for.
    Em bó tay rồi .
    (ngôi sao 5 cánh nhé. Thanks )
     
  15. ZeroCrazy

    ZeroCrazy T.E.T.Я.I.S

    Tham gia ngày:
    8/4/06
    Bài viết:
    516
    Nơi ở:
    hỏi làm chi ?
    Vấn đề là a*a không bằng b*b+c*c, cho dù in kết quả 2 bên như nhau. Chỉ có cách tính tích 2 vector mới chính xác, công thức tôi không nhớ. Nếu dùng khoảng cách sẽ phải tính căn, dẫn đến kết quả không chính xác.
     
  16. vuhoang0601

    vuhoang0601 Youtube Master Race

    Tham gia ngày:
    20/3/07
    Bài viết:
    2
    Nơi ở:
    Tây Ninh
    Ai giúp mình với. Nhập n phần tử, liệt kê các hoán vị của n.
    Ví dụ nhập 1 2 3 . Xuất ra các hoán vị là 1 2 3; 1 3 2; 2 1 3; 2 3 1; 3 1 2; 3 2 1
     
  17. MasterGamer

    MasterGamer The Warrior of Light

    Tham gia ngày:
    26/1/03
    Bài viết:
    2,095
    Nơi ở:
    Cần Thơ
    bạn nào có source (chương trình hoàn chỉnh càng tốt) của bài toán này vui lòng post lên dùm mình (hay up chương trình lên)..... mình làm đc nhưng chỉ viết đc phần console thôi, viết thành chương trình giao diện đồ họa mình chưa làm đc......

    hay bài 2 trong trang web sau:
    http://www.ctu.edu.vn/coursewares/cntt/gthuat/gthuat/bt_ch3.htm
     
  18. dangacno

    dangacno Youtube Master Race

    Tham gia ngày:
    18/1/07
    Bài viết:
    38
    Mấy anh làm ơn giúp em với =((
     
  19. vuhoang0601

    vuhoang0601 Youtube Master Race

    Tham gia ngày:
    20/3/07
    Bài viết:
    2
    Nơi ở:
    Tây Ninh
    mình làm như sau nhưng chỉ đúng với 3 phần tử còn nhiề hơn thiếu trường hợp. Bạn nào xem sửa lại dùm mình chứ mình thì chắc bí rùi ::(

    Mã:
    #include<iostream.h>
    #include<conio.h>
    #include<string.h>
    void main()
    {
      char tam, chuoi[10];
      int i,j,k,a;
      clrscr();
      cout<<"Nhap chuoi cac phan tu hoan vi : "; cin.getline(chuoi,10);
      k=1;
      cout<<endl<<k<<". "<<chuoi;
      for(i=strlen(chuoi)-1; i>=0; i--)
        for(a=i; a<strlen(chuoi)-1; a++)
          for(j=i; j<strlen(chuoi)-1; j++)
    	  if(chuoi[j]!=chuoi[j+1])
    	  {
    	    k++;
    	    tam=chuoi[j];
    	    chuoi[j]=chuoi[j+1];
    	    chuoi[j+1]=tam;
    	    cout<<endl<<k<<". "<<chuoi;
    	  }
      getch();
    }
     
  20. ack

    ack Donkey Kong

    Tham gia ngày:
    11/1/06
    Bài viết:
    462
    Bài hoán vị đây :p
    vd:
    a b c d=>a + (b c d) => a + b + ( c d ) => a + b + c + d
    a + b + d + c
    a + c + ( b d ) => a + c + b + d
    a + c + d + b
    a + d + ( b c ) => a + b + c + d
    a + b + d + c
    b + (a c b) =>...
    c + (a b d) =>...
    d + (a b c) =>...
    Cái này là cách giải theo kiểu recursion, cái trên là giải thuật thôi, code bạn tự viết nhé :D
    Tóm tắt là bạn nhập cái list n số => 1+ (n-1), cái n -1 => 1 + ( n -2) và ...
    Base case là khi 1 và 1
    Nó tương tự như là 3! = 3 * 2!
    2! = 2 * 1!
    1! = 1 * 0!
    0! = 1 => base case
    Giờ tớ còn cái project làm chưa xong ko rảnh viết code cho bạn được :)
     

Chia sẻ trang này