[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 批处理版一元多项式相加算法

本帖最后由 老刘1号 于 2020-4-29 11:28 编辑
  1. @Echo Off
  2. Setlocal Enabledelayedexpansion
  3. Title 【老刘编写】一元多项式相加算法
  4. Path "%~dp0"
  5. If Not Exist "Queue_LSS.Bat" (
  6. Echo "Queue_LSS"缺失!
  7. Pause&Exit
  8. )
  9. Set "Queue=Call Queue_LSS"
  10. Echo 多项式格式:系数1_指数1 系数2_指数2 ...
  11. Echo 要求:指数为整数且递减,但不必相邻。
  12. Echo 多项式例:3_5 4_4 -1_3 2_1 -1_0
  13. Echo 多项式例:2_4 1_3 -7_2 1_1
  14. Set /P Polynomial_1_String=输入多项式1:
  15. Set /P Polynomial_2_String=输入多项式2:
  16. Rem 生成队列。
  17. !Queue! :Init Polynomial_1
  18. For %%a In (!Polynomial_1_String!) Do (
  19. Set _TMP_Data1_=%%a
  20. !Queue! :Enqueue Polynomial_1 _TMP_Data1_
  21. )
  22. !Queue! :Init Polynomial_2
  23. For %%a In (!Polynomial_2_String!) Do (
  24. Set _TMP_Data2_=%%a
  25. !Queue! :Enqueue Polynomial_2 _TMP_Data2_
  26. )
  27. Rem 相加。
  28. !Queue! :Dequeue Polynomial_1 _TMP_Data1_
  29. !Queue! :Dequeue Polynomial_2 _TMP_Data2_
  30. :Loop
  31. Rem echo !_TMP_Data1_! !_TMP_Data2_!
  32. For /f "Tokens=1-4 Delims=_ " %%a In ("!_TMP_Data1_! !_TMP_Data2_!") Do (
  33. Set /A _TMP_Coef1_=%%a,_TMP_Expon1_=%%b
  34. Set /A _TMP_Coef2_=%%c,_TMP_Expon2_=%%d
  35. )
  36. rem Set _TMP_Expon
  37. If !_TMP_Expon1_! Gtr !_TMP_Expon2_! (
  38. Echo !_TMP_Expon1_!次项系数:!_TMP_Coef1_!
  39. !Queue! :Dequeue Polynomial_1 _TMP_Data1_
  40. Rem echo !ErrorLevel!←
  41. If !Errorlevel! Neq 0 (
  42. Rem 队1已清空,输出队2。
  43. For /f "Tokens=1-2 Delims=_ " %%a In ("!_TMP_Data2_!") Do (
  44. Echo %%b次项系数:%%a
  45. )
  46. rem echo 2
  47. Call :PrintLast Polynomial_2
  48. Pause&Exit
  49. )
  50. rem echo 3
  51. ) Else If !_TMP_Expon1_! Lss !_TMP_Expon2_! (
  52. Echo !_TMP_Expon2_!次项系数:!_TMP_Coef2_!
  53. !Queue! :Dequeue Polynomial_2 _TMP_Data2_
  54. If !Errorlevel! Neq 0 (
  55. Rem 队2已清空,输出队1。
  56. For /f "Tokens=1-2 Delims=_ " %%a In ("!_TMP_Data1_!") Do (
  57. Echo %%b次项系数:%%a
  58. )
  59. Call :PrintLast Polynomial_1
  60. Pause&Exit
  61. )
  62. ) Else (
  63. Set /A _TMP_CoefLast=_TMP_Coef1_+_TMP_Coef2_
  64. Echo !_TMP_Expon1_!次项系数:^(!_TMP_Coef1_!^)+^(!_TMP_Coef2_!^)=!_TMP_CoefLast!
  65. !Queue! :Dequeue Polynomial_1 _TMP_Data1_
  66. If !Errorlevel! Neq 0 (
  67. Rem 队1已清空,输出队2。
  68. Call :PrintLast Polynomial_2
  69. Pause&Exit
  70. )
  71. !Queue! :Dequeue Polynomial_2 _TMP_Data2_
  72. If !Errorlevel! Neq 0 (
  73. Rem 队2已清空,输出队1。
  74. Rem 由于刚才队1的一个元素出队,所以在这里先输出。
  75. For /f "Tokens=1-2 Delims=_ " %%a In ("!_TMP_Data1_!") Do (
  76. Echo %%b次项系数:%%a
  77. )
  78. Call :PrintLast Polynomial_1
  79. Pause&Exit
  80. )
  81. )
  82. Goto :Loop
  83. :PrintLast
  84. rem echo 4
  85. !Queue! :Dequeue "%~1" _TMP_Data_
  86. If !ErrorLevel! Equ 0 (
  87. For /f "Tokens=1-2 Delims=_ " %%a In ("!_TMP_Data_!") Do (
  88. Echo %%b次项系数:%%a
  89. )
  90. Goto :PrintLast
  91. )
  92. Goto :Eof
复制代码
Queue_LSS.BAT:批处理数据结构库
1

评分人数

    • bbaa: 太强了技术 + 1

返回列表