Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: In ra các số Nguyên Tố trong 1 dãy số

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    3

    Mặc định In ra các số Nguyên Tố trong 1 dãy số

    Input : Nhập 1 dãy số
    Output : In ra dãy số nguyên tố từ dãy số đó.
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
     main()
    {
        int a[100] ;
    	int n,j,i,OK=1;
        printf("Nhap day : ");
        scanf("%d", &n);
        for (i=0;i<n;i++)
         {
         	printf(	"\n Nhap phan tu trong day: ",i);
    		scanf("%d",&a[i]);
         }
          for (i=0;i<n;i++)
    	  	{
      	  for (j=2; j<sqrt(a[i]);j++)
            { if (a[i]%j == 0)
            OK = 0;
                break;
            }
        if (OK==1)
            printf("\n%d.", a[i]);
       		 }
      getch();
    }
    Cho e hỏi em sai chỗ nào và thuật toán bài này như thế nào.Các a sửa dùm mình nhé, thank you !
    Mình mới tiếp cận C thôi nên mò mẫm dữ lắm.

  2. #2
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trích dẫn Nguyên bản được gửi bởi anhthien8 Xem bài viết
    Input : Nhập 1 dãy số
    Output : In ra dãy số nguyên tố từ dãy số đó.
    Cho e hỏi em sai chỗ nào và thuật toán bài này như thế nào.Các a sửa dùm mình nhé, thank you !
    Mình mới tiếp cận C thôi nên mò mẫm dữ lắm.
    Sửa vài chỗ đỏ đỏ.
    Ngoài ra nên dùng function kiểm tra số nguyên tố sẽ gọn và sáng sủa hơn

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    int main()		// nên viết tường minh "int" dù C cho phép mặc định là int
    {
    	int a[100] ;
    	int n,j,i,OK;
    	printf("Nhap day : ");
    	scanf("%d", &n);
    	for (i=0;i<n;i++)
    	{
    		printf(	"\n Nhap phan tu %d trong day: ",i);
    		scanf("%d",&a[i]);
    	}
    	for (i=0;i<n;i++)
    	{
    		if (a[i] < 2) continue;		// loại trường hợp = 0,1 (nhận sai) và < 0 (runtime error khi sqrt)
    		OK = 1;
    		for (j=2; j<=sqrt(a[i]) + 0.01;j++)	// nếu dùng < sẽ lấy sai vài số chính phương
    		{ 
    			if (a[i]%j == 0)
    			{
    				OK = 0;
    				break;
    			}
    		}
    		if (OK==1)
    			printf("\n%d.", a[i]);
    	}
    	getch();
    }
    Đã được chỉnh sửa lần cuối bởi fbchicken : 30-09-2011 lúc 03:30 AM.

  3. #3
    Ngày gia nhập
    08 2011
    Nơi ở
    Trà Vinh
    Bài viết
    20

    Còn thiếu một tí nữa (màu hồng ấy)
    Trích dẫn Nguyên bản được gửi bởi fbchicken Xem bài viết
    Sửa vài chỗ đỏ đỏ.
    Ngoài ra nên dùng function kiểm tra số nguyên tố sẽ gọn và sáng sủa hơn

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    int main()		// nên viết tường minh "int" dù C cho phép mặc định là int
    {
    	int a[100] ;
    	int n,j,i,OK;
    	printf("Nhap day : ");
    	scanf("%d", &n);
    	for (i=0;i<n;i++)
    	{
    		printf(	"\n Nhap phan tu %d trong day: ",i);
    		scanf("%d",&a[i]);
    	}
    	for (i=0;i<n;i++)
    	{
    		if (a[i] < 2) continue;		// loại trường hợp = 0,1 (nhận sai) và < 0 (runtime error khi sqrt)
    		OK = 1;
    		for (j=2; j<=sqrt(a[i]) + 0.01;j++)	// nếu dùng < sẽ lấy sai vài số chính phương
    		{ 
    			if (a[i]%j == 0)
    			{
    				OK = 0;
    				break;
    			}
    		}
    		if (OK==1)
    			printf("\n%d.", a[i]);
    	}
    	getch();
                 return 0;//Chỗ này đây!!!!!!!!!!
    }
    Nó là con của thằng nào ? Con của thằng nào ? Nói mau!!!!!!!!!!!!!!!

  4. #4
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trích dẫn Nguyên bản được gửi bởi nguyenphuongcntv Xem bài viết
    Còn thiếu một tí nữa (màu hồng ấy)
    return 0 là không bắt buộc với hàm main bạn ạ Nếu trình biên dịch nào báo error chỗ đó thì tức là nó sai chứ không phải mình sai
    Còn viết main() thay cho int main() là hợp lệ với C nhưng không hợp lệ với C++, do đó mình nói "nên" viết int main()

    ISO/IEC 14882:1998, chapter 3.6.1
    5. A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing return 0;

  5. #5
    Ngày gia nhập
    08 2011
    Nơi ở
    Trà Vinh
    Bài viết
    20

    Trích dẫn Nguyên bản được gửi bởi fbchicken Xem bài viết
    return 0 là không bắt buộc với hàm main bạn ạ Nếu trình biên dịch nào báo error chỗ đó thì tức là nó sai chứ không phải mình sai
    Còn viết main() thay cho int main() là hợp lệ với C nhưng không hợp lệ với C++, do đó mình nói "nên" viết int main()
    Khi học C thì thầy giáo bảo rằng nếu khi viết bất cứ hàm nào mà có kiểu trả về int, float,.. hoặc là mấy cái kiểu cấu trúc) nói chung không phải là void thì điều phải return cả, hàm main() cũng không ngoại lệ!!!!!
    Trong C thì các hàm có cùng bậc (nói chung là nó ngang nhau) nên nếu như những hàm khác void có return thì int main() cũng phải có return chứ
    Nó là con của thằng nào ? Con của thằng nào ? Nói mau!!!!!!!!!!!!!!!

  6. #6
    Ngày gia nhập
    10 2010
    Nơi ở
    Đại học Bách Khoa Hà Nội
    Bài viết
    45

    Mặc định In ra các số Nguyên Tố trong 1 dãy số

    Trích dẫn Nguyên bản được gửi bởi anhthien8 Xem bài viết
    Input : Nhập 1 dãy số
    Output : In ra dãy số nguyên tố từ dãy số đó.
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
     main()
    {
        int a[100] ;
    	int n,j,i,OK=1;
        printf("Nhap day : ");
        scanf("%d", &n);
        for (i=0;i<n;i++)
         {
         	printf(	"\n Nhap phan tu trong day: ",i);
    		scanf("%d",&a[i]);
         }
          for (i=0;i<n;i++)
    	  	{
      	  for (j=2; j<sqrt(a[i]);j++)
            { if (a[i]%j == 0)
            OK = 0;
                break;
            }
        if (OK==1)
            printf("\n%d.", a[i]);
       		 }
      getch();
    }
    Cho e hỏi em sai chỗ nào và thuật toán bài này như thế nào.Các a sửa dùm mình nhé, thank you !
    Mình mới tiếp cận C thôi nên mò mẫm dữ lắm.

    Chương trình của bạn viết khá tốt rồi chỉ cần thêm vào một số chỗ mình bôi đỏ dưới đây thôi, về logic chắc bạn sẽ tự hiểu. À mà chương trình chạy chưa đúng với a[i] = 1, bạn sửa lại nhé.

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
     main()
    {
        int a[100] ;
    	int n,j,i,OK=1;
        printf("Nhap day : ");
        scanf("%d", &n);
        for (i=0;i<n;i++)
         {
         	printf(	"\n Nhap phan tu trong day: ",i);
    		scanf("%d",&a[i]);
         }
          for (i=0;i<n;i++)
    	  	{
              OK = 1;
      	  for (j=2; j<=sqrt(a[i]);j++)
            { if (a[i]%j == 0)
            {OK = 0;
                break;}
            }
        if (OK==1)
            printf("\n%d.", a[i]);
       		 }
      getch();
    }
    Chẳng biết mình muốn cái gì nữa :v

  7. #7
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trích dẫn Nguyên bản được gửi bởi nguyenphuongcntv Xem bài viết
    Khi học C thì thầy giáo bảo rằng nếu khi viết bất cứ hàm nào mà có kiểu trả về int, float,.. hoặc là mấy cái kiểu cấu trúc) nói chung không phải là void thì điều phải return cả, hàm main() cũng không ngoại lệ!!!!!
    Trong C thì các hàm có cùng bậc (nói chung là nó ngang nhau) nên nếu như những hàm khác void có return thì int main() cũng phải có return chứ
    Vậy bạn cứ nghe theo thày giáo bạn, còn tớ thì cứ nghe theo document của C/C++ =))
    Còn khi tranh luận thì "thày giáo tớ nói" không có ý nghĩa, phải trích nguồn kiểm chứng được, tớ có trích dẫn rồi đó.

    Edit: Trong C99/C++ thì main không có lệnh return tương đương với return 0. Trong C89 thì kết quả trả về cho môi trường không được xác định, nhưng cũng không phải là sai. Có nghĩa là nếu mình không quan tâm đến kết quả trả về cho môi trường thì được quyền không viết return. Cả mấy loại chuẩn đó đều có quy định viết cụ thể riêng cho trường hợp hàm main.

    In C89 (draft standard), 5.1.2.2.3:

    A return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument. If the } that terminates the main function is reached, the termination status returned to the host environment is unspecified.

    In C99, quoting from n1256, 5.1.2.2.3:

    If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument; reaching the } that terminates the main function returns a value of 0. If the return type is not compatible with int, the termination status returned to the host environment is unspecified.

    C++, ISO/IEC 14882:1998, 3.6.1.5
    A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing return 0;
    Tất nhiên mình không phủ nhận viết return 0; ở cuối hàm main là thói quen tốt. Nhưng không viết cũng không sai với bất kỳ chuẩn C nào. (Compiler nào dám báo error là compiler sai mà mình đoán 99.99% là bạn sẽ không tìm được compiler nào báo error cho trường hợp đó đâu)
    Đã được chỉnh sửa lần cuối bởi fbchicken : 01-10-2011 lúc 10:08 PM.

  8. #8
    Ngày gia nhập
    09 2011
    Bài viết
    3

    Cảm ơn tất cả các bạn rất nhiều , mình đã hiểu thêm dc vài điều.
    Có ai có thể viết lại bài này theo dạng hàm con ko ạ.
    Mình nghĩ nếu bài này theo hàm con sẽ tiện hơn rất nhiều , nhưng tiếc là mình chưa đủ trình đọ viết hàm con,Chỉ có thể hiểu dc thôi :(

  9. #9
    Ngày gia nhập
    02 2012
    Bài viết
    0

    Pac nào pro sửa hộ em đoạn code này cái
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include <math.h>
    int nguyento(int n)
    	{
            if (n<=1) return 0;
    	int i;
    	for(i=2;i<=sqrt(n);i++)	if (n%i==0) return 0;
    	return 1;		
    	}
    void nhap(int u[], int n)
    	{
    	int i;
    	printf("nhap 1 day so gom %d ptu:\n", n);
    	for(i=0;i<n;i++)
    		{
    		printf("u[%d]= ",i); scanf("%d", &u[i]);		
    		}
    	}
    int main()
    	{
            int n;
            scanf("%d",&n);
            int u[n];
    	nhap(u, n);
    	for(i=0;i<n;i++)
    		{
    		if (nguyento(u[i])==1) printf("%d   ",u[i]);
    		}
    	getch();
    	}
    Mình biên dịch thì nó cứ báo lỗi ở dòng for(i=0;i<n;i++)
    Đã được chỉnh sửa lần cuối bởi tuan16619 : 13-03-2012 lúc 09:53 PM.

  10. #10
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Đã khai báo i đâu bảo sao ko lỗi
    Um Mani Padme Hum...!!

Các đề tài tương tự

  1. Kiểm tra xem trong mảng các số nguyên có tồn tại số nguyên lẻ hayko?
    Gửi bởi caphetim trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 8
    Bài viết cuối: 06-05-2013, 03:56 PM
  2. Database cách nhập nhiều nguyên liệu cho một món ăn trong một form quản lý nguyên liệu món ăn
    Gửi bởi mamachue92 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 31-10-2012, 09:55 AM
  3. Tối ưu Code nhập số nguyên dương rồi đảo ngược số nguyên dương vừa nhập trong C
    Gửi bởi tyrant trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 10
    Bài viết cuối: 07-10-2012, 11:07 PM
  4. Bài tập C++ chương trình đổi 1 số nguyên trong hệ thập phân sang hệ fibo và cộng 2 số nguyên được
    Gửi bởi nghiapro512 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 23-01-2011, 02:14 PM
  5. tìm số nguyên tố có trong mảng 2 chiều, tính tổng các số nguyên tố đó??
    Gửi bởi lesliuton01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 08-06-2010, 10:21 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn