Στην γλώσσα προγραμματισμού 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 ;)
ΑπάντησηΔιαγραφήοκεεειι :)
ΑπάντησηΔιαγραφή