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

Đề tài: Tìm số hoàn hảo , số chính phương kô lỗi khi chạy bị crash

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

    Mặc định Tìm số hoàn hảo , số chính phương kô lỗi khi chạy bị crash

    Em làm cái bài sau nhưng khi chạy cái phần tìm số hoàn hảo số chính phương chương trình bị crash và cả chỗ tìm số dương nhỏ nhất số âm lớn nhất nó toàn tìm sai mà em không hiểu sai chỗ nào trong thuật toán ,bác nào khắc phục hộ em với , em không biết tại sao nó crash .Em dùng TC 3.0 bác nào không có compli em có đính kèm cái file đã dịch ở dưới chạy thử

    C++ Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <io.h>
    4. #include <iostream.h>
    5. #include <math.h>
    6. #include <dos.h>
    7. #include <stdio.h>
    8. #include <string.h>
    9. #include <ctype.h>
    10. #include <stdlib.h>
    11. //using namespace std;
    12. int s[100];
    13. int temp1[100];
    14. int i,k,l,m,n,temp,kq,tong=0;
    15.  
    16.  
    17. void TaoMangNgauNhien(int *s,int n)
    18. {
    19.     randomize();
    20.     for (i=0;i<n;i++)
    21.         s[i]=pow(-1,random(2))*random(100);
    22. }
    23.  
    24. void TaoMang(int *s,int n)
    25.  {   for(i=0;i<n;i++)
    26.     {
    27.         printf("\n s[%d]= ",i+1);
    28.         scanf("%d",&s[i]);
    29.     }
    30. }
    31. void InMang(int *s)
    32. {
    33.     for( int k=0;k<n;k++)
    34.         {
    35.         printf("  s[%d] = %d  ",k+1,s[k]);
    36.             if (k%5==0&&k>1)
    37.                 cout<<"\n";
    38.         }
    39. }
    40.  
    41.  
    42.  
    43. int ucln(int a, int b)//ham nay tim UCLN giua 2 so
    44. {
    45.     while (b!=0)
    46.     {
    47.         int UCLN = b;
    48.         b = a%b;
    49.         a = UCLN;
    50.     }
    51.     return a;
    52. }
    53.  
    54. int ucln_dayso(int *s,int n)// y tuong tim UCLN la tim uoc UCLN cua 2 so roi tim tim UCLN cua UCLN da tim va phan tu tiep theo cua day , n o day la so phan tu mang
    55. {
    56.     if (n<1) return 0;    
    57.     int UCLN=s[0];
    58.     for(i=1; i<n; ++i)
    59.         {
    60.                 if (UCLN==1) return 1;
    61.                 UCLN = ucln(UCLN,s[i]);
    62.             }
    63.         return UCLN;
    64. }
    65.  
    66. void TrungBinhCongCacSoDuong(int *s,int n)
    67. {
    68.     int tong=0,dem=0;
    69.     float tbc;
    70.     for(int i=0;i<n;++i)
    71.         if(s[i]>0)
    72.             {tong+=(float)s[i];dem++;}
    73.     tbc=(float)tong/(float)dem;
    74.     printf("\n\nTrung binh cong cua cac so duong la %5.3f ",tbc);
    75. }
    76.  
    77. void TimDuongMinAmMax(int *s,int n)
    78. {
    79.     int dmin,amax;
    80.     for(int i=0;i<n;i++)
    81.         {
    82.             if(s[i]>0)
    83.                 {
    84.                     dmin=s[i];
    85.                     dmin=(dmin<s[i])?dmin:s[i];
    86.                 }
    87.             else
    88.                 {
    89.                     amax=s[i];
    90.                     amax=(amax>s[i])?amax:s[i];
    91.                 }
    92.         }
    93.     printf("\n\nSo duong nho nhat cua day la %d ",dmin);
    94.     printf("\n\nSo am lon nhat cua day la    %d ",amax);
    95. }
    96. //Ham tim so lan xuat hien cua x trong mang
    97. void TimSoLanXuatHien(int *s, int n)
    98. {  
    99.     int dem=0;
    100.     int x;
    101.     printf("\n Nhap x :");
    102.     scanf("%d",&x);
    103.     printf("\nPhan tu %d xuat hien tai svi tri : ",x);
    104.     for(i=0;i<n;i++)  if(s[i]==x) {dem=dem+1;printf(" %5d ",i+1);}
    105.     if (dem==0) printf("\n Ko co gia tri %f trong day",x);
    106.     else printf("\n So lan xuat hien cua fan tu %d la : %d",x,dem);
    107.      
    108. }
    109. void SapXepGiamDan(int *s,int n)//ham sap xep day theo thu tu giam dan dung Bubble sort
    110. {
    111.      int i=0,j=0;
    112.     for(i=0;i<n-1;i++)
    113.         for(  j=i+1;j<n;j++)
    114.             if(s[j]>s[i])
    115.             {
    116.                 temp= s[j];
    117.                 s[j]=s[i];
    118.                 s[i]=temp;
    119.             }
    120. }
    121.  
    122. int HoanHao(int n)//Ham nay dung de kiem tra so co phai la so hoan hao hay ko
    123. {
    124.             int s=0;
    125.             for (int i=1;i<n;i++)
    126.                 if (n%i==0) s+=i;
    127.             if (s==n) return 1;
    128.                 else return 0;
    129. }  
    130.  
    131.  
    132. int ChinhPhuong(int n)//Ham nay dung de kiem tra so co phai la so chinh phuong hay ko
    133. {
    134.         if (n==int(sqrt(n))*int(sqrt(n))) return 1;
    135.                     else return 0;
    136. }  
    137.  
    138.  
    139.  
    140. void luachon()//ham nay dung de lua chon xem muon lam gi voi day
    141. {
    142.     int op;
    143. abc:    clrscr();      
    144.             cout<<"\nMang cua ban la :\n";
    145.         InMang(s);
    146.             cout<<"\nBan da tao xong mang , bay gio ban muon lam gi ?";
    147.             cout<<"\n1.Tim so lon nhat , nho nhat cua day ";
    148.             cout<<"\n2.Tim uoc chung MAX cua cac so trong day";
    149.             cout<<"\n3.Tim trung binh cong cua cac so duong";
    150.             cout<<"\n4.Tim so duong nho nhat , so a^m lon nhat";
    151.             cout<<"\n5.Tim so lan xuat hien va vi tri cua no trong day";
    152.             cout<<"\n6.Sap xep day theo thu tu giam dan";
    153.             cout<<"\n7.Tim cac so hoan hao , chinh phuong cua day";
    154.     cout<<"\n8.Thoat";
    155.     cout<<"\nBan chon lua chon so : ";
    156.     scanf("%d",&op);
    157.     switch(op)
    158.     {
    159.         case 1:// Tim so lon nhat , nho nhat cua day
    160.             for(i=0;i<n;i++) temp1[i]=s[i];
    161.         SapXepGiamDan(temp1,n);
    162.             printf("\nSo lon nhat trong day la so %d",temp1[0]);
    163.             printf("\nSo nho nhat trong day la so %d",temp1[n-1]);
    164.             getch();
    165.         case 2://Tim uoc chung MAX cua cac so trong day        
    166.             printf("\nUCLN cua day so la %d",ucln_dayso(s,n));
    167.             getch();
    168.             goto abc;
    169.         case 3://Tim trung binh cong cua cac so duong
    170.             TrungBinhCongCacSoDuong(s,n);
    171.             getch();
    172.             goto abc;
    173.         case 4://Tim so duong nho nhat , so a^m lon nhat
    174.             TimDuongMinAmMax(s,n);
    175.             getch();
    176.             goto abc;
    177.         case 5://Tim so lan xuat hien va vi tri cua no trong day
    178.             TimSoLanXuatHien(s,n);
    179.             getch();
    180.             goto abc;
    181.         case 6://Sap xep day theo thu tu giam dan
    182.             for(i=0;i<n;i++) temp1[i]=s[i];
    183.             SapXepGiamDan(temp1,n);
    184.             InMang(temp1);
    185.             getch();
    186.             goto abc;
    187.         case 7://Tim cac so hoan hao , chinh phuong cua day
    188.             printf("\nCac so hoan hao trong day so la : ");
    189.             for(i=0;i<n;i++)
    190.                 {
    191.                     if (HoanHao(s[i])==1) printf(" %5d ",s[i]);
    192.                 }
    193.             printf("\nCac so chinh phuong trong day so la : ");
    194.             for(i=0;i<n;i++)
    195.                 {
    196.                     if (ChinhPhuong(s[i])==1) printf(" %5d ",s[i]);
    197.                 }
    198.             getch();
    199.             goto abc;
    200.         case 8:break;//cai nay dung de thoat chuong trinh neu ko muon lam nua
    201.         default:
    202.         {
    203.            
    204.             printf("\nBan chi co lua chon tu 1 den 8 , vui long nhap lai lua chon!!!");
    205.             printf("\nBam phim bat ky de quay ve man hinh lua chon .........");
    206.             getch();
    207.             goto abc;
    208.         }
    209.     }
    210. }
    211.  
    212.  
    213.  
    214.  
    215. void main()
    216. {
    217. start:  clrscr();
    218.   cout<<"\nDay la bai 1 ve mang 1 chieu trong bai tap C++";
    219.     cout<<"\nDe bat dau bai toan ban phai khoi tao mang chon :";
    220.     cout<<"\n1.De tu khoi tao ";
    221.     cout<<"\n2.De may khoi tao ngau nhien";
    222.     cout<<"\n3.Thoi chan ko lam nua tat di :D";
    223.     cout<<"\n\n\nBan chon lua chon 1 , 2 hay 3 ?   ";
    224.     int op;
    225.     scanf("%d",&op);
    226.     switch(op)
    227.         {
    228.         case 1:
    229.        
    230.             cout<<"\nBan da lua chon khoi tao = tay moi ban nhap so phan tu cua day :";
    231.             cin>>n;
    232.             TaoMang(s,n);
    233.             luachon();
    234.             break;
    235.            
    236.         case 2:
    237.            
    238.             cout<<"\nMoi ban nhap so phan tu cua day :";
    239.             cin>>n;
    240.             TaoMangNgauNhien(s,n);
    241.             luachon();
    242.             break;
    243.         case 3: break;
    244.         default:
    245.             {
    246.          
    247.             printf("\nBan chi co 3 lua chon thoi , vui long nhap lai lua chon!!!");
    248.             printf("\nBam phim bat ky de quay ve man hinh bat dau .........");
    249.             getch();
    250.            goto start;
    251.             }
    252.         }  
    253. }
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi Devost24 : 02-04-2009 lúc 05:24 PM.

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

    Bạn gán với s[i] rồi bạn so sánh với s[i] còn có ý nghĩa gì nữa. Cũng k có giải pháp nào hay nên tạm sửa vậy.
    C Code:
    1. void TimDuongMinAmMax(int *s,int n)
    2. {
    3.     int dmin = s[0], amax = s[0];
    4.     for(int i=1;i<n;i++)
    5.         {
    6.             if(s[i]>0)
    7.                 {
    8.                     if (dmin<=0)dmin=s[i];
    9.                     else dmin=(dmin<s[i])?dmin:s[i];
    10.                 }
    11.             else
    12.                 {
    13.                     if (amax>=0) amax=s[i];
    14.                     else amax=(amax>s[i])?amax:s[i];
    15.                 }
    16.         }
    17.     printf("\n\nSo duong nho nhat cua day la %d ",dmin);
    18.     printf("\n\nSo am lon nhat cua day la    %d ",amax);
    19. }

    Em làm cái bài sau nhưng khi chạy cái phần tìm số hoàn hảo số chính phương chương trình bị crash...
    Có vẻ ổn mà, có thể bạn gọi hàm tìm trong mảng mà chưa nhập mảng.

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

    Trích dẫn Nguyên bản được gửi bởi QuangHoang Xem bài viết
    Bạn gán với s[i] rồi bạn so sánh với s[i] còn có ý nghĩa gì nữa. Cũng k có giải pháp nào hay nên tạm sửa vậy.
    C Code:
    1. void TimDuongMinAmMax(int *s,int n)
    2. {
    3.     int dmin = s[0], amax = s[0];
    4.     for(int i=1;i<n;i++)
    5.         {
    6.             if(s[i]>0)
    7.                 {
    8.                     if (dmin<=0)dmin=s[i];
    9.                     else dmin=(dmin<s[i])?dmin:s[i];
    10.                 }
    11.             else
    12.                 {
    13.                     if (amax>=0) amax=s[i];
    14.                     else amax=(amax>s[i])?amax:s[i];
    15.                 }
    16.         }
    17.     printf("\n\nSo duong nho nhat cua day la %d ",dmin);
    18.     printf("\n\nSo am lon nhat cua day la    %d ",amax);
    19. }


    Có vẻ ổn mà, có thể bạn gọi hàm tìm trong mảng mà chưa nhập mảng.
    cái trên em đồng ý với bác , đáng nhẽ chỉ gán 1 lần , nhưng cái chỗ else bác nên sửa thành if(s[i]<0) nếu không có phần tử là số 0 nó sẽ cho vào số âm lớn nhất , nhưng cái chỗ tìm số em vẫn không hiểu , bài này em code rồi chạy được chỗ số hoàn hảo số chính phương xong code lại 1 số phần khác thì chỗ đấy crash ........
    Đã được chỉnh sửa lần cuối bởi Devost24 : 03-04-2009 lúc 11:28 AM.

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

    em đã biết tại sao nó crash rồi tại vì không loại số <=0 nên nó báo lỗi gây crash

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

  1. Kỹ thuật C++ Lỗi: Crash Windows Console khi chạy chương trình
    Gửi bởi Lev trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 07-11-2012, 04:27 PM
  2. Crash khi hủy mảng con trỏ
    Gửi bởi huutho444 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 14-10-2011, 10:10 PM
  3. Hook FreeLibrary bị crash
    Gửi bởi zeroplus trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 02-10-2011, 08:38 PM
  4. Code sắp xếp Quick Sort viết trên C++. Chạy = VC++ thì crash, TC thì sai?
    Gửi bởi camping29 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 11
    Bài viết cuối: 24-12-2008, 09:44 AM
  5. Hỏi về lỗi crash chương trình [VC++]
    Gửi bởi huyfeng trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 02-04-2008, 04:04 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