ΚΑΛΩΣΗΡΘΑΤΕ ΣΤΟ BLOG ΜΑΣ!
It's our world...0 or 1 Enjoy your stay!


Στείλτε e-mail,στο unitedprogrammersbspot@gmail.com



(Πληκτρολογώντας εδώ,στέλνετε e-mail στο unitedprogrammersbspot@gmail.com)

©No Copyright.Copy or distribute for free




Πέμπτη 13 Δεκεμβρίου 2012

C - Εξάσκηση στις δομές επανάληψης [ συνδυασμοί αριθμών ]

Στην γλώσσα προγραμματισμού 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

_____________ >


Εντολές Προεπεξεργαστή & Δήλωση μεταβλητών
#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);
}
}
}
}
}
}







3 σχόλια:

  1. H δομή αυτή εκτελεί τις εντολές όσες φορές του ορίσουμε εμείς. Πχ, αν θέλουμε 10 επαναλήψεις αρκεί συντάξουμε την εντολή κάπως έτσι.
    for (i=0; i<10; i++)
    {
    }
    i++ σημαίνει i=i+1;

    ΕΔΩ...
    9 φορές δεν θα το εκτελέσει?
    η επειδή ο μετρητής ξεκινάει απο το 0
    θα εκτελεστεί 10?

    ΑπάντησηΔιαγραφή
  2. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 -> 10 φορές! ακριβώς επειδή ξεκινά από το 0 ;)

    ΑπάντησηΔιαγραφή

Μερικά χρήσιμα βίντεο...