2012-01-28 15 views
7

Tôi chỉ biết về Enums và loại trong Ada và quyết định viết một chương trình nhỏ để thực hành:Làm cách nào để kiểm tra xem một phần tử thuộc về một loại phụ hay một phần tử phụ khác?

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; 

Tôi đang gặp rắc rối với các câu lệnh if. Làm thế nào tôi có thể kiểm tra xem dayOfTheWeek có ở loại phụ trong tuần hoặc loại phụ cuối tuần không?

+0

Chỉ cần là người đi bộ, nhưng mã của bạn giả định đầu vào hợp lệ. IRL bạn nên sử dụng mệnh đề biểu diễn trên enum của bạn để đảm bảo phạm vi 0 - 6, và nhận số nguyên, sử dụng một chuyển đổi không được kiểm tra cho kiểu số nguyên của bạn, kiểm tra nó là hợp lệ, và sau đó kiểm tra các kiểu con cuối tuần/ngày trong tuần. – NWS

+0

Tại sao không nhập 'Day_Of_The_Week' một cách rõ ràng? 'gói Day_Of_The_Week_Text_IO là Ada.Text_IO.Enumeration_IO mới (Day_Of_The_Week);' và sau đó 'Nhận (Selected_Day); Skip_Line; ' –

Trả lời

8

Bạn muốn

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

Ngoài ra, bạn muốn ’Val không ’Pos trong

selected_day := Day_Of_The_Week'val(selected_day_value); 

và bạn có thể có một cái nhìn tại các từ trong thứ hai Put_Line!

2

Bạn không cần chức năng để kiểm tra điều này. Trong trường hợp này, chức năng chỉ che khuất những gì sẽ xảy ra:

if Selected_Day in Weekday then 
    do stuff.. 
else 
    do other stuff... 
end if; 
Các vấn đề liên quan