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

Đề tài: Bài tập về mảng help!!!!!!

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    8

    Mặc định Bài tập về mảng help!!!!!!

    đề bài :4. Viết chương trình nhập dãy số thực x. Viết các hàm thực hiện công việc sau:
    - Nhập, hiển thị dãy số
    - Tính tổng a1 – a2 + a3 - …
    - Tính trung bình cộng các số âm (dương) có trong dãy
    - Tìm giá trị lớn nhất – max của các phần tử và hiển thị các vị trí đạt max
    - Nhập số nguyên dương k. Kiểm tra xem trong dãy có k số dương (âm) đứng
    cạnh nhau hay không?
    - Tìm các số của dãy bằng tổng hai số khác trong dãy.
    Mình đã code và kiểm tra từng đoạn mà ko biết sai ở chỗ nào?
    Trong code của mình còn phần tìm vị trí đạt max mình chưa hình dung ra ai hướng dẫn và test bài xem chỗ nào sai bảo mình với .Thanks các bạn!
    Code:
    #include<stdio.h>
    #include<conio.h>
      void nhap();
      void hienthi();
      void sum();
      void ttbc();
      void max();
      void ktra();
      void sos();
    int i,n;
    float ia[50];
     main()
    {// clrscr();
      nhap();
      hienthi();
      sum();
      ttbc();
      max();
      ktra();
      sos();
        getch();
      }
     void nhap()
       { printf("Nhap vao so phan tu cua day :");
         scanf("%d",&n);
         for(i=0;i<n;i++)
          { printf("\nPhan tu thu %d: ",i+1);
           scanf("%5.2f",&ia[i]);   }
      }
     void hienthi()
      { for(i=0;i<n;i++)
         printf("\n %5.2f,",ia[i]);
         printf("\n");
      }
     void sum()
      { int d, sum;
         sum=0;
         d=1;
          for(i=0;i<n;i++)
    	sum=sum+ia[i]*d;
    	d=-d;
    	 printf("Tong day a1-a2+a3... la :5.2%d",sum);
        }
     void ttbc()
      {   int d1=0,d2=0;
          float sumd=0,suma=0;
        for(i=0;i<n;i++)
         { if (ia[i]>0)
           { d1++;
    	 sumd=sumd+ia[i];
           }
           if (ia[i]<0)
    	{ d2++;
    	  suma=suma+ia[i];
    	  }
          }
    	printf("\nTrung binh cong cac so duong la: %5.2f",sumd/d1);
    	printf("\nTrung binh cong cac so am la: %5.2f",suma/d2);
    	getch();
       }
     void max()
      { float max ;
        max=ia[0];
         for(i=0;i<n;i++)
         { if(max<ia[i])
    	  max=ia[i];
    	  printf("\nPhan tu nhat la %f",max); }
     }
     void ktra()
      { int k,d,d1;
         printf("Nhap vao so k : ");
         scanf("%d",&k);
    	d=0;
    	d1=0;
         for(i=0;i<n;i++)
           if(ia[i]>0)
    	      d1++;
    	  else
    	    d1=0;
    	   if(d1>=k)
    	       d++;
    	   if(d>0)
    	    printf("Co %d so duong dung canh nhau",k);
         else
    	    printf("khong co so duong nao dung canh nhau");
      }
     void sos()
      {  float sos;
         int j,t;
         for(i=1;i<n;i++)
          for(j=1;j<n-1;j++)
           for(t=j+1;t<n;t++)
    	if(i!=j && i!=t && ia[i]==ia[j]+ia[t])
      printf("\n Cac so co tong bang 2 chu so khac la so: %f",ia[i]=ia[j]+ia[t]);
          getch();
      }

    QHQPTB

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Trước hết bạn phải học cách trình bày, trình bày tốt sẽ debug tốt.
    Chương trình còn, cần linh hoạt: có hoặc k có kiểu trả về, cần truyền tham số cho chương trình con.

    Demo một đoạn bài này Hoàng làm, có thời gian H sẽ sửa code trên:
    C Code:
    1. #include <stdio.h>
    2. /*
    3. */
    4. void InputArray(float fArray[], int num);
    5. void OutputArray(float fArray[], int num);
    6. float SumArray(float fArray[], int num);
    7. void Average(float fArray[], int num, float *aPo, float *aNe);
    8. void ShowMax(float fArray[], int num);
    9. int KNumber(float fArray[], int num, int k);
    10. void Show(float fArray[], int num);
    11.  
    12.  
    13. int main()
    14. {
    15.     float a[20];
    16.     int n;
    17.     printf (" - Enter number of array: ");scanf("%d",&n);
    18.     printf("\n    INPUT ARRAY \n");
    19.     InputArray(a,n);
    20.     printf("    OUTPUT ARRAY \n");
    21.     OutputArray(a,n);
    22.     printf("\n");
    23.     //anything
    24.     return 0;
    25. }
    26.  
    27. // All function code

  3. #3
    Ngày gia nhập
    03 2009
    Bài viết
    16

    Hi. Vậy là học cùng trường rùi. Mấy hôm không đi học được yếu phần mảng và cả phần lập chương trình con quá, rồi cách khai báo các biến nữa chứ
    Code:
    . Nhờ mọi người sửa giúp code bài này với
    1. Viết chương trình thực hiện các thao tác sau trên dãy số: - Nhập vào một dãy số thực - In dãy số vừa nhập ra màn hình - Sắp xếp dãy số theo chiều tăng (giảm) dần - Nhập một số thực và kiểm tra xem số đó đã có mặt trong dãy số vừa nhập hay chưa? Nếu chưa th ì chèn số đó vào trong dãy mà không phá vỡ tính chất tăng (giảm) của dãy - Nhập một số nguyên k, xóa phần tử có chỉ số k trong dãy - Nhập số thực x, kiểm tra xem số đó có trong dãy hay không? Nếu có xóa những phần tử có giá trị bằng x.
    Code:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #define MAX 100
    4.  
    5. void nhap(float a[],int *n);
    6. void xuat(float a[],int n);
    7. void sapxep(float a[],int n);
    8. void chen(float a[],int *n,float x);
    9. void xoa_i(float a[],int *n,int k);
    10. void xoa_x(float a[],int *n,float x);
    11.  
    12. void main()
    13. {
    14.     float a[MAX], x;
    15.     int n, k;
    16.     clrscr();
    17.     nhap(a,&n);
    18.     printf("\nDay so ban dau la: \n\n");
    19.     xuat(a,n);
    20.    
    21.     sapxep(a,n);
    22.     printf("\n\nDay sau khi sap xep la: \n\n");
    23.     xuat(a,n);
    24.     chen(a,&n,x);
    25.  
    26.     xoa_i(a,&n,k);
    27.  
    28.     xoa_x(a,&n,x);
    29.  
    30.     getch();
    31. }
    32. void nhap(float a[],int *n)
    33. {
    34.     int i;
    35.     printf("\nNhap vao so phan tu cua day : ");
    36.     scanf("%d", n);
    37.     printf("\nNhap vao cac phan tu : ");
    38.     for (i=0; i<*n; i++)
    39.         scanf("%f", &a[i]);
    40. }
    41. void xuat(float a[],int n)
    42. {
    43.     int i;
    44.     for (i=0; i<n; i++)
    45.         printf("%.2f  ", a[i]);
    46. }
    47. void sapxep(float a[],int n)
    48. {
    49.     // Sap xep day so theo chieu tang dan (insertion_Sort)
    50.     int i, j, ok;
    51.     float x;
    52.     for (i=1; i<n; i++)
    53.     {
    54.         j=i-1; x=a[i]; ok=0;
    55.         while ((j>=0)&&(!ok))
    56.             if (x<a[j])
    57.             {
    58.                 a[j+1] = a[j];
    59.                 j = j - 1;
    60.             }
    61.             else ok = 1;
    62.         a[j+1] = x;
    63.     }
    64. }
    65. int  ktra_so(float a[],int n, float key, int left, int right, int mid)
    66. {
    67.     int  i;
    68.     left = 0;   right = n;
    69.     while (left <= right)
    70.     {
    71.         mid = (left + right)/2;
    72.         if (key == a[mid]) break;
    73.         else  if (key>a[mid])  left = mid+1;
    74.             else right = mid - 1;
    75.     }
    76.     if (left<=right)
    77.         return 1;//mid co the la so dau tien
    78.     else return (0);
    79. }
    80. void chen(float a[],int *n,float key)
    81. {
    82.     int i, left, right, mid;
    83.     printf("\n\nNhap mot so thuc de kiem tra key = ");  scanf("%f",&key);
    84.     if(ktra_so(a, n, key, left, right, mid)) printf("\n%.2f da co trong day \n",key);
    85.     else
    86.     {
    87.          printf("\n%.2f Khong co mat trong day \n\nDay chen vao la: \n\n", key);
    88.          chenso(a, &n, key, left, right, mid);
    89.          xuat(a,*n);
    90.     }
    91. }  
    92. void chenso(float a[],int *n,float key, int left, int right, int mid)
    93. {
    94.     int i;
    95.     if (key>a[mid])
    96.     {
    97.         for (i=*n; i>mid+1; i--)
    98.             a[i] = a[i-1]; // dung o a[mid+2]=a[mid+1]
    99.         a[mid+1] = key;
    100.     }
    101.     else
    102.     {
    103.         for (i=*n; i>mid; i--)
    104.             a[i] = a[i-1]; // dung o a[mid+1]=a[mid]
    105.         a[mid] = key;
    106.     }
    107.     *n = *n - 1;
    108. }
    109. void xoa_vi_tri(float a[], int *n, int k)
    110. {
    111.     int i;
    112.     for (i=k; i<*n; i++)
    113.             a[i]=a[i+1];
    114. }
    115. void xoa_i(float a[],int *n,int k)
    116. {
    117.     int i;
    118.     printf("\n\nTu [0 , %d] ban muon xoa phan tu thu may cua day: ",*n);
    119.     scanf("%d",&k);
    120.     if ((k<0)||(k>*n)) printf("%d khong thuoc [0 , %d] day khong doi", k,*n);
    121.     else
    122.     {
    123.         xoa_vi_tri(a, n, k);
    124.         *n = *n - 1;
    125.     }
    126.     printf("\nDay sau khi xoa la: \n\n");
    127.     for (i=0; i<=*n; i++)
    128.             printf("%.2f  ",a[i]);
    129. }
    130. void xoa_x(float a[],int *n,float x)
    131. {
    132.     int i, left, right, mid;
    133.     float key;
    134.     printf("\n\nXoa nhung phan tu co gia tri bang x (bat ki) x = ");
    135.     scanf("%f",&x);
    136.     if (ktra_so(a, n, key, left, right, mid)==0)  printf("\n%.2f Khong co mat trong day\n",x);
    137.     else
    138.         while (ktra_so(a, *n, key, left, right, mid))
    139.         {
    140.             xoa_vi_tri(a, n, mid);
    141.             *n = *n -1;
    142.         }
    143.     printf("\nDay sau khi xoa la: \n\n");
    144.     for (i=0; i<*n; i++)
    145.             printf("%.2f  ",a[i]);
    146.     getch();
    147. }

  4. #4
    Ngày gia nhập
    03 2009
    Bài viết
    16

    Trước làm bài này khai báo biến tổng quát hết thì chạy được
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #define MAX 100
    4.  
    5. int  i, j, n, k, left, right, ok, mid, demchen=0, demxoa=0;
    6. float a[MAX], key, x;
    7. void nhap()
    8. {
    9.     printf("\nNhap vao so phan tu cua day : ");
    10.     scanf("%d", &n);
    11.     printf("\nNhap vao cac phan tu : ");
    12.     for (i=0; i<n; i++)
    13.         scanf("%f", &a[i]);
    14. }
    15. void xuat()
    16. {   // In day so ra man hinh
    17.     for (i=0; i<n; i++)
    18.         printf("%.2f  ", a[i]);
    19. }
    20. void sapxep()
    21. {
    22.     // Sap xep day so theo chieu tang dan (insertion_Sort)
    23.     for (i=1; i<n; i++)
    24.     {
    25.         j=i-1; x=a[i]; ok=0;
    26.         while ((j>=0)&&(!ok))
    27.             if (x<a[j])
    28.             {
    29.                 a[j+1] = a[j];
    30.                 j = j - 1;
    31.             }
    32.             else ok = 1;
    33.         a[j+1] = x;
    34.     }
    35. }
    36. int  ktra_so(float key)
    37. {
    38.     left = 0;   right = n-1+demchen-demxoa;
    39.     while (left <= right)
    40.     {
    41.         mid = (left + right)/2;
    42.         if (key == a[mid]) break;
    43.         else  if (key>a[mid])  left = mid+1;
    44.             else right = mid - 1;
    45.     }
    46.     if (left<=right)
    47.         return 1;//mid co the la so dau tien
    48.     else return (0);
    49. }
    50. void chen()
    51. {
    52.     if (key>a[mid])
    53.     {
    54.         for (i=n; i>mid+1; i--)
    55.             a[i] = a[i-1]; // dung o a[mid+2]=a[mid+1]
    56.         a[mid+1] = key;
    57.     }
    58.     else
    59.     {
    60.         for (i=n; i>mid; i--)
    61.             a[i] = a[i-1]; // dung o a[mid+1]=a[mid]
    62.         a[mid] = key;
    63.     }
    64.     demchen++;
    65.     for (i=0; i<=n-1+demchen-demxoa; i++)
    66.         printf("%.2f  ", a[i]);
    67.     getch();
    68. }
    69. void xoa_vi_tri(int k)
    70. {
    71.     for (i=k; i<n-1+demchen-demxoa; i++)
    72.             a[i]=a[i+1];
    73. }
    74. void main()
    75. {
    76.     clrscr();
    77.     nhap();
    78.     printf("\nDay so ban dau la: \n\n");
    79.     xuat();
    80.    
    81.     printf("\n\nDay sau khi sap xep la: \n\n");
    82.     sapxep();
    83.     xuat();
    84.    
    85.     printf("\n\nNhap mot so thuc de kiem tra key = ");  scanf("%f",&key);
    86.     ktra_so(key);
    87.     if(ktra_so(key)) printf("\n%.2f da co trong day \n",key);
    88.     else
    89.     {
    90.          printf("\n%.2f Khong co mat trong day \n\nDay chen vao la: \n\n", key);
    91.          chen();
    92.     }
    93.     printf("\n\nTu [0 , %d] ban muon xoa phan tu thu may cua day: ",n-1+demchen);
    94.     scanf("%d",&k);
    95.     if ((k<0)||(k>n-1+demchen)) printf("%d khong thuoc [0 , %d] day khong doi", k,n-1+demchen);
    96.     else
    97.     {
    98.         xoa_vi_tri(k);
    99.         demxoa++;
    100.     }
    101.     printf("\nDay sau khi xoa la: \n\n");
    102.     for (i=0; i<=n-1+demchen-demxoa; i++)
    103.             printf("%.2f  ",a[i]);
    104.     printf("\n\nXoa nhung phan tu co gia tri bang x (bat ki) x = ");
    105.     scanf("%f",&x);
    106.     if (ktra_so(x)==0)  printf("\n%.2f Khong co mat trong day\n",x);
    107.     else
    108.         while (ktra_so(x))
    109.         {
    110.             xoa_vi_tri(mid);
    111.             demxoa++;
    112.         }
    113.     printf("\nDay sau khi xoa la: \n\n");
    114.     for (i=0; i<n+demchen-demxoa; i++)
    115.             printf("%.2f  ",a[i]);
    116.     getch();
    117. }
    Giờ muốn sửa theo cách trên Nhờ mọi người giúp gấp với !! Thanks

  5. #5
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Giờ muốn sửa theo cách trên Nhờ mọi người giúp gấp với !! Thanks
    Thay vì sử dụng biến toàn cục, thì bạn truyền các biến vào chương trình con, cụ thể là hàm nào sử dụng đến cái gì thì truyền vào cho nó. Hãy đọc cái mình gửi ở trên để hình dung chương trình.

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    16

    Mặc định Bài tập về mảng help!!!!!!

    Bó tay bạn. Mỗi bài một khác chứ. Vải lại mình cũng không hiểu các lỗi của chương trình nó báo nên việc sửa lỗi rất lâu và mất thời gian. Cứ động đến chương trình con là hay sai nhiều. Như bài số 4 của bạn network hỏi
    đề bài :4. Viết chương trình nhập dãy số thực x. Viết các hàm thực hiện công việc sau:
    - Nhập, hiển thị dãy số
    - Tính tổng a1 – a2 + a3 - …
    - Tính trung bình cộng các số âm (dương) có trong dãy
    - Tìm giá trị lớn nhất – max của các phần tử và hiển thị các vị trí đạt max
    - Nhập số nguyên dương k. Kiểm tra xem trong dãy có k số dương (âm) đứng
    cạnh nhau hay không?
    - Tìm các số của dãy bằng tổng hai số khác trong dãy.
    mình làm theo cách cũ thì đúng. Giờ đã sửa lại cho tường minh hơn. CHương trình không báo lỗi chạy kết quả cũng đúng nhưng không hiểu sao khi chạy hết nó chạy tiếp linh tinh gì đó rồi tự thoát khỏi chương trình luôn!
    Nhờ pro nào xem, sửa và giải thích hộ cái
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #define MAX 100
    4.  
    5. void nhap(float a[], int *n);
    6. void hienthi(float a[], int n);
    7. float tong(float a[], int n);
    8. void average(float a[], int n, float *tbam, float *tbduong);
    9. void max(float a[], int n);
    10. void ktraso(float a[], int n);
    11. void timso(float a[], int n);
    12.  
    13. void main()
    14. {
    15.     int n;
    16.     float a[MAX], *tbam, *tbduong;
    17.     printf("\nNhap so phan tu cua day so: ");   scanf("%d", &n);
    18.    
    19.     printf("\nNhap vao day so: \n\n");
    20.     nhap(a,&n);
    21.     printf("\nDay so vua nhap: \n\n");
    22.     hienthi(a,n);
    23.  
    24.     printf("\n\nTong S = a1 - a2 + a3 -... = %.2f\n", tong(a,n));
    25.     average(a,n,tbam,tbduong);
    26.     printf("\nTrung binh cac so am co trong day la: %.2f\n",*tbam);
    27.     printf("\nTrung binh cac so duong co trong day la: %.2f\n",*tbduong);
    28.     max(a,n);
    29.     ktraso(a,n);
    30.     printf("\n\nCac so cua day bang tong hai so khac trong day: ");
    31.     timso(a,n);
    32.     getch();
    33. }
    34.  
    35.  
    36. void nhap(float a[], int *n)
    37. {
    38.     int i;
    39.     for (i=0; i<*n; i++)
    40.         scanf("%f", &a[i]);
    41. }
    42. void hienthi(float a[], int n)
    43. {
    44.     int i;
    45.     for (i=0; i<n; i++)
    46.         printf("%.2f  ", a[i]);
    47. }
    48. float tong(float a[], int n)
    49. {
    50.     int i;
    51.     float s=0;
    52.     int dau=1;
    53.     for (i=0; i<n; i++)
    54.     {
    55.         s = s + dau*a[i];
    56.         dau = -dau;
    57.     }
    58.     return s;
    59. }
    60. void average(float a[], int n, float *tbam, float *tbduong)
    61. {
    62.     int i, dema=0, demd=0;
    63.     float am=0, duong=0;
    64.     for (i=0; i<n; i++)
    65.     {
    66.         if (a[i]<0)
    67.         {
    68.             am += a[i];
    69.             dema++;
    70.         }
    71.         else  if (a[i]>0)
    72.         {
    73.             duong += a[i];
    74.             demd++;
    75.         }
    76.     }
    77.     *tbam = (float)am/dema;
    78.     *tbduong = (float)duong/demd;
    79. }
    80. void max(float a[], int n)
    81. {
    82.     int i;
    83.     float max=a[0];
    84.     for (i=1; i<n; i++)
    85.         if (max<a[i])   max = a[i];
    86.     printf("\nGia tri lon nhat trong day la Max = %.2f\n", max);
    87.     printf("\nCac vi tri dat Max trong day la :\n\nVi tri thu ");
    88.     for (i=0; i<n; i++)
    89.         if (max==a[i]) printf(" %d  ", i+1);
    90. }
    91. void ktraso(float a[], int n)   //Kiem tra co k so duong(am) ke nhau
    92. {
    93.     int i, k, dema=0, demd=0;
    94.     printf("\n\nKiem tra xem co k so duong (am) dung canh nhau ?");
    95.     printf("\n\nNhap vao k = ");        scanf("%d", &k);
    96.     while (dema+k<=n)                   //kiem tra so am
    97.     {
    98.         for (i=dema; i<k+dema; i++)
    99.             if (a[i]>=0) { dema=i+1; break; }
    100.         if (i==k+dema)
    101.         {
    102.             printf("\n\nCo it nhat %d so am dung canh nhau tu vi tri thu %d den %d", k, dema+1, i);
    103.             break;
    104.         }
    105.     }
    106.     if (dema+k>n) printf("\n\nKhong co %d so am dung canh nhau trong day",k);
    107.     while (demd+k<=n)                   //kiem tra so duong
    108.     {
    109.         for (i=demd; i<k+demd; i++)
    110.             if (a[i]<=0) { demd=i+1; break; }
    111.         if (i==k+demd)
    112.         {
    113.             printf("\n\nCo it nhat %d so duong dung canh nhau tu vi tri thu %d den %d", k, demd+1, i);
    114.             break;
    115.         }
    116.     }
    117.     if (demd+k>n) printf("\n\nKhong co %d so duong dung canh nhau trong day",k);
    118.     getch();
    119. }
    120. void timso(float a[], int n)
    121. {
    122.     int i, k, j;
    123.     for (i=0; i<n; i++)
    124.        for (j=0; j<n-1; j++)
    125.           for (k=j+1; k<n; k++)
    126.          if ((i!=j)&&(i!=k)&&(a[i]==a[j]+a[k]))
    127.          printf("\n\n a[%d] = a[%d] + a[%d] | %.2f = %.2f + %.2f", i+1, j+1, k+1,a[i],a[j],a[k]);
    128. }
    Ai tốt bụng sửa nốt hộ mình bài số 1 trên với

  7. #7
    Ngày gia nhập
    03 2009
    Bài viết
    1

    mình cũng chưa test thử bài của bạn.nhưng với cái lỗi mà bạn đã nói thì mình chắc chắn sai phần
    [I]void average(float a[], int n, float *bam, float *bduong)
    {
    int i, dema=0, demd=0;
    float am=0, duong=0;
    for (i=0; i<n; i++)
    {
    if (a[i]<0)
    {
    am += a[i];
    dema++;
    }
    else if (a[i]>0)
    {
    duong += a;
    demd++;
    }
    }
    *tbam = (float)am/dema;
    *tbduong = (float)duong/demd;
    }

    -------->>>bạn thử sửa thành
    void average(float a[], int n, float tbam, float tbduong)
    {
    int i, dema=0, demd=0;
    float am=0, duong=0;
    for (i=0; i<n; i++)
    {
    if (a[i]<0)
    {
    am += a[i];
    dema++;
    tbam = am/dema;
    }
    else if (a[i]>0)
    {
    duong += a[i];
    demd++;
    tbduong = (float)duong/demd;
    }
    }
    }
    bạn test thử lại nha :d mình cũng chưa test đâu.

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