Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cả 2 đều làm nhiệm vụ giống nhau nhưng cái code thứ 2 dễ đọc hơn: main() xử lý công việc của main() là nhập dữ liệu và xuất ra kết quả, ptb2() xử lý công việc của ptb2() là giải pt bậc 2.

    Code đầu tiên gộp lại vào trong main() thì vd nếu chương trình cho chọn option 1 là giải ptb2, 2 là giải ptb3, 3 là giải pt 2 ẩn bậc 1, ... thì main() sẽ làm thêm 3 công việc là giải 3 loại pt. Y như bồi bàn mà phải vào bếp nấu ăn luôn vậy. Tách ra như code 2 thì main() chỉ là bồi bàn nhận list món ăn (input) và bưng đồ ăn ra (output) cho khách (user), còn phần nấu các món trong list món ăn là do các đầu bếp (các hàm ptb2(), ptb3(), ptb1_2()) đảm nhiệm.

    mỗi hàm chỉ nên xử lý duy nhất 1 việc. Nếu 1 hàm nhiều hơn 25 dòng thì nên xem xét tách ra thành nhiều hàm khác... Có khi ngta bắt 1 hàm tối đa chỉ có 10 dòng nữa [IMG]images/smilies/tongue.png[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Sử dụng đối con trỏ ở đây có hiệu quả gì hơn chương trình bình thường ạ ?

    Em đang học đến phần sử dụng đối con trỏ, có ví dụ về giải pt bậc 2 một ẩn, em có viết 2 loại chương trình đều phục vụ mục đích đó(một là dùng đối con trỏ, hai là chương trình bình thường trong hàm main).Cả 2 chương trình đều cho ra kết quả như nhau, điều em thắc mắc là việc sử dụng đối con trỏ trong chương trình 2 mang điều gì đặc biệt hơn là chương trình 1. Em mong các pro giải thích cho em ạ ![IMG]images/smilies/17.gif[/IMG][IMG]images/smilies/17.gif[/IMG][IMG]images/smilies/17.gif[/IMG]
    Chương trình cơ bản trong hàm main:
    Mã:
    int main(int argc, char *argv[]) {
    	float a,b,c,x1,x2,delta;
    	printf("Nhap a,b,c:");
    	scanf("%f%f%f",&a,&b,&c);
    	if(a==0){
    		printf("
    a=0");
    	}else{
    		delta=b*b-4*a*c;
    		if(delta<0){
    			printf("
    delta<0");
    		}else{
    			x1=(-b+sqrt(delta))/(2*a);
    			x2=(-b-sqrt(delta))/(2*a);
    			printf("
    x1 =%.2f,x2 =%.2f",x1,x2);
    		}
    	}
    	return 0;
    }
    Chương trình sử dụng đối con trỏ:
    Mã:
    int ptb2(float a,float b,float c,float *x1,float *x2);
    int main(int argc, char *argv[]) {
    	int s;
    	float a,b,c,x1,x2;
    	printf("Nhap a,b,c:");
    	scanf("%f%f%f",&a,&b,&c);
    	s=ptb2(a,b,c,&x1,&x2);
    	if(s==0){
    		printf("
    a=0");
    	}
    	else if(s==-1){
    		printf("
    delta<0");
    	}else{
    		printf("
    x1=%0.2f,x2=%0.2f",x1,x2);
    	}
    }
    int ptb2(float a,float b,float c,float *x1,float *x2){
    	float delta;
    	if(a==0){return 0;}
    	delta=b*b-4*a*c;
    	if(delta<0){return -1;}
    	*x1=(-b+sqrt(delta))/(2*a);
    	*x2=(-b-sqrt(delta))/(2*a);
    }

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Chủ yếu là nếu bạn cần nghiệm cho việc khác thì bạn dùng tham chiếu thôi [IMG]images/smilies/smile.png[/IMG]
    Chứ để tách riêng thì cũng ko cần.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bàn thêm về việc gộp mã thành một hàm hay tách thành nhiều hàm :

    Có thể đây không phải là ý hay, nhưng là suy nghĩ riêng của mình. Mình sẽ tách thành các hàm nhỏ hơn khi một đoạn mã trong hàm này có sự tương đồng với một đoạn mã trong hàm khác. Khi số dòng trong một hàm vượt quá chiều cao của khung soạn thảo mã, mình cũng tách ra để xem toàn bộ một hàm mà không phải sử dụng thanh cuộn hay dùng bánh xe chuột.
    Với đoạn mã ngắn và đơn giản của bạn chủ thớt, mình sẽ chọn cách viết là 1 hàm.

    Mời các bạn ý kiến thêm. Thân.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ^ Mình sẽ phân chia theo chức năng.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Rất dễ hiểu, em xin cám ơn !

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • 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
  •