岱岳区网站设计网站怎么做能赚钱
news/
2025/9/24 0:21:24/
文章来源:
岱岳区网站设计,网站怎么做能赚钱,网站开发名词解释,wordpress 插件不生效编制一个简单日历查询工具#xff0c;输入年、月、日#xff0c;能够判断当日的星期数#xff0c;并进行输出#xff0c;数据的输入和结果的输出要有必要的提示#xff0c;且提示独占一行。
查阅资料
经过查阅资料#xff0c;发现有两个相关的算法可以解决这个问题输入年、月、日能够判断当日的星期数并进行输出数据的输入和结果的输出要有必要的提示且提示独占一行。
查阅资料
经过查阅资料发现有两个相关的算法可以解决这个问题 蔡勒公式 W[C/4]−2CY[Y/4][13∗(M1)/5]D−1W[C/4]-2CY[Y/4][13*(M1)/5]D-1 W[C/4]−2CY[Y/4][13∗(M1)/5]D−1 公式中的符号含义如下 W星期 W对7取模得0-星期日1-星期一2-星期二3-星期三4-星期四5-星期五6-星期六需要注意的是对负数的处理C世纪-1前两位数Y年后两位数M月M大于等于3小于等于14即在蔡勒公式中某年的1、2月要看作上一年的13、14月来计算比如2003年1月1日要看作2002年的13月1日来计算D日[ ]代表取整即只要整数部分。 基姆拉尔森计算公式 Week(d2∗m3∗(m1)/5yy/4−y/100y/4001)mod7Week (d2*m3*(m1)/5yy/4-y/100y/4001) mod 7 Week(d2∗m3∗(m1)/5yy/4−y/100y/4001)mod7 公式中的符号含义如下 y : 年份四位数m: 月份m大于等于3小于等于14某年的1、2月要看作上一年的13、14月来计算比如2003年1月1日要看作2002年的13月1日来计算d : 日期当Week0Week0Week0的时候为周日 设计构思
基姆拉尔森计算公式的输入更加友好因此我决定使用基姆拉尔森计算公式解决问题。
公式主要涉及加减乘除四则运算输入主要是年月日三个数字。输出为星期数。
因此主要的工作有
提示用户输入年月日并进行错误检查检查是否是数字位数是否错误检查月份是否在正确的范围内0~12)检查日期是否在正确的范围内 是否小于1是否大于该月的最大日期是否是闰月如果是闰月需要特别对待 使用基姆拉尔森计算公式计算星期数输出结果并询问是否再次输入 流程图 实现代码
ASSUME cs:CODE, ds:DATA, ss:STACK DATA SEGMENTS_Year db 5,0,5 dup(0)S_Month db 3,0,3 dup(0)S_Day db 3,0,3 dup(0)YearIn db please input year(eg:2020):$MonthIn db please input month(eg:05):$DayIn db please input day(eg:01):$WrongInfo db your input is illegal,please input again!$ReaptInfo db Would you like to check again?(Y/n) $year dw 0month db 0day db 0Max_Day db 0,31,28,31,30,31,30,31,31,30,31,30,31tmp dw 0week1 db Monday$week2 db Tuesday$week3 db Wednesday$week4 db Thursday$week5 db Friday$week6 db Saturday$week7 db Sunday$hint db is $DATA ENDSSTACK SEGMENTdb 256 dup(0)
STACK ENDSCODE SEGMENTNEXTLINE PROC NEAR ;输出换行mov ah, 02Hmov dl, 0DHint 21Hmov dl, 0AHint 21Hret
NEXTLINE ENDPMAIN PROC
START:mov ax,DATAmov ds,ax ;初始化
INPUTYEAR:call NEXTLINElea dx, YearIn ;提示输入yearmov ah, 09Hint 21Hlea dx, S_Year ;读入yearmov ah, 0AHint 21Hcall NEXTLINE ;换行;检查Year是否合法mov cl, S_Year1 ;将实际长度保存到cx中mov ch, 0cmp cx, 4 ;检查长度同时计算year的值jnz WRONGYEARmov year, 0mov si, 2
CHECKYEAR:;判断是否是数字mov dl, S_Year[si]cmp dl, 0jl WRONGYEARcmp dl, 9jg WRONGYEAR;是数字计算yearmov ax, yearmov bx, 10mul bxmov dl, S_Year[si]sub dl, 0mov dh, 0add ax, dxmov year, axinc siloop CHECKYEAR;year计算完毕jp INPUTMONTHWRONGYEAR:lea dx, WrongInfo ;输出错误信息mov ah, 09Hint 21Hcall NEXTLINE ;换行jp INPUTYEAR ;重新输入INPUTMONTH:lea dx, MonthIn ;提示输入monthmov ah, 09Hint 21Hlea dx, S_Month ;读入monthmov ah, 0AHint 21Hcall NEXTLINE ;换行;检查Month是否合法mov cl, S_Month1 ;将实际长度保存到cx中mov ch, 0cmp cx, 2 ;检查长度同时计算month的值jnz WRONGMONTHmov month, 0mov si, 2
CHECKMONTH:;判断是否是数字mov dl, S_Month[si]cmp dl, 0jl WRONGMONTHcmp dl, 9jg WRONGMONTH;是数字计算monthmov al, monthmov bl, 10mul blsub dl, 0add al, dlmov month, alinc siloop CHECKMONTH;month计算完毕;判断month是否在合法范围内mov dl, monthcmp dl, 1jl WRONGMONTHcmp dl, 12jg WRONGMONTHjmp INPUTDAYWRONGMONTH:lea dx, WrongInfo ;输出错误信息mov ah, 09Hint 21Hcall NEXTLINE ;换行jmp INPUTMONTH ;重新输入INPUTDAY:lea dx, DayIn ;提示输入daymov ah, 09Hint 21Hlea dx, S_Day ;读入daymov ah, 0AHint 21Hcall NEXTLINE ;换行;检查day是否合法mov cl, S_Day1 ;将实际长度保存到cx中mov ch, 0cmp cx, 2 ;检查长度同时计算day的值jnz WRONGDAY_TMPmov si, 2mov day, 0
CHECKDAY:;判断是否是数字mov dl, S_Day[si]cmp dl, 0jl WRONGDAY_TMPcmp dl, 9jg WRONGDAY_TMP;是数字计算daymov al, daymov bl, 10mul blsub dl, 0add al, dlmov day, alinc siloop CHECKDAY;day计算完毕;检查day是否在合法范围内mov dl, daycmp dl, 1jl WRONGDAYmov cl, monthmov ch, 0mov si, cxcmp dl, Max_Day[si] ;检查有没有该月份最大的一天jg CHECKLEAP ;检查是不是闰月jmp INPUTEND ;输入结束WRONGDAY_TMP:jmp WRONGDAYCHECKLEAP:mov dh, monthcmp dh, 2jne WRONGDAY ;如果不是2月就肯定不对;判断是不是闰年if(year%40 year%100!0 || year%4000) 是闰年mov ax, yearmov dx, 0mov bx, 400div bxcmp dx, 0je ISLEAP ;可以被400整除说明是闰月mov ax, yearmov dx, 0mov bx, 4div bxcmp dx, 0jne ISNOTLEAP ;不能被4整除说明不是闰月mov ax, yearmov dx, 0mov bx, 100div bxcmp dx, 0je ISNOTLEAP ;能被100整除说明不是闰月
ISLEAP:mov dl, daycmp dl, 29 jg WRONGDAY ;比29还大jmp INPUTEND ;输入结束ISNOTLEAP:
WRONGDAY:lea dx, WrongInfo ;输出错误信息mov ah, 09Hint 21Hcall NEXTLINE ;换行jmp INPUTDAY ;重新输入INPUTEND: ;输入合法开始使用基姆拉尔森公式计算答案mov dl, monthcmp dl, 1je ADDMONTHcmp dl, 2je ADDMONTHjmp CALCULATEADDMONTH:mov al, monthadd al, 12mov month, almov ax, yearsub ax, 1mov year, axCALCULATE:mov bl, daymov bh, 0 ;bx : dayadd bl, monthadd bl, month ;bx 2*monthmov al, monthadd al, 1mov ah, aladd al, ah add al, ah ;al : 3*(month1)mov ah, 0mov cl, 5div clmov ah, 0 ;ax : al/5add bx, ax ;bx axadd bx, year ;bx yearmov ax, yearmov dx, 0mov cx, 4div cxadd bx, ax ;bx year/4mov ax, yearmov dx, 0mov cx, 100div cxsub bx, ax ;bx - year/100mov ax, yearmov dx, 0mov cx, 400div cxadd bx, ax ;bx year/400add bx, 1 ;bx 1mov ax, bxmov dx, 0mov cx, 7div cx ;bx % 7mov bx, dx;基姆拉尔森公式计算完毕OUTPUT:call NEXTLINEmov al, S_Year1add al, 2mov ah, 0mov si, ax mov S_Year[si], $ ;加上字符串终结符$lea dx, S_Year2 ;输出年份mov ah, 09Hint 21Hmov dl, \mov ah, 02Hint 21Hmov al, S_Month1add al, 2mov ah, 0mov si, ax mov S_Month[si], $lea dx, S_Month2mov ah, 09Hint 21Hmov dl, \mov ah, 02Hint 21Hmov al, S_Day1add al, 2mov ah, 0mov si, ax mov S_Day[si], $lea dx, S_Day2mov ah, 09Hint 21Hlea dx, hintmov ah, 09Hint 21Hmov al, blcmp al, 0jnz D1lea dx, week7mov ah, 09Hint 21Hjmp D7INPUTYEAR_TMP1:call NEXTLINEjmp INPUTYEARD1: cmp al, 1jnz D2lea dx, week1mov ah, 09Hint 21Hjmp D7
D2:cmp al, 2jnz D3lea dx, week2mov ah, 09Hint 21Hjmp D7
D3:cmp al, 3jnz D4lea dx, week3mov ah, 09Hint 21Hjmp D7
D4:cmp al, 4jnz D5lea dx, week4mov ah, 09Hint 21Hjmp D7
D5:cmp al, 5jnz D6lea dx, week5mov ah, 09Hint 21Hjmp D7
D6:cmp al, 6jnz D7lea dx, week6mov ah, 09Hint 21H
D7:call NEXTLINEcall NEXTLINElea dx, ReaptInfo ;输出重复查询信息mov ah, 09Hint 21Hmov ah, 01H ;输入字符int 21Hcmp al, Yjz INPUTYEAR_TMP1 ;跳转到中继点1cmp al, yjz INPUTYEAR_TMP1 ;跳转到中继点1mov ax, 4C00H ;程序结束int 21H
MAIN ENDPCODE ENDS
END START 运行结果
我将自己运行结果的视频上传在CSDN上啦传送门
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914343.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!