Μάθημα : Προγραμματισμός Υπολογιστών Γ' ετος 2025-2026

Κωδικός : 4540050176

4540050176 - ΒΑΣΙΛΕΙΟΣ ΜΠΙΤΟΣ

Ενότητες μαθήματος

4.2 Συναρτήσεις

 Οι συναρτήσεις στον προγραμματισμό είναι επαναχρησιμοποιήσιμα μέρη προγραμμάτων
• Μια συνάρτηση μας επιτρέπει να δίνουμε ένα όνομα σε μια ομάδα εντολών και να την εκτελούμε χρησιμοποιώντας το όνομά της οπουδήποτε στο πρόγραμμά μας και για όσες φορές θέλουμε
• Διευκολύνουν τη συγγραφή, ανάγνωση, κατανόηση και διόρθωση ενός προγράμματος 

 Καλείται με το όνομά της.
 Μπορεί να μην έχει ορίσματα.
 Μπορεί να δεχθεί ένα ή περισσότερα ορίσματα ώς παραμέτρους εισόδου.
 Μπορεί να μην επιστρέφει καμία τιμή στο κύριο πρόγραμμα.

Παράδειγμα

 (α) Γράψτε μία συνάρτηση η οποία θα δέχεται όνομα και επίθετο (δύο συμβολοσειρές) και θα επιστρέφει μία συμβολοσειρά με το πλήρες όνομα. (β) Γράψτε μία άλλη συνάρτηση η οποία θα δέχεται τα ίδια δεδομένα (όνομα και επίθετο) και θα τυπώνει το πλήρες όνομα (αλλά δεν θα επιστρέφει κάτι).

 


def name(first,surname):      # (α) επιστρέφει string
    s = first + ' ' + surname
    return s

result = name('kitsos','Tzavelas') # κλήση συνάρτησης
print(result)

def name0(first,surname):      # (β) δεν επιστρέφει κάτι
    s = first + ' ' + surname
    print(s)

name('Kitsos','Tzavelas')      # κλήση συνάρτησης


 Μπορεί να επιστρέφει στο κύριο πρόγραμμα μία περισσότερες τιμές.

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

• Ορισμός
def όνομα_συνάρτησης():
... εντολές .....
• Κλήση
όνομα_συνάρτησης()

Παράμετροι σε συνάρτηση
• Μία συνάρτηση μπορεί να δεχθεί παραμέτρους (formal parameters ή απλά parameters), οι οποίες αποτελούν τιμές στη συνάρτηση ως είσοδος
• Ορίζονται κατά την κλήση της συνάρτησης και ονομάζονται ορίσματα 
Ορισμός
def examble(a,b):
... εντολές .....
Κλήση
examble(1,3)

Εμβέλεια
• Η εμβέλεια μιας μεταβλητής ή μιας συνάρτησης αφορά στην περιοχή τουπρογράμματος στην οποία μπορεί να προσπελαστεί ή με άλλα λόγια να είναι ορατή
• Όταν δημιουργούμε μία μεταβλητή μέσα σε μία συνάρτηση, αυτή ονομάζεται τοπική μεταβλητή (local variable) και «υπάρχει» μόνο μέσα στη συνάρτηση, δεν μπορούμε να τη χρησιμοποιήσουμε έξω από αυτή
• Οι τοπικές μεταβλητές «ζουν» όσο διαρκεί η εκτέλεση της συνάρτησης στην οποία έχουν οριστεί, και καταστρέφονται, όταν ολοκληρωθεί η εκτέλεση της συνάρτησης
• Κάθε νέα κλήση μιας συνάρτησης δημιουργεί νέες τοπικές μεταβλητές

Οι μεταβλητές που δηλώνονται έξω από τις συναρτήσεις ενός προγράμματος ονομάζονται καθολικές μεταβλητές (global variables)
• Μπορούν να προσπελαστούν από οποιοδήποτε σημείο μέσα στο πρόγραμμα συμπεριλαμβανομένων και των συναρτήσεων

• Πέρασμα μέσω αναφοράς (pass by reference)

Όταν οι παράμετροι περνάνε με αναφορά, σημαίνει ότι αν αλλάξουμε μια παράμετρο μέσα στη συνάρτηση, η αλλαγή είναι μόνιμη και μετά την κλήση της συνάρτησης. Για παράδειγμα:

def a1(lista):
    lista.append(2)
    print'times mesa stin synartisi ' ,lista
    return
lista1=[1,3,5,6]
a1(lista1)
print 'times exo apo thn synartisi ',lista1

Αποτελεσμα 

times mesa stin synartisi [1, 3, 5, 6, 2]
times exo apo thn synartisi [1, 3, 5, 6, 2]

• Μία συνάρτηση μπορεί να επιστρέφει και τιμή, η οποία μπορεί να εκχωρηθεί σε μία μεταβλητή ή ακόμη και να χρησιμοποιηθεί ως μέρος μιας έκφρασης
• Η επιστροφή τιμής γίνεται με την εντολή return

 

Πέρασμα παραμέτρου με τιμή.

Τι θα τυπώσoυν  τα παρακάτω προγράμματα και γιατί;

def a1(x):                                                def a2(x,y)

    print x                                                       s=x+y

    x=x+1                                                        return s

    print x                                                  print a2(7,5)

a=3                                                           print s

print a

print a1(a)

print a

Αποτέλεσμα                                           Αποτελεσμα

3                                                                12

3                                                                error  s is not define

4

3

Πέρασμα παραμέτρου με τιμή).

Χρήση της εντολής global

Πώς δουλεύει:

Η εντολή global χρησιμοποιείται για να δηλώσει ότι το x είναι μια καθολική μεταβλητή, γι' αυτό το λόγο όταν εκχωρούμε μια τιμή για το x μέσα στη συνάρτηση, αυτή η αλλαγή απεικονίζεται όταν χρησιμοποιούμε την τιμή του x στο κυρίως τμήμα.

Μπορείτε να καθορίσετε περισσότερες από μία καθολικές μεταβλητές χρησιμοποιώντας την ίδια εντολή global. Για παράδειγμα global x, y, z.

x = 50
def func():

    global x
    print'to x einai ', x
    x = 2
    print'allaxa to katholiko x se ', x
func()
print'h timi toy x einai', x

Εξοδος

to x einai 50
allaxa to katholiko x se 2
h timi toy x einai 2

Επαναλαμβάνονται τα 5 πρώτα παραδείγματα του προηγούμενου κεφαλαίου (4.1.1 for ή while) με την χρήση συναρτήσεων

Μετρητής γραμμάτων μιας φράσης που δίδεται από το πληκτρολόγιο (δεν μετράτε τα κενά)

def charactires(frasi):
   metritis = 0
   for charaktiras in frasi:
      if charaktiras != " ":
         metritis += 1
   return metritis

Λύση με while (δεν συνιστάται)

def charactires(frasi):
   i = metritis = 0
   while i < len(frasi):
        if frasi[i] != " ":
           metritis += 1
        i += 1
  return metritis

Μετρητής γραμμάτων μιας φράσης που δίδεται από το πληκτρολόγιο (δεν μετράτε τα κενά κόμματα και τελείες)

def grammata(frasi):
   metritis = 0
   for charaktiras in frasi:
       if not (charaktiras == " " or charaktiras == "," or charaktiras == "."): # ίδιο με charaktiras not in " ,."
          metritis += 1
   return metritis

Μετρητής μικρών γραμμάτων μιας φράσης που δίδεται από το πληκτρολόγιο (μετράτε ΜΟΝΟ τα μικρά γράμματα)

def mikraGrammata(frasi):
   metritis = 0
   for charaktiras in frasi:
      if charaktiras  in "qwertyuioplkjhgfdsazxcvnm":
         metritis += 1
   return metritis

Μετρητής μικρών γραμμάτων κειμένου (πολλών γραμμών, κενή γραμμή: τέλος κειμένου)

print 'Γράψε κείμενο'
grammi=raw_input("> ")
metritis = 0
while grammi != "":
   metritis += mikraGrammata(grammi) # χρήση της προηγούμενης συνάρτησης
   grammi=raw_input("> ")
print "τα μικρά γράμματα είναι", metritis

Σύγκριση αλφαριθμητικών. Λαχειοφόρος

Πόσο κερδίζει το λαχείο μου. Για κάθε ταύτιση ψηφίου του λαχείου μου με τον αριθμό της κλήρωσης κερδίσω αντίστοιχα 10 / 100 / 1000 / 10000 / 100000 €

import random

def posaIdia(strA, strB) # μετράει πόσοι ιδιοι χαρακτήρες δυο string βρίσκονται στην ίδια θέση
   metritis = 0
   mikosMikroterou = min(len(strA), len(strB))
   for i in range(mikosMikroterou): 
       if strA[i] == strB[i]:
          metritis += 1
   return metritis

klirwsi=str(random.randint(10000,99999)) 
laxeio=str(input('Laxeio> ')) # είτε laxeio=raw_input('Laxeio> ')
kerdos=1
taytisis = posaIdia(klirwsi, laxeio) # χρήση της συνάρτησης
for i in range(taytisis):
   kerdos*=10
print 'Kerdises',kerdos,'Euro'

Παράδειγμα :Χρήση μεταβλητής global

Να γραφεί πρόγραμμα σε Python το οποίο:
1) Να διαβάζει επαναληπτικά ακέραιους αριθμούς μέχρις ότου δοθεί ο αριθμός 0.

και με την χρήση συνάρτησης
1) Να εμφανίζει στο τέλος, το πλήθος των θετικών αριθμών και τον μικρότερο απο τους θετικούς 

def thet_mik(n):
  global mik
  if n>0:
     if n<mik:
         mik=n

     return 1
  return 0
thetikoi = 0
num = input('Dose ==> ')
mik=10**5

while num != 0:
thetikoi += thet_mik(num)
num = input("Dose ==>")

print 'Oi thetikoi arithmoi einai:',thetikoi
print 'o mikroteros arithmos apo toys thetikous einai o :',mik