Board logo

标题: [数值计算] 【已解决】批处理文本间交互计算 [打印本页]

作者: JK_m    时间: 2022-5-5 21:47     标题: 【已解决】批处理文本间交互计算

本帖最后由 JK_m 于 2022-5-9 14:56 编辑

考试得分.txt
1,2,3,1,2,1
训练模拟得分.txt
2,3,2,3,2,0
目的:以考试为准检查提高成绩概率,和输出两者相关性报告,【下降得-1分】【平和上升得1分】   [有缺失判平1分]
      考试                                     ①-?,二-1,   ③-2,  ①-3,  ②-1 ,①-2         计做1,1,1,-1,1 ,-1   后面数 减去前数是查看学习提高效果

训练模拟注意以考试为准:    2-?,   3-①,  2-二,  3-③,  2-①  ,0-②               1,1,-1,1,1 ,-1   模拟得分减去对应考试得分查看训练效果
训练提高成绩概率 5/6=0.83     ①-?/2_?=1/1=1   
                                                    二-1/3-①=1/1=1
                                                     ③-2/2-二=1/1=1
                                                     ①-3/3-③=-1/1=-1
                                                    ②-1/2-①=1/1=1
                                                    ①-2/0-②=-1/-1=1

                                                      

完成相关报告
1/1,1/1,1/1,-1/1,1/1,-1/-1=1,1,1,-1,1,1
训练提高成绩概率=正效果5/6组数据 5/6=0.833333

祝天天好心情 谢谢了
作者: flashercs    时间: 2022-5-6 06:08

本帖最后由 flashercs 于 2022-5-9 12:11 编辑
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. cd /d "%~dp0"
  4. set examfile="考试得分.txt"
  5. set trainfile="训练模拟得分.txt"
  6. set recordfile="成绩趋势报告.txt"
  7. set n=0
  8. for /f "usebackq delims=" %%A in (%examfile%) do (
  9.   for %%B in (%%A) do (
  10.     set /a n+=1
  11.     set examscore_!n!=%%B
  12.   )
  13. )
  14. set /a examscoreubound=n
  15. set n=0
  16. for /f "usebackq delims=" %%A in (%trainfile%) do (
  17.   for %%B in (%%A) do (
  18.     set /a n+=1
  19.     set trainscore_!n!=%%B
  20.   )
  21. )
  22. set /a trainscoreubound=n
  23. set prev=0
  24. for /l %%A in (1,1,%examscoreubound%) do (
  25.   @REM echo examscore_%%A=!examscore_%%A!
  26.   set /a subtract=examscore_%%A-prev
  27.   if !subtract! geq 0 (
  28.     set examtrend_%%A=1
  29.   ) else (
  30.     set examtrend_%%A=-1
  31.   )
  32.   set prev=!examscore_%%A!
  33. )
  34. set traintrend_1=1
  35. for /l %%A in (2,1,%trainscoreubound%) do (
  36.   set /a n=%%A-1
  37.   set /a subtract=trainscore_%%A-examscore_!n!
  38.   if !subtract! geq 0 (
  39.     set traintrend_%%A=1
  40.   ) else (
  41.     set traintrend_%%A=-1
  42.   )
  43. )
  44. (
  45. for /l %%A in (1,1,%trainscoreubound%) do (
  46.   if %%A neq %trainscoreubound% (
  47.     <nul set /p "s=!examtrend_%%A!/!traintrend_%%A!,"
  48.   ) else (
  49.     <nul set /p "s=!examtrend_%%A!/!traintrend_%%A!="
  50.   )
  51.   >nul set /a relationresult_%%A=examtrend_%%A/traintrend_%%A
  52. )
  53. set ctr=0
  54. for /l %%A in (1,1,%trainscoreubound%) do (
  55.   <nul set /p "s=!relationresult_%%A!"
  56.   if %%A neq %trainscoreubound% <nul set /p "s=,"
  57.   if !relationresult_%%A! geq 0 set /a ctr+=1
  58. )
  59. set /a ratio=ctr*100/trainscoreubound
  60. echo.
  61. echo 训练提高成绩概率:!ctr!/%trainscoreubound%=!ratio!%%
  62. )>%recordfile%
  63. endlocal
  64. pause
  65. exit /b
复制代码

作者: flashercs    时间: 2022-5-6 09:19

改了一下59行,还是用百分比较好.避免100%时出现0.100的情况.
作者: JK_m    时间: 2022-5-6 13:46

本帖最后由 JK_m 于 2022-5-7 05:51 编辑

111111111111111111111111111111111
作者: JK_m    时间: 2022-5-6 17:34

本帖最后由 JK_m 于 2022-5-7 06:06 编辑

111111111111111111
作者: JK_m    时间: 2022-5-7 05:45

本帖最后由 JK_m 于 2022-5-7 06:05 编辑

回复 3# flashercs


300,301,302,303,304,305,306,307,308,309,301,302,303
300,301,302,303,304,305,306,307,308,309,301,302,303
1/1,1/1,1/1,1/1,1/1,1/1,1/1,1/1,1/1,1/1,-1/1,1/1,1/1
=1,1,1,1,1,1,1,1,1,1,-1,1,1
训练提高成绩概率:12/13=0.92
一样的数据显然倒数第三个是错误的!!
[img]链接:https://pan.baidu.com/s/1ntMilKpmgkq6cMw_S7Xk_g?pwd=1467  提取码:1467[/img]
作者: for_flr    时间: 2022-5-7 10:05

  1. #@&cls&powershell -c "iex(gc '%~0'|out-string)"&pause&exit/b
  2. $examfile='C:\Users\lenovo\Desktop\test\考试得分.txt'
  3. $trainfile='C:\Users\lenovo\Desktop\test\训练模拟得分.txt'
  4. $reportfile='C:\Users\lenovo\Desktop\test\报告.txt'
  5. $exam=(gc $examfile) -split ","
  6. $train=(gc $trainfile) -split ","
  7. $examincrease=$trainincrease=$report=@()
  8. for($i=0;$i -lt $exam.count;$i++){
  9.     if($i -eq 0){$examincrease+="1"}else{
  10. #依次对比上一次考试分数,大于等于上次则“+1”,(首次直接“+1”)
  11.         if($exam[$i] -ge $exam[$i-1]){$examincrease+="1"}else{$examincrease+="-1"}
  12.     }
  13.     if($train[$i] -ge $exam[$i]){$trainincrease+="1"}else{$trainincrease+="-1"}
  14. #训练分数依次对比考试分数,大于等于考试分数则“+1”
  15.     $report+=$examincrease[$i]+"/"+$trainincrease[$i]
  16. #考试对比结果依次与训练对比结果组对
  17. #没看懂题目“1/1,1/1,1/-1,-1/1,1/1,-1/-1=1,1,-1,-1,1,1”这里面等号后的数字咋来的,暂时忽略...
  18. }
  19. "考试提高:"
  20. $examincrease -join ","
  21. "训练提高:"
  22. $trainincrease -join ","
  23. "相关报告:"
  24. $report -join ", "
  25. #这里统计训练提高中的“+1”数量,算概率,不知道有没有理解错。
  26. $increase=($trainincrease -notmatch "-1").count
  27. $successrate=$increase/$trainincrease.count
  28. "{0}","{1}","{2:f3}" -f "训练提高成绩概率:","$increase/$($trainincrease.count)=",$successrate
  29. cmd /c pause
复制代码
训练提高成绩概率 3/5=0.6 ,没看懂这里算式怎么来的。
1/1,1/1,1/-1,-1/1,1/1,-1/-1=1,1,-1,-1,1,1
,没看懂这个等号后面怎么来的。
作者: a80937063    时间: 2022-5-7 12:53

本帖最后由 a80937063 于 2022-5-7 13:07 编辑

回复 7# for_flr


300,301,302,303,304,305,306,307,308,309,301,302,303
300,301,302,303,304,305,306,307,308,309,301,302,303
1/1,1/1,1/1,1/1,1/1,1/1,1/1,1/1,1/1,1/1,-1/1,1/1,1/1
=1,1,1,1,1,1,1,1,1,1,-1,1,1
训练提高成绩概率:12/13=0.92
一样的数据显然倒数第三个是错误的!!注意看图片的箭头变成减号结果放在【/】除号左边
[img]链接:链接:[url]https://pan.baidu.com/s/19oZ8f2yGWLMPDFLp1xglDQ?pwd=1467
提取码:1467[/url]  提取码:1467[/img]
作者: JK_m    时间: 2022-5-8 17:01

回复 2# flashercs


    超过6个数据就出错怎么办你代码
作者: JK_m    时间: 2022-5-8 17:03

回复 7# for_flr


    您的bat闪退
作者: 523066680    时间: 2022-5-8 20:22

1, 1, 1,-1, 1,-1
1, 1,-1, 1, 1,-1
1, 1,-1,-1, 1, 1
训练提高成绩概率: 4/6 = 0.6667

1, 1, 1, 1, 1, 1, 1, 1, 1, 1,-1, 1, 1
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,-1, 1, 1
训练提高成绩概率: 12/13 = 0.9231

作者: JK_m    时间: 2022-5-9 06:44

给各位道歉了,我重新编辑帖子里。不好意思。我没有说清楚逻辑关系
作者: flashercs    时间: 2022-5-9 12:12

回复 9# JK_m


    代码已修改.
作者: JK_m    时间: 2022-5-9 14:22

本帖最后由 JK_m 于 2022-5-10 14:37 编辑

回复 13# flashercs



考试的第一个数据要删除就是结果l




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2