Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 12
  1. #1
    Tham gia
    31-07-2011
    Bài viết
    57
    Like
    17
    Thanked 32 Times in 32 Posts

    Thuật toán cho hàm for/if trong C

    Em có thử làm 1 bài toán viết số theo hình vuông từ 1 đến 9 với C [xử dụng Borland C++ for windows]
    Code:
    #include <stdio.h>
    #include <conio.h>
    
    void main(void)
    {
    	int a,b;
       for (a=0;a<=9;a++)
       {
          if(a==0)
          	for (b=0;b<=9;b++)
             	printf("%d",b);
          else
          	if (a==9)
             	for (b=9;b>=0;b--)
                	printf("%d",b);
             else
             	for (b=a;b<=9+a;b++)
                	if (b==a)
                   	printf("%d",a);
                   else
                   	if (b==(9+a))
                      	printf("%d",9-a);
                      else
                      	printf(" ");
          printf("\n");
       };
       getch();
    }
    Kết quả in ra màn hình:
    Code:
    0123456789
    1             8
    2             7
    3             6
    4             5
    5             4
    6             3
    7             2
    8             1
    9876543210
    Bài tập trên mặc dù em làm đc nhưng hình như thuật toán quá dài dòng. Bác nào giúp em thu ngắn nó lại đc ko (em chỉ mới học tới hàm if,for,while thôi, nếu dùng cái khác các bác cho em vài dòng giải thích). Thanks

    *Mấy số in ra màn hình nằm rất là đẹp, bỏ vào [code] nó tự chạy lung tung
    Quote Quote

  2. #2
    Tham gia
    29-05-2011
    Location
    Hà Nội
    Bài viết
    1,826
    Like
    1,420
    Thanked 47 Times in 42 Posts
    Code:
    #include <stdio.h>
    #include <conio.h>
    
    main()
    {
    	int i,j;
    	for (i=0;i<=9;i++)
    		printf("%d",i);
    	for (j=1;j<=9;j++)
    		printf("\n%d        %d",j,9-j);
    	printf("\n");
    	for (i=9;i>=0;i--)
    		printf("%d",i);
    	getch();
    }

  3. #3
    Tham gia
    31-07-2011
    Bài viết
    57
    Like
    17
    Thanked 32 Times in 32 Posts
    Bác giải thích giùm em dòng return trong đoạn mã sau dc ko?
    Code:
    #include <stdio.h>
    #include <conio.h>
    
    int power(int,int);
    
    int power(int ix, int in)
    {
    	int i,ip;
       ip=1;
       for (i=1;i<=in;i++)
       	ip*=ix;
       return ip;
    }
    
    void main(void)
    {
    	printf("2 mu 2 = %d\n",power(2,2));
       printf("2 mu 3 = %d\n",power(2,3));
       getch();
    }

  4. #4
    Tham gia
    29-05-2011
    Location
    Hà Nội
    Bài viết
    1,826
    Like
    1,420
    Thanked 47 Times in 42 Posts
    Quote Được gửi bởi hell_angel7602 View Post
    Bác giải thích giùm em dòng return trong đoạn mã sau dc ko?
    Code:
    #include <stdio.h>
    #include <conio.h>
    
    int power(int,int);
    
    int power(int ix, int in)
    {
    	int i,ip;
       ip=1;
       for (i=1;i<=in;i++)
       	ip*=ix;
       return ip;
    }
    
    void main(void)
    {
    	printf("2 mu 2 = %d\n",power(2,2));
       printf("2 mu 3 = %d\n",power(2,3));
       getch();
    }
    lệnh return là để trả giá trị về cho hàm !
    ở đây
    lệnh
    return ip;
    trong hàm
    int power(int ix, int in)
    sẽ trả giá trị ip cho hàm power có kiểu int đó mà !

  5. #5
    Tham gia
    31-07-2011
    Bài viết
    57
    Like
    17
    Thanked 32 Times in 32 Posts
    Em vẫn ko hiểu lắm, lúc đầu em nghĩ là sau khi chạy hàm con power(2,2) xong lệnh return ip dùng để trả ip về lại giá trị 1. Nhưng khi em xóa đi thử thì kết quả dc 3 và 4.

    Bác xem giùm em 3 bài sau đây khác nhau chỗ nào:
    Code:
    #include <stdio.h>
    #include <conio.h>
    
    #define PI 3.14
    
    float frad;
    
    float area(float &);
    
    float area(float &a)
    {
    	return (4*PI*a*a);
    }
    
    void main(void)
    {
    	printf("Nhap ban kinh: ");
       scanf("%f",&frad);
       printf("Dien tich hinh cau: %10.3f",area(frad));
       getch();                            
    }


    Code:
    #include <stdio.h>
    #include <conio.h>
    
    #define PI 3.14
    
    float frad;
    
    float area()
    {
    	return (4*PI*frad*frad);
    }
    
    void main(void)
    {
    	printf("Nhap vao ban kinh: ");
       scanf("%f",&frad);
       printf("Dien tich hinh cau: %10.3f",area());
       getch();
    }

    Code:
    #include <stdio.h>
    #include <conio.h>
    
    #define PI 3.14
    
    float frad;
    
    void area(float &);
    
    void area(float &a)
    {
    	a=4*PI*a*a;
    }
    
    void main(void)
    {
    	printf("Nhap vao ban kinh: ");
       scanf("%f",&frad);
       area(frad);
       printf("Dien tich hinh cau: %10.3f",frad);
       getch();
    }
    *Em thử dùng #define AREA_CIRCLE (frad) (4*PI*frad*frad) để tính thì ko đc.

  6. #6
    Tham gia
    29-05-2011
    Location
    Hà Nội
    Bài viết
    1,826
    Like
    1,420
    Thanked 47 Times in 42 Posts
    sửa cho bạn:
    Code:
    #include <stdio.h>
    #include <conio.h>
    
    float area(float a)
    {
    	return (4*3.14*a*a);
    }
    
    void main(void)
    {
    	float a;
    	printf("Nhap ban kinh: ");
    	scanf("%f",&a);
    	printf("Dien tich hinh cau: %10.3f",area(a));
    	getch();
    }

  7. Thành viên Like bài viết này:


  8. #7
    Tham gia
    31-07-2011
    Bài viết
    57
    Like
    17
    Thanked 32 Times in 32 Posts
    Đoạn bác viết cũng giống bài thứ 2 của em [chỉ khác chỗ em khai biến trc]. Cả 3 bài em post đều chạy đc và cho đúng kết quả. Có điều em thắc mắc khi nào thì dùng cách nào

  9. #8
    Tham gia
    29-05-2011
    Location
    Hà Nội
    Bài viết
    1,826
    Like
    1,420
    Thanked 47 Times in 42 Posts
    Quote Được gửi bởi hell_angel7602 View Post
    Đoạn bác viết cũng giống bài thứ 2 của em [chỉ khác chỗ em khai biến trc]. Cả 3 bài em post đều chạy đc và cho đúng kết quả. Có điều em thắc mắc khi nào thì dùng cách nào
    Bạn cứ dùng cách nao ngắn và dễ hiểu nhất ấy.
    bạn dùng cách của mình thử xem, khá ngắn và dễ hiểu mà !

  10. #9
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Câu hỏi thứ 2 (lệnh return):

    Nếu xóa dòng return đi thì code sẽ không compile. Một hàm được declared là int có nghĩa là hàm hứa sẽ cho về một giá trị int, vì vậy trong thân hàm phải có một lệnh return kèm theo một biểu thức có giá trị int.

    Bạn cần tìm sách giáo khoa và nghiên cứu tìm hiểu lại về cấu trúc của hàm, lệnh return, và cách nhập tham số cho hàm. Giải thích cái này dài vài ba trang.

    Câu hỏi 3 (so sánh 3 hàm):

    Hàm thứ nhất dùng tham để nhận giá trị bán kính và trả về giá trị diện tích hình cầu (dthc). Đúng ra, hàm này chỉ cần nhận tham trị (không có dấu &), nhưng vd của bạn dùng tham chiếu (có dấu &) là thừa.

    Hàm thứ hai cũng trả về giá trị dthc nhưng không nhận tham, để tính dthc, hàm này dùng trị bán kính được chứa trong biến toàn cục frad.

    Hàm thứ ba không trả về giá trị nào cả. Hàm này nhận một tham chiếu là trị bán kính, tính ra dthc và ghi chồng lên trị bán kính vừa nhập vào. Sau khi gọi hàm, biến frad bị thay đổi từ trị bán kính trở thành trị dthc.

    Cả 3 hàm đều viết lủng củng. Hàm 1 bị lỗi dùng tham chiếu ở chỗ đnags lẽ chỉ cần dùng tham trị. Hàm 2 còn tệ hơn hàm 1, vì dùng biến toàn cục khiến hàm mất tính chất độc lập. Hàm 3 là hàm tệ nhất vì nó đổi ý nghĩa của một biến.

  11. 2 thành viên Like bài viết này:


  12. #10
    Tham gia
    15-03-2010
    Bài viết
    1,562
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Bổ túc thêm cho câu hỏi thứ nhất (rút gọn code):

    Code:
    char *c = "0123456789876543210";
    int i, j;
    for (i=0; i <= 9; i++)
    {
      for (j=0; j <= 9; j++)
        printf("%c", (j==0 || j==9 || i==0 || i==9)? c[i+j]) : ' ');
      printf("\n");
    }

  13. 2 thành viên Like bài viết này:


Trang 1 / 2 12 LastLast

Bookmarks

Quy định

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