Case Studies
Inventory Reorder Case
Table Lookup
A compact inventory case can scan in-memory tables and decide how many units to reorder.
Program
Play the program to choose an item id and compute the matching reorder quantity.
inventory_reorder_case.f90
Replay: real traced execution (multi-file project)
program inventory_reorder_case_demo
implicit none
integer :: ids(3)
integer :: stock(3)
integer :: minimums(3)
integer :: query_id
integer :: i
integer :: reorder
ids = [101, 102, 103]
stock = [5, 12, 2]
minimums = [8, 10, 6]
query_id = 103
reorder = 0
do i = 1, 3
if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
end do
print '(I0, 1X, I0)', query_id, reorder
end program inventory_reorder_case_demo
program inventory_reorder_case_demo
implicit none
integer :: ids(3)
integer :: stock(3)
integer :: minimums(3)
integer :: query_id
integer :: i
integer :: reorder
ids = [101, 102, 103]
stock = [5, 12, 2]
minimums = [8, 10, 6]
query_id = 101
reorder = 0
do i = 1, 3
if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
end do
print '(I0, 1X, I0)', query_id, reorder
end program inventory_reorder_case_demo
program inventory_reorder_case_demo
implicit none
integer :: ids(3)
integer :: stock(3)
integer :: minimums(3)
integer :: query_id
integer :: i
integer :: reorder
ids = [101, 102, 103]
stock = [5, 12, 2]
minimums = [8, 10, 6]
query_id = 102
reorder = 0
do i = 1, 3
if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
end do
print '(I0, 1X, I0)', query_id, reorder
end program inventory_reorder_case_demo
ids ← [101, 102, 103]
10ids = [101, 102, 103]11stock = [5, 12, 2]values this step[101, 102, 103]idsstock ← [5, 12, 2]
10ids = [101, 102, 103]11stock = [5, 12, 2]12minimums = [8, 10, 6]values this step[5, 12, 2]stockminimums ← [8, 10, 6]
11stock = [5, 12, 2]12minimums = [8, 10, 6]13query_id = 103values this step[8, 10, 6]minimumsquery_id ← 103
12minimums = [8, 10, 6]13query_id = 10314reorder = 0values this step103query_idreorder ← 0
13query_id = 10314reorder = 015do i = 1, 3values this step0reorderi ← 1
14reorder = 015do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))values this step1iif (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
15do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end dovalues this step.false.ids(1) == query_idi ← 2
14reorder = 015do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))values this step2iif (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
15do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end dovalues this step.false.ids(2) == query_idi ← 3
14reorder = 015do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))values this step3ireorder ← 4
15do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end dovalues this step4reorder.true.ids(3) == query_idprint '(I0, 1X, I0)', query_id, reorder
17 end do18 print '(I0, 1X, I0)', query_id, reorder19end program inventory_reorder_case_demooutput103 4values this step103query_id4reorder
ids ← [101, 102, 103]
10ids = [101, 102, 103]11stock = [5, 12, 2]values this step[101, 102, 103]idsstock ← [5, 12, 2]
10ids = [101, 102, 103]11stock = [5, 12, 2]12minimums = [8, 10, 6]values this step[5, 12, 2]stockminimums ← [8, 10, 6]
11stock = [5, 12, 2]12minimums = [8, 10, 6]13query_id = 101values this step[8, 10, 6]minimumsquery_id ← 101
12minimums = [8, 10, 6]13query_id = 10114reorder = 0values this step101query_idreorder ← 0
13query_id = 10114reorder = 015do i = 1, 3values this step0reorderi ← 1
14reorder = 015do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))values this step1ireorder ← 3
15do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end dovalues this step3reorder.true.ids(1) == query_idi ← 2
14reorder = 015do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))values this step2iif (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
15do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end dovalues this step.false.ids(2) == query_idi ← 3
14reorder = 015do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))values this step3iif (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
15do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end dovalues this step.false.ids(3) == query_idprint '(I0, 1X, I0)', query_id, reorder
17 end do18 print '(I0, 1X, I0)', query_id, reorder19end program inventory_reorder_case_demooutput101 3values this step101query_id3reorder
ids ← [101, 102, 103]
10ids = [101, 102, 103]11stock = [5, 12, 2]values this step[101, 102, 103]idsstock ← [5, 12, 2]
10ids = [101, 102, 103]11stock = [5, 12, 2]12minimums = [8, 10, 6]values this step[5, 12, 2]stockminimums ← [8, 10, 6]
11stock = [5, 12, 2]12minimums = [8, 10, 6]13query_id = 102values this step[8, 10, 6]minimumsquery_id ← 102
12minimums = [8, 10, 6]13query_id = 10214reorder = 0values this step102query_idreorder ← 0
13query_id = 10214reorder = 015do i = 1, 3values this step0reorderi ← 1
14reorder = 015do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))values this step1iif (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
15do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end dovalues this step.false.ids(1) == query_idi ← 2
14reorder = 015do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))values this step2ireorder ← 0
15do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end dovalues this step0reorder.true.ids(2) == query_idi ← 3
14reorder = 015do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))values this step3iif (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
15do i = 1, 316 if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end dovalues this step.false.ids(3) == query_idprint '(I0, 1X, I0)', query_id, reorder
17 end do18 print '(I0, 1X, I0)', query_id, reorder19end program inventory_reorder_case_demooutput102 0values this step102query_id0reorder
lookup table
Parallel arrays hold item ids, current stock, and minimum stock.
bounded reorder
`max(0, minimums(i) - stock(i))` prevents negative orders.
scan
The loop checks each row and updates the result when the id matches.