中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [共同参与] 批处理编写四项基本运算
作者:
标题: [共同参与] 批处理编写四项基本运算 上一主题 | 下一主题
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『楼 主』:  [共同参与] 批处理编写四项基本运算

要求:(我说的不清楚,举几个例子先)
9-5+(3×5)=
2+(3+0+3)=
(2+1+8)+1=
5-2+(3×5)=
.....
1、随机出现四个数(10以内就行了),对这四个数随机进行加减乘计算(除法因为存在除不尽的问题,暂不考虑)
2、随机出现括号
3、过滤结果为负数的情况
4、对计算结果进行统计计分

2007-1-16 12:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 2 楼』:  

这个随机四项基本运算好像意义不大

2007-1-16 12:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 3 楼』:  


@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET CC=50
SET C0=9
SET C1=+-×÷+-*/()
FOR /L %%c IN (1,1,%CC%) DO (
CALL :R3 %C0%
FOR /L %%i IN (1,1,%C0%) DO (
CALL :RANDOM 10 %%i
CALL :RANDOM 4 X%%i
CALL :R2 X%%i
SET C3=!C3!!al%%i!!VAR%%i!!br%%i!!c!
SET CP=!CP!!al%%i!!VAR%%i!!br%%i!!b!)
SET /A C4=!C3! 2>nul
IF NOT !C4! LEQ 0 (
SET /A LOG1+=1,LOG2+=!C4!
IF %%c LSS 100 (SET E100=.) ELSE SET E100=
IF %%c LSS 10 (SET E10=.) ELSE SET E10=
ECHO ...!E100!!E10!%%c: !CP! = !C4!
)
SET C3=&SET CP=
)
SET /A LOG=LOG2/LOG1
ECHO _______________________________________________
ECHO Stat: %LOG1%/%CC% =^> %LOG2%/%LOG1%=%LOG%
pause>nul
GOTO :EOF

:RANDOM
SET /A VAR%2=%RANDOM%%%%1
IF !VAR%2! EQU 0 GOTO %0
GOTO :EOF

:R2
SET a=!VAR%1!
IF "%1" == "X%C0%" SET b=&&SET c=&&GOTO :EOF
SET /A x=%a%+4
SET b=!C1:~%a%,1!
SET c=!C1:~%x%,1!
GOTO :EOF

:R3
FOR /L %%i IN (0,1,%1) DO SET al%%i=&SET br%%i=
SET /A al0=%RANDOM%%%%1
IF %al0% LEQ 1 (
SET /A al0=1,sd=%1-1) ELSE (
SET sd=%1+1)
SET /A br0=%RANDOM%%%(%sd%-%al0%)
IF %br0% EQU 0 (
SET /A br0=%al0%+1) ELSE (
SET /A br0=%br0%+%al0%)
SET al%al0%=%C1:~8,1%
SET br%br0%=%C1:~9,1%
GOTO :EOF


   此帖被 +11 点积分       点击查看详情   
评分人:【 lxmxn 分数: +10  时间:2007-1-16 16:08
评分人:【 PPdos 分数: +1  时间:2007-1-16 16:38


2007-1-16 15:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
PPdos
高级用户




积分 783
发帖 268
注册 2006-12-26
状态 离线
『第 4 楼』:  

需判断取余是否为零

2007-1-16 16:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 5 楼』:  

具体是指那的?

2007-1-17 07:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

  帖一段容易看得明白一点的代码,换而言之,也就是比较臃肿的代码:
@echo off
setlocal enabledelayedexpansion

:begin
cls
set count=0
set item=0
set times=0
set expression=
set input1=
set input2=
set /p input1=     请指定参与运算的数字的个数(退出请直接按回车):
set /p input2=     请输入算术表达式可能出现的最大条数(退出请直接按回车):
if not defined input1 exit
if not defined input2 exit
cls

:loop
if %times% equ %input2% goto end
set expression=
set count=0
set str1=+-×
for /l %%i in (1,1,%input1%) do call :build
call :insert_sum
if %sum% lss 0 goto loop
set /a total+=%sum%&set /a item+=1
echo 第 %item% 条(%times%/%input2%): %expression:~1%=%sum%
goto loop

:end
set /a aver=%total%/%item%
set /a mod=%total%%%%item%
echo.
echo %item% 条记录的算术平均值是:%total%/%item%=%aver%……%mod%
echo.
echo          按任意键再来一次
pause>nul
goto begin


:build
:: 构造没有括号对的表达式
set /a num=%random%%%10
set /a SN=%random%%%3
set expression=!str1:~%SN%,1!%num%%expression%
goto :eof

:insert_sum
:: 随机插入括号对并计算每个表达式的结果
set /a length=2*%input1%
set /a num1=%random%%%%input1%
if %num1% equ 0 set num1=1
for /l %%i in (1,2,%length%) do (
    set /a count+=1
    if !count! equ %num1% set num1=%%i&goto next
)
:next
set count=0
set /a bg=%num1%+3
set /a remain=(%length%-%bg%)/2+1
if %remain% neq 1 (
    set /a num2=%random%%%%remain%+1
) else set num2=1
for /l %%i in (%bg%,2,%length%) do (
    set /a count+=1
    if !count! equ %num2% set num2=%%i&goto add
)
:add
set /a dif=%num2%-%num1%
set expression=!expression:~0,%num1%!(!expression:~%num1%,%dif%!)!expression:~%num2%!
set sum=%expression:+=+%
set sum=%sum:-=-%
set sum=%sum:×=*%
set /a sum=%sum:~1%
set /a times+=1
goto :eof


   此帖被 +15 点积分       点击查看详情   
评分人:【 everest79 分数: +4  时间:2007-1-17 10:03
评分人:【 lxmxn 分数: +10  时间:2007-1-17 10:59
评分人:【 429499381 分数: +1  时间:2007-1-17 15:25




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-17 08:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netchxing
初级用户





积分 58
发帖 31
注册 2007-1-6
来自 重庆
状态 离线
『第 7 楼』:  

太高深了,不懂!

2007-1-17 10:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
stornager
中级用户

scriptlover


积分 328
发帖 131
注册 2007-3-25
状态 离线
『第 8 楼』:  

好难啊,请楼主想一些简单的方法.菜了也在想??????/

2007-4-2 04:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: