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

Đề tài: chữa bài sắp xếp hòa nhập

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

    Mặc định chữa bài sắp xếp hòa nhập

    em có bài tập sau

    Nhập vào 2 dãy số thực được sắp xếp tăng dần,xây dựng dãy mới từ 2 dãy trên theo thứ tự tăng dần
    đây là code do em viết,chữa đi chữa lại mãi mà không ra(các pác soát lỗi và chữa hộ em nhé)

    Code:
    #include "stdafx.h"
    #include<conio.h>
    #include<stdio.h>
    void nhapdulieu(int m,int n);
    void sapxep(float a[100],float b[100]);
    void main()
    {	
    
    	float c[100],a[100],b[100];
    	int n,m,k;
    	printf("nhap so phan tu cho mang a va mang b");
    	scanf("%d %d",&n,&m);
    	nhapdulieu(n,m);
    	sapxep(a,b);
    	for (k=0;k<n+m;++k)
    		printf("5.2%f \t",c[k]);
    	getch();
    }
    void nhapdulieu(int m,int n)
    {
    	float a[100],b[100];
    	int i,j;
    	printf("nhap phan tu cho mang a \n");
    	for(i=0;i<n;++i)
    	{	
    		printf("nhap phan tu thu %d",i);
    	    scanf("%f",&a[i]);
    	}
    	printf("nhap phan tu cho mang b \n");
    	for(j=0;j<m;++j)
    	{	
    		printf("phan tu th %d",j);
    
    		scanf("%f",&a[j]);
    	}
    
    
    }
    void sapxep(int m,int n)
    {	
    	float c[100],b[100],a[100];
    	int i,j,k,r,t;
    	i=1;j=1;k=1;
    	while((i<=n)&&(j<=r))
    		{	if(a[i]<b[j])
    			{
    				c[k]=a[i];
    				i=i+1;
    				j=j+1;
    			}	
    			else
    			{	
    				c[k]=b[j];
    				i=i+1;
    				j=j+1;
    			}
    		   if(i>n)
    			{
    			  for(t=0;t<r-j;++t)
    				c[k+t]=b[j+t];
    			}
    		   else
    		    {
    			   for(t=0;t<n-i;++t)
    				   c[k+t]=a[i+t];
    		    }
    	     }
    
    }

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Đầu tiên mình có 1 góp ý là bạn chịu khó bỏ code vào thẻ [code] [code] ( cái thứ 2 thì thêm / trước chữ code, mình không để vào được vì để vào nó sẽ tự hiểu và cho ra khoảng trắng, nên mình ghi ra cho bạn thấy ) cho đúng nội qui đã. Và đọc sơ qua code của bạn, thì thấy bạn khai báo 3 mãng đó 3 lần trong khi đối số bạn truyền vào cho các hàm thao tác chỉ là m và n. Mình đoán chắc nó sẽ không ra gì đúng không ? Vì nó chỉ thao tác trên các biến cục bộ thôi, hàm không có kiểu trả về void, thì làm sao nó cho ra kết quả được nhỉ ?
    Bạn thử cho các mãng làm đối của các hàm xem sao ? Lần sau nếu post nhờ debug thì bạn nên post thêm cái bug đó lên nhé ! Thử lại 1 lần nữa xem sao ! Nếu vẫn không xong mình sẽ giúp cho T_T!
    Bạn nhầm chỗ :
    PHP Code:
    void nhapdulieu(int m,int n);
    void sapxep(float a[100],float b[100]); 
    Đây là prototype, bạn khai báo thế này nhưng khi truyền tham số cho các hàm này thì bạn lại truyền kiểu khác.
    PHP Code:
    void nhapdulieu(int m,int n)
    {
    float a[100],b[100];
    int i,j;
    printf("nhap phan tu cho mang a \n");
    for(
    i=0;i<n;++i)
    {
    printf("nhap phan tu thu %d",i);
    scanf("%f",&a[i]);
    }
    printf("nhap phan tu cho mang b \n");
    for(
    j=0;j<m;++j)
    {
    printf("phan tu th %d",j);

    scanf("%f",&a[j]);//Thằng này của mãng b mà, tại sao a[j] ở đây ?

    Đây mình sữa lại cho nó chạy được rùi đó, do mình học C++ nên chỉ hiểu sơ sơ C mà thôi. Bạn coi thử xem :
    PHP Code:
    #include<stdio.h>
    #include <iostream>

    void nhapdulieu(int ,int float*, float*);
    void sapxep(intint,float*, float*, float*);

    void main()
    {
        
    float c[100],a[100],b[100];
        
    int n,m,k;
        
    printf("nhap so phan tu cho mang a va mang b");
        
    scanf("%d %d",&n,&m);
        
        
    nhapdulieu(m,n,a,b);
        
        
    sapxep(m,n,a,b,c);

        for (
    k=0;k<n+m;++k)
        {
            
    printf("5.2%f \t",c[k]);
        }
          
        
    int tcin >> t;
    }

    void nhapdulieu(int mint nfloat *afloat *b)
    {
        
    int i,j;
        
    printf("nhap phan tu cho mang a \n");
        for(
    i=0;i<n;++i)
        {
            
    printf("nhap phan tu thu %d",i);
            
    scanf("%f",&a[i]);
        }
        
    printf("nhap phan tu cho mang b \n");
        for(
    j=0;j<m;++j)
        {
            
    printf("phan tu th %d",j);
            
    scanf("%f",&b[j]);
        }
    }


    void sapxep(int mint nfloat *afloat *bfloat *c)
    {
        
    int i,j,k,r,t;
        
    i=1;j=1;k=1;
        while((
    i<=n)&&(j<=r))
        { 
          if(
    a[i]<b[j])
          {
            
    c[k]=a[i];
            
    i=i+1;
            
    j=j+1;
          }
          else
          {
            
    c[k]=b[j];
            
    i=i+1;
            
    j=j+1;
          }
          if(
    i>n)
          {
            for(
    t=0;t<r-j;++t)
              
    c[k+t]=b[j+t];
          }
          else
          {
            for(
    t=0;t<n-i;++t)
              
    c[k+t]=a[i+t];
          }
        }

    Đã được chỉnh sửa lần cuối bởi rox_rook : 19-01-2008 lúc 05:44 AM.

  3. #3
    Ngày gia nhập
    01 2008
    Bài viết
    7

    Em xin cám ơn bác rox_rook
    tiện thể bác cho em hỏi cái,trong bài code bác sửa lại cho em ,em chưa hiểu cái dòng này
    void nhapdulieu(int ,int , float*, float*);
    void sapxep(int, int,float*, float*, float*);

    Kiểu float* là kiểu gì đấy,chẳng có biến hay mảng đứng đằng trước nó(float*) gì mà vẫn dùng được nhỉ
    em cám ơn bác

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

    còn câu hỏi này nữa bác giải thix luôn giùm em
    Tham số hình thức trong 2 hàm này
    void sapxep(int m, int n, float *a, float *b, float *c)
    void nhapdulieu(int m, int n, float *a, float *b)

    đều là con trỏ nhưng trong hàm lại chẳng thấy dấu hiệu gì là dùng con trỏ cả

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mãng và con trỏ trong cách này có thể dùng tương đương nhau, ví dụ nếu shogun chưa học con trỏ thì chuyển lại thành :
    PHP Code:
    void nhapdulieu(int mint nfloat a[], float b[]) 
    Vì tên mãng là con trỏ hằng trỏ tới phàn tử đầu tiên của mãng tức là a = &a[0]. Bây h thì tạm thời hiểu vậy đã, khoang hãy học con trỏ mà hãy làm bài tập nhiều nữa vào, vì mình cảm giác shogun còn mới quá, nên chỉ tạm thời quan tâm tới mãng là đủ làm bài tập nhiều lắm rồi. Hai hoặc 3 tháng nữa rồi quay lại tìm hiểu con trỏ cũng chưa muộn. Nên nhớ con trỏ cũng chỉ là 1 kĩ thuật mà thôi, không có con trỏ vẫn có thể làm được ( tuy không tối ưu ).Cái này mình chỉ góp ý, còn nếu shogun đang học ở trường thì hãy đọc lại kĩ lý thuyết trước đã rồi còn chỗ nào vướng mắc mình sẽ giải thích, vì phần này nếu không đọc kĩ sẽ rất dễ bị hỏng kiến thức.
    Khi truyền 1 mãng 1 chiều vào hàm thì 3 thằng này là như nhau
    PHP Code:
    int first(int const array[10]);//chỗ này size của mãng sẽ được complier bỏ qua, thêm vào thì cũng không sai
    int first(int const array[]);
    int first(int const *array); 

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

    Mặc định chữa bài sắp xếp hòa nhập

    con trỏ mình học rồi nhưng vẫn còn lơ mơ lắm,nhưng đủ để nghe được bạn giải thic
    bạn cứ giải thix giúp mình dòng lệnh ấy đi
    Luôn luôn lắng nghe, luôn luôn thấu hiểu

  7. #7
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    con trỏ mình học rồi nhưng vẫn còn lơ mơ lắm,nhưng đủ để nghe được bạn giải thic
    Vậy mình khuyên bạn đọc kĩ lại lý thuyết trước đã, bạn vội sẽ không có kết quả đâu.
    Cái hàm trên thì chỉ đơn giản là truyền mãng vào hàm thôi, vì tên mãng cũng là con trỏ, nên 2 cách truyền trên tương đương nhau. Vậy thôi mà.
    đều là con trỏ nhưng trong hàm lại chẳng thấy dấu hiệu gì là dùng con trỏ cả
    PHP Code:
    a[i] = *(i); 
    2 cái đó tương đương nhau.

  8. #8
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    void sapxep(int m, int n, float *a, float *b, float *c)
    {
    int i,j,k,r,t;
    i=1;j=1;k=1;
    while((i<=n)&&(j<=r))
    {
    if(a[i]<b[j])
    {
    c[k]=a[i];
    i=i+1;
    j=j+1;
    }
    else
    {
    c[k]=b[j];
    i=i+1;
    j=j+1;
    }
    if(i>n)
    {
    for(t=0;t<r-j;++t)
    c[k+t]=b[j+t];
    }
    else
    {
    for(t=0;t<n-i;++t)
    c[k+t]=a[i+t];
    }
    }
    }[/php]
    Nếu làm kiểu:
    if (...) c[k++]=a[i++];
    else c[k++]=b[j++];
    Như vậy thì sẽ không cần phải khai báo nhiều biến.
    Bài dạng này mình và bác huy_nguyen có một topic về nó rồi, bạn có thể search và tham khảo.
    Bạn chỉ cần nhớ rằng, nếu a[i]>b[j] thì tăng cái i lên( và ngược lại) và mảng c cũng cho tăng lên là được.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  9. #9
    Ngày gia nhập
    01 2008
    Bài viết
    41

    Trích dẫn Nguyên bản được gửi bởi shogun_vn Xem bài viết
    còn câu hỏi này nữa bác giải thix luôn giùm em
    Tham số hình thức trong 2 hàm này
    void sapxep(int m, int n, float *a, float *b, float *c)
    void nhapdulieu(int m, int n, float *a, float *b)

    đều là con trỏ nhưng trong hàm lại chẳng thấy dấu hiệu gì là dùng con trỏ cả
    khi muốn truyền bất cứ một thứ gì vào trong hàm mà muốn tác động vào nó thì đều phải truyền con trỏ cả,mục đích sử dụng con trỏ ở đây là như vậy

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

  1. bơm ga điều hòa - điều hòa không lạnh, BẢO DƯỠNG ĐIỀU HÒA TẠI THANH XUÂN 0977373000 giá rẻ nhất
    Gửi bởi cachiu 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: 22-03-2012, 11:01 AM
  2. $^$Chung cư yên hòa, dự án yên hòa, liên hệ ngay để nhận được giá tốt nhất
    Gửi bởi ephat_tt86 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: 05-01-2012, 11:28 AM
  3. $^$Chung cư yên hòa, dự án yên hòa, liên hệ ngay để nhận được giá tốt nhất
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 29-12-2011, 08:32 AM
  4. Căn hộ hòa bình green city 505 minh khai, liên hệ ngay để nhận được giá tốt nhất
    Gửi bởi ephat_tt86 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: 19-12-2011, 11:22 AM
  5. Liền kề xuân hòa, dự án xuân hòa, giá chênh thấp nhất
    Gửi bởi ephat_tt86 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: 27-10-2011, 12:17 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