Реализация циклов из псевдокода - PullRequest
0 голосов
/ 23 февраля 2010

Мне было интересно, может ли кто-нибудь подсказать мне, как реализовать этот цикл в следующем псевдокоде:

8: петля
9: пока f [0] = 0 до
10: для i = 1 до N сделать
11: f [i ¡1] = f [i]
12: c [N + 1 - i] = c [N - i]
13: конец для
14: f [N] = 0
15: с [0] = 0
16: k = k + 1
17: конец, пока
18: если deg (f) = 0, то
19: перейти к шагу 32
20: конец, если
......... ...... ....
31: концевой контур

Мой вопрос заключается в том, как мне реализовать цикл, который начинается в строке 8 и заканчивается 31; Меня устраивают выражения между строками 8–31, но какой цикл я использую в строке 8 и какие условия я задаю для цикла?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2010

Это бесконечный цикл. Нет условий, просто цикл навсегда. Единственный выход - перейти к шагу 19. В языках, подобных C, вы можете написать это как while (true) или for (;;):

for (;;) {
    // ...

    if (deg(f) == 0) {
        goto afterLoop;
    }

    // ...
}

afterLoop:
// ...

goto нахмурился, хотя. Было бы лучше заменить goto Step 32 на оператор break, который немедленно выходит из цикла:

for (;;) {
    // ...

    if (deg(f) == 0) {
        break;
    }

    // ...
}

Для чего стоит, если у вас не было шагов 21-30, вы можете использовать цикл do / while, где условие цикла идет внизу цикла вместо вершины:

do {
    // ...
}
while (deg(f) != 0);

Это сработало бы, если строки 18-20 были последними в цикле. Поскольку это не так, похоже, вариант №2 - единственный вариант.

1 голос
/ 23 февраля 2010

Если вы собираетесь писать псевдокод с такими подробностями, вы можете написать на целевом языке. Псевдокод должен быть гораздо более широкой кистью - примерно так (не относится к вашему коду):

for each bank account
   check balance as of last month
   if balance greater than promotion limit
      send out valued customer pack
   endif
endfor
...