Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 13
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Đã giải xong các bài tập (bên dưới), muốn giải lại bằng sử dụng con trỏ, cần hướng dẫn thêm.

    -Chương trình trên lớp bọn em đang học đến Mảng--Con trỏ.Thầy giáo cung cấp cho rất nhiều bài tập .Nhưng hầu hết em chỉ giải đơn thuần mà không dùng mấy đến con trỏ. tại thấy nó cứ khó khăn khi dùng .Anh chị nào bớt chút thời gian giải dùm em 1 vài bài mẫu với.Em cảm ơn .!
    Dưới đây là đề bài:
    .
    Bài 15. Nhập số liệu cho ma trận A kiểu mxn có các phần tử là các số nguyên. Tìm các giá trị cực đại và cực tiểu của các phần tử và chỉ rõ vị trí của chúng trong bảng.
    Bài 16. Nhập số liệu cho dãy số nguyên a0 , a1 ,..., an-1 và một giá trị thực x. Giả sử dãy a đã được sắp xếp theo thứ tự tăng dần. Hãy chèn giá trị x vào dãy a sao cho vẫn giữ được tính sắp xếp của mảng.
    Bài 17. Nhập số liệu cho dãy số nguyên a0 , a1 ,..., an-1 . Kiểm tra xem dãy đã được sắp xếp theo thứ tự tăng dần hay không. Nếu không hãy chỉ ra vị trí phần tử đầu tiên làm mất tính chất được sắp của dãy.
    2
    Bài 18. Nhập số liệu cho dãy số nguyên a0 , a1 ,..., an-1 . Tìm 2 số lớn nhất khác nhau và vị trí của chúng trong dãy trên (nếu có hai số cùng giá trị thì lấy chỉ số nhỏ hơn). Thí dụ trong dãy 1,5,3,4,5 thì 2 phần tử lớn nhất là 5 và 4 và ở các vị trí 1 và 3.
    Bài 19. Nhập dãy n số (n ≤ 1000). Xác định đường chạy dài nhất, xuất lên màn hình vị trí phần tử đầu tiên và độ dài của đường chạy đó. Đường chạy là một dãy liên tiếp các phần tử không giảm của dãy ban đầu. Ví dụ : Nhập dãy 1 4 2 3 1 2 6 8 3 5 7 Đường chạy dài nhất là : 4 4
    Bài 20. Tính giá trị của đa thức P(x)=anxn+ an-1xn-1+ ... + a1x+ a0 theo cách tính của Horner: P(x)=((((anx+ an1)x+ an-2... + a1)x+ a0
    Bài 21. Nhập các hệ số ai (i=0,1,2,...,m) của đa thức P(x) bậc m (ai là hệ số của xi ) và nhập các hệ số bj (j=0,1,2,...,n) của đa thức Q(x) bậc n (bj là hệ số của xj ). In ra các hệ số của đa thức tổng.
    Bài 22. Nhập số n và dãy các số nguyên a0 , a1 ,..., an-1. Không đổi chỗ các phần tử, hãy cho hiện trên màn hình dãy trên theo thứ tự tăng dần.
    Bài 23. Viết chương trình nhập số liệu cho ma trận các số nguyên A cấp mxn trong đó m, n là các số tự nhiên. Sau đó tìm ma trận chuyển vị B = (bij) cấp nxm, bij = aji i = 1,2,...,n;j =1,2,...,m Cho hiện 2 ma trận trên màn hình để tiện so sánh.
    Bài 24. Viết chương trình tính tích 2 ma trận các số nguyên A cấp mxn và B cấp nxk.
    Bài 25. Nhập ma trận vuông A cấp n có các phần tử là các số nguyên rồi - Đếm các phần tử >0 - Đếm các phần tử <0
    Bài 26. Nhập số liệu cho ma trận A kiểu mxn có các phần tử là các số nguyên. Tìm phần tử bé nhất của mỗi dòng và đặt chúng vào cột đầu tiên. (Tức là phần tử đầu tiên của mỗi dòng sẽ là phần tử bé nhất của dòng đó).
    Bài 27. Nhập số liệu cho ma trận A kiểu mxn có các phần tử là các số nguyên. Tìm phần tử bé nhất của ma trận và đếm xem có bao nhiêu phần tử bằng phần tử bé nhất.
    Bài 28. Nhập số liệu cho ma trận A kiểu mxn có các phần tử là các số nguyên. Hãy liệt kê trên màn hình tất cả các phần tử của ma trận nhưng theo thứ tự tăng dần.
    Bài 29. Nhập ma trận chữ nhật các số nguyên có cấp mxn. Tìm phần tử lớn nhất của mỗi hàng. In mỗi phần tử tìm được trên một dòng (thông tin in ra càng đầy đủ càng tốt).
    Bài 30. Nhập ma trận chữ nhật các số nguyên có cấp mxn.Tìm hàng của ma trận sao cho tổng các phần tử tính theo hàng đó là lớn nhất so với các hàng còn lại.
    Bài 31. Nhập ma trận chữ nhật các số nguyên có cấp mxn.Tìm cột của ma trận sao cho tổng các phần tử tính theo cột đó là lớn nhất so với các cột còn lại.
    Bài 32. Tìm định thức của ma trận vuông cấp n.*
    Bài 33. Nhập số liệu cho ma trận A có kiểu mxn. Sau đó tìm ma trận chuyển vị B có kiểu nxm thỏa mãn bij = aji. Tính ma trận tích C có kiểu mxm của 2 ma trận A và B.
    Bài 34. Nhập số liệu cho ma trận A kiểu mxn có các phần tử là các số tự nhiên. Hãy liệt kê tất cả các phần tử của ma trận là các số nguyên tố; liệt kê trên từng dòng của màn hình tương ứng với từng hàng của ma trận.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Hầu hết các bài trên đều đã có bài giải. Chịu khó tìm trong các mục này.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Em giải hết rồi nhưng không dùng con trỏ ,nên post lên xem mọi người giải theo cách khác thôi . [IMG]images/smilies/online.gif[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    Thực ra a đó có thể xem là một con trỏ đến vùng nhớ liên tục, ngoài ra mảng của họ nhà C được đánh index theo dòng [vẽ hình]
    Vì vậy với kiểu T[][n] như trong code trên thì
    : &a[i][j] = a + (i*n+j) đây là phép cộng con trỏ.

    Còn kiểu T*[] thì khác.

    Thực tế chỉ có T[][n] chứ ko có T[m][n] vì m không cần thiết cho công thức trên.
    Tức là kể cả mảng 1 2 chiều hay 3... nó đếu là vùng nhớ liên tục ạ? Khi đó dữ liệu mình lưu trên mảng nó có phải là các địa chỉ ô nhớ liên tiếp nhau không a.?

    - - - Nội dung đã được cập nhật ngày 05-05-2016 lúc 07:32 PM - - -

    Trích dẫn Gửi bởi NguNhuheo
    a trỏ vào phần tử đầu tiên của mảng. i * SOCOT là đếm từ đó đi i*SOCOT phần tử, tức là i dòng. Cộng thêm j là cột thứ j.
    ok.cảm ơn a.````````[IMG]images/smilies/biggrin.png[/IMG]

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi vutuancong
    Tức là kể cả mảng 1 2 chiều hay 3... nó đếu là vùng nhớ liên tục ạ? Khi đó dữ liệu mình lưu trên mảng nó có phải là các địa chỉ ô nhớ liên tiếp nhau không a.?
    Liên tiếp bạn .

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi vutuancong
    Em giải hết rồi nhưng không dùng con trỏ ,nên post lên xem mọi người giải theo cách khác thôi . [IMG]images/smilies/online.gif[/IMG]
    Bạn đưa 1 vài bài bạn đã giải lên đây tôi sẽ chuyển qua cách dùng con trỏ.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Em có phải gửi tệp không sợ dài quá .Hay từng bài một trước nhá..[IMG]images/smilies/redface.png[/IMG]
    Mã:
    //Nhap so lieu cho ma tran a kiem mxn co cac phan tu la so nguyen.Tim gia tri cuc dai va cuc tieu cua cac phan tu va chi ro vi tri cua chung trong bang.
    #include<stdio.h>
    #include<conio.h>
    void nhapmatran(int a[][100],int &m,int &n)
    {
    	printf("Nhap ma tra co m hang va n cot la  : ");
    	scanf("%d%d",&m,&n);
    	for(int i = 0;i<m;i++)
    	{
    		for(int j =0;j<n;j++)
    		{
    			printf("
    a[%d][%d] : ",i,j );
    			scanf("%d",&a[i][j]);
    		}
    	}
    }
    void xuat(int a[][100],int m,int n)
    {
    	for(int i= 0;i<m;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			printf("%d\t",a[i][j]);
    		}
    		printf("
    ");
    	}
    }
    int max(int a[][100],int m,int n)
    {
    	int max=0;
    	for(int i=0;i<m;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			if(a[i][j]>max) max=a[i][j];
    		}
    	}
    	return max;	
    }
    int min(int a[][100],int m,int n)
    {
    	int min =a[0][0];
    	for(int i=0;i<m;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			if(a[i][j]<min) min =a[i][j];
    		}
    	}
    	return min;
    }
    void min_max_ma_tran(int a[][100],int m,int n)
    {
    	printf("
    Gia tri lon nhat la : %d ",max(a,m,n));
    	for(int i=0;i<m;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			if(a[i][j]==max(a,m,n))
    			{
    				printf("
     Vi tri hang la %d , vi tri cot la %d ",i+1,j+1);
    			}
    		}
    	}
    	printf("
    Gia tri nho nhat la : %d ",min(a,m,n));
    	for(int i=0;i<m;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			if(a[i][j]==min(a,m,n))
    			{
    				printf("
     Vi tri hang la %d , vi tri cot la %d ",i+1,j+1);
    			}
    		}
    	}
    }
    int main()
    {
    	int a[100][100],m,n;
    	nhapmatran(a,m,n);
    	xuat(a,m,n);
    	min_max_ma_tran(a,m,n); 
    }

  8. #8
    Có 2 cách để dùng con trỏ. Cách thuần túy là dùng một mảng và con trỏ vào con trỏ cùng phép tính chỉ số để chia mảng ra cột và dòng, tức là giả ma trận.
    Cách thứ hai là dùng con trỏ mảng. Ví dụ hàm nhapmatran của bạn:
    Mã:
    #define SOCOT 100
    
    void nhapmatran(int *a,int *m,int *n)
    {
    	printf("Nhap ma tra co m hang va n cot la  : ");
    	scanf("%d%d",m,n);
    	for(int i = 0;i<m;i++)
    	{
    		for(int j =0;j<n;j++)
    		{
    			printf("
    a[%d][%d] : ",i,j );
    			scanf("%d", (a + i * SOCOT) + j);
    		}
    	}
    }
    
    // trng hàm main, lúc nhập ma trận phải typecast nó
    
    nhapmatran((int *) a, &m, &n);

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi NguNhuheo
    Có 2 cách để dùng con trỏ. Cách thuần túy là dùng một mảng và con trỏ vào con trỏ cùng phép tính chỉ số để chia mảng ra cột và dòng, tức là giả ma trận.
    Cách thứ hai là dùng con trỏ mảng. Ví dụ hàm nhapmatran của bạn:
    Mã:
    #define SOCOT 100
    
    void nhapmatran(int *a,int *m,int *n)
    {
    	printf("Nhap ma tra co m hang va n cot la  : ");
    	scanf("%d%d",m,n);
    	for(int i = 0;i<m;i++)
    	{
    		for(int j =0;j<n;j++)
    		{
    			printf("
    a[%d][%d] : ",i,j );
    			scanf("%d", (a + i * SOCOT) + j);
    		}
    	}
    }
    
    // trng hàm main, lúc nhập ma trận phải typecast nó
    
    nhapmatran((int *) a, &m, &n);
    thật sự em không hiểu chỗ này: scanf("%d", (a + i * SOCOT) + j);

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    a trỏ vào phần tử đầu tiên của mảng. i * SOCOT là đếm từ đó đi i*SOCOT phần tử, tức là i dòng. Cộng thêm j là cột thứ j.

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •