2010-04-23 51 views
1

我有低於其示出了一塊Ada代碼是一個簡單的開關殼體statements.Is那裏通過將切換到此轉換成C.轉換的阿達碼到其C

  for I in 1..100 loop 
      case I is 
       when 100 => 
        Dollars := Dollars + 1; 
       when 25|50|75 => 
        Quarters := Quarters + 1; 
       when 10|20|30|40|60|70|80|90 => 
        Dimes := Dimes + 1; 
       when 5|15|35|45|55|65|85|95 => 
        Nickles := Nickles + 1; 
       when others => 
        Pennies := Pennies + 1; 
      end case; 
     end loop; 

現在任何更好的方法並在案例中的每個值的情況下,我可以做這種轉換,但似乎tyo使代碼太大。是否有anywa其他簡單和緊湊的方式。請回到我的問題,如果不清楚?

回答

4

嘗試:

for(i=1;i<=100;i++) { 
    if(i == 100) { 
     dollars++; 
    }else if(i % 25 == 0) { 
     quarters ++; 
    }else if(i % 10 == 0) { 
     dimes ++; 
    }else if(i % 5 == 0) { 
     nickles ++; 
    }else{ 
     pennies ++; 
    } 
} 
+0

@ unicornaddict..Thats一個很好的one.But是無論如何療法,我們可以使用交換機和case語句做到這一點。 – maddy 2010-04-23 11:08:31

+0

@maddy:如果你想要一個基於開關的答案,Marcelo Cantos有一個答案。你只需要添加一個'default:pennies ++;'。 – codaddict 2010-04-23 11:13:00

+0

感謝您的version.That應該非常感激。 – maddy 2010-04-23 11:17:46

3
case 100: 
    ++Dollars; 
    break; 
case 25: case 50: case 75: 
    ++Quarters; 
    break; 
case 10: case 20: case 30: case 40: case 60: case 70: case 80: case 90: 
    ++Dimes; 
    break; 
// ... 

不太漂亮,但仍然有效。如果性能很高,你會想要比較@ unicornaddict的答案的效率,這個答案比我的更清晰。

+0

@Marcelo Cantos - THANK UI猜這就是我需要的。我只想要完美的轉換而不用擔心表演等。 。 – maddy 2010-04-23 11:10:10

+0

這是正確的答案。如果我是C人,爲了清晰起見,我仍然會將案例放在他們自己的路線上,但這是正確的表述。 – 2010-04-23 17:47:05

2
for (i = 1; i <= 100; i++) 
{ 

    if (i == 100) 
    { 
     Dollars++; 
    } 
    else if (i % 25 == 0) 
    { 
     Quarters++; 
    } 
    else if (i % 10 == 0) 
    { 
     Dimes++; 
    } 
    else if (i % 5 == 0) 
    { 
     Nickles++; 
    } 
    else 
    { 
     Pennies++; 
    } 
} 
+0

哦太慢了;( – evilpie 2010-04-23 11:11:40