Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Lập trình C | Chia 2 số nguyên trong lập trình C

  1. #1
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Mặc định Lập trình C | Chia 2 số nguyên trong lập trình C

    C Code:
    1. #include "graphics.h"
    2. #include "conio.h"
    3. #include "dos.h"
    4. #include "math.h"
    5. #include "stdlib.h"
    6. #define r 60
    7. #define d 80
    8. #define rad 3.1412/180
    9. #define Mx getmaxx()/2
    10. #define My getmaxy()/2
    11.  
    12. int Pl[10]; // tao do cac dinh
    13. // ve theo drawpoly thi phai khai bao thua 2 gia tri
    14. //neu dung cac dinh thi khi ve lineto(x,y) thi se dai
    15.  
    16. void creat_grap(){    // khoi tao do hoa
    17.    int mh=DETECT, type;
    18.    initgraph(&mh,&type,"c:\\tc\\bgi");
    19.    return;
    20. }//----- eograp
    21.  
    22. void creat_rect(int cl){  // tao hinh chu nhat
    23.   setcolor(cl);
    24.   drawpoly(5,Pl);
    25.   putpixel(Pl[4],Pl[5],random(15));  
    26.   return;
    27. }//-----eorect
    28.  
    29. void DL(){   // tao tre voi delay();
    30.  delay(20);
    31.  return;
    32. }//------ eoDL
    33.  
    34. void update(int ap){ //cap nhat lai thong tin toa do
    35.  Pl[2]=Mx+int(d*cos(ap*rad));Pl[3]=My+int(d*sin(ap*rad));
    36.  Pl[4]=Mx+int(sqrt(d*d+r*r)*cos((ap-180*atan(0.75)/3.1412)*rad));
    37.  Pl[5]=My+int(sqrt(d*d+r*r)*sin((ap-180*atan(0.75)/3.1412)*rad));
    38.  Pl[6]=Mx+int(r*cos((-90+ap)*rad));Pl[7]=My+int(r*sin((-90+ap)*rad));
    39.  Pl[8]=Pl[0];Pl[9]=Pl[1];
    40. }
    41.  
    42. main(){
    43.  creat_grap();  //khoi tao do hoa
    44.  Pl[0]=Mx;Pl[1]=My;
    45.  moveto(Pl[0],Pl[1]);
    46.  int i=0;
    47.  int x,y;
    48.  randomize();
    49.  for(int a=0;a<300;a++){
    50.    putpixel(random(getmaxx()),random(getmaxy()),random(15)+1);
    51.     }
    52.  while(!kbhit()){
    53.  update(i);
    54.  x=random(getmaxx());
    55.  y=random(getmaxy());
    56.  creat_rect(6);
    57.  putpixel(x,y,random(15)+1);
    58.  DL();
    59.  creat_rect(0);
    60.  putpixel(x,y,0);
    61.  i++;
    62.  if(i>360) i=0;
    63.  }
    64.  closegraph();
    65.  return 0;
    66. }//--- eom
    Bài này mình vừa làm giúp đứa em. Ở đây mình khai báo
    #define r 60
    #define d 80
    Tức là rộng và dài. Cái này chuyển sang cho người nhập vào thì đơn giản.
    Mình thắc mắc ở chỗ:
    void update(int ap){ //cap nhat lai thong tin toa do
    Pl[2]=Mx+int(d*cos(ap*rad));Pl[3]=My+int(d*sin(ap*rad));
    Pl[4]=Mx+int(sqrt(d*d+r*r)*cos((ap-180*atan(0.75)/3.1412)*rad));
    Pl[5]=My+int(sqrt(d*d+r*r)*sin((ap-180*atan(0.75)/3.1412)*rad));
    Pl[6]=Mx+int(r*cos((-90+ap)*rad));Pl[7]=My+int(r*sin((-90+ap)*rad));
    Pl[8]=Pl[0];Pl[9]=Pl[1];
    }
    Lẽ ra chỗ atan mình để là r/d tức là rộng chia cho dài. Nhưng mọi cái đều =0 cho dù mình đã đổi kiểu dữ liệu sang fload hoặc cái khác đều cho kết quả là 0 nếu để là r/d;Vậy là tại sao?
    (chỗ in đậm) mình để 0.75 vì ở trên mình khai báo r =60; d=80(hai số này thỏa mãn để tạo thành một tam giác là a+b>sqrt(a*a+b*b)).
    Giúp mình với nhé vì để r/d nó là tổng quát (mang tính động), mấy cái kiểu dữ liệu mình không chắc chắn lắm!
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    NT_OnlyLove thay 2 dòng sau:

    Code:
    #define r 60
    #define d 80
    Thành
    Code:
    #define r 60.0
    #define d 80.0

    Với hầu hết các compiler, biểu thức bên phải dấu '=' (gán) sẽ được được thực hiện trước. Như vậy phép tính r/d của bạn sẽ được hiểu là phép chia dạng int/int.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

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

  1. Lập trình C cộng trừ nhân chia số nguyên vô hạn trong lập trình C?
    Gửi bởi duckhanh007 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 09-10-2011, 12:14 PM
  2. tách số nguyên tố trong mảng 1 chiều??
    Gửi bởi detective009 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 43
    Bài viết cuối: 26-05-2011, 11:52 PM
  3. hàm về mảng 1 chiều: kiểm tra số nguyên tố trong mảng
    Gửi bởi luckyluke76215 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 09-12-2010, 11:28 PM
  4. tìm số nguyên tố có trong mảng 2 chiều, tính tổng các số nguyên tố đó??
    Gửi bởi lesliuton01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 08-06-2010, 10:21 AM
  5. Chia 2 số nguyên trong C | Phép gán a = 3/2 sai ở đâu ???
    Gửi bởi xiu_coi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 28-04-2009, 04:41 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