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

Đề tài: Lỗi chạy không đúng thuật toán sắp xếp và trung bình cộng dãy vừa nhập

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

    Mặc định Lỗi chạy không đúng thuật toán sắp xếp và trung bình cộng dãy vừa nhập

    Code:
    #include <stdio.h>
    #include <conio.h>
    int main ()
    { 	int a[30];
                  int i,n;
    	clrscr ();
    	printf(" nhap vao n phan tu  :"); scanf("%2d",&n);
    	for (i=0; i<n; i++)
    	{ 
    	printf("So thu %d la",i);
    	scanf("%2d",&a[i]);
    	}
    /* in day so vua nhap */
               for (i=0; i<n; i++)
    	if (a[i]>0) printf("%d",&a[i]);
    		  else printf ("%d",&a[i]);
    /*in so duong - âm*/
    	   for (i=0; i<n; i++)
           if (a[i]%2==0) printf ("%d",&a[i]);
    	else printf ("%d",&a[i]);
    /* in so chan le*/
    	int sduong=0,sam=0;
    	for (i=0; i<n; i++)
    	if (a[i] >0) sduong= sduong +a[i];
    	else sam= sam+a[i];
    	{
    	printf(" tong duong la :%d \n",sduong);
                  printf(" tong am la :%d \n",sam);
    	}
    /* tong duong am */
                 int sle=0,schan=0;
    	   for (i=0; i<n; i++)
    	 if ( a[i]%2==0) schan=schan+a[i];
    	else sle=sle+a[i];
    	{
    	printf(" tong chan la :%d \n",schan);
                  printf(" tong le la :%d \n",sle);
    	}
     /* tong chan le */ 
        	int duong=0;
    	   for (i=0; i<n; i++)
    		if (a[i]>0)
    		duong++;
    	{
    	printf(" co %d so duong \n",duong);
    	}
    /* dem so duong */
                  int le=0;
    	   for (i=0; i<n; i++)
    		if (a[i]%2!=0)
    		le++;
    	{
    	printf(" co %d so le \n",le);
    	}
    /* dem so le */
           
    	int tong=0,tb1=0;
    	int dem1=0;
    	   for (i=0; i<n; i++)
    	{
                  tong=tong+a[i];
    	dem1++;
    	tb1=tong/dem1;
    	}
    printf("tong trung binh cong la %d  ",tb1);
    	
    /* TBC cac so */
    	
    	int tbc=0,tb2=0;
    	int dem2=0;
    	   for (i=0; i<n; i++)
    	if  (a[i]%3==0)
    		{	tbc=tbc+a[i];
    			dem2++;
    			tb2=tbc/dem2;
    		}
    	printf("\n tong trung binh cong so chia het cho 3 la %d",tb2);
    	                
    /* TBC chia het 3 */
    		int j;
    		for (i=0;i<=n-2;i++)
    		    for (j=i;j<n;j++)
    			{
    				if (a[i]<a[j])
    					a[i]^=a[j]^=a[i]^=a[j];
    			}
    
    printf("\n cac so sau khi sap xep giam dan la %d  ",a[i]);
    getch ();
    return 0;
    }
    Đây là 1 bài tổng hợp e làm.
    Chạy hoàn toàn không có lỗi gì nhưng kết quả trung bình cộng không đúng và ai chỉnh sửa giúp em cái phần sắp xếp ở cuối với ạ

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

    sắp xếp sửa lại thành
    C++ Code:
    1.         int j;
    2.         for (i=0;i<n-1;i++)
    3.             for (j=i+1;j<n;j++)
    4.             if (a[i]<a[j])
    5.             {       a[i]^=a[j]^=a[i]^=a[j];
    6.             }
    7.  
    8. printf("\n cac so sau khi sap xep giam dan la:  ");
    9. for (i=0;i<n;i++)
    10. printf("\n %d  ",a[i]);

    còn mấy phần này

    C++ Code:
    1. printf("%d",&a[i]); // bỏ toán tử & đi

    C++ Code:
    1.     int tbc=0,tb2=0; // trung bình cộng là kiểu nguyên thì khi chia ra nó phải ra một số nguyên là phải =-=!thay bằng float tbc=0,tb=0;
    2.     int dem2=0;
    3.        for (i=0; i<n; i++)
    4.     if  (a[i]%3==0)
    5.         {   tbc=tbc+a[i];
    6.             dem2++;
    7.             tb2=tbc/dem2;
    8.         }
    9.     printf("\n tong trung binh cong so chia het cho 3 la %f",tb2);

    đoạn tính trung bình cộng tuơng tự thay int sang float là được.....

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

    À mình quên mất cả đoạn in ra số dương và in ra số chẵn lẻ
    Làm thể nào để nó in kiểu liệt kê như số dương là 4 5 6
    thay vì nó cứ so duong la 4 so duong la 5 nhỉ
    Code:
       for (i=0; i<n; i++)
    	if (a[i]>0) printf(" so duong la %2d ",a[i]);
    		  else printf(" so am la %2d ",a[i]);
    Đã được chỉnh sửa lần cuối bởi dzung72 : 12-08-2011 lúc 02:03 PM.

  4. #4
    Ngày gia nhập
    12 2010
    Nơi ở
    Hanoi, Vietnam, Vietnam
    Bài viết
    687

    Trích dẫn Nguyên bản được gửi bởi dzung72 Xem bài viết
    À mình quên mất cả đoạn in ra số dương và in ra số chẵn lẻ
    Làm thể nào để nó in kiểu liệt kê như số dương là 4 5 6
    thay vì nó cứ so duong la 4 so duong la 5 nhỉ
    Code:
       for (i=0; i<n; i++)
    	if (a[i]>0) printf(" so duong la %2d ",a[i]);
    		  else printf(" so am la %2d ",a[i]);

    bạn viết cái dòng đó lên trên vòng for là đc mà !
    C Code:
    1. printf (" so duong la : ");
    2. for (i=0; i<n; i++)
    3.     if (a[i]>0) printf("  %2d ",a[i]);

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

    Nếu có cả số dương và số âm làm thế nào in 2 dòng tách ra vậy vậy nếu viết trên kia thì ko hợp lý nếu có cả âm và dương

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

  1. Kỹ thuật C++ Vẽ elip bằng thuật toán bresenham trong C chạy không ra kết quả đúng?
    Gửi bởi timduncanboy 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-10-2013, 08:37 PM
  2. Tìm luồng cực đại trong mạng sử dụng thuật toán ford-fulkerson chạy không đúng
    Gửi bởi mr.en_tu_di trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 24-11-2012, 09:07 AM
  3. Algorithm Thuật toán tạo mảng ngẫu nhiên ko trùng chạy không đúng?
    Gửi bởi chienthan_16_12 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 17
    Bài viết cuối: 17-05-2012, 11:24 PM
  4. Hiện thực hoá giải thuật Roundrobin với C++ ! hàm calc chạy chưa đúng! sửa giúp mình.
    Gửi bởi code_c trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 0
    Bài viết cuối: 26-11-2011, 12:32 AM
  5. Thuật Toán quay lui cho 8 quân hậu đúng chưa? member nào bổ xung cho nó chạy luôn nhỉ?
    Gửi bởi bqonline 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: 17-07-2009, 01:05 PM

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