Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Tích Decartes của 2 lược đồ quan hệ trên C++?

  1. #1
    Ngày gia nhập
    04 2009
    Nơi ở
    Đà Nẵng
    Bài viết
    4

    Arrow Tích Decartes của 2 lược đồ quan hệ trên C++?

    ĐỀ: Cài đặt thuật toán tính Tích Descartes (Cartesian Product, product) của hai lược đồ quan hệ.
    em làm thử bài này trên ma trận. tạo ra tích decac trên ma trận mới bằng cách lập lại các hàng của 2 ma trận đã cho:
    ví dụ em có 2 mt: A (a1 hàng, a2 cột), B(b1,b2)
    A :
    2 3 5 2
    8 4 3 5
    6 9 8 2
    B:
    3 4 4
    5 6 7
    =>C:
    2 3 5 2 3 4 4
    2 3 5 2 5 6 7
    8 4 3 5 3 4 4
    8 4 3 5 5 6 7
    6 9 8 2 3 4 4
    6 9 8 2 5 6 7

    với ví dụ này, từ cột 1 đến cột 4 (a2) của mt C em cho lặp lại 2 lần (b1 lần) hàng thứ nhất của mt A, nếu số lần lặp > b1 thì sẽ làm với hàng thứ 2 của A và tiếp tục đến hết các hàng của A.
    còn từ cột 5 (a2+1) của mt C, thì em đưa mt B vào, lặp mt B đúng theo 3 lần (a1).
    vậy là được mt C
    Đã được chỉnh sửa lần cuối bởi winterknight : 08-05-2009 lúc 10:04 PM.

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    cái này chẳng liên quan gì tới Database cả ???

    Move qua box bài tập C++ cho bạn.

  3. #3
    Ngày gia nhập
    04 2009
    Nơi ở
    Đà Nẵng
    Bài viết
    4

    hix, mọi người giúp em sửa đoạn code với, nó chạy sai hoài, em chăng biết phải sửa sao nữa :((

  4. #4
    Ngày gia nhập
    04 2009
    Nơi ở
    Đà Nẵng
    Bài viết
    4

    mèn ơi, sao ko ai vào giúp em với!!! Bài của em chay chỉ còn sai 1 chút xíu nữa thui, ko hiểu sao khi bắt đầu lặp lại ma trận B thì phần tử đầu tien lại biến thành 0, mọi người sửa giúp em với :(

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Mình nghĩ là đoạn code ghép ma trận A và B của bạn để tạo thành ma trận C có vấn đề (Không có một vòng lặp phụ ngoài 2 dòng for-như vậy thì không ra kết quả đúng được).
    Hơn nữa, bạn viết code đem lên đây hỏi mà không có ghi chú gì cả
    PHP Code:
    ta1,tb1,tb2,lanlap=0;
          
    ta1=tb1=tb2=1;
          
    c1=a1*b1,c2=a2+b2
    Mấy cái này mình đọc cứ rối tung lên, mình biết là a1, b1, c1 lần lượt là các dòng của ma trận A, B, C rồi ta1, tb1, tb2 là cái gì thì mình không biết.
    Với lại, mình chưa quen sử dụng hàm tạo số ngẫu nhiên của bạn (Vì mình chạy trên DevC++ nó không hỗ trợ hàm của bạn nên mình lười dùng).
    Thay vào đó, mình viết một đoạn code yêu cầu nhập số bằng tay. Mình nghĩ bạn sẽ dễ dàng chuyển nó qua để sử dụng hàm Random.
    Phần xuất ma trận C, mình làm đúng ý tưởng của bạn.

    PHP Code:
    #include<iostream.h>
    #include  <stdlib.h>
    #include   <conio.h>
    #include   <stdio.h>

    int A[20][20],B[20][20];
    int C[400][40];

    int sodongA=0,socotA=0;//SO DONG VA SO COT CUA MA TRAN A
    int sodongB=0,socotB=0;//SO DONG VA SO COT CUA MA TRAN B
    int sodongC=sodongA*sodongB;
    int socotC=socotA+socotB;


    void Nhap(int MATRAN[][20],int&,int&);
    void Xuat(int MATRAN[][20],intint);
    void TaoMatranC(int MATRAN[][40],int,int);
    void XuatC(int MATRAN[][40]);
    int main()
    {
      
      
    Nhap(A,sodongA,socotA);
      
    Nhap(B,sodongB,socotB);
      
    Xuat(A,sodongA,socotA);
      
    Xuat(B,sodongB,socotB);
      
    XuatC(C);
      
    getch();
      return 
    0;
    }
    void Nhap(int MATRAN[][20],int &sodongint &socot)
    {
        
    int chiso=1;
        
    printf("Nhap vao so dong:\n");scanf("%d",&sodong);
        
    printf("Nhap vao so cot:\n");scanf("%d",&socot);
        for(
    int i=0;i<sodong;i++)
            for(
    int j=0;j<socot;j++)
            {
                    
    printf("Nhap vao phan tu MT[%d][%d]: ",i+1,j+1);chiso++;
                    
    scanf("%d",&MATRAN[i][j]);        
            }
        
    }
    void Xuat(int MATRAN[][20], int sodongint socot)
    {
        for(
    int i=0;i<sodong;i++)
        {
            for(
    int j=0;j<socot;j++)
            {
                    
    printf("%d ",MATRAN[i][j]);        
            }
            
    printf("\n");    
        }
        
    printf("\n\n");    
    }

    void XuatC(int MATRAN[][40])
    {
        
    printf("\nMa tran C:\n\n");
        
    int count=0;//DEM TONG SO DONG TRONG MA TRAN C; SO DONG NAY KHONG DUOC VUOT QUA sodongA*soDongB
        
    for(int i=0;count<sodongA*sodongB;i++)
        {
            
    int solanlap=1;

            do
            {
                for(
    int j=0;j<socotA+socotB;j++)
                {
                    if(
    j<socotA)
                        
    C[i][j]=A[i][j];
                    else
                        
    C[i][j]=B[solanlap-1][j-socotA];
                    
    printf("%d ",C[i][j]);    
                }
                
    printf("\n");
                
    count++;
            }while(
    solanlap++<sodongB);
            
    printf("\n");    
        }
        

    Mình có một yêu cầu thế này: Nhờ bạn viết đoạn code nhập số ngẫu nhiên cho các ma trận A, B. Sau khi làm xong, bạn post lên cho mình tham khảo với! Sử dụng hàm srand() nhé!
    Nhớ test trên DevC++ trước nhé.
    Goodluck!
    Thanks!
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

  6. #6
    Ngày gia nhập
    04 2009
    Nơi ở
    Đà Nẵng
    Bài viết
    4

    Mặc định Tích Decartes của 2 lược đồ quan hệ trên C++?

    sorry, em quên mất đã ko chú thích vào bài, cám ơn anh đã giúp
    với đoạn code nhập ma trận ngẫu nhiên thì em chỉ dùng hàm rand(), còn khi em dùng srand() thì ma trận chỉ toàn số giống nhau :(
    nhờ bài của anh mà em đã sửa được bài của em rùi, cám ơn anh nhiều lắm
    em cũng viết lại bằng Dev C++ nè, anh xem thử, em vẫn chỉ dùng 2 vòng lặp thui
    PHP Code:
    #include<iostream.h>
    #include  <stdlib.h>
    #include   <conio.h>
    #include   <stdio.h>

    int A[20][20], a1a2;
    int B[20][20], b1b2;
    int C[20][20], c1c2;

    void nhap (int MT[][20],int&,int&);
    void xuat (int MT[][20],int,int);
    void TichDecac();
    /**********************************   MAIN   *******************************/
    int main()

      
    printf("\n\nTao ma tran A");
      
    nhap(A,a1,a2);xuat(A,a1,a2);
      
    printf("\n\nTao ma tran B");
      
    nhap(B,b1,b2);xuat(B,b1,b2);
      
    printf("\n\nMa tran C:\n");
      
    TichDecac();
      
    xuat(C,c1,c2);
      
    getch();
      return 
    0;
    }
    //////////////////////////////////////////////////////////////////////////////
    void nhap (int MT[][20],int &sohang,int &socot)

      
    printf("\nNhap so hang:\t");  scanf("%d",&sohang);
      
    printf("Nhap so cot :\t");    scanf("%d",&socot);
      for (
    int i=1;i<=sohang;i++)
      for (
    int j=1;j<=socot;j++)
            
    MT[i][j]=rand()%100// chon ngau nhien 1 so tu 0 -> n-1
    }
    void xuat (int MT[][20],int n,int m)

      for (
    int i=1;i<=n;i++)
      {    
           
    printf("\n");
           for (
    int j=1;j<=m;j++)
           
    printf("%5d",MT[i][j]);
      }
    }
    void TichDecac()

      
    int lanlap=0// DEM SO LAN LAP LAI CUA HANG x MA TRAN A TRONG C
      
    int ta1=1;    // HANG THU x TRONG MA TRAN A
      
    int tb1=1;    // HANG THU y TRONG MA TRAN B
      
    c1=a1*b1,c2=a2+b2;
      for (
    int i=1;i<=c1;i++)
      {    
           if(
    lanlap>=b1) { ta1++; lanlap=1; }
           else 
    lanlap++;
           for (
    int j=1;j<=c2;j++)
             if (
    j<=a2)  C[i][j]=A[ta1][j];
             else
            {           if (
    tb1>b1tb1=1;
                        
    C[i][j]=B[tb1][j-a2];
            }
           
    tb1++;
      }

    Đã được chỉnh sửa lần cuối bởi winterknight : 08-05-2009 lúc 10:09 PM.

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

  1. Những kỳ quan trong lòng đất Việt Nam trên báo Mỹ
    Gửi bởi vietnamduhi trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 10-10-2013, 10:32 AM
  2. Lập trình C++ Viết chương trình xây dựng các phép toán quan hệ trên tập hợp
    Gửi bởi thu910 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 30-09-2011, 04:34 PM
  3. Code tìm khóa trên lược đồ quan hệ CSDL. Giúp em?
    Gửi bởi nhoxonl trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 02-12-2010, 09:58 PM
  4. Lỗi gì đó liên quan tới DOS ảo trên win, không tìm thấy thông tin trên GOOGLE
    Gửi bởi longtth trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 20-12-2009, 12:03 AM

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