2012-01-28 47 views
7

我剛剛得知枚舉和類型的Ada,並決定寫一個小程序,做法:如何檢查一個元素是否屬於一個子類型或另一個子類型?

with Ada.Text_IO;      use Ada.Text_IO; 
with Ada.Integer_Text_IO;  use Ada.Integer_Text_IO; 

procedure Day is 

    type Day_Of_The_Week is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); 

    subtype Weekday is Day_Of_The_Week range Monday..Friday; 

    subtype Weekend is Day_Of_The_Week range Saturday..Sunday; 

     function is_Weekday (dayOfTheWeek: in Day_Of_The_Week) return Boolean is 
     begin 
      if(--?--) 
     end is_Weekday; 

    selected_day_value : Integer; 
    selected_day    : Day_Of_The_Week; 

begin 
    Put_Line("Enter the number co-responding to the desired day of the week:"); 
    Put_Line("0 - Monday"); 
    Put_Line("1 - Tuesday"); 
    Put_Line("2 - Wednesday"); 
    Put_Line("3 - Thursday"); 
    Put_Line("4 - Friday"); 
    Put_Line("5 - Saturday"); 
    Put_Line("6 - Sunday"); 
    Get(selected_day_value); 
    selected_day = Day_Of_The_Week'pos(selected_day_value); 

    if(is_Weekday(selected_day)) 
     Put_Line(Day_Of_The_Week'Image(selected_day) & " is a weekday."); 
    else 
     Put_Line(Day_Of_The_Week'Image(selected_day) & " is a weekday."); 

end Day; 

我在與if語句的麻煩。如何檢查dayOfTheWeek是否在Weekday子類型或週末子類型中?

+0

只是一個迂迴,但您的代碼假定有效的輸入。 IRL你應該在你的枚舉上使用一個表達式來保證範圍爲0-6,並獲得一個整數,對你的整數類型使用未經檢查的轉換,檢查它是否有效,然後檢查週末/週日子類型。 – NWS 2012-01-30 09:43:05

+0

爲什麼不直接輸入'Day_Of_The_Week'?包裹Day_Of_The_Week_Text_IO是新的Ada.Text_IO.Enumeration_IO(Day_Of_The_Week);'然後 'Get(Selected_Day); Skip_Line;' – 2013-10-12 08:30:23

回答

8

你想

function is_Weekday (dayOfTheWeek: in Day_Of_The_Week) return Boolean is 
begin 
    return dayoFTheWeek in Weekday; 
end is_Weekday; 

而且,你要’Val’Pos

selected_day := Day_Of_The_Week'val(selected_day_value); 

,你不妨來看看在第二Put_Line的話!

2

你不需要一個函數來檢查這個。在這種情況下,函數只會模糊所發生的事情:

if Selected_Day in Weekday then 
    do stuff.. 
else 
    do other stuff... 
end if; 
相關問題