Họ tên thật : Vũ Văn Diễn Birthday : 13/05/1993 NGHỀ NGHIỆP : cân vành tàu hỏa,vá xăm xe lu Đến từ : Hưng Nhân,Hưng Hà,Thái Bình Posts : 69 Points : 23003 Age : 30 Tham gia : 23/10/2011
Birthday : 01/01/1992 NGHỀ NGHIỆP : sv Đến từ : Uneti Posts : 4 Points : 22570 Age : 32 Tham gia : 19/12/2011
Kinh nghiệm: 32%
Sinh mệnh: 4/100
Pháp lực: 32/100
Birthday : 01/01/1992
NGHỀ NGHIỆP : sv
Đến từ : Uneti
Posts : 4
Points : 22570
Age : 32
Tham gia : 19/12/2011
Tiêu đề: Re: bài tính tổng chẵn lẻ,số ng tố
Code rất hay, mình chưa test code, nhưng có vài chỗ góp ý: hàm check số nguyên tố, bạn cho return 0 //ko phải số nt và return 1 //là số nt, mà k phải khai báo thêm biến e. số ptu mảng tối đa trong C++ là 10000 thì phải, chứ k phải 65535 đâu, cái này là giới hạn số nguyên k dấu thì phải . Nếu giờ k biết là nhập vào bao nhiêu số mà cứ thế nhập tùy ý lúc nào chán thì dừng thì làm thế nào
Birthday : 24/11/1992 NGHỀ NGHIỆP : SV Đến từ : Lào Cai Posts : 32 Points : 22635 Age : 31 Tham gia : 18/12/2011
Kinh nghiệm: 31%
Sinh mệnh: 32/100
Pháp lực: 31/100
Birthday : 24/11/1992
NGHỀ NGHIỆP : SV
Đến từ : Lào Cai
Posts : 32
Points : 22635
Age : 31
Tham gia : 18/12/2011
Tiêu đề: Re: bài tính tổng chẵn lẻ,số ng tố
true love waits ... đã viết:
Code rất hay, mình chưa test code, nhưng có vài chỗ góp ý: hàm check số nguyên tố, bạn cho return 0 //ko phải số nt và return 1 //là số nt, mà k phải khai báo thêm biến e. số ptu mảng tối đa trong C++ là 10000 thì phải, chứ k phải 65535 đâu, cái này là giới hạn số nguyên k dấu thì phải . Nếu giờ k biết là nhập vào bao nhiêu số mà cứ thế nhập tùy ý lúc nào chán thì dừng thì làm thế nào
um. cảm ơn bạn góp ý, thứ nhất là nếu hàm ko phải void thì phải return, mà bạn ko thể return lại chính hàm đó dc còn bạn ko cần e cũng ok, chỉ cần
Còn theo mình nghĩ, mình dùng cấp phát động chứ ko phải khai báo cố định lên nó sẽ max giới hạn của kiểu dữ liệu. Số lượng phần tử chỉ phục thuộc vào dung lượng bộ nhớ thôi chứ ko phải là số lượng 10k như bạn nói.
Còn về vụ nhập kiểu như bạn cũng dễ thôi, ý tưởng là nhập tùy ý, khi nào ko nhập dữ liệu thì thót quá trình nhập dữ liệu, bạn dùng vong while check kí tự nhập vào, bạn có thể quy định là exit hoặc là bấm 2 lần enter cũng dc, tất nhiên mảng con trỏ của bạn phải cấp phát max bộ nhớ, Nhược điêm là tốn bộ nhớ và thời gian.
Birthday : 01/01/1992 NGHỀ NGHIỆP : sv Đến từ : Uneti Posts : 4 Points : 22570 Age : 32 Tham gia : 19/12/2011
Kinh nghiệm: 32%
Sinh mệnh: 4/100
Pháp lực: 32/100
Birthday : 01/01/1992
NGHỀ NGHIỆP : sv
Đến từ : Uneti
Posts : 4
Points : 22570
Age : 32
Tham gia : 19/12/2011
Tiêu đề: Re: bài tính tổng chẵn lẻ,số ng tố
int checknt(int n) { if(n == 2 || n == 3) { return 1; } if( n<2 || n % 2 == 0 || n % 3 == 0) { return 0; } if( n < 25 ) { return 1; } int i = 5 ; int j = 2 ; while(i <= sqrt(n/2)) { if(n % i == 0 ) { return 0; } else { i = i + j ; j = 6 - j ;
} } return 1; }
Chú ý đoạn code của bạn Hạnh Phúc Ảo với giá trị n<2 thì không ổn
Phần 2 và 3 có lẽ bạn hiểu sai ý mình, cấp phát động là cấp phát cho mảng tối đa là 10000 phần tử, nếu đề bài cho dãy số > 10000 phần tử bạn không dùng mảng được ( với ngôn ngữ C++)
Sau cùng là bạn nhập tùy ý có nghĩa là không cần dùng mảng nhé, cứ thế nhập số thôi, không cần khai báo mảng, bởi vì sẽ không biết sẽ nhập vào bao nhiêu số, nên không dùng mảng. Chứ khai báo mảng max .. thì hơi ...
Birthday : 24/11/1992 NGHỀ NGHIỆP : SV Đến từ : Lào Cai Posts : 32 Points : 22635 Age : 31 Tham gia : 18/12/2011
Kinh nghiệm: 31%
Sinh mệnh: 32/100
Pháp lực: 31/100
Birthday : 24/11/1992
NGHỀ NGHIỆP : SV
Đến từ : Lào Cai
Posts : 32
Points : 22635
Age : 31
Tham gia : 18/12/2011
Tiêu đề: Re: bài tính tổng chẵn lẻ,số ng tố
true love waits ... đã viết:
int checknt(int n) { if(n == 2 || n == 3) { return 1; } if( n<2 || n % 2 == 0 || n % 3 == 0) { return 0; } if( n < 25 ) { return 1; } int i = 5 ; int j = 2 ; while(i <= sqrt(n/2)) { if(n % i == 0 ) { return 0; } else { i = i + j ; j = 6 - j ;
} } return 1; }
Chú ý đoạn code của bạn Hạnh Phúc Ảo với giá trị n<2 thì không ổn
Phần 2 và 3 có lẽ bạn hiểu sai ý mình, cấp phát động là cấp phát cho mảng tối đa là 10000 phần tử, nếu đề bài cho dãy số > 10000 phần tử bạn không dùng mảng được ( với ngôn ngữ C++)
Sau cùng là bạn nhập tùy ý có nghĩa là không cần dùng mảng nhé, cứ thế nhập số thôi, không cần khai báo mảng, bởi vì sẽ không biết sẽ nhập vào bao nhiêu số, nên không dùng mảng. Chứ khai báo mảng max .. thì hơi ...
Oh. mình thiếu cái
Code:
if(n==1||n==0) return 0;
còn mình ko biết bạn lấy đâu thông tin là max 10k phần tử, vì mình cho rằng, số lượng phần tử phụ thuộc vào kích thước bộ nhớ dc sử dụng, và nếu bạn có đủ bộ nhớ cho 50k phần tử thì chẳng có lí j lại giới hạn ở 10k phần tử cả.
Cứ thê nhập là như thê nào, vì đơn giản mình nghĩ, có thể bạn ko cần mảng để tính tổng, hoặc kiểm tra nguyên tố cũng dc, nhưng nếu muôn in ra thì cũng là một vấn đề nếu ko dung mảng
Birthday : 24/07/1991 NGHỀ NGHIỆP : SV Đến từ : HN Posts : 1 Points : 22512 Age : 32 Tham gia : 30/12/2011
Kinh nghiệm: 32%
Sinh mệnh: 1/100
Pháp lực: 32/100
Birthday : 24/07/1991
NGHỀ NGHIỆP : SV
Đến từ : HN
Posts : 1
Points : 22512
Age : 32
Tham gia : 30/12/2011
Tiêu đề: Re: bài tính tổng chẵn lẻ,số ng tố
Thực ra giới hạn số phần tử của mảng là do trình biên dịch, Turbo C hỗ trợ tối đa số phần tử mảng khoảng vài chục nghìn, DevC hay C-Free là khoảng vài trăm nghìn, nếu bạn khai báo số lượng phần tử mảng quá nhiều thì trình biên dịch sẽ báo lỗi.
Nếu đề bài chỉ yêu cầu tính tổng các số chẵn lẻ và nguyên tố mà không bắt in lại các số đó thì đâu cần dùng đến mảng. Còn nếu như muốn in ra các số đó mà không muốn dùng mảng bạn có thể ghi các số đó lên 3 tệp khác nhau, rồi cuối cùng đọc lại toàn bộ các số từ 3 tệp đó là được.
Đây là cách mình làm
Code:
#include<iostream.h> #include<string.h> #include<stdlib.h> #include<math.h> int ktnt(long n) { long i; if(n<2) return 0; for(i=2;i<=(long)sqrt(n);i++) if(n%i==0) return 0; return 1; } main() { long n,tongnt=0,tongchan=0,tongle=0; char s[50]; cout<<"Nhap vao 'quit' de thoat khoi chuong trinh\n"; while(1) { cout<<"Nhap vao so can kiem tra: "; cin>>s; if(strcmpi(s,"quit")==0) break; n=atol(s); if(ktnt(n)) tongnt++; if(n%2==0) tongchan++; else tongle++; } cout<<"Tong cac so nguyen to = "<<tongnt<<endl; cout<<"Tong cac so chan = "<<tongchan<<endl; cout<<"Tong cac so le = "<<tongle<<endl; }