鱼C论坛

 找回密码
 立即注册
查看: 2539|回复: 9

请帮忙改下程序(条件运算,三角函数)

[复制链接]
发表于 2015-6-20 16:55:19 | 显示全部楼层 |阅读模式
88鱼币
这个程序前面输入相同,“R角”处有三种输入,分别为大写字母“C”(意为长度),大写字母“J”(意为角度),双精度浮点数(指针为g)。

在输入大写字母“J”,双精度浮点数时结果正确,但输入大写字母“C”时结果错误,不知道是不是给“s”赋值错误(s是角度度数),
(我这里倒角长度就是三角形一条直角边,另一条直角边用(“大外圆”减去“倒角下方外圆”)结果再除以2)
请帮忙改下使它达到如图所示结果(这个图是输入“J”的,我希望输入“C”运算结果一样)

下面是三组测试数据
64.5        42        62        76.5        60.5        84.5        2
64.5        42        62        76.5        60.5        84.5        J        15        81.8        2.5
64.5        42        62        76.5        60.5        84.5        C        5        81.8        2.5



三种条件.jpg
三种条件.rar (936 Bytes, 下载次数: 9)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-20 16:55:20 | 显示全部楼层
  1. #include<conio.h>
  2. #include<math.h>
  3. #include<stdio.h>
  4. #define PI 3.1416
  5. double a,b,c,d,e,f,g,aa,bb,cc,ccc,dd,ddd,ee,ff,gg,qi,zon,o,w,v,q,qq,
  6. qirx,zonrx,zonrz,xierx,xierz,k,l,m,n,
  7. P,s;
  8. char str[9];
  9. void func1();
  10. void func2();
  11. void func3();

  12. int main()
  13. {
  14.        
  15.         printf("内球面直径:\n");
  16.         scanf("%lf",&a);
  17.         printf("球心距:\n");
  18.         scanf("%lf",&b);
  19.         printf("长度:\n");
  20.         scanf("%lf",&c);
  21.         printf("大内孔:\n");
  22.         scanf("%lf",&d);
  23.         printf("小内孔:\n");
  24.         scanf("%lf",&e);
  25.         printf("大外圆:\n");
  26.         scanf("%lf",&f);
  27.         printf("R角:\n");
  28.         scanf("%s",str);
  29.        
  30.        
  31.        
  32.        
  33.         if ( str[0] == 'J' ) {
  34.                 func2();
  35.         }
  36.        
  37.         else if ( str[0] == 'C' ) {
  38.                 func3();
  39.         }
  40.         else {
  41.                 (sscanf(str,"%lf",&g));
  42.                 func1();
  43.         }
  44.        
  45.         getch();
  46. }  

  47. void func1 ()
  48. {
  49.         dd=d+2;
  50.         cc=c+4;
  51.         ccc=c+1.1;
  52.         ee=e+0.35;
  53.         qi=b-38+48.72;
  54.         zon=b-38+20.5;
  55.         ddd=d-3;
  56.         ff=f-(g+1)*2;
  57.         o=g+1;
  58.         v=tan(PI/3.83);
  59.         w=(dd-ee)/2/v;
  60.         q=ccc-w-qi;
  61.         if(b<=56)qq=58-b;
  62.         if(b>56)qq=78-b;
  63.        
  64.         printf("O6450\n");
  65.         printf("X%.1lf\n",dd);
  66.         printf("Z%.1lf\n",cc);
  67.         printf("Z%.1lf\n",ccc);
  68.         printf("W-%.2lf\n",w);
  69.         printf("Z%.2lf\n",qi);
  70.         printf("Z%.2lf\n",zon);
  71.         printf("Z%.1lf\n",cc);
  72.         printf("X%.1lf\n",ddd);
  73.         printf("Z%.1lf\n",c);
  74.         printf("X%.1lf\n",ff);
  75.         printf("X%.1lf W-%.1lf R%.1lf\n",f,o,o);
  76.         printf("过渡=%.2lf\n",q);
  77.         printf("打表垫片=%.1lf\n",qq);
  78.        
  79. }

  80. void func2 ()
  81. {
  82.         printf("角度:\n");
  83.         scanf("%lf",&n);
  84.         printf("倒角下方外圆:\n");
  85.         scanf("%lf",&k);
  86.         printf("R角:\n");
  87.         scanf("%lf",&l);
  88.        
  89.         dd=d+2;
  90.         cc=c+4;
  91.         ccc=c+1.1;
  92.         ee=e+0.35;
  93.         qi=b-38+48.72;
  94.         zon=b-38+20.5;
  95.         ddd=d-3;
  96.         ff=f-(g+1)*2;
  97.         o=g+1;
  98.         v=tan(PI/3.83);
  99.         w=(dd-ee)/2/v;
  100.         q=ccc-w-qi;
  101.         if(b<=56)qq=58-b;
  102.         if(b>56)qq=78-b;
  103.        
  104.         m=l+1.2;
  105.         qirx=k-l/tan((n+90)/2*PI/180)*2-2.4;
  106.         zonrx=k+(sin(n*PI/180))*(l/tan((n+90)/2*PI/180)*2)-(1.2-(cos(n*PI/180)*1.2))*2;
  107.         zonrz=cos(n*PI/180)*l/tan((n+90)/2*PI/180)-sin(n*PI/180)*1.2+1.2;
  108.         xierx=f;
  109.         xierz=c-((f-k)/2/tan(n*PI/180)+1.2);
  110.        
  111.         printf("O6450\n");
  112.         printf("X%.1lf\n",dd);
  113.         printf("Z%.1lf\n",cc);
  114.         printf("Z%.1lf\n",ccc);
  115.         printf("W-%.2lf\n",w);
  116.         printf("Z%.2lf\n",qi);
  117.         printf("Z%.2lf\n",zon);
  118.         printf("Z%.1lf\n",cc);
  119.         printf("X%.1lf\n",ddd);
  120.         printf("Z%.1lf\n",c);
  121.         printf("x%.2lf\n",qirx);
  122.         printf("G3 x%.2lf w-%.2lf R%.2lf\n",zonrx,zonrz,m);
  123.         printf("G1 x%.2lf z%.2lf\n",xierx,xierz);
  124.         printf("过渡=%.2lf\n",q);
  125.         printf("打表垫片=%.1lf\n",qq);
  126. }
  127. void func3 ()
  128. {
  129.        
  130.        
  131.         printf("倒角长度:\n");
  132.         scanf("%lf",&P);
  133.         printf("倒角下方外圆:\n");
  134.         scanf("%lf",&k);
  135.         printf("R角:\n");
  136.         scanf("%lf",&l);
  137.        
  138.         dd=d+2;
  139.         cc=c+4;
  140.         ccc=c+1.1;
  141.         ee=e+0.35;
  142.         qi=b-38+48.72;
  143.         zon=b-38+20.5;
  144.         ddd=d-3;
  145.         ff=f-(g+1)*2;
  146.         o=g+1;
  147.         v=tan(PI/3.83);
  148.         w=(dd-ee)/2/v;
  149.         q=ccc-w-qi;
  150.         if(b<=56)qq=58-b;
  151.         if(b>56)qq=78-b;
  152.        
  153.         m=l+1.2;

  154.         s=atan(((f-k)/2)/P)/PI*180;//仰望天上的光add

  155.         qirx=k-l/tan((s+90)/2*PI/180)*2-2.4;
  156.         zonrx=k+(sin(s*PI/180))*(l/tan((s+90)/2*PI/180)*2)-(1.2-(cos(s*PI/180)*1.2))*2;
  157.         zonrz=cos(s*PI/180)*l/tan((s+90)/2*PI/180)-sin(s*PI/180)*1.2+1.2;
  158.         xierx=f;
  159.         //xierz=c-((f-k)/2/tan(n*PI/180)+1.2);//仰望天上的光注释
  160.         xierz=c-((f-k)/2/tan(s*PI/180)+1.2);//仰望天上的光add
  161.         //s=tan(P/((f-k)/2))/PI*180;//仰望天上的光注释       
  162.         printf("O6450\n");
  163.         printf("X%.1lf\n",dd);
  164.         printf("Z%.1lf\n",cc);
  165.         printf("Z%.1lf\n",ccc);
  166.         printf("W-%.2lf\n",w);
  167.         printf("Z%.2lf\n",qi);
  168.         printf("Z%.2lf\n",zon);
  169.         printf("Z%.1lf\n",cc);
  170.         printf("X%.1lf\n",ddd);
  171.         printf("Z%.1lf\n",c);
  172.         printf("x%.2lf\n",qirx);
  173.         printf("G3 x%.2lf w-%.2lf R%.2lf\n",zonrx,zonrz,m);
  174.         printf("G1 x%.2lf z%.2lf\n",xierx,xierz);
  175.         printf("过渡=%.2lf\n",q);
  176.         printf("打表垫片=%.1lf\n",qq);
  177. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-6-20 20:10:52 | 显示全部楼层
本帖最后由 晚起鸟儿 于 2015-6-20 20:12 编辑

可能大伙对我这个顽固的家伙纠结这个写得乱,差还老弄上来的程序烦不胜烦,但我能力只有这点呀,我希望通过思考和学习使它更好呀,等这个程序基本能应对凯达数控编程的运算后,我希望给它加个按钮,窗口,漂亮的界面,更规范的编写,甚至对著名的FANUC系统自动编程(无非是一些较难的节点进行数学计算,并对实践中的差异进行校正)请高手们不吝指导哦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-20 22:00:48 | 显示全部楼层
代码修改的4个地方我用注释标明了。
另外,浮点数运算有舍入误差,所以你对比下结果,有一些偏差。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-20 22:02:42 | 显示全部楼层
呵呵。。。编程就是为了解决现实生活中的问题。你在编程能力不是很强的情况下,就有这种想法。。。很好

希望能坚持下去。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-6-20 23:21:25 | 显示全部楼层
仰望天上的光 发表于 2015-6-20 22:00
代码修改的4个地方我用注释标明了。
另外,浮点数运算有舍入误差,所以你对比下结果,有一些偏差。

这个是你是完全正确的,我把小数点后面数省略了(我想技术部在用CAD画图时也是把精度要求不太高的位置小数点后面的数省略,这样看起来也清楚些)正确数值是输入(84.5-81.8)/2/tan15≈5.038
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-6-20 23:29:43 | 显示全部楼层
本帖最后由 晚起鸟儿 于 2015-6-20 23:55 编辑
仰望天上的光 发表于 2015-6-20 22:02
呵呵。。。编程就是为了解决现实生活中的问题。你在编程能力不是很强的情况下,就有这种想法。。。很好

...


   谢谢光版主帮助,下面顺序改成后面的就报错,可以帮忙解释和修改下么?另外 func2和func3可以直接继承func1赋值和前面输入的数值么,这样程序比较短和清晰         



               if ( str[0] == 'J' ) {
                func2();
        }
        
              else if ( str[0] == 'C' ) {
                func3();
        }
        else {
              (sscanf(str,"%lf",&g));
                func1();
                }










     if {
                (sscanf(str,"%lf",&g));
                func1();
        }
        
        else if ( str[0] == 'J' ) {
                func2();
        }
        
        else ( str[0] == 'C' ) {
                func3();
        }
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-21 09:36:29 | 显示全部楼层
晚起鸟儿 发表于 2015-6-20 23:29
谢谢光版主帮助,下面顺序改成后面的就报错,可以帮忙解释和修改下么?另外 func2和func3可以直接继 ...
  1. #include<conio.h>
  2. #include<math.h>
  3. #include<stdio.h>
  4. #include <ctype.h>
  5. #define PI 3.1416
  6. double a,b,c,d,e,f,g,aa,bb,cc,ccc,dd,ddd,ee,ff,gg,qi,zon,o,w,v,q,qq,
  7. qirx,zonrx,zonrz,xierx,xierz,k,l,m,n,
  8. P,s;
  9. char str[9];
  10. void func1();
  11. void func2();
  12. void func3();

  13. void get_common_data(void);
  14. void get_extra_data_fun2(void);
  15. void get_extra_data_fun3(void);
  16. void do_extra_compute_fun2(void);
  17. void do_extra_compute_fun3(void);
  18. void deal_data(void);
  19. void pre_compute(void);
  20. void output_version1(void);
  21. void output_version2(void);

  22. int main()
  23. {
  24.        
  25.         get_common_data();
  26.         deal_data();       
  27.         getch();
  28. }  

  29. void func1 ()
  30. {
  31.         pre_compute();
  32.         output_version1();
  33. }

  34. void func2 ()
  35. {
  36.         pre_compute();
  37.         get_extra_data_fun2();
  38.         do_extra_compute_fun2();
  39.         output_version2();
  40. }
  41. void func3 ()
  42. {
  43.         pre_compute();
  44.         get_extra_data_fun3();
  45.         do_extra_compute_fun3();      
  46.         output_version2();
  47. }

  48. void pre_compute(void) {
  49.         dd=d+2;
  50.         cc=c+4;
  51.         ccc=c+1.1;
  52.         ee=e+0.35;
  53.         qi=b-38+48.72;
  54.         zon=b-38+20.5;
  55.         ddd=d-3;
  56.         ff=f-(g+1)*2;
  57.         o=g+1;
  58.         v=tan(PI/3.83);
  59.         w=(dd-ee)/2/v;
  60.         q=ccc-w-qi;
  61.         if(b<=56)qq=58-b;
  62.         if(b>56)qq=78-b;       
  63. }

  64. void output_version1(void) {
  65.         printf("O6450\n");
  66.         printf("X%.1lf\n",dd);
  67.         printf("Z%.1lf\n",cc);
  68.         printf("Z%.1lf\n",ccc);
  69.         printf("W-%.2lf\n",w);
  70.         printf("Z%.2lf\n",qi);
  71.         printf("Z%.2lf\n",zon);
  72.         printf("Z%.1lf\n",cc);
  73.         printf("X%.1lf\n",ddd);
  74.         printf("Z%.1lf\n",c);
  75.         printf("X%.1lf\n",ff);
  76.         printf("X%.1lf W-%.1lf R%.1lf\n",f,o,o);
  77.         printf("1y&#182;é=%.2lf\n",q);
  78.         printf("′ò±íμ&#230;&#198;&#172;=%.1lf\n",qq);
  79. }

  80. void output_version2(void) {
  81.         printf("O6450\n");
  82.         printf("X%.1lf\n",dd);
  83.         printf("Z%.1lf\n",cc);
  84.         printf("Z%.1lf\n",ccc);
  85.         printf("W-%.2lf\n",w);
  86.         printf("Z%.2lf\n",qi);
  87.         printf("Z%.2lf\n",zon);
  88.         printf("Z%.1lf\n",cc);
  89.         printf("X%.1lf\n",ddd);
  90.         printf("Z%.1lf\n",c);
  91.         printf("x%.2lf\n",qirx);
  92.         printf("G3 x%.2lf w-%.2lf R%.2lf\n",zonrx,zonrz,m);
  93.         printf("G1 x%.2lf z%.2lf\n",xierx,xierz);
  94.         printf("1y&#182;é=%.2lf\n",q);
  95.         printf("′ò±íμ&#230;&#198;&#172;=%.1lf\n",qq);
  96. }

  97. void get_common_data(void) {
  98.         printf("&#196;ú&#199;ò&#195;&#230;&#214;±&#190;&#182;:\n");
  99.         scanf("%lf",&a);
  100.         printf("&#199;òD&#196;&#190;à:\n");
  101.         scanf("%lf",&b);
  102.         printf("3¤&#182;è:\n");
  103.         scanf("%lf",&c);
  104.         printf("′ó&#196;ú&#191;×:\n");
  105.         scanf("%lf",&d);
  106.         printf("D&#161;&#196;ú&#191;×:\n");
  107.         scanf("%lf",&e);
  108.         printf("′óía&#212;2:\n");
  109.         scanf("%lf",&f);
  110.         printf("R&#189;&#199;:\n");
  111.         scanf("%s",str);
  112. }

  113. void deal_data(void) {
  114.         /*
  115.         if ( str[0] == 'J' ) {
  116.                 func2();
  117.         } else if ( str[0] == 'C' ) {
  118.                 func3();
  119.         }
  120.         else {
  121.                 (sscanf(str,"%lf",&g));
  122.                 func1();
  123.         }*/
  124.         if( isdiget(str[0]) ) {//str[0]ê&#199;êy×&#214;
  125.                 (sscanf(str,"%lf",&g));
  126.                 func1();
  127.         }else if ( str[0] == 'J' ) {
  128.                 func2();
  129.         }elseif(str[0] == 'C') {
  130.                 func3();
  131.         }
  132. }

  133. void get_extra_data_fun2(void) {
  134.         printf("&#189;&#199;&#182;è:\n");
  135.         scanf("%lf",&n);
  136.         printf("μ1&#189;&#199;&#207;&#194;·&#189;ía&#212;2:\n");
  137.         scanf("%lf",&k);
  138.         printf("R&#189;&#199;:\n");
  139.         scanf("%lf",&l);
  140. }

  141. void get_extra_data_fun3(void) {
  142.         printf("μ1&#189;&#199;3¤&#182;è:\n");
  143.         scanf("%lf",&P);
  144.         printf("μ1&#189;&#199;&#207;&#194;·&#189;ía&#212;2:\n");
  145.         scanf("%lf",&k);
  146.         printf("R&#189;&#199;:\n");
  147.         scanf("%lf",&l);
  148. }

  149. void do_extra_compute_fun2(void) {
  150.         m=l+1.2;
  151.         qirx=k-l/tan((n+90)/2*PI/180)*2-2.4;
  152.         zonrx=k+(sin(n*PI/180))*(l/tan((n+90)/2*PI/180)*2)-(1.2-(cos(n*PI/180)*1.2))*2;
  153.         zonrz=cos(n*PI/180)*l/tan((n+90)/2*PI/180)-sin(n*PI/180)*1.2+1.2;
  154.         xierx=f;
  155.         xierz=c-((f-k)/2/tan(n*PI/180)+1.2);
  156. }

  157. void do_extra_compute_fun3(void) {
  158.         m=l+1.2;
  159.         s=atan(((f-k)/2)/P)/PI*180;//&#209;&#246;í&#251;ììé&#207;μ&#196;1aadd
  160.         qirx=k-l/tan((s+90)/2*PI/180)*2-2.4;
  161.         zonrx=k+(sin(s*PI/180))*(l/tan((s+90)/2*PI/180)*2)-(1.2-(cos(s*PI/180)*1.2))*2;
  162.         zonrz=cos(s*PI/180)*l/tan((s+90)/2*PI/180)-sin(s*PI/180)*1.2+1.2;
  163.         xierx=f;
  164.         //xierz=c-((f-k)/2/tan(n*PI/180)+1.2);//&#209;&#246;í&#251;ììé&#207;μ&#196;1a×¢êí
  165.         xierz=c-((f-k)/2/tan(s*PI/180)+1.2);//&#209;&#246;í&#251;ììé&#207;μ&#196;1aadd
  166.         //s=tan(P/((f-k)/2))/PI*180;//&#209;&#246;í&#251;ììé&#207;μ&#196;1a×¢êí
  167. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-21 09:36:59 | 显示全部楼层
顺序的交换见函数void deal_data(void)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-6-21 09:44:09 | 显示全部楼层

这也太复杂了吧,完全不是我这种菜鸟看得懂的,而且有很多乱码。。。继承还是不要用了,顺序也改好了

        if (sscanf(str,"%lf",&g)){
                func1();
                }
        
       else if ( str[0] == 'J' ) {
                func2();
        }
        
        else if ( str[0] == 'C' ) {
                func3();
        }
       
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-20 02:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表