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

#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("
NHap mang duong
");
nhap(a,n);
/*uc = ucln(a[0],a[1]);
for (i = 2; i < n; i++)
if (uc == 1) break;
else uc = ucln(uc,a*);
printf("
ucln cua cac pt duong trong mang la %d",uc);  */
ucd(a,n); printf("
ucln 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("
pt[%d]:",i);
scanf("%d",&a*);
}
}
void xuat(int a[],int n)
{
int i;
for (i=0;i<n;i++)
printf("%3d",a*);
}
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*,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!!

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.

Cái hàm void ucd(int a,int &n) bạn viết khó hiểu quá.

[QUOTE=11520338;34443]Đề yêu cầu tìm ucln của một dãy số dương. Em làm như vậy

#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("
NHap mang duong
");
nhap(a,n);
/*uc = ucln(a[0],a[1]);
for (i = 2; i < n; i++)
if (uc == 1) break;
else uc = ucln(uc,a*);
printf("
ucln cua cac pt duong trong mang la %d",uc);  */
ucd(a,n); printf("
ucln 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("
pt[%d]:",i);
scanf("%d",&a*);
}
}
void xuat(int a[],int n)
{
int i;
for (i=0;i<n;i++)
printf("%3d",a*);
}
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*,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!![/QUOTE]
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.

[QUOTE=11520338;34443]Đề yêu cầu tìm ucln của một dãy số dương. Em làm như vậy

#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("
NHap mang duong
");
nhap(a,n);
/*uc = ucln(a[0],a[1]);
for (i = 2; i < n; i++)
if (uc == 1) break;
else uc = ucln(uc,a*);
printf("
ucln cua cac pt duong trong mang la %d",uc);  */
ucd(a,n); printf("
ucln 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("
pt[%d]:",i);
scanf("%d",&a*);
}
}
void xuat(int a[],int n)
{
int i;
for (i=0;i<n;i++)
printf("%3d",a*);
}
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*,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!![/QUOTE]
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.

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.

#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("
NHap mang
");
nhap(a,n);
printf("
Xuat mang : ");
xuat(a,n);
ucd(a,n);
getch();
}
void nhap(int a[],int n)
{
int i;
for (i=0;i<n;i++)
{
printf("
pt [%d]:",i);
scanf("%d",&a*);
}
}
void xuat(int a[],int n)
{
int i;
for (i=0;i<n;i++)
printf("%3d",a*);
}
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*>0) { b[j]=a*; j++;}
else m--;
if(m<1) printf("
khong 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("
ucln 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 :smiley:

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


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