Một số bài C++ - 2

1. Viết các hàm sau: kiểm tra số nguyên tố, kiểm tra số chính phương, kiểm tra số hoàn thiện.

2. Viết các hàm USCLL(a,b) và BSCNN(a,b) với a,b là số nguyên nhập từ bàn phím.

3. Viết hàm tính n! bằng hai cách, trong đó có một cách dùng hàm đệ qui.

4. Viết hàm nhận vào một số nguyên, và in ra màn hình dãy số ngược lại. ví dụ : nghichdao(x) với x = 12345 thì ta có kết quả trên màn hình là 54321.

5. Cho mảng A[i] có N phần tử, với N là số nguyên được nhập từ bàn phím (N < 1000) . Sắp xếp mảng theo thứ tự tăng dần trong đó có sử dụng hàm swap(a,b) để đổi chỗ hai phần tử trong mảng.

Lời giải

1. Viết các hàm sau: kiểm tra số nguyên tố, kiểm tra số chính phương, kiểm tra số hoàn thiện.
   1:  #include <iostream>
   2:  #include <math.h>
   3:   
   4:  using namespace std;
   5:   
   6:  bool  nguyento(int n)
   7:  {
   8:      int i;
   9:      for (i = 2; i <= sqrt(n); i++)
  10:      {
  11:          if ((n % i) == 0) break;
  12:      }    
  13:      if (i == n / 2) return 1;
  14:      else return 0;
  15:  }
  16:   
  17:  bool chinhphuong(double n)
  18:  {
  19:      double j;
  20:      j = sqrt(n);
  21:      if (n == round(j) * round(j)) return 1;
  22:      else return 0;
  23:  }
  24:   
  25:  bool hoanthien(int n)
  26:  {
  27:      int k, f;
  28:      k = 1;
  29:      for (f = 2; f <= (n / 2); f++)
  30:      {
  31:          if ((n % f) == 0) k += f;
  32:      }
  33:      if (k == n) return 1;
  34:      else return 0;
  35:  }
  36:  int main()
  37:  {
  38:      int n;
  39:      cout << "Nhap n: ";
  40:      cin >> n;
  41:      cout << "\n";
  42:      if (nguyento(n)) cout << "n la so nguyen to\n";
  43:      else cout << "n ko la so nguyen to\n";
  44:      if (chinhphuong(n)) cout << "n la so chinh phuong\n";
  45:      else cout << "n ko la so chinh phuong\n";
  46:      if (hoanthien(n)) cout << "n la so hoan thien \n";
  47:      else cout << "n ko la so hoan hien\n";
  48:      cout <<"\n";
  49:      system("PAUSE");    
  50:      return 0;
  51:  }
2. Viết các hàm USCLL(a,b) và BSCNN(a,b) với a,b là số nguyên nhập từ bàn phím.
   1:  #include <iostream>
   2:  #include <math.h>
   3:   
   4:  using namespace std;
   5:   
   6:  int us(int a, int b)
   7:  {
   8:      while (a != b)
   9:      {
  10:            if (a < b) b = b - a;
  11:            else a = a - b;
  12:      }
  13:      return a;
  14:  }
  15:   
  16:  int bs(int a, int b)
  17:  {
  18:      return (a * b) / us(a, b);
  19:  }
  20:   
  21:  int main()
  22:  {
  23:      int a, b;
  24:      cout << "Nhap hai so a va b: ";
  25:      cin >> a >> b;
  26:      cout << "\n USCLN cua a,b la: " << us(a, b) << "\n";
  27:      cout << "\n BSCNN cua a,b la: " << bs(a, b) << "\n";
  28:      cout << "\n";
  29:      system("PAUSE");    
  30:      return 0;
  31:  }
3. Viết hàm tính n! bằng hai cách, trong đó có một cách dùng hàm đệ qui.
   1:  #include <iostream>
   2:   
   3:  using namespace std;
   4:   
   5:  int giaithua(int x) // ham giai thua dung de qui
   6:  {
   7:      if (x == 0) return 1; 
   8:      else return x * giaithua(x - 1); 
   9:  }
  10:   
  11:  int giaithua1(int x) // ham giai thua ko dung de qui
  12:  {
  13:      int i, gt;
  14:      gt = 1;
  15:      for (i = 1; i <= x; i++)
  16:      {
  17:          gt *= i;
  18:      }
  19:      return gt;
  20:  }
  21:   
  22:  int main()
  23:  {
  24:      int x;
  25:      cout << "Nhap so can tinh giai thua: ";
  26:      cin >> x;
  27:      cout << x << " giai thua bang: " << giaithua(x) << "\n";
  28:      system("PAUSE");
  29:      return EXIT_SUCCESS;
  30:  }
4. Viết hàm nhận vào một số nguyên, và in ra màn hình dãy số ngược lại. ví dụ : nghichdao(x) với x = 12345 thì ta có kết quả trên màn hình là 54321.
   1:  #include <iostream>
   2:   
   3:  using namespace std;
   4:   
   5:  int contrary(int x) //ham tra lai gia tri cua so viet theo thu tu nguoc lai
   6:  {
   7:      int i = 0;
   8:      while (x != 0)
   9:      {
  10:         i = i * 10 + x % 10;
  11:         x /= 10;
  12:      }
  13:      return i;
  14:  }
  15:   
  16:  void printContrary(int x) //ham in ra day so nguoc lai
  17:  {
  18:       while (x != 0)
  19:       {
  20:             cout << x % 10;
  21:             x /= 10;
  22:       }
  23:  }
  24:  int main()
  25:  {
  26:      int x;
  27:      cout << "Nhap x: ";
  28:      cin >> x;   
  29:      cout << "Day so nguoc lai: ";
  30:      printContrary(x);
  31:      cout << "\n";
  32:      system("PAUSE");
  33:      return EXIT_SUCCESS;
  34:  }
5. Cho mảng A[i] có N phần tử, với N là số nguyên được nhập từ bàn phím (N < 1000) . Sắp xếp mảng theo thứ tự tăng dần trong đó có sử dụng hàm swap(a,b) để đổi chỗ hai phần tử trong mảng.
   1:  #include <iostream>
   2:  using namespace std;
   3:   
   4:  void swap(int &a, int &b) //ham thay doi gia tri cua a,b
   5:  {
   6:       int t;
   7:       t = a; 
   8:       a = b; 
   9:       b = t;
  10:  }
  11:   
  12:  int main()
  13:  {
  14:      int arrays[1000];
  15:      int n, i, i1, i2;
  16:      cout << "So gia tri cua mang: ";
  17:      cin >> n;
  18:      for (i = 0; i <= n - 1; i++)
  19:      {
  20:          cout << "Nhap gia tri thu " << i << ": ";
  21:          cin >> arrays[i];
  22:      }
  23:      for (i1 = 0; i1 < n - 1; i1++)
  24:      {
  25:          for (i2 = i1 + 1; i2 <= n - 1; i2++)
  26:          {
  27:              if (arrays[i1] >= arrays[i2]) swap(arrays[i1], arrays[i2]);
  28:          }
  29:      }
  30:      cout << "Mang sau khi sap xep: ";
  31:      for (i = 0; i < n; i++)
  32:      {
  33:          cout << arrays[i] << ", ";
  34:      }
  35:      cout << "\n\n";
  36:      system("PAUSE");
  37:      return EXIT_SUCCESS;
  38:  }

Bài làm chỉ mang tính chất tham khảo, nghiêm cấm sao chép dưới mọi hình thức =))

Posted in IT, Learning, Tutorial at February 26th, 2008. Trackback URI: trackback
Tags: , ,

9 Responses to “Một số bài C++ - 2”

  1. February 28th, 2008 at 6:50 pm #mutinhoc

    :) Hjx! học hành vất vả quá ;)

  2. February 28th, 2008 at 10:47 pm #HKVN

    Múa rìu qua mắt thợ thôi. Ngứa tay thì pót lên ý mà :-SS

  3. March 1st, 2008 at 12:01 am #mutinhoc

    :) lại khiêm tốn rồi! giạo này ít gặp ông trên mạng quá

  4. March 1st, 2008 at 10:34 am #NHA_DIEN

    Ừ, công nhận giờ buổi tối online ít thấy đèn nick ông sáng. Mà làm bài tập nhanh thế, tôi còn chưa đụng đến bài nào, zzz :(

  5. March 1st, 2008 at 3:22 pm #HKVN

    Mấy bài này từ tuần trước rồi. Tuần này tôi cũng đã động đc tẹo nào đâu.
    Yahoo thỉnh thoảng tôi vào rồi invisible hoặc out luôn vì để cũng ko biết làm gì.

    P/S: Sao ko ai dùng GAvatar à? Đều No Avatar thế nhỉ.

  6. March 1st, 2008 at 8:10 pm #mutinhoc

    gavatar là cái gì vậy :D !? lớp CA học nhanh thế, đã học sang mảng và sâu kí tự rùi :(

    hàm kiểm tra nguyên tố bị sai :D

  7. March 1st, 2008 at 10:10 pm #HKVN

    gavatar là một kiểu gavatar rất hay. Cậu lên gavatar đăng ký một tài khoản, add email của cậu vào. Khi comment trong blog của tớ hay rất nhiều blog khác, từ email sẽ tự động hiện ra avatar của cậu ;)

    Mãng vừa học tuần vừa rồi, còn sâu thì chưa nhưng cũng tự đọc được mà :D

  8. March 2nd, 2008 at 11:20 am #entersadman

    Cam ơn bác Thanh .Em đang cần tham khảo thuật toán bài 5 mà chưa biết tìm ở đâu.

  9. March 2nd, 2008 at 7:34 pm #mutinhoc

    gravatar này hay đấy, trước không để ý :D hình như bo-blog cũng có hỗ trợ cái này thì phải :)

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>