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

Đề tài: Bài tập C đơn giản, cần giúp

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

    Mặc định Bài tập C đơn giản, cần giúp

    hiện mình đang học C phần hàm nhưng lí thuyết chưa lắm rõ làm bài hay bị lỗi nhiều. Mới tham gia diễn đàn mong mọi người giúp sửa bài này với
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <math.h>
    4. #include <process.h>
    5.  
    6. int menu()
    7. {
    8.   int c;
    9.   printf("\n---------Menu---------\n");
    10.   printf("\n1. Giai phuong trinh ax^4 + bx^2 + c = 0");
    11.   printf("\n2. Giai phuong trinh ax^2 + bx + c = 0");
    12.   printf("\nn0. Thoat");
    13.   printf("\n----------------------");
    14.   printf("\nChon cong viec: ");
    15.   do {
    16.     c = getch();
    17.   } while (c>'2'||c<'0');
    18.   putc(c, stdout);
    19.   return c-'0';
    20. }
    21. void nhap(float a, float b, float c)
    22. {
    23.   printf("\nNhap vao cac he so cua phuong trinh");
    24.   do { printf("\n  a = "); scanf("%f",&a);
    25.   } while (a!=0)  ;
    26.   printf("\n  b = ");   scanf("%f",&b);
    27.   printf("\n  c = ");   scanf("%f",&c);
    28. }
    29. void hienthi(int ok,int chon)
    30. {
    31.   float x12, x1, x2, Y1, Y2, X1, X2, X3, X4;
    32.   if (ok==1) { printf("\nPhuong trinh vo nghiem"); exit;}
    33.   if (chon==1)
    34.     if (x12!=0)  printf("\nPhuong trinh co nghiem kep x = %f",x12);
    35.       else printf("\nPhuong trinh co 2 nghiem phan biet: \nx1 = %f\x2 = %f",x1,x2);
    36.   else
    37.     if (x12!=0) printf("\nPhuong trinh co 2 nghiem phan biet: \nX1 = %f\X2 = %f",Y1,Y2);
    38.       else { printf("\nPhuong trinh co 4 nghiem phan biet:\n");
    39.          printf(" \nX1 = %f  X2 = %f  X3 = %f  X4 = %f",X1,X2,X3,X4);
    40.        }
    41. }
    42. void ptbac2(int a, int b, int c)
    43. {
    44.   float delta, x12, x1, x2;
    45.   int ok;
    46.     delta=b*b-4*a*c;
    47.     if (delta==0) x12=-b/a;
    48.     if (delta<0)  ok=1;
    49.     if (delta>0) { x1=(-b+sqrt(delta))/2/a;   x2=(-b-sqrt(delta))/2/a; }
    50. }
    51. void ptbac4(int a, int b, int c)
    52. {
    53.   int ok;
    54.   float x12, Y1, Y2, X1, X2, X3, X4;
    55.   ptbac2(a,b,c);
    56.   if (ok!=1)
    57.   {
    58.      if (x12>0) { Y1=sqrt(-b/a); Y2=-sqrt(-b/a); }
    59.      X1=sqrt(x1); X2=-sqrt(x1); X3=sqrt(x2); X4=-sqrt(x2);
    60.   }
    61. }
    62. void main()
    63. {
    64.   int chon;
    65.   nhap(a, b, c);
    66.   do {
    67.      chon=menu();
    68.      switch (chon)
    69.      {
    70.        case 1 : ptbac2(a,b,c);
    71.         break;
    72.        case 2 : ptbac4(a,b,c);
    73.         break;
    74.      }
    75.   }  while (chon!=0);
    76.   hienthi(a, b, c);
    77. }

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

    Bài của bạn rất khó cải thiện hơn được, bạn nên làm mỗi cái giải biện luận 1 phương trình trong một hàm riêng và bỏ cái hiển thị kết luận đi.

    - Phần nhập, nếu muốn lưu lại giá trị cho biến thì bạn cần truyền vào các địa chỉ theo kiểu con trỏ.

    - Bạn chưa nắm rõ biến cục bộ và biến toàn cục. Các biến khai báo ở chương trình con sẽ đc giải phóng ngay khi kết thúc chương trình con.

    - Để kết thúc chương trình con sớm, người ta dùng lệnh return không dùng lệnh exit.

    - Phần menu thì bạn scanf luôn giá trị int cho biến c không cần phải lằng nhằng vậy.

    Sẽ phải sửa lại nhiều đó, bạn tự sử nhé, có gì mình góp ý thêm cho.

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    sủa cho bạn nè. ko có ý kiến gì cả. nên xem lại :
    _ cách trình bày code
    _ cấu trúc chương trình ( loằng ngoằng quá )


    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <process.h>

    int ok;
    float a,b,c,x12x1x2Y1Y2X1X2X3X4;
    int chon;
    int menu()
        {
            
    int c;
            
    printf("\n---------Menu---------\n");
            
    printf("\n1. Giai phuong trinh ax^4 + bx^2 + c = 0");
            
    printf("\n2. Giai phuong trinh ax^2 + bx + c = 0");
            
    printf("\n0. Thoat");
            
    printf("\n----------------------");
            
    printf("\nChon cong viec: ");
            do
                {
                    
    getch();
                }
            while (
    c>'2'||c<'0');
            
    putchar(c);
            return 
    c-'0';
        }

    void nhap()
        {
            
    printf("\nNhap vao cac he so cua phuong trinh");
            do
                {
                    
    printf("\n  a = "); scanf("%f",&a);
                }
            while (
    a==0)  ;
            
    printf("\n  b = ");      scanf("%f",&b);
            
    printf("\n  c = ");      scanf("%f",&c);
        }


    void hienthi()
        {
            if (
    ok==1) { printf("\nPhuong trinh vo nghiem"); exit;}
            if (
    chon==1)
                if (
    x12!=0)  printf("\nPhuong trinh co nghiem kep x = %f",x12);
                    else 
    printf("\nPhuong trinh co 2 nghiem phan biet: \nx1 = %f\x2 = %f",x1,x2);
            else if (
    x12!=0printf("\nPhuong trinh co 2 nghiem phan biet: \nX1 = %f\X2 = %f",Y1,Y2);
                else
                    {
                        
    printf("\nPhuong trinh co 4 nghiem phan biet:\n");
                        
    printf(" \nX1 = %f  X2 = %f  X3 = %f  X4 = %f",X1,X2,X3,X4);
                    }
        }

    void ptbac2()
        {
            
    float delta;
            
    delta=b*b-4*a*c;
            if (
    delta==0x12=-b/a;
            if (
    delta<0)  ok=1;
            if (
    delta>0)
                {
                    
    x1=(-b+sqrt(delta))/2/a;
                    
    x2=(-b-sqrt(delta))/2/a;
                }
        }

    void ptbac4()
        {
            
    ptbac2();
            if (
    ok!=1)
                {
                    if (
    x12>0) { Y1=sqrt(-b/a); Y2=-sqrt(-b/a); }
                    
    X1=sqrt(x1); X2=-sqrt(x1); X3=sqrt(x2); X4=-sqrt(x2);
                }
        }
    void main()
        {
            
    clrscr();
            
    nhap();
            
    chon=menu();
            switch (
    chon)
                {
                    case 
    : exit(0);
                    case 
    ptbac2();break;
                    case 
    ptbac4();break;
                }
            
    hienthi();
        } 
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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

    Thanks rất nhiều
    Bài mình làm sai quá nhiều kể cả cách giải ... nhờ sự giúp đỡ của bạn mình đã sửa lại không biết đúng chưa.
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <process.h>
    
    float a,b,c,x12, x1, x2, X1, X2, X3, X4, Y1, Y2, delta;
    int chon;
    int menu()
    {
      int so;
      printf("\n---------Menu---------\n");
      printf("\n1. Giai phuong trinh ax^2 + bx + c = 0");
      printf("\n2. Giai phuong trinh aX^4 + bX^2 + c = 0");
      printf("\n0. Thoat");
      printf("\n----------------------");
      printf("\nChon cong viec: ");
      do
        {
          so = getch();
    
        }
      while (so>'2'||so<'0');
      putc(so, stdout);
      return so-'0';
    }
    void nhap()
    {
      printf("\nNhap vao cac he so cua phuong trinh");
      do { printf("\n  a = "); scanf("%f",&a);
      } while (a==0)  ;
      printf("\n  b = ");  	scanf("%f",&b);
      printf("\n  c = ");  	scanf("%f",&c);
    }
    void hienthi()
    {
      if (delta<0) { printf("\nPhuong trinh vo nghiem"); getch(); return;}
      if (chon==1)
        if (delta==0)
          if (c==0) printf("\nPhuong trinh co nghiem x = 0");
          else printf("\nPhuong trinh co nghiem kep x = %f",x12);
        else printf("\nPhuong trinh co 2 nghiem phan biet: \nx1 = %f\nx2 = %f",x1,x2);
      else
        if (delta==0)
          if (x12<0)  { printf("\nPhuong trinh vo nghiem"); getch(); return;}
    	else if (x12==0)  printf("\nPhuong trinh co nghiem X = 0");
    	  else printf("\nPhuong trinh co 2 nghiem phan biet: \nX1 = %f\nX2 = %f",Y1,Y2);
        else
          if (x1*x2==0)
          {
    	if ((x1<0)||(x2<0)) printf("\nPhuong trinh co nghiem X = 0\n");
    	if ((x1>0)||(x2>0)) printf("\nPhuong trinh co 3 nghiem phan biet: \nX1 = 0\nX2 = %f\nX3 = %f",sqrt(x1+x2), -sqrt(x1+x2));
          }
          if (x1*x2>0)
    	if (x1<0)  { printf("\nPhuong trinh vo nghiem"); getch(); return;}
    	else printf("\nPhuong trinh co 4 nghiem phan biet:\nX1 = %f\nX2 = %f\nX3 = %f\nX4 = %f",X1,X2,X3,X4);
          if (x1*x2<0)
    	if (x1<0)  printf("\nPhuong trinh co 2 nghiem phan biet:\nX1 = %f\nX2 = %f",X3,X4);
    	else printf("\nPhuong trinh co 2 nghiem phan biet:\nX1 = %f\nX2 = %f",X1,X2);
      getch();
    }
    void ptbac2()
    {
        delta=b*b-4*a*c;
        if (delta==0) x12=-b/2/a;
        if (delta>0) { x1=(-b+sqrt(delta))/2/a;   x2=(-b-sqrt(delta))/2/a; }
    }
    void ptbac4()
    {
        ptbac2();
        if (x12>0) { Y1=sqrt(-b/a); Y2=-sqrt(-b/a); }
        if (x1>=0) {X1=sqrt(x1); X2=-sqrt(x1);}
        if (x2>=0) {X3=sqrt(x2); X4=-sqrt(x2);}
    }
    void main()
    {
      do {
         clrscr();
         chon=menu();
         switch (chon)
         {
           case 0 : exit(0);
           case 1 : nhap();  ptbac2();    break;
           case 2 : nhap();  ptbac4();    break;
         }
         hienthi();
      }  while (1);
    
    }
    Đã được chỉnh sửa lần cuối bởi mori : 09-03-2009 lúc 10:58 PM.

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

    Nhân tiện cho hỏi mấy lệnh dưới ý nghĩa là thế nào thế, mới học chỉ bắt chước chứ chưa hiểu rõ lắm
    Code:
    do
                {
                    c = getch();
                }
            while (c>'2'||c<'0');
            putchar(c);
            return c-'0';
    Code:
    exit(0);

  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Mặc định Bài tập C đơn giản, cần giúp

    Trích dẫn Nguyên bản được gửi bởi mori Xem bài viết
    Nhân tiện cho hỏi mấy lệnh dưới ý nghĩa là thế nào thế, mới học chỉ bắt chước chứ chưa hiểu rõ lắm
    Code:
    do
                {
                    c = getch();
                }
            while (c>'2'||c<'0');
            putchar(c);
            return c-'0';
    Code:
    exit(0);

    pó tay code của bạn mà bạn lại ko hiểu thì ai hiểu


    exit(0) là lệnh thoát luôn khỏi chương trình. 0 sẽ được trả lại cho hệ điều hành




    PHP Code:
    do
                {
                    
    getch();
                }
            while (
    c>'2'||c<'0'); 
    thực hiện công việc nhập cho khi nào kí tự nhập vào là không phải là '0' hoặc '1' hoặc '2' ( tạm dịch thế)




    PHP Code:
       putchar(c); 
    viết kí tự nằm trong biến c ra màn hình




    PHP Code:
    return c-'0'
    kết thúc hàm và trả về giá trị.
    ví dụ : c='0' thì '0' - '0' = 0
    c='1' thì '1' - '0' = 1
    c='2' thì '2' - '0' = 2
    ok? hiểu chứ '2' là kí tự 2 còn 2 (ko có ngoặc đơn) là số 2


    ?
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

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

  1. Giải thích giúp Giải thuật Euclid (tìm ƯSCLN)
    Gửi bởi duoirong trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 15-04-2015, 12:06 PM
  2. Đệm nước - Gối nước: Mát mẻ - Êm ái - giúp cho giấc ngủ sâu hơn: Giải pháp cho mùa hè - tốt cho sức khỏe
    Gửi bởi aochoang_den04 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 08-06-2012, 10:36 PM
  3. Dùng thuốc giảm cân giúp bạn nhanh giảm cân
    Gửi bởi nhontq trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 27-02-2011, 04:46 PM
  4. viên giảm cân giúp giảm cân nhanh nhất
    Gửi bởi nhontq trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 15-01-2011, 11:46 AM
  5. Tài liệu SQL bài tập về SQL và đại số quan hệ không biết giải các bạn giải giúp mình với!
    Gửi bởi doanketct trong diễn đàn Tài liệu, ebooks DB
    Trả lời: 2
    Bài viết cuối: 02-07-2010, 07:38 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