2012-01-28 20 views
7

Sadece Ada numaralamalar ve türleri hakkında öğrendim ve uygulamaya küçük bir program yazmaya karar: Ben eğer deyimi ile ilgili sorun yaşıyorumBir öğenin bir alt türden birine mi ait olduğunu nasıl kontrol edebilirsiniz?

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; 

. DayOfTheWeek'in Weekday alt türünde mi yoksa hafta sonu alt türünün olup olmadığını nasıl kontrol edebilirim?

+0

Sadece bir arkadaş olmak, ancak kodunuz geçerli girdi kabul eder. IRL 0 - 6 aralığını garanti altına almak için bir temsil cümlesi kullanmalı ve bir tam sayı almalısınız, tamsayı türünüzde işaretlenmemiş bir dönüşüm kullanın, geçerli olup olmadığını kontrol edin ve ardından haftasonu/hafta içi alt türlerini kontrol edin. – NWS

+0

Neden bir "Day_Of_The_Week" açık bir şekilde girilmiyor? 'paket Day_Of_The_Week_Text_IO yeni Ada.Text_IO.Enumeration_IO (Day_Of_The_Week);' ve sonra 'Get (Selected_Day); Skip_Line; ' –

cevap

8

Sen Ayrıca, ’Val değil ’Pos

selected_day := Day_Of_The_Week'val(selected_day_value); 

ve ikinci Put_Line kelimelerin bir göz alabilir istiyorum
function is_Weekday (dayOfTheWeek: in Day_Of_The_Week) return Boolean is 
begin 
    return dayoFTheWeek in Weekday; 
end is_Weekday; 

istiyorum!

2

Bunu kontrol etmek için bir fonksiyona ihtiyacınız yoktur. Bu durumda, bir işlev yalnızca aşağıdakileri belirler:

if Selected_Day in Weekday then 
    do stuff.. 
else 
    do other stuff... 
end if;