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

Đề tài: [C++] Matran

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

    Mặc định [C++] Matran

    Chào ba con, em dang viet 1 chuong trinh quá tải toán tử (+,-,*,/) cho ma tran
    Em viet xong cho matran [3][3] rùi. Nhung bay gio muon nâng cao hơn, viet cac phep toán tren cho matran có bậc bất kỳ (nhập bởi người sử dụng). Vấn đề là làm sao tạo dươc bộ nhớ động 2 chiều .Em làm thử nhu vậy mà máy ko chịu :

    int **a;int i;
    *a=new int[m];
    for(i=0;i<m;i++)
    a[i]=new int[n];
    //voi m,n duoc nhap bởi người sư dụng.
    Giúp em với nhé .Cảm ơn nhiều.

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

    -Bạn sai vì bạn cấp lộn kích thước vùng nhớ cho a ,a là con trỏ cấp 2 nên nó sẽ giữ địa chỉ của 1 mảng gồm m con trỏ cấp 1 nên kích thước là int*[m].
    -Bạn cấp lộn vùng nhớ cho biến *a ,tức là bạn cấp vùng nhớ cho biến con trỏ cấp 1 mà a đang giữ địa chỉ con trỏ cấp 1 này .Vì vậy biến a chưa được cấp phát vùng nhớ cho nên sẽ không tồn tại vùng nhớ chứa mảng các con trỏ cấp 1 : a[m].Hàm sữa lại là :
    Code:
          int **a;
          a=new int*[m];
    Đã được chỉnh sửa lần cuối bởi SegoGs : 05-06-2007 lúc 08:04 PM.
    ----------Kiến thức qua đi chỉ có bằng cấp ở lại----------

    Hỏng chuột , hư bàn phím ,game bằng niềm tin

  3. #3
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Về thực chất, mảng n chiều là mảng 1 chiều (nghiên cứu kỹ về phần mảng) do đó mình chỉ cần làm bộ nhớ động 1 chiều là đủ.

  4. #4
    Ngày gia nhập
    06 2007
    Bài viết
    0

    Day là bài của em, ko có lỗi, nhung chay ko dc và còn khá rườm rà, mong bac tiền bối chỉ giáo
    #include<iostream.h>
    #include<conio.h>
    class matran
    {public:
    int m,n; //m,n do nguoi su dung nhap vao o main()
    int **a;
    void set_matrix(int x1,int x2)//lap mang 2 chieu co kich thuoc la m,n
    { int i;
    m=x1;n=x2;
    a=new int*[m];
    for(i=0;i<m;i++)
    a[i]=new int[n];}
    void set_value(void);
    matran operator+(matran);//qua tai toan tu +
    };

    void matran::set_value(void)
    { int i,j;int **b;
    b=new int*[m];
    for(i=0;i<m;i++)
    b[i]=new int[n];
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    {cout<<"nhap phan tu thu "<<i+1 <<","<<j+1<<endl;
    cin>>b[i][j];}
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    a[i][j]=b[i][j];}

    matran matran::operator+(matran tam)
    {matran t;int i,j;
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    t.a[i][j]=a[i][j]+tam.a[i][j];
    return (t);}

    main()
    {matran x,y,z;int i,j;
    x.set_value();clrscr();
    y.set_value();
    z=x+y;
    cout<<"nhap bac ma tran ";
    cin>>x.m;cin>>x.n;
    y.m=x.m; y.n=y.n; z.m=x.m; z.n=x.n;

    cout<<"tong hai ma tran "<<endl;
    for(i=0;i<x.m;i++)
    {for(j=0;j<y.n;j++)
    cout<<x.a[i][j]<<" ";
    cout<<endl;}
    cout<<"va "<<endl;
    for(i=0;i<y.m;i++)
    {for(j=0;j<y.n;j++)
    cout<<y.a[i][j]<<" ";
    cout<<endl;}
    cout<<"la "<<endl;
    for(i=0;i<z.m;i++)
    {for(j=0;j<z.n;j++)
    cout<<z.a[i][j]<<" ";
    cout<<endl;}
    }

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

    Code:
    #include<stdio.h>
    #include<conio.h>
    
    int **nhap(int &m,int &n)
    {
    	printf("Nhap so hang  :");
    	scanf("%d",&m);
    	printf("Nhap so cot :");
    	scanf("%d",&n);
    	int **a=new int*[m];
    	for(int i=0;i<m;i++)
    		a[i]=new int[n];
    	for(i=0;i<m;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			printf("Nhap phan tu [%d][%d] :",i+1,j+1);
    			scanf("%d",&a[i][j]);
    		}
    		printf("\n");
    	}
    
    	return a;
    }
    
    void xuat(int **a,int m,int n)
    {
    	for(int i=0;i<m;i++)
    	{
    		printf("\n");
    		for(int j=0;j<n;j++)
    			printf("%4d",a[i][j]);
    	}
    }
    
    int **tinhtong(int **a,int **b,int ma,int na,int mb,int nb)
    {
    	if((ma!=mb)||(na!=nb))
    		return NULL;
    	int **c=new int*[ma];
    	int i,j;
    	for(i=0;i<ma;i++)
    		c[i]=new int[na];
    	for(i=0;i<ma;i++)
    		for(j=0;j<na;j++)
    			c[i][j]=a[i][j]+b[i][j];
    	return c;
    }
    
    void thuhoi(int **a,int m,int n)
    {
    	for(int i=0;i<m;i++)
    		delete(a[i]);
    	delete(a);
    }
    //------------------------------------
    void main()
    {
    	int **a,**b;
    	int ma,na,mb,nb;
    	a=nhap(ma,na);
    	b=nhap(mb,nb);
    	int **c=tinhtong(a,b,ma,na,mb,nb);
    	if(c==NULL)
    		return;
    	xuat(c,ma,na);
    	thuhoi(a,ma,na);
    	thuhoi(b,mb,nb);
    	thuhoi(c,ma,na);
    	getch();
    }
    ----------Kiến thức qua đi chỉ có bằng cấp ở lại----------

    Hỏng chuột , hư bàn phím ,game bằng niềm tin

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

  1. Viết code tạo Matran tính định thưc.
    Gửi bởi ĐạiBàng trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 21-02-2012, 10:19 AM
  2. Nhờ tìm lỗi bài lớp Matran thừa kế từ lớp dãy số
    Gửi bởi buitheanhdb trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 8
    Bài viết cuối: 14-04-2008, 10:57 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