User Tools

Site Tools


qna:misc:good-practices:cycling-numbers

Δημιουργία κυκλικής ακολουθίας αριθμών 0 ως Ν (και ξανά 0..Ν)

Μία τέτοια ακολουθία δημιουργείται με εύκολο τρόπο βασιζόμενη στην ακολουθία των φυσικών αριθμών. Αρκεί να παρατηρήσουμε ότι στο εύρος 0 ως Ν κινούνται και τα υπόλοιπα της διαίρεσης ενός αριθμού με το Ν+1. Αυτό δεν είναι ένα αυθαίρετο κόλπο. Βασίζεται σε έναν ολόκληρο κλάδο των μαθηματικών την αριθμητική υπολοίπων.

Άρα μπορούμε να έχουμε έναν κώδικα όπως ο ακόλουθος:

int N = 4;
for (int i=0; i<1000000; i++) {  // Μια συνεχόμενη ακολουθία αριθμών
    int c = i % (N+1);           // και αυτή η μεταβλητή είναι πάντα από 0 έως Ν.
                                 // Όταν το i είναι πολλαπλάσιο του Ν+1, τότε το 
                                 // υπόλοιπο μηδενίζεται και ξεκινά η ακολουθία ξανά
    // εδώ μπαίνει ο κώδικας
}

Δείτε ως παράδειγμα πως προκύπτουν οι τιμές των i και c αν το Ν είναι 4, άρα το Ν+1 θα είναι 5.

i :  0  1  2  3  4  5  6  7  8  9 10 11 12 . . .
c :  0  1  2  3  4  0  1  2  3  4  0  1  2 . . .

Για τις πιο σπάνιες περιπτώσεις που ο κώδικας μέσα στο for δεν χρησιμοποιεί την μεταβλητή i καθόλου και υπάρχει κάποια άλλη συνθήκη τερματισμού (που δεν μπορεί να αφορά το c), τότε το παραπάνω παράδειγμα μπορεί να γραφεί ως:

int N = 4;
for (int c=0; /* κάποια άλλη συνθήκη τερματισμού */ ; c = (c+1)%(N+1) ) {
    // εδώ μπαίνει ο κώδικας
}

ή απλούστερα:

int N = 4;
for (int i=0, c=0; i<1000000; i++, c++;) {
    if (c == N+1) { c = 0; }
    // εδώ μπαίνει ο κώδικας
}
qna/misc/good-practices/cycling-numbers.txt · Last modified: 2021/04/07 17:53 by xallos