Announcement

Collapse
No announcement yet.

Bài của em bị lỗi gì sao không chạy ra kết quả!??

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bài của em bị lỗi gì sao không chạy ra kết quả!??

    Đề yêu cầu tìm ucln của một dãy số dương. Em làm như vậy
    Code:
    #include "stdafx.h"
    #include <conio.h>
    #include <stdio.h>
    void nhap(int a[],int n);
    void xuat(int a[],int n);
    int ucln(int a,int b);
    void ucd(int a[],int &n);
    void main()
    {
    	int a[10],n,i,j,uc;
    	
    	printf("nhap n:");
    	scanf("%d",&n);
    	printf("\nNHap mang duong\n");
    	nhap(a,n);
    
    	/*uc = ucln(a[0],a[1]);
            for (i = 2; i < n; i++)
    	    if (uc == 1) break;
    	    else uc = ucln(uc,a[i]);
    	printf("\nucln cua cac pt duong trong mang la %d",uc);  */
    
    	ucd(a,n); printf("\nucln cua cac pt duong trong mang la "); xuat(a,n);
    
    	getch();
    }
    
    void nhap(int a[],int n)
    {
    	int i;
    	for (i=0;i<n;i++)
    	{
    		printf("\npt[%d]:",i);
    		scanf("%d",&a[i]);
    	}
    }
    void xuat(int a[],int n)
    {
    	int i;
    	for (i=0;i<n;i++)
    		printf("%3d",a[i]);
    }
    
    int ucln(int a,int b)
    {
    	
    	do
    	{
    		if(a>b)a=a-b;
    		else b=b-a;
    	}
    	while(a!=b);
    	return a;
    }
    void ucd(int a[],int &n)
    {
    	int i,j; 
    	do
    	{
    		for(i=0,j=-1;i<n-1;i+=2)
    		{
    			j++;
    			a[j]=ucln(a[i],a[i+1]);
    		}
    		if((n%2)!=0)
    		{
    			a[j+1]=a[n-1];
    			n=(n+1)/2;
    		}
    		else n=n/2;
    	}
    	while(n!=1);
    
    }
    ...không biết bị sao mà khi n>4 nó không cho ra kết quả!!!?. Mọi người giúp em!!
    not..

  • #2
    cái hàm tính ucln của em nếu a== b thi nó ko ra kết quả kìa. thêm cái if(a==b) return a; vào trước cái if của em là được.

    Comment


    • #3
      Cái hàm void ucd(int a[],int &n) bạn viết khó hiểu quá.
      Trần Trung Ngôn UIT-CE 08520257
      My Blog

      Comment


      • #4
        Originally posted by 11520338 View Post
        Đề yêu cầu tìm ucln của một dãy số dương. Em làm như vậy
        Code:
        #include "stdafx.h"
        #include <conio.h>
        #include <stdio.h>
        void nhap(int a[],int n);
        void xuat(int a[],int n);
        int ucln(int a,int b);
        void ucd(int a[],int &n);
        void main()
        {
        	int a[10],n,i,j,uc;
        	
        	printf("nhap n:");
        	scanf("%d",&n);
        	printf("\nNHap mang duong\n");
        	nhap(a,n);
        
        	/*uc = ucln(a[0],a[1]);
                for (i = 2; i < n; i++)
        	    if (uc == 1) break;
        	    else uc = ucln(uc,a[i]);
        	printf("\nucln cua cac pt duong trong mang la %d",uc);  */
        
        	ucd(a,n); printf("\nucln cua cac pt duong trong mang la "); xuat(a,n);
        
        	getch();
        }
        
        void nhap(int a[],int n)
        {
        	int i;
        	for (i=0;i<n;i++)
        	{
        		printf("\npt[%d]:",i);
        		scanf("%d",&a[i]);
        	}
        }
        void xuat(int a[],int n)
        {
        	int i;
        	for (i=0;i<n;i++)
        		printf("%3d",a[i]);
        }
        
        int ucln(int a,int b)
        {
        	
        	do
        	{
        		if(a>b)a=a-b;
        		else b=b-a;
        	}
        	while(a!=b);
        	return a;
        }
        void ucd(int a[],int &n)
        {
        	int i,j; 
        	do
        	{
        		for(i=0,j=-1;i<n-1;i+=2)
        		{
        			j++;
        			a[j]=ucln(a[i],a[i+1]);
        		}
        		if((n%2)!=0)
        		{
        			a[j+1]=a[n-1];
        			n=(n+1)/2;
        		}
        		else n=n/2;
        	}
        	while(n!=1);
        
        }
        ...không biết bị sao mà khi n>4 nó không cho ra kết quả!!!?. Mọi người giúp em!!
        theo mình biết thì lỗi là ở hàm ucln, cụ thể là do bạn dùng do{} while();
        nghĩa là làm rồi mới so sánh vì vậy khi a=b thì hàm sẽ thực hiện lệnh else b=b-a; dần b sẽ bằng 0 suy ra b luôn luôn khác a. vòng lặp sẽ trở thành vòng lặp vô hạn. như vậy thì đợi tới treo máy cũng chẳng ra kết quả.
        bạn sửa lại thành while () {} thì sẽ ra kết quả thôi.

        Comment


        • #5
          vấn đề ở đây là do 2 hàm ucln và ucd của bạn thì có tí vấn đề nên chạy bị lỗi, bạn thử làm như thế này xem.
          Code:
          #include "stdafx.h"
          #include <conio.h>
          #include <stdio.h>
          void nhap(int a[],int n);
          void xuat(int a[],int n);
          int ucln(int a,int b);
          void ucd(int a[],int &n);
          void main()
          {
          	int a[10],n,i,j,uc;
          	do
                    {
          	    printf("nhap n:");
          	    scanf("%d",&n);
                     }
                  while(n<1||n>10);
          
          	printf("\nNHap mang \n");
          	nhap(a,n);
                  
                  printf("\nXuat mang : ");
          	xuat(a,n);
          
                  ucd(a,n);
          
             	getch();
          }
          
          void nhap(int a[],int n)
          {
          	int i;
          	for (i=0;i<n;i++)
          	{
          		printf("\npt [%d]:",i);
          		scanf("%d",&a[i]);
          	}
          }
          void xuat(int a[],int n)
          {
          	int i;
          	for (i=0;i<n;i++)
          		printf("%3d",a[i]);
          }
          
          int ucln(int a,int b)
          {
                  while(a!=b)
          	  {
                         if(a>b)  a=a-b;
          		       else  b=b-a;
          	  }
                 	return a;
          }
          void ucd(int a[],int n)
          {
          	int i,j=0,m=n, b[m] ;
                  for(i=0;i<n;i++)
                      if(a[i]>0) { b[j]=a[i]; j++;}
                           else m--;
                  if(m<1) printf("\nkhong co phan tu nao duong trong mang ");
                     else 
                     {
                         int tam=a[0];
                         for(i=1;i<n-1;i++)
          	        {
                             if(tam==1) break;
          	           tam=ucln(tam,a[i+1]);       
                  	}
                         printf("\nucln cua cac pt duong <"); 
                         xuat(b,m);
                         printf(" > la : %2d",tam);
                      }      
          
          }
          ...do máy ko cài visual nên chưa test, bạn test thử xem, mà chắc đúng rồi ah
          --Sống trên đời sống cần có một tấm lònG--
          ->Live->learn->Live->

          Comment


          • #6
            Vẫn không được anh ơi!! hihi ham ucln bị sai
            làm như vậy mới đúng

            Code:
            int ucln(int a,int b)
            {
                
                while(a!=b)
                {
                    if(a>b)a=a-b;
                    else b=b-a;
                }
                //while(a!=b);
                if(a==b)return a;
            lệnh do{..} while khác while { ..} em cứ bị sai. Cả ơn mấy anh
            Last edited by BiThuDoan; 14-01-2012, 00:58.
            not..

            Comment

            LHQC

            Collapse
            Working...
            X