Στην γλώσσα προγραμματισμού C, οι δομές επανάληψης είναι οι εξής:
while (<expresion>)
{
commands
}
στην οποία όσο ισχύει η συνθήκη τόσο εκτελούνται οι εντολές. Αν αρχικά δεν ισχύει η συνθήκη οι εντολές δεν θα εκτελεστούν ποτέ.
do
{
commands
}
while (<expression>);
Η λειτουργία της είναι ίδια με την while () {} μόνο που τώρα οι εντολές θα εκτελεστούν πρώτα μία φορά σίγουρα και μετά θα γίνει ο έλεγχος.
for (ex1, ex2, ex3)
{
commands
}
H δομή αυτή εκτελεί τις εντολές όσες φορές του ορίσουμε εμείς. Πχ, αν θέλουμε 10 επαναλήψεις αρκεί συντάξουμε την εντολή κάπως έτσι.
for (i=0; i<10; i++)
{
}
i++ σημαίνει i=i+1;
και το i<10 είναι ουσιαστικά συνθήκη όπως αυτή στην while.
Ένα καλό παράδειγμα για τις δομές επανάληψης είναι η άσκηση με τους συνδυασμούς αριθμών.
Ο χρήστης θα δίνει έναν αριθμό N και το πρόγραμμα θα εμφανίζει όλους τους συνδυασμούς αριθμών (όπως ορίζονται από τα μαθηματικά) από 1 έως Ν.
πχ. για Ν=5
Combinations of 4 on set [1...5] :
1 . : 1 , 2 , 3 , 4
2 . : 1 , 2 , 3 , 5
3 . : 1 , 2 , 4 , 5
4 . : 1 , 3 , 4 , 5
5 . : 2 , 3 , 4 , 5
_____________ >
 
 
 
while (<expresion>)
{
commands
}
στην οποία όσο ισχύει η συνθήκη τόσο εκτελούνται οι εντολές. Αν αρχικά δεν ισχύει η συνθήκη οι εντολές δεν θα εκτελεστούν ποτέ.
do
{
commands
}
while (<expression>);
Η λειτουργία της είναι ίδια με την while () {} μόνο που τώρα οι εντολές θα εκτελεστούν πρώτα μία φορά σίγουρα και μετά θα γίνει ο έλεγχος.
for (ex1, ex2, ex3)
{
commands
}
H δομή αυτή εκτελεί τις εντολές όσες φορές του ορίσουμε εμείς. Πχ, αν θέλουμε 10 επαναλήψεις αρκεί συντάξουμε την εντολή κάπως έτσι.
for (i=0; i<10; i++)
{
}
i++ σημαίνει i=i+1;
και το i<10 είναι ουσιαστικά συνθήκη όπως αυτή στην while.
Ένα καλό παράδειγμα για τις δομές επανάληψης είναι η άσκηση με τους συνδυασμούς αριθμών.
Ο χρήστης θα δίνει έναν αριθμό N και το πρόγραμμα θα εμφανίζει όλους τους συνδυασμούς αριθμών (όπως ορίζονται από τα μαθηματικά) από 1 έως Ν.
πχ. για Ν=5
Combinations of 4 on set [1...5] :
1 . : 1 , 2 , 3 , 4
2 . : 1 , 2 , 3 , 5
3 . : 1 , 2 , 4 , 5
4 . : 1 , 3 , 4 , 5
5 . : 2 , 3 , 4 , 5
_____________ >
Εντολές
Προεπεξεργαστή & Δήλωση μεταβλητών 
                         
| 
#include
   <stdio.h> 
    
int
   i,j,m,n; //μετρητές για τους 4 αριθμούς  
    
int
   N; //ο αριθμός που διαβάζεται 
    
int
   pl=0; //το πλήθος των τετράδων που
   εμφανίζοτνται 
    | 
Αρχικά
δίνεται από τον χρήστη το Ν ταυτόχρονα
με τον έλεγχο εγκυρότητας έτσι ώστε ο
αριθμός αυτός να είναι μεγαλύτερος ή
ίσος του 4 και εμφανίζεται το μήνυμα
εκκίνησης του προγράμματος.
code
                                                                     
                             
| 
main() 
{ 
do
   { 
    
 printf
   ("Give N:\n"); 
    
 scanf
   ("%d", &N ); 
    
 }
   
    
while
   (N<4); 
printf
   ("Compinations of 4 on set [1...%d] : \n", N); 
    | 
Οι τιμές
για τον κάθε αριθμό της τετράδας θα
δίνονται από τις μεταβλητές i,j,m,n
αντίστοιχα, οι οποίες θα παίρνουν τις
τιμές τους μέσω του βρόγχου επανάληψης
for. 
Η 
μεταβλητή n θα δείχνει τον τελευταίο
αριθμό που θα εμφανίζεται κάθε φορά.
Για να αλλάξει το τρίτο ψηφίο όμως πρέπει
το τέταρτο να φτάσει την μέγιστη δυνατή
τιμή του  γι αυτό ο βρόγχος for που αφορά
το n θα είναι εμφωλευμένος σε όλους
τους άλλους.
Το ίδιο
ακριβώς ισχύει και για τους υπόλοιπους
αριθμούς. 
Μελετώντας
το παράδειγμα της εκφώνησης (για Ν=5)
διαπιστώνουμε ότι το τελευταίο ψηφίο
φτάνει μέχρι το Ν (=5), το προτελευταίο
μέχρι το Ν-1 (=4), το δεύτερο μέχρι το Ν-2
(=3) και το πρώτο μέχρι το Ν-3 (=2). 
1 . : 1 ,
2 , 3 , 4 
2 . : 1 ,
2 , 3 , 5 
3 . : 1 ,
2 , 4 , 5 
4 . : 1 ,
3 , 4 , 5 
5 . : 2
, 3 , 4 , 5 
Η
ιδιότητα αυτή ισχύει για οποιοδήποτε
Ν.  Συνεπώς οι αριθμοί N-3, Ν-2, Ν-1, Ν θα
αποτελούν το όριο για κάθε βρόγχο for. 
H αρχική
τιμή κάθε βρόγχου επανάληψης θα είναι
οι τιμές 1,2,3,4 αφού ο πρώτος συνδυασμός
είναι πάντα αυτός. 
Η μέχρι
εδώ υλοποίηση επιτρέπει την εμφάνιση
διπλών ψηφίων και την εμφάνιση ανάποδων
ψηφίων (πχ 2,3,5,4).
Γι αυτό
σε κάθε εμφωλευμένη for θα υπάρχει ένας
έλεγχος ώστε η τιμή που δίνει αυτή να
είναι μεγαλύτερη από την προηγούμενη.
πχ. Ο
βρόγχος του j, που δίνει το δεύτερο
ψηφίο πρέπει να έχει τον έλεγχο j>i (το
i δίνει το πρώτο ψηφίο), ώστε να
αποφεύγονται τα λάθη. 
Η
εμφάνιση των αποτελεσμάτων θα γίνεται
προφανώς στον τελευταίο βρόγχο, εκεί
όπου και θα αυξάνεται κατά 1 κάθε φορά
η μεταβλητή pl, η οποία δείχνει το
πλήθος των τετράδων, η οποία αριθμεί
τις τετράδες κατά την εμφάνισή τους.
code
                                                                     
                             
| 
 for
   ( i=1; i<=N-3; i++)  //πρώτο ψηφίο 
    
  {
   
    
   for
   (j=2; j<=N-2; j++) //δεύτερο ψηφίο 
    
    if
   (j>i) 
    
    {
   
    
     for
   ( m=3; m<=N-1; m++ ) //τρίτο ψηφίο 
    
     { if
   (m>j) 
    
      {
   
    
       for
   (n=4; n<=N; n++) //τεταρτο ψηφίο 
    
        if
   (m<n) 
    
        {
   
    
        pl++;
   //pl=pl+1         
    
      printf
   ("%d. : %d, %d, %d, %d\n",pl, i,j,m,n); 
    
        }
   
    
      }
   
    
     }
   
    
    }
   
    
  }
   
    
}
   
    | 
 
H δομή αυτή εκτελεί τις εντολές όσες φορές του ορίσουμε εμείς. Πχ, αν θέλουμε 10 επαναλήψεις αρκεί συντάξουμε την εντολή κάπως έτσι.
ΑπάντησηΔιαγραφήfor (i=0; i<10; i++)
{
}
i++ σημαίνει i=i+1;
ΕΔΩ...
9 φορές δεν θα το εκτελέσει?
η επειδή ο μετρητής ξεκινάει απο το 0
θα εκτελεστεί 10?
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 -> 10 φορές! ακριβώς επειδή ξεκινά από το 0 ;)
ΑπάντησηΔιαγραφήοκεεειι :)
ΑπάντησηΔιαγραφή