Δημοσιεύτηκε: 22 Αύγ 2011, 19:11
Ευχαρίστως 
Η δουλειά γίνεται στη συνάρτηση:
Καταρχήν, το ότι loop σταματάει όταν τον i γίνει 0 εξασφαλίζει πως δεν θα πειράξουμε τον 1ο χαρακτήρα του s (δλδ τον s[0]) ενώ το j = rand() % l + 1 με το l ορισμένο ίσο με l = strlen(s)-2 εξασφαλίζει πως μέσα στο loop επιλέγεται ένας τυχαίος αριθμός από το 1 έως τον προτελευταίο ωφέλιμο χαρακτήρα του s (δλδ τον s[ strlen(s) - 2 ] ... μιας και ο s[ strlen(s) -1 ] είναι ο τελευταίος ωφέλιμος χαρακτήρας τους s).
Κατόπιν εναλλάσσουμε τον χαρακτήρα που βρίσκεται στη θέση j ( s[j] ) με τον χαρακτήρα που βρίσκεται στη θέση 1 ( s[1] ) που είναι ο 2ος χαρακτήρας του s (o 1ος είναι ο s[0] ).
Η διαδικασία επαναλαμβάνεται τόσες φορές όσο είναι το πλήθος χαρακτήρων από τον προτελευταίο έως και τον 2ο χαρακτήρα του s (συμπεριλαμβανομένων).
Σημείωση: Για να δίνει διαφορετικούς τυχαίους αριθμούς η rand() κάθε φορά που καλείται, πρέπει πρώτα στη main να έχει ενεργοποιηθεί η γεννήτρια τυχαίων αριθμών της C, καλώντας μία μόνο φορά την: srand( time(NULL) ).
Η δουλειά γίνεται στη συνάρτηση:
- Κώδικας: Επιλογή όλων
// -----------------------------------------------------------------------
r( char *s )
{
int m, j, l=strlen(s)-2, i=l;
while (--i>0)
{
j = rand() % l + 1;
m = s[j];
s[j] = s[1];
s[1] = m;
}
}
Καταρχήν, το ότι loop σταματάει όταν τον i γίνει 0 εξασφαλίζει πως δεν θα πειράξουμε τον 1ο χαρακτήρα του s (δλδ τον s[0]) ενώ το j = rand() % l + 1 με το l ορισμένο ίσο με l = strlen(s)-2 εξασφαλίζει πως μέσα στο loop επιλέγεται ένας τυχαίος αριθμός από το 1 έως τον προτελευταίο ωφέλιμο χαρακτήρα του s (δλδ τον s[ strlen(s) - 2 ] ... μιας και ο s[ strlen(s) -1 ] είναι ο τελευταίος ωφέλιμος χαρακτήρας τους s).
Κατόπιν εναλλάσσουμε τον χαρακτήρα που βρίσκεται στη θέση j ( s[j] ) με τον χαρακτήρα που βρίσκεται στη θέση 1 ( s[1] ) που είναι ο 2ος χαρακτήρας του s (o 1ος είναι ο s[0] ).
Η διαδικασία επαναλαμβάνεται τόσες φορές όσο είναι το πλήθος χαρακτήρων από τον προτελευταίο έως και τον 2ο χαρακτήρα του s (συμπεριλαμβανομένων).
Σημείωση: Για να δίνει διαφορετικούς τυχαίους αριθμούς η rand() κάθε φορά που καλείται, πρέπει πρώτα στη main να έχει ενεργοποιηθεί η γεννήτρια τυχαίων αριθμών της C, καλώντας μία μόνο φορά την: srand( time(NULL) ).