Εντολές ελέγχου

Λογικές εκφράσεις και μεταβλητές

Παραδείγματα

>>> x = 5     # give a value to the variable x
>>> y = 7     # give a value to the variable y
>>> x == y    # check if x is equal to y
False
>>> x < y     # check if x is smaller than y, etc
True
>>> x <= y
True
>>> x > y
False
>>> x >= y
False
>>> x != y    # check if x is not equal to y
True

Λογικές μεταβλητές


>>> cond = (x == y)
>>> cond
False
>>> type(cond)
>class 'bool'>

Παράδειγμα. Είναι το φετινό έτος δίσεκτο;


>>> year = 2016
>>> isleap = year%4 == 0
>>> print(isleap)

Σημείωση: η παραπάνω συνθήκη χρειάζεται βελτίωση (θα το δούμε αργότερα).

Εκτέλεση υπό συνθήκη (εντολή if)

Παράδειγμα. if


>>> x = 5
>>> if x>0:
	print("x is positive")
	print("x =",x)

Παρατήρηση: δείτε τη σημασία της εσοχής στην python.

Παράδειγμα. if - else


>>> x = 5
>>> if x%2==0:
	print(x,"is even")
else:
	print(x,"is odd")

Παράδειγμα. if - elif - else


>>> x = 5
>>> y = 7
>>> if x>y:
	print(x,"is greater than",y)
elif(x<y):
	print(x,"is less than",y)
else:
	print(x,"and",y,"are equal")

Παράδειγμα. Είναι το φετινό έτος δίσεκτο;


>>> year = 2016
>>> isleap = year%4 == 0
>>> if isleap:
	print("Year",year,"is leap year")
else:
	print("Year",year,"is not leap year")

Η συνθήκη που χρησιμοποιήσαμε στην παραπάνω άσκηση χρειάζεται βελτίωση:


>>> year = 2016
>>> isleap = (year%4 == 0) and (year%100 != 0)
>>> print(isleap)

και επιπλέον βελτίωση


>>> year = 2016
>>> isleap = (year%4 == 0) and (year%400 != 0) or (year%400 == 0)
>>> print(isleap)

Τελεστές για λογικές μεταβλητές b, c (κατά σειρά χαμηλότερης προτεραιότητας)

Φωλιασμένες εντολές if

Εντολές ελέγχου if-elif-else μπορούν να είναι μέρος εντολών οι οποίες εκτελούνται υπό μία συνθήκη.

Παράδειγμα. Οι παρακάτω εντολές επιλέγουν τον μέγιστο των x, y, z :


if x >= y:
    if x >= z:
        print('x is largest')
    else:
        print('z is largest')
else:
    if y >= z:
        print('y is largest')
    else:
        print('z is largest')

Μια κομψότερη, ίσως, λύση (η οποία μπορεί εύκολα να γενικευθεί σε μεγαλύτερο πλήθος αριθμών) είναι η ακόλουθη:


maxnum = x
if y > maxnum:
    maxnum = y
if z > maxnum:
    maxnum = z
print('largest number is', maxnum)

Αλγόριθμοι

Παράδειγμα: Εύρεση κυβικής ρίζας τέλειου κύβου. Η κυβική ρίζα κάποιων αριθμών είναι ακέραιος. Μπορούμε να βρούμε την κυβική ρίζα του $a=216$ (και άλλων τελείων κύβων) χρησιμοποιώντας το παρακάτω πρόγραμμα. Θα πρέπει να το τρέξουμε πολλές φορές δοκιμάζοντας διαδοχικούς ακεραίους. Η μέθοδος ονομάζεται εξαντλητική απαρίθμηση.


# find the cubic root of a perfect cube

perfect_cube = 216   # this is a perfect cube

print("Try to guess the cubic root of",perfect_cube)
x = input("Give an integer: ")
x = int(x)

if x**3 == perfect_cube:
    print("Yes, indeed!", x,"is the cubic root of",perfect_cube)
elif x**3 < perfect_cube:
     print("You need a larger number")
elif x**3 > perfect_cube:
     print("You need a smaller number")

Εύρεση ρίζας θετικού αριθμού. Ο Ήρων ο Αλεξανδρεύς πρότεινε την εύρεση ρίζας του x ως εξής

Ο αλγόριθμος του Ήρωνα υλοποιείται με τον κώδικα:


x = 2.0
prompt = "Give a number close to the root of "+str(x)+": "
g = input(prompt)
g = float(g)

print("The square of",g,"is:",g*g)
g = (g+x/g)/2.0
print("g =",g,"is a better approximation: g*g =",g*g)

Παράδειγμα: Εύρεση ρίζας εξίσωσης με διχοτόμηση διαστήματος. Θεωρούμε ένα κυβικό πολυώνυμο $a_0 + a_1 x + a_2 x^2 + a_3 x^3$. Θα πρέπει αρχικά να γνωρίζουμε έαν διάστημα εντοπισμού της ρίζας. Ακολούθως, να τρέξουμε το πρόγραμμα πολλές φορές ελέγχοντας στο κέντρο του διαστήματος και διχοτομόντας το διάστημα. Η μέθοδος ονομάζεται μέθοδος διχοτόμησης.


# bisection method for the root of a cubic polynomial

# coefficients of cubic polynomial
a0 = 1.0
a1 = 2.0
a2 = 0.0
a3 = 3.0

# input x and find f(x), at two points x=x1, x=x2
x1 = input("Give x1: ")
x1 = float(x1)
fx1 = a0 + a1*x1 + a2*x1**2 + a3*x1**3

x2 = input("Give x2: ")
x2 = float(x2)
fx2 = a0 + a1*x2 + a2*x2**2 + a3*x2**3

print("f(x1) =",fx1,"\nf(x2) =",fx2)

# try to locate a root of the polynomial
if fx1*fx2 <= 0:
    print("A root is between",x1,"and",x2)
    x = (x1+x2)/2.0
    fx = a0 + a1*x + a2*x**2 + a3*x**3
    print("It may be close to",x,"where f =",fx)
else:
    print("I cannot locate a root of the polynomial")

Μπορούμε να κάνουμε το ίδιο με τη συνάρτηση, π.χ., $a\, \sin(x) + b\, \cos(x)$ (όπου $a,b$ είναι σταθερές):


import math

# parameters of the function
a = 1.0
b = 2.0

# input x and find the value of the function
x1 = input("Give x1: ")
x1 = float(x1)
fx1 = a*math.sin(x1) + b*math.cos(x1)

etc

Πληροφορία.

Ένας αλγόριθμος αποτελείται από βήματα υπολογισμών τα οποία εφαρμόζονται σε κάποια αρχικά δεδομένα και, αφού εξελιχθούν μέσω διαφόρων καταστάσεων, δίνουν κάποια τελικά δεδομένα (δηλαδή, ένα αποτέλεσμα).

Για να εφαρμόσουμε έναν αλγόριθμο χρειαζόμαστε μία γλώσσα προγραμματισμού. Μία γλώσσα προγραμματισμού δίνει εντολές στον υπολογιστή ώστε να πραγματοποιηθούν οι πράξεις, οι οποίες αποτελούν τα βήματα οποιουδήποτε αλγορίθμου.

Προγράμματα σε μία γλώσσα υψηλού επιπέδου (π.χ., python) πρέπει να υποστούν επεξεργασία ώστε να μετατραπούν σε προγράμματα γλώσσας χαμηλού επιπέδου (γλώσσα μηχανής) τα οποία μπορεί να τρέξει ο υπολογιστής. Η επεξεργασία γίνεται από διερμηνευτές (interpreters) και μεταγλωττιστές (compilers).

Μελέτη

Βιβλιογραφία
  1. Δ. Καρολίδης, Μαθαίνετε εύκολα python.
  2. Κ. Μαγκούτης, Χ. Νικολάου, Εισαγωγή στον αντικειμενοστραφή προγραμματισμό με Python, (Αποθετήριο "Κάλλιπος", 2016) - Κεφάλαιο 4. Συναρτήσεις και εκτέλεση υπό συνθήκη.
  3. J.V. Guttag, Υπολογισμοί και προγραμματισμός με την python (Παράγραφοι 2.2, 3.1).