Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: con trỏ và mảng 2 chiều

  1. #1
    Ngày gia nhập
    07 2008
    Bài viết
    30

    Smile con trỏ và mảng 2 chiều

    mình mới học con trỏ và mảng 2 chiều..dùng TC++ để biên dịch
    code này là code nhập xuất đơn giản .. nhưng nó bị sao ồi...giúp mình sửa với nha
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    void nhap(int *a,int m,int n)
    {       int i,j,t;
    	for(i=0;i<m;i++)
    		for(j=0;j<n;j++)
    		{
    			t=i*n+j;
    			printf("nhap a[%d,%d]=",i,j);
    			scanf("%d",a+t);
    		}
    }
    void xuat(int *p,int m,int n)
    {       int i,j,t;
    	for(i=0;i<m;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			t=i*n+j;
    			printf("%d",*(p+t));
    
    		}
    	printf("\n");
    	}
    }
    void main()
    {
    	int a[2][4];
    	nhap(a,2,4);
    	xuat(a,2,4);
    getch();
    }

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Code:
    void nhap(int *a.....
    Code:
    void main()
    {
    	int a[2][4];
    	nhap(a,2,4);
    bạn thấy 2 code chém nhau chưa ? :-"
    code ra gió bão

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    code này là code nhập xuất đơn giản .. nhưng nó bị sao ồi...giúp mình sửa với nha
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<math.h>
    4. void nhap(int *a,int m,int n)
    5. {       int i,j,t;
    6.     for(i=0;i<m;i++)
    7.         for(j=0;j<n;j++)
    8.         {
    9.             t=i*n+j;
    10.             printf("nhap a[%d,%d]=",i,j);
    11.             scanf("%d",a+t);
    12.         }
    13. }
    14. void xuat(int *p,int m,int n)
    15. {       int i,j,t;
    16.     for(i=0;i<m;i++)
    17.     {
    18.         for(j=0;j<n;j++)
    19.         {
    20.             t=i*n+j;
    21.             printf("%d",*(p+t));
    22.  
    23.         }
    24.     printf("\n");
    25.     }
    26. }
    27. int main()
    28. {
    29.     int a[2][4];
    30.     nhap((int*)a,2,4);
    31.     xuat((int*)a,2,4);
    32. getch();
    33. }

    Sửa vậy là được, nhưng không nên nhập xuất kiểu này chút nào.

    Have fun!

  4. #4
    Ngày gia nhập
    07 2008
    Bài viết
    30

    mình mới học con trỏ..nên thực hành ấy mà...đọc sách C thấy nó khác..biên dich bằng C++ thì phải lên đây hỏi thui ^^..có nhiều cái trong C nó không chấp nhận..Dù sao cũng thanks all nha

  5. #5
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    mình mới học con trỏ..nên thực hành ấy mà...đọc sách C thấy nó khác..biên dich bằng C++ thì phải lên đây hỏi thui ^^..có nhiều cái trong C nó không chấp nhận..Dù sao cũng thanks all nha
    Sửa/Xóa bài viết
    Nếu để thực hành tốt thì bạn sử dụng hẳn với con trỏ luôn đừng nhập nhằng vừa mảng vừa con trỏ, sau này thạo rồi hãy dùng linh hoạt, tuy nhiên nếu chỉ dùng con trỏ thì bạn học qua phần cấp phát động đi thì chương trình mới chạy ổn.

  6. #6
    Ngày gia nhập
    07 2008
    Bài viết
    30

    Mặc định con trỏ và mảng 2 chiều

    ừ cám ơn lời khuyên...mình có 1 thắc mắc này...nếu như
    ở thân chương trình
    Code:
     
    nhap(a,3)
    ở lời gọi hàm
    Code:
    void nhap(int a[3],int m)
    {
           for(i=0;i<m;i++)
                scanf("%d",&a[i]);
    }
    thì kết quả khi printf mảng a[] ra vẫn đúng..vì khi khai báo mảng a là như con trỏ rùi a[i]=*(a+i)
    còn bên mảng 2 chiều thì sao??..code sau đây là không đúng..muốn đúng phải dùng đến con trỏ như bài trên
    Code:
    #include<stdio.h>
    #include<conio.h>
    void nhap(int a[3][4],int n,int m)
    {       int x,i,j;
    	for(i=0;i<n;i++)
    		for(j=0;j<m;j++)
    		{
    			printf("nhap a[%d][%d]=",i,j);
    			scanf("%d",&x);
    			a[i][j]=x;
    		}
    }
    
    void main()
    {
    	int a[3][4],i,j;
    	clrscr();
    	nhap(a,3,4);
    	for(i=0;i<3;i++)
    	{
    		for(j=0;j<4;j++)
    			printf("%d",a[i]);
    		printf("\n");
    	}
    getch();
    }
    câu hỏi đặt ra là " làm sao để tạo 1 hàm nhập mảng 2 chiều" và lưu lại đc giá trị của mảng đó để sử dụng trong thân chương trình chính,mà không phải dùng đến con trỏ và mảng 2 chiều như bài tập trên cùng?"

  7. #7
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Code:
    	for(i=0;i<3;i++)
    	{
    		for(j=0;j<4;j++)
    			printf("   %d",a[i]);//a[i][j];
    		printf("\n");
    	}
    Chỉ sai lỗi đó thôi.

    Khi nhập mảng 2 chiều mình thường khai báo như này:

    vd:
    Code:
    int **a;
    Nhưng phải cấp phát mới chạy được.

    Code Demo:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    void nhap(int **a,int n,int m)
    {
    	int i,j;
    	for(i=0;i<n;i++)
    		for(j=0;j<m;j++)
    		{
    			printf("nhap a[%d][%d]=",i,j);
    			scanf("%d",&a[i][j]);
    		}
    }
    
    int main()
    {
    	int **a;
    	a=(int**) malloc (3*sizeof(int*));
    	for (int i=0;i<3;i++)
    		a[i]=(int*) malloc (4*sizeof(int));
    	nhap(a,3,4);
    	for (int i=0;i<3;i++)
    		free (a[i]);
    	free (a);
    }

  8. #8
    Ngày gia nhập
    07 2008
    Bài viết
    30

    ừh cám ơn héy..mà bạn nè mình học con trỏ thì nên học và tương tác các giá trị theo kiểu như bạn nhỉ....chứ nếu như thế tiện hơn trong cấp phát vùng nhớ và khi cần có thể free thì đỡ tốn bộ nhớ hơn phải không...hỏi 1 câu ngoài nha...khi bạn viết soft bạn có hay dùng con trỏ không?.....mà trong cái sách C của mình..nó không dạy cái kiểu int **a đó nơi..hic..cái này là thuộc C++ hay C vậy bạn...nhiều khi học mờ thấy bối rối quá....

  9. #9
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    ừh cám ơn héy..mà bạn nè mình học con trỏ thì nên học và tương tác các giá trị theo kiểu như bạn nhỉ....chứ nếu như thế tiện hơn trong cấp phát vùng nhớ và khi cần có thể free thì đỡ tốn bộ nhớ hơn phải không...hỏi 1 câu ngoài nha...khi bạn viết soft bạn có hay dùng con trỏ không?.....mà trong cái sách C của mình..nó không dạy cái kiểu int **a đó nơi..hic..cái này là thuộc C++ hay C vậy bạn...nhiều khi học mờ thấy bối rối quá....
    C mà bạn, đọc sách thầy Ất hình như cũng có, ứng dụng của con trỏ trong C là rất phổ biến, gần như tất cả các chương trình to to đều động đến nó ít nhiều.

    Nên dùng con trỏ để cấp phát bộ nhớ và xóa khi cần, như vậy sẽ tránh được lãng phí bộ nhớ.

    Còn một điều có thể bạn chưa biết, mảng là con trỏ hằng.

    Have fun!

  10. #10
    Ngày gia nhập
    07 2008
    Bài viết
    30

    Hình như thầy Phạm Văn ất chỉ có sách C++ thui mờ...mình thì đọc 2 loại 1 loại của "Nguyễn đình tê,Hoàng đức hải" và 1 cuốn của "Quách Tuấn Ngọc"
    có mua thêm quyển BT C A--Z...để mai đi lục xem có sách thầy Ất ko

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

  1. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  2. Lỗi: bố cục trang web tự tăng theo chiều ngang khi chiều cao thay đổi
    Gửi bởi tuanngocpt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 16-03-2013, 11:25 PM
  3. Trả lời: 1
    Bài viết cuối: 28-04-2012, 09:43 PM
  4. Cách truyền mang 1 chiều cho hàm bài con trỏ và mảng một chiều ai có thể giải thích giúp mình
    Gửi bởi biencute trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 21-03-2012, 09:00 AM
  5. Lời giải bài tập: Chuỗi Ký tự, mảng số nguyên 1 chiều, mảng 2 chiều, tạo Menu
    Gửi bởi xuanngoc trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 15-10-2011, 01:17 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