Τελεστές σύγκρισης, λογικής και επαναλήψεις
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Τελεστές σύγκρισης
Οι αριθμητικές τιμές της C μπορούν να συγκριθούν με τη
χρήση των παρακάτω τελεστών:
 |  Σύγκριση  |   Τελεστής της C  |  
 |  Ίσο  |   ==  |  
 |  Διάφορο  |   !=  |  
 |  Μικρότερο  |   <  |  
 |  Μεγαλύτερο  |   >  |  
 |  Μικρότερο ή ίσο  |   <=  |  
 |  Μεγαλύτερο ή ίσο  |   >=  |  
-  Για τον υπολογισμό μιας τιμής, πρώτα εκτελούνται οι πράξεις ανάμεσα
στους τελεστές * / %, μετά οι πράξεις ανάμεσα στους τελεστές + -,
μετά ανάμεσα στους τελεστές < > <= >= και μετά
ανάμεσα στους τελεστές == και !=.
 -  Η παραπάνω σειρά μπορεί να μεταβληθεί με τη χρήση παρενθέσεων.
 -  Το αποτέλεσμα της κάθε σύγκρισης είναι 
1 (αληθές (true)) αν το αποτέλεσμα της σύγκρισης είναι
αληθές και
0 (ψευδές (false)) αν το αποτέλεσμα της σύγκρισης είναι
ψευδές.
 
Παραδείγματα
-  printf("%d\n", 1 + 1 == 2);	/* Τυπώνει 1 */
 -  printf("%d\n", 1 > 2);		/* Τυπώνει 0 */
 -  printf("%d\n", 5 != 5);		/* Τυπώνει 0 */
 -  printf("%d\n", 1 <= 5);		/* Τυπώνει 1 */
 -  printf("%d\n", 1 <= 1);		/* Τυπώνει 1 */
 -  printf("%d\n", 1 <= 0);		/* Τυπώνει 0 */
 
Βρόχοι με την εντολή while
-  Μπορούμε να επαναλάβουμε την εκτέλεση ορισμένων εντολών με τη
δομή ελέγχου (control structure) while.
 -  Αυτή χρησιμοποιείται ως εξής:
	while (συνθήκη)
		εντολή;
 -  Τις περισσότερες φορές θέλουμε να εκτελέσουμε πάνω από μια εντολή
πολλαπλές φορές οπότε περικλείουμε όλες τις αντίστοιχες εντολές μέσα σε
αγκύλες "{" και "}":
	while (συνθήκη) {
		εντολή1;
		εντολή2;
		εντολή3;
	}
 -  Η εντολή που ακολουθεί το while εκτελείται όσο η συνθήκη είναι
αληθής, δηλαδή έχει τιμή διάφορη του 0.
Παράδειγμα (τυπώνει τους αριθμούς από το 0 μέχρι το 9):
#include <stdio.h>
main()
{
        int i;
        i = 0;
        while (i < 10) {
                printf("%d\n", i);
                i = i + 1;
        }
}
 -  Αν η συνθήκη δεν είναι αληθής όταν εκτελεστεί το while για πρώτη
φορά τότε η εντολή που περιέχεται σε αυτό δε θα εκτελεστεί.
 -  Η δομή ελέγχου while μπορεί να χρησιμοποιηθεί οπουδήποτε θα μπορούσε
και οποιαδήποτε άλλη εντολή (π.χ. η printf) δηλαδή ακόμα και μέσα σε μια άλλη
while.
Το παρακάτω παράδειγμα τυπώνει στην οθόνη ένα τριγωνικό σχήμα:
#include <stdio.h>
main()
{
        int row, stars;
        row = 0;
        while (row < 10) {
                stars = row;
                while (stars > 0) {
                        printf("*");
                        stars = stars - 1;
                }
                row = row + 1;
                printf("\n");
        }
}
όπως αυτό:
*
**
***
****
*****
******
*******
********
*********
 
Βρόχοι με την εντολή do while
-  Ορισμένες φορές θέλουμε να ελέγχουμε τη συνθήκη στο τέλος
του βρόχου, δηλαδή η εντολή να εκτελεστεί τουλάχιστον μια φορά.
Στις περιπτώσεις αυτές χρησιμοποιούμε τη δομή ελέγχου do while
 -  Αυτή χρησιμοποιείται ως εξής:
	
	do
		εντολή;
	while (συνθήκη);
 -  Τις περισσότερες φορές θέλουμε να εκτελέσουμε πάνω από μια εντολή
πολλαπλές φορές οπότε περικλείουμε όλες τις αντίστοιχες εντολές μέσα σε
αγκύλες "{" και "}":
	do {
		εντολή1;
		εντολή2;
		εντολή3;
	} while (συνθήκη);
 -  Η εντολή που ακολουθεί το do εκτελείται μια φορά και συνεχίζει
να εκτελείται όσο η συνθήκη είναι αληθής, δηλαδή έχει τιμή διάφορη του 0.
 -  Σημαντικό ρόλο έχει αυτή η δομή ελέγχου όταν διαβάζουμε στοιχεία
από το χρήστη και θέλουμε να ελέγξουμε την είσοδο για λάθη.
Παράδειγμα (εισάγει έναν αριθμό μικρότερο του 10):
#include <stdio.h>
main()
{
        int number;
        do {
                printf("Enter a number less than 10: ");
                scanf("%d", &number);
        } while (number >= 10);
        printf("You entered %d\n", number);
}
όπως φαίνεται από το παρακάτω παράδειγμα:
Enter a number less than 10: 34
Enter a number less than 10: 50
Enter a number less than 10: 2
You entered 2
 -  Αν η συνθήκη δεν είναι αληθής όταν εκτελεστεί το do για πρώτη
φορά τότε η εντολή που περιέχεται σε αυτό θα εκτελεστεί τουλάχιστον μια φορά.
 -  Η δομή ελέγχου do μπορεί να χρησιμοποιηθεί οπουδήποτε θα μπορούσε
και οποιαδήποτε άλλη εντολή (π.χ. η printf) δηλαδή ακόμα και μέσα σε μια άλλη
do ή while.
 
Λογικοί τελεστές
Τα λογικά αποτελέσματα στη C μπορούν να συνδυαστούν με τη
χρήση των παρακάτω λογικών τελεστών:
Παράδειγμα
Ο παρακάτω βρόχος μπορεί να αποτελεί τμήμα του προγράμματος
ελέγχου ενός τραπεζικού μηχανήματος αυτομάτων συναλλαγών:
{
        int secret, pin, tries;
        secret = 1234;                  /* Customer's secret PIN */
        tries = 0;
        do {
                printf("Δώστε το PIN σας: ");
                scanf("%d", &pin);
                tries = tries + 1;
        } while (pin != secret && tries < 4);
        /* Correct PIN entered or number of tries exhausted */
}
Βιβλιογραφία
- Brian W. Kernighan, Dennis M. Ritchie
Η γλώσσα προγραμματισμού C. σ. 26, 67-69, 305-306 (τμήματα)
Δεύτερη έκδοση.
Κλειδάριθμος, 1988.
 - Brian W. Kernighan and Dennis M. Ritchie.
The C Programming Language, pages 10, 41-42, 223-224 (parts).
Prentice-Hall, second edition, 1988.
 
Ασκήσεις
Βρόχοι
-  Να γράψετε ένα πρόγραμμα που να τυπώνει τον πίνακα της
προπαίδειας όπως στο παρακάτω παράδειγμα:
   1    2    3    4    5    6    7    8    9   10 
   2    4    6    8   10   12   14   16   18   20 
   3    6    9   12   15   18   21   24   27   30 
   4    8   12   16   20   24   28   32   36   40 
   5   10   15   20   25   30   35   40   45   50 
   6   12   18   24   30   36   42   48   54   60 
   7   14   21   28   35   42   49   56   63   70 
   8   16   24   32   40   48   56   64   72   80 
   9   18   27   36   45   54   63   72   81   90 
  10   20   30   40   50   60   70   80   90  100 
Για να μπορέσουν οι αριθμοί να εμφανιστούν σε στήλες μπορείτε
να χρησιμοποιήσετε στην printf τον κωδικό εξόδου %4d
(εμφάνιση του αριθμού σε χώρο 4 χαρακτήρων) αντί του κωδικού %d.