Mình chạy thấy đâu bị gì đâu ???!
mình có một bài tập này mà mình làm mãi mà nó không chịu xuất ra các số nguyên trong mảng. pro nào có thể chỉ cho minh đc ko. thanks
Code:#include<conio.h> #include<stdio.h> #include<math.h> void nhap(int a[100], int &n) { do { printf("nhap n= "); scanf("%d",&n); } while(n<0||n>100); for(int i=0;i<n;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } } void xuat(int a[100], int n) { printf("Mang gom cac phan tu: "); for (int i=0;i<n; i++) printf("%3d",a[i]); } void max(int a[100],int n) { int max=a[0]; for (int i=1;i<n;i++) if(max<a[i]) max=a[i]; printf("\n--->so lon nhat trong mang la: %d",max); } void min(int a[100], int n) { int min=a[0]; for (int i=1;i<n;i++) if(min>a[i]) min=a[i]; printf("\n--->so nho nhat trong mang la: %d",min); } int ktnt(int n) { int dem=0; printf("\n---------------------kiem tra so nguyen to--------------------"); printf("\nnhap so n="); scanf("%d",&n); for(int i=1;i<=n;i++) if(n%i==0) dem++; if(dem==2) return 1; return 0; } void dem(int a[], int n) { int x,dem=0; printf("\nTim so phan tu giong x="); scanf("%d",&x); for (int i=0;i<n;i++) if(x==a[i]) dem++; printf("--->mang co %d phan tu giong x",dem); } void xuatnt(int a[], int n) { int dem=0; printf("\nmang gom cac so nguyen to: "); for(int i=0;i<n;i++) if(a[i]%i==0) dem++; if(dem==2) printf("%3d",a[i]); } void main() { clrscr(); int n,a[100]; nhap(a,n); xuat(a,n); max(a,n); min(a,n); if(ktnt(n)==1) printf("n la so nt"); else printf("n ko la so nt"); dem(a,n); getch(); }
Mình chạy thấy đâu bị gì đâu ???!
Bài bạn làm hơi rối, mình chỉnh lại một chút thôi.
Mục tiêu của hàm ktnt() nảy là: truyền vào cho hàm 1 số nguyên n, nếu n là nguyên tố thì trả về 1, nếu ko nguyên tố thì trả về 0. Như vậy, trong hàm này bạn ko cần phải nhập n thêm 1 lần nữa. Mình viết gọn lại theo ý bạn:Code:int ktnt(int n) { int dem=0; printf("\n-------------kiem tra so nguyen to--------------------"); printf("\nnhap so n="); scanf("%d",&n); for(int i=1;i<=n;i++) if(n%i==0) dem++; if(dem==2) return 1; return 0; }
Tương tự như vậy, hàm void xuatnt(int a[], int n), bạn tận dụng ngay hàm ktnt() bên trên để chương trình được đơn giản hơn như sau:Code:int ktnt(int n) { int dem=0; printf("\n-------------kiem tra so nguyen to--------------------"); for(int i=1;i<=n;i++) if(n%i==0) dem++; if(dem==2) return 1; return 0; }
Thân!Code:void xuatnt(int a[], int n) { int dem=0; int i; printf("\nmang gom cac so nguyen to: "); for( i=0;i<n;i++) if(ktnt(a[i]) ==1 ) printf("%3d",a[i]); }
Nơi nào khiến anh dừng bước, nơi đó có em.
bác whoru cho em hỏi ở đoạn code trên nếu dùng a[i] thay nthì có được không ạ.Code:if(n%i==0) dem++;
Bạn ơi không được đâu bạn ạ, bởi vì đó là 1 hàm riêng với đối số là số nguyên n bạn ạ. Hàm là phải dùng kết hợp với đối số chứ.
Bác kiểm tra hộ em đoạn này
em hiểu số nguyên tố là chỉ chia hết được 1 và chính nó, vậy mà đoạn trên có khi nó ra cả 6,8...em pó tay. Em ko thích dùng return vì chưa hiểu hết nên dùng if các bác thông cảm cho em.Code:void ktnt() { int dem=0; printf("\nmang gom cac so nguyen to: "); for( i=1;i<n;i++) { if(n%i==0) dem++; if(dem==2) printf("%3d",a[i]); } }
Em chép lại cả bài cho các bác tiện kiểm tra
Code:#include <stdio.h> #include <conio.h> int n,i,tg,j,a[100]; void nhapn() { printf("\n n:="); scanf("%d",&n); } void nhapmang() { for(i=0;i<n;i++) { printf("\n a[%d]=",i); scanf("%d",&a[i]); } } void inmang() { for(i=0;i<n;i++) printf("%5d",a[i]); } void tong() { int s=0,i; for(i=0;i<n;i++) if((a[i]%2!=0)&&(i%3==0)) s=s+a[i]; printf("\n tong so le o vi tri chia het cho 3 la=%d",s); } void tongmu() { long s=1; for(i=0;i<n;i++) s=s+(pow(a[i],i)); printf("\n tong mu s=%d",s); } void ktnt() { int dem=0; printf("\nmang gom cac so nguyen to: "); for( i=1;i<n;i++) { if(n%i==0) dem++; if(dem==2) printf("%3d",a[i]); } } void main() { nhapn(); nhapmang(); printf("\n in mang "); inmang(); tong(); tongmu(); ktnt(); getch(); }
em chép 2 đoạn code của bác whoru vào bài nhưng em nhập mảng thì số nguyên tố và mảng nhập giống hệt nhau, ko biết vì sao ạ?
Code:#include <stdio.h> #include <conio.h> int n,i,tg,j,a[100]; void nhapn() { printf("\n n:="); scanf("%d",&n); } void nhapmang() { for(i=0;i<n;i++) { printf("\n a[%d]=",i); scanf("%d",&a[i]); } } void inmang() { for(i=0;i<n;i++) printf("%5d",a[i]); } void tong() { int s=0,i; for(i=0;i<n;i++) if((a[i]%2!=0)&&(i%3==0)) s=s+a[i]; printf("\n tong so le o vi tri chia het cho 3 la=%d",s); } void tongmu() { long s=1; for(i=0;i<n;i++) s=s+(pow(a[i],i)); printf("\n tong mu s=%d",s); } int ktnt() { int dem=0; for( i=1;i<=n;i++) if(n%i==0) dem++; if(dem==2) return 1; return 0; } void xuatnt() { int dem=0; int i; printf("\n mang gom cac so nguyen to: "); for( i=0;i<n;i++) if(ktnt(a[i]) ==1 ) printf("%3d",a[i]); } void main() { nhapn(); nhapmang(); printf("\n in mang "); inmang(); tong(); tongmu(); ktnt(); xuatnt(); getch(); }