| Joseg |
19 de abril de 2022 19:12 |
Hummmm !
É necessário mais código, teste isto.
Havia muitas considerações a analisar.
No entanto assume que o 1º dia da semana é "Segunda-feira" (Lunes)
Código COBOL:
data division. working-storage section. 01 input-data pic 9(8) value 20220101. 01 integer-of-input-data binary pic 9(8). 01 work-table. 02 work-item occurs 3. 03 work-year binary pic 9(4). 03 work-jan-4 binary pic 9(8). 03 work-first-date binary pic 9(8). 01 work-sub binary pic 9(4). 01 week-for-input-data pic 9(2). procedure division. inicio. perform with test after until input-data = 0 display "Digite a data YYYYMMDD: " with no advancing accept input-data if input-data = 0 exit program else perform calculos display "Nr. da semana da data: " input-data " e " week-for-input-data " do ano: " work-year (work-sub) end-if end-perform exit program . calculos. divide input-data by 10000 giving work-year (2) subtract 1 from work-year (2) giving work-year (1) add 1 to work-year (2) giving work-year (3) perform varying work-sub from 1 by 1 until work-sub > 3 compute work-jan-4 (work-sub) = function integer-of-date(work-year (work-sub) * 10000 + 0104) compute work-first-date (work-sub) =(function integer ((work-jan-4 (work-sub) - 1) / 7)) * 7 + 1 end-perform compute integer-of-input-data = function integer-of-date (input-data) evaluate integer-of-input-data when work-first-date (1) thru (work-first-date (2) - 1) move 1 to work-sub perform calculate-nr-semana when work-first-date (2) thru (work-first-date (3) - 1) move 2 to work-sub perform calculate-nr-semana when other move 3 to work-sub perform calculate-nr-semana end-evaluate . calculate-nr-semana. compute week-for-input-data = (function integer ((integer-of-input-data - work-first-date (work-sub)) / 7)) + 1 .
|