First commit of Fortran version of GildedRose

This commit is contained in:
Peter M. Clausen committed 2021-05-25 19:52:50 +02:00
1 parent efb82954a7
commit eaa731bb83
5 files changed
+306

No files matched your search

+144
View File
@@ -0,0 +1,144 @@
module GildedRose
implicit none
private
save
public init_item
public print_item
public update_quality
public int2str
integer, parameter, public :: MAX_STR_LEN = 80
type, public :: Item
character(len=MAX_STR_LEN) :: name
integer :: sellIn
integer :: quality
end type
contains
subroutine init_item(it, name, sellIn, quality)
type(Item) :: it
character(len=*) :: name
integer :: sellIn
integer :: quality
it%name = trim(name)
it%sellIn = sellIn
it%quality = quality
end
function int2str( int_val )
implicit none
integer :: int_val
character( int(log10(real(max(abs(int_val),1)))) + 1 + &
(1-sign(1,int_val))/2 ) :: int2str
character(64) :: all_chars
write(all_chars,*) int_val
int2str = trim( adjustl( all_chars ) )
end function
subroutine print_item(it)
type(Item) :: it
write(*,*) trim(it%name), ', ', int2str(it%sellIn), ', ', int2str(it%quality)
end subroutine
subroutine update_quality(items, size)
type(Item), dimension(:) :: items
integer :: size
integer :: i
do i = 1, size
if (items(i)%name /= "Aged Brie" .and. items(i)%name /= "Backstage passes to a TAFKAL80ETC concert" ) then
if (items(i)%quality > 0) then
if (items(i)%name /= "Sulfuras, Hand of Ragnaros" ) then
items(i)%quality = items(i)%quality - 1
endif
endif
else
if (items(i)%quality < 50) then
items(i)%quality = items(i)%quality + 1
if ( items(i)%name =="Backstage passes to a TAFKAL80ETC concert") then
if (items(i)%sellIn < 11) then
if (items(i)%quality < 50) then
items(i)%quality = items(i)%quality + 1
endif
endif
if (items(i)%sellIn < 6) then
if (items(i)%quality < 50) then
items(i)%quality = items(i)%quality + 1
endif
endif
endif
endif
endif
if (items(i)%name /= "Sulfuras, Hand of Ragnaros") then
items(i)%sellIn = items(i)%sellIn - 1
endif
if (items(i)%sellIn < 0) then
if (items(i)%name /= "Aged Brie" ) then
if (items(i)%name /= "Backstage passes to a TAFKAL80ETC concert" ) then
if (items(i)%quality > 0 ) then
if (items(i)%name /= "Sulfuras, Hand of Ragnaros" )then
items(i)%quality = items(i)%quality - 1
endif
endif
else
items(i)%quality = items(i)%quality - items(i)%quality
end if
else
if (items(i)%quality < 50) then
items(i)%quality = items(i)%quality + 1
end if
end if
end if
end do
end subroutine
end module