C++ Code:
bool laNguyenDuong(float n) { if (n <= 0) { return false; } int i = 0; do { i++; } while(i < n); return i == n; }
Đề : nhập một số, nếu không phải số nguyên dương thì nhập lại
Cơ sở : Em mới học tới for / do while / while
Nhờ ae : Code logic dễ hiểu hơn, chứ em nhìn code em làm đủ nhiệm vụ nhưng trông hơi ngu. Cảm ơn nhiều
Code:#include <stdio.h> int main() { float i; int a; do { printf("Hay nhap vao i\n"); scanf("%f", &i); for(a=1;a<i;a++) { if(a>i-1 && i/a != 1) { printf("So ban nhap ko phai so nguyen\n"); i=0; } } if(i<0) printf("So ban nhap khong phai so nguyen duong\n"); }while(i<1); printf("\ni = %.0f", i); return 0; }
C++ Code:
bool laNguyenDuong(float n) { if (n <= 0) { return false; } int i = 0; do { i++; } while(i < n); return i == n; }
Đoạn này có thể viết gọn hơn:
while (++i < n);
Có hai điều về bài tập này:
1. nếu số float nhập vào lớn hơn int thì sao? Trên nguyên tắc, 999999999999999 cũng là số nguyên, nó chỉ lớn hơn số long thôi.
2. muốn biết số có phải là số nguyên thì chặt bỏ phần thập phân rồi so sánh.
#include math.h // hàm trunc nằm trong thư viện math
soNguyen = (trunc(n) == n)? 1 : 0;
Tôi thấy nhập môn toàn bàn chuyện trên giời!
lim(n + ε) = n, khi ε dần tới 0?
Với trình biên dịch microsoft c, nó, ε có giá trị xấp xỉ 1.401298e-045
Để hiểu được nó, cần phải có kiến thức toán tốt.
Data type trong NNLT luôn là hữu hạn. Dù chỉ tính trên phần giao số thực (float) với số nguyên dương (int) hợp lệ, cho ngôn ngữ c/c++, thì cũng không giải quyết được vấn đề này.
...C Code:
#include <stdio.h> #include <math.h> bool laNguyenDuong(float n){ if (n <= 0) return false; // OK, số âm hoặc 0. //return (floor(n) == n); // old version return (trunc(n) == n); // No, với epsilon dần tới 0, lim(n + ε) = n } int main(){ float x = 1.401298e-045, eps = x / 2; float ft = n + eps; // eps > 0, ft là số thực và không phải là số nguyên dương return 0; }
..
.
Kiến thức nhập môn chỉ cần đến thế thôi.
Ít nhất khi làm xong bài, một người trung bình biết được trunc có nghĩa là cắt đi phần thập phân.
Chờ tìm hiểu và đọc xong ba cái mớ ép si lon chắc sang thế kỷ 22.
Mất con dao mổ trâu thì kiếm tạm con khác, cứng bén đủ là ngã trâu được. Chờ kiếm hoặc đặt đúng con dao thì qua bố nó mất ngày hội.
Vậy giống lớp 5 kèm lớp 3.
Trâu: con ngã, con vùng chạy, biết đâu có người lòi ruột vì xui xẻo.
Trên #5, mọi số nguyên cộng eps ĐỀU THÀNH số NGUYÊN!
Cải biên một chút một topic đã có trong 4rum:
http://diendan.congdongcviet.com/threads/t396988::lieu-co-phai-compiler-bi-loi-so-sanh.cppC Code:
...
..
.