Μάθημα : Προγραμματισμός Η/Υ

Κωδικός : T522234

T522234  -  ΔΗΜΗΤΡΙΟΣ ΜΠΑΜΠΑΣ

Ενότητες μαθήματος - Υποπρογράμματα, Συναρτήσεις

Υποπρογράμματα, Συναρτήσεις

Τμηματικός Προγραμματισμός
Σύμφωνα με την τεχνική αυτή, μπορούμε να γράψουμε ένα πρόγραμμα ως ένα σύνολο από μικρότερα κομμάτια προγράμματος.
Ένα υποπρόγραμμα είναι ένα κομμάτι προγράμματος που έχει γραφεί ξεχωριστά από το υπόλοιπο πρόγραμμα και επιτελεί ένα αυτόνομο έργο.
Χαρακτηριστικά:
α) Έχει μόνο ένα σημείο εισόδου από το οποίο δέχεται τα δεδομένα του.
β) Το (υπο)πρόγραμμα το οποίο καλεί ένα άλλο υποπρόγραμμα σταματάει την εκτέλεσή του όσο εκτελείται το καλούμενο υποπρόγραμμα. Μόνο ένα υποπρόγραμμα μπορεί να εκτελείται σε μια χρονική στιγμή.
γ) Ο έλεγχος επιστρέφει στο (υπο)πρόγραμμα το οποίο καλεί, όταν το καλούμενο υποπρόγραμμα σταματήσει να εκτελείται.

Η Python παρέχει ένα μόνο τύπο υποπρογραμμάτων, τις συναρτήσεις, τις οποίες τις θεωρεί ως αντικείμενα.

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

Κλήση (calling) της συνάρτησης
Μια συνάρτηση μπορεί να καλείται από διάφορα σημεία του κύριου προγράμματος ή και μέσα από μια άλλη συνάρτηση, γράφοντας το όνομά της και τις κατάλληλες παραμέτρους/ορίσματα μέσα σε παρενθέσεις.
Η συνάρτηση δέχεται ορίσματα και επιστρέφει ένα αποτέλεσμα. Το αποτέλεσμα αυτό ονομάζεται επιστρεφόμενη τιμή (return value).

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

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

Η εμβέλεια (scope) μιας μεταβλητής αναφέρεται στο τμήμα του προγράμματος που μπορεί αυτή να έχει πρόσβαση.

  • Απεριόριστη εμβέλεια -καθολικές (global) μεταβλητές: μπορούν να χρησιμοποιούνται σε οποιοδήποτε τμήμα του προγράμματος, ανεξάρτητα από το πού δηλώθηκαν.
  • Περιορισμένη εμβέλεια -τοπικές (local) μεταβλητές: ισχύουν για το υποπρόγραμμα (συνάρτηση) στο οποίο δηλώθηκαν.

 

Τοπικές μεταβλητές
Όταν δηλώνουμε μεταβλητές μέσα σε έναν ορισμό συνάρτησης, αυτές δεν έχουν καμία σχέση με άλλες μεταβλητές που έχουν την ίδια ονομασία και χρησιμοποιούνται έξω από αυτήν τη συνάρτηση.

Οι μεταβλητές που έχουν οριστεί μέσα στο σώμα της συνάρτησης, έχουν τοπική εμβέλεια, ενώ αυτές που ορίστηκαν έξω από αυτό έχουν καθολική εμβέλεια.

global ονομα μεταβλητης
Η μεταβλητή που βρίσκεται μέσα στη συνάρτηση γίνεται καθολική μεταβλητή.

 

(*) οι παράμετροι περνάνε με αναφορά: αν αλλάξουμε μια παράμετρο μέσα στη συνάρτηση, η αλλαγή είναι μόνιμη και μετά την κλήση της συνάρτησης. (π.χ. μέθοδος append σε λίστες)

 

B3.
∆ίνεται το παρακάτω τμήμα προγράμματος Python:
x=100
def func(x):
               print “To x είναι”, x
               x=2
               print “To τοπικό x άλλαξε σε”, x
func(x)
print “To x είναι ακόμα”, x
Να γράψετε στο τετράδιό σας τι εμφανίζει το πρόγραμμα κατά την εκτέλεσή του.
Μονάδες 6
(ΠΑΝΕΛΛΑ∆ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ 2019)


Λύση
To x είναι 100
To τοπικό x άλλαξε σε 2
To x είναι ακόμα 100

B2.
Να γράψετε τι θα εμφανίσει η εκτέλεση του παρακάτω τμήματος προγράμματος:

def func(x):
       global y
       print "1. Το y είναι ", y
       x = 30
       y = y+1
       print "2. Το x είναι ", x

y = 2
x = 6
func(x)
z = y**2
print "3. Το x είναι ", x
print "4. Το y είναι ", y
print "5. Το z είναι ", z
Μονάδες 10
(ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ 2020)

Λύση
1. Το y είναι 2
2. Το x είναι 30
3. Το x είναι 6
4. Το y είναι 3
5. Το z είναι 9

Β3.
Να γράψετε συνάρτηση SYN που να δέχεται έναν αριθμό και να επιστρέφει το διπλάσιό του, αν είναι μικρότερος του 10, διαφορετικά να επιστρέφει το τριπλάσιό του.
Μονάδες 5
(ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ 2017)

Λύση
def SYN(z): #ορισμος
     if z<10:
          a=2*z
     else:
          a=3*z
     return a

B2.
β. ∆ίνεται το παρακάτω τμήμα προγράμματος Python:
def print_1(t2):
       t2 = t2 + 10
       print t2
       t2 = t2 / 5
      return t2
t1 = 5
print print_1(t1)
print t1
Να γράψετε στο τετράδιό σας τι εμφανίζει το πρόγραμμα κατά την εκτέλεσή του (μον. 4)
(ΠΑΝΕΛΛΑ∆ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΣΕΠΤΕΜΒΡΙΟΥ 2018)

Λύση
15

3
5

def changeme(mylist): #τοπικο changeme.mylist
               # "Αλλάζει τη λίστα που περνά στη συνάρτηση"
              mylist=mylist+[[1,2,3,4]] #(2η εκδοχη-δεν μεταφέρει αλλαγή)
               #mylist.append([1,2,3,4]) (1η εκδοχη -μεταφέρει αλλαγή έξω)
               print "Τιμές μέσα στη συνάρτηση: ", mylist
              return
# Τώρα μπορούμε να καλέσουμε τη changeme συνάρτηση
mylist = [10,20,30] #καθολικο
changeme(mylist)
print "Τιμές έξω από τη συνάρτηση: ", mylist

Δραστηριότητα 4.
Να εντοπίσετε στο παρακάτω πρόγραμμα τα τμήματα κώδικα που πρέπει να γίνουν συναρτήσεις και να το ξαναγράψετε, έτσι ώστε να αποφευχθεί η επανάληψή τους και να μειωθεί ο όγκος του.

(τετράδιο εργασιών)

sum1 = 0
for i in range(100):
             sum1 = sum1 + i
print sum1
sum2 = 0
for j in range(100):
            sum2 = sum2 + j
print sum2 + sum1
sum3 = 0
for k in range(sum1):
            sum3 = sum3 + k
print sum3 + sum2 + sum1

Λύση
def athroisma(x):
       s=0
       for i in range(x):
                       s=s+i
       return s
print athroisma(100)
print athroisma(100)+athroisma(100)
print athroisma(athroisma(100))+athroisma(100)+athroisma(100)