Преобразовать код Ада в его C - PullRequest
1 голос
/ 23 апреля 2010

У меня есть фрагмент кода ada, показанный ниже, который представляет собой простые операторы переключения регистра. Есть ли лучший способ преобразовать это в 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;

Теперь, добавив переключатель и регистр для каждого значения в регистр, я могу выполнить это преобразование, но кажется, что вы делаете код слишком большим. Есть ли другой простой и компактный способ. вопрос не понятен?

Ответы [ 3 ]

4 голосов
/ 23 апреля 2010

Попробуйте:

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 ++;
    }
}
3 голосов
/ 23 апреля 2010
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, который чище моего.

2 голосов
/ 23 апреля 2010
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++;
    }
}
...