Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
Εφαρμογές Υπολογιστών
Γεωπονικό Πανεπιστήμιο Αθηνών Τμήμα Αγροτικής Οικονομίας & Ανάπτυξης Εργαστήριο Πληροφορικής Προγραμματισμός & Εφαρμογές Υπολογιστών Κωδικός Μαθήματος: Κωδικός Διαφανειών: MKT130 Καθηγητής Νίκος Λορέντζος
2
9. Υποπρογράμματα Καθηγητής Νίκος Λορέντζος
Γεωπονικό Πανεπιστήμιο Αθηνών Τμήμα Αγροτικής Οικονομίας & Ανάπτυξης Εργαστήριο Πληροφορικής 9. Υποπρογράμματα Καθηγητής Νίκος Λορέντζος
3
Παραδείγματα υποπρογραμμάτων: Οι ενσωματωμένες συναρτήσεις
Υποπρόγραμμα Πρόγραμμα, του οποίου η εκτέλεση επιτυγχάνεται μέσα από άλλο πρόγραμμα. Παραδείγματα υποπρογραμμάτων: Οι ενσωματωμένες συναρτήσεις Αριθμητικές y = Abs(x) y = Sqr(x) y = Exp(x) Y = Log(x) … Τριγωνομετρικές y := Sin(x) y := Cos(x) y := Tan(x) … Άλλες 3
4
Εκφράσεις με ενσωματωμένες συναρτήσεις
Υποπρόγραμμα Εκφράσεις με ενσωματωμένες συναρτήσεις y1 = Cos(x1) y2 = Cos(x2) y = Cos(x1) + Cos(x2) y = Cos(x1) * Cos(x2) Print Cos(x1) Print Cos(x2) Print Cos(x1) + Cos(x2) Print Cos(x1) * Cos(x2) 4
5
Υποπρόγραμμα Είδη Υποπρογραμμάτων Υποπρόγραμμα Συνάρτηση
Υποπρόγραμμα Διαδικασία 5
6
Πρόγραμμα [25] Να συνταχθεί πρόγραμμα για τον υπολογισμό της αποζημίωσης παραγωγών σίτου, των οποίων η σοδειά καταστράφηκε. Το πρόγραμμα διαβάζει την έκταση ενός παραγωγού και υπολογίζει ως ποσό αποζημίωσης του, - 600 ευρώ, για καθένα από τα πρώτα 30 στρέμματα, - 400 ευρώ, για καθένα από τα τυχόν επόμενα 20 στρέμματα, - 300 ευρώ, για καθένα από τα τυχόν υπόλοιπα στρέμματα. Στη συνέχεια, το πρόγραμμα επαναλαμβάνει τα παραπάνω για άλλον ένα παραγωγό.
7
Υπολογισμός Αποζημίωσης [20]
30 50 600 400 300 ektasi <= 30 : apoz = 600 * ektasi 30 < ektasi <= 50 : apoz = 600 * 30 + 400 * (ektasi - 30) = * ektasi apoz = 600 * 30 50 < ektasi : + 400 * 20 + 300 * (ektasi - 50) = * ektasi ευρώ, για καθένα από τα πρώτα 30 στρέμματα - 400 ευρώ, για καθένα από τα τυχόν επόμενα 20 στρέμματα και - 300 ευρώ για καθένα από τα υπόλοιπα στρέμματα. 7
8
Υπολογισμός Αποζημίωσης [20]
= 600 * e e <= 30: p 30 < e <= 50: = * e p 50 < e: = * e p If e <= 30 Then p = 600 * e Else ' Ισχύει ότι έκταση > 30 If e <= 50 Then ' Ισχύει ότι 30 < έκταση <= 50 p = * e Else ' Ισχύει ότι έκταση > 50 p = * e End If End If
9
0. Χωρίς χρήση Υποπρογράμματος
9
10
Χωρίς χρήση Υποπρογράμματος [25]
Option Explicit Dim e1 As Single Dim p1 As Single Dim e2 As Single Dim p2 As Single Private Sub Command1_Click() e1 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") If e1 <= 30 Then p1 = 600 * e1 Else If e1 <= 50 Then p1 = * e1 p1 = * e1 End If Print "ΕΚΤΑΣΗ: " & e1, "ΠΟΣΟ: " & p1 e2 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") If e2 <= 30 Then p2 = 600 * e2 Else If e2 <= 50 Then p2 = * e2 p2 = * e2 End If Print "ΕΚΤΑΣΗ: " & e2, "ΠΟΣΟ: " & p2 End Sub 10
11
1. Με Υποπρόγραμμα Συνάρτηση
11
12
Εκφράσεις με ενσωματωμένες συναρτήσεις
y1 := Cos(x1); y2 := Cos(x2); y := Cos(x1) + Cos(x2); y := Cos(x1) * Cos(x2); Print Cos(x1) Print Cos(x2) Print Cos(x1) + Cos(x2) Print Cos(x1) * Cos(x2) Εκφράσεις με δικές μας συναρτήσεις (Συναρτήσεις οριζόμενες από τον χρήστη) p1 := apozimiosi(e1); p2 := apozimiosi(e2); Print apozimiosi(e1); Print apozimiosi(e2); 12
13
Συναρτήσεις οριζόμενες από τον χρήστη
Private Sub Command1_Click() … If e1 <= 30 Then p1 = 600 * e1 Else If e1 <= 50 Then p1 = * e1 p1 = * e1 End If If e2 <= 30 Then p2 = 600 * e2 If e2 <= 50 Then p2 = * e2 p2 = * e2 End Sub Private Sub Command1_Click() … p1 = apozimiosi(e1) p2 = apozimiosi(e2) End Sub 13
14
Με Υποπρόγραμμα Συνάρτηση [26]
Option Explicit Dim e1 As Single Dim p1 As Single Dim e2 As Single Dim p2 As Single Private Sub Command1_Click() e1 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") p1 = apozimiosi(e1) Print "ΕΚΤΑΣΗ: " & e1, "ΠΟΣΟ: " & p1 e2 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") p2 = apozimiosi(e2) Print "ΕΚΤΑΣΗ: " & e2, "ΠΟΣΟ: " & p2 End Sub Function apozimiosi(e As Single) If e <= 30 Then apozimiosi = 600 * e Else If e <= 50 Then apozimiosi = * e apozimiosi = * e End If End Function 14
15
Με Υποπρόγραμμα Συνάρτηση [26]
Option Explicit Dim e1 As Single Dim p1 As Single Dim e2 As Single Dim p2 As Single Private Sub Command1_Click() e1 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") p1 = apozimiosi(e1) Print "ΕΚΤΑΣΗ: " & e1, "ΠΟΣΟ: " & p1 e2 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") p2 = apozimiosi(e2) Print "ΕΚΤΑΣΗ: " & e2, "ΠΟΣΟ: " & p2 End Sub Function apozimiosi(e As Single) If e <= 30 Then apozimiosi = 600 * e Else If e <= 50 Then apozimiosi = * e apozimiosi = * e End If End Function 15
16
Με Υποπρόγραμμα Συνάρτηση
Function apozimiosi(e As Single) If e <= 30 Then apozimiosi = 600 * e Else If e <= 50 Then apozimiosi = * e apozimiosi = * e End If End Function Option Explicit Dim e1 As Single Dim p1 As Single Dim e2 As Single Dim p2 As Single Private Sub Command1_Click() e1 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") e2 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") Print apozimiosi(e1) + apozimiosi(e2) Print "ΔΙΠΛΑΣΙΟ (e1 + e2) ", diplasio(e1, e2) End Sub Function diplasio (x, y As Single) diplasio = 2 * (x + y) End Function 16
17
Συντακτικό Υποπρογράμματος Συνάρτησης
Κύριο Πρόγραμμα: Έχει μια από τις εκφράσεις x = name(m1, m2, …, mk) Print name (m1, m2, …, mk) όπου name είναι το όνομα της συνάρτησης. Υποπρόγραμμα Συνάρτηση: Έχει την παρακάτω δομή. Function name (n1 As ΤΔ, n2 As ΤΔ, …, nk As ΤΔ) εντολές name = TIMH End Function Εκτέλεση Κώδικα Όταν εκτελείται κάποια από τις παραπάνω εντολές του κυρίου προγράμματος λέμε ότι το κύριο πρόγραμμα καλεί προς εκτέλεση τη συνάρτηση. Τότε οι τιμές των m1, m2, …, mκ γίνονται αντίστοιχα τιμές των n1, n2, …, nκ. Εκτελούνται οι εντολές της συνάρτησης και η συνάρτηση name παίρνει την ΤΙΜΗ. Η ΤΙΜΗ επιστρέφεται στο κύριο πρόγραμμα. Συνεχίζεται η εκτέλεση των εντολών του κυρίου προγράμματος.
18
Πλεονεκτήματα Υποπρογραμμάτων
Αποφυγή επανάληψης των ίδιων εντολών σε πολλά τμήματα του ίδιου προγράμματος. Υπολογισμοί ανεξάρτητοι από συγκεκριμένα ονόματα μεταβλητών. Αντικατάσταση ενός μεγάλου και περίπλοκου προγράμματος από μικρότερα και απλούστερα. Ευκολότερος εντοπισμός λογικών λαθών.
19
2. Με Υποπρόγραμμα Διαδικασία
19
20
Με Υποπρόγραμμα Διαδικασία [27]
Option Explicit Dim e1 As Single Dim p1 As Single Dim e2 As Single Dim p2 As Single Private Sub Command1_Click() e1 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") apozimiosi e1, p1 Print "ΕΚΤΑΣΗ: " & e1, "ΠΟΣΟ: " & p1 e2 = InputBox("ΔΩΣΕ ΕΚΤΑΣΗ : ") apozimiosi e2, p2 Print "ΕΚΤΑΣΗ: " & e2, "ΠΟΣΟ: " & p2 End Sub Sub apozimiosi(e As Single, p As Single) If e <= 30 Then p = 600 * e Else If e <= 50 Then p = * e p = * e End If End Sub 20
21
Συντακτικό Υποπρογράμματος Διαδικασίας
Κύριο Πρόγραμμα: Έχει την παρακάτω έκφραση name m1, m2, …, mk όπου name είναι το όνομα της διαδικασίας. Υποπρόγραμμα Διαδικασία: Έχει την παρακάτω δομή. Sub name (n1 As ΤΔ, n2 As ΤΔ, …, nk As ΤΔ) εντολές End Sub Εκτέλεση Κώδικα Οι τιμές των m1, m2, …, mk γίνονται αντίστοιχα τιμές των n1, n2, …, nk. 2. Εκτελούνται οι εντολές της Διαδικασίας. 3. Η τιμές που υπολογίσθηκαν στη διαδικασία επιστρέφονται στο κύριο πρόγραμμα. 4. Συνεχίζεται η εκτέλεση των εντολών του κυρίου προγράμματος.
22
Διαφορές Συνάρτησης από Διαδικασία
22
23
Πρόγραμμα [31] Να συνταχθεί πρόγραμμα το οποίο: 1. Διαβάζει δυο αριθμούς. 2. Καλεί υποπρόγραμμα, το οποίο - βρίσκει το μικρότερο και το μεγαλύτερο από τους δυο αριθμούς και - υπολογίζει το μέσο τους. 3. Εκτυπώνει το μικρότερο, το μεγαλύτερο και το μέσο αριθμό. 23
24
Πρόγραμμα [31] Option Explicit Dim v As Single Dim w As Single
Dim mini As Single Dim maxi As Single Dim mesos As Single Private Sub Command1_Click() v = InputBox("ΔΩΣΕ 1o ΑΡΙΘΜΟ: ") w = InputBox("ΔΩΣΕ 2o ΑΡΙΘΜΟ: ") mmm v, w, mini, maxi, mesos Print " ΕΛΑΧΙΣΤΟΣ: ", mini Print " ΜΕΓΙΣΤΟΣ: ", maxi Print " ΜΕΣΟΣ: ", mesos Print End Sub Sub mmm(x, y, min, max, mes As Single) If x <= y Then min = x max = y Else min = y max = x End If mes = (x+y)/2 End Sub 24
25
Διαφορά 1η Η συνάρτηση επιστρέφει μόνο μια τιμή
ενώ η διαδικασία ενδέχεται να επιστρέψει πολλές. 25
26
Πρόγραμμα [32] Να συνταχθεί πρόγραμμα το οποίο κάνει ό,τι και το Πρόγραμμα 31 αλλά, επιπλέον, μετά από την εκτύπωση καθενός από το μικρότερο, το μεγαλύτερο και το μέσο αριθμό, καλεί υποπρόγραμμα που εκτυπώνει τρεις φορές την παρακάτω γραμμή. ______________________ 26
27
Πρόγραμμα [32] Option Explicit Dim v As Single Dim w As Single
Dim mini As Single Dim maxi As Single Dim mesos As Single Private Sub Command1_Click() v = InputBox("ΔΩΣΕ 1o ΑΡΙΘΜΟ: ") w = InputBox("ΔΩΣΕ 2o ΑΡΙΘΜΟ: ") mmm v, w, mini, maxi, mesos Print " ΕΛΑΧΙΣΤΟΣ: ", mini printlines Print " ΜΕΓΙΣΤΟΣ: ", maxi Print " ΜΕΣΟΣ: ", mesos Print End Sub Sub mmm(x, y, min, max, mes As Single) If x <= y Then min = x max = y Else min = y max = x End If mes = (x+y)/2 End Sub Sub printlines() Dim i As Integer For i = 1 To 3 Step 1 Print "______________________" Next i End Sub 27
28
Διαφορά 2η Η συνάρτηση επιστρέφει μόνο μια τιμή
ενώ η διαδικασία ενδέχεται να μην επιστρέψει καμμία. 28
29
Παρατηρήσεις Ένα πρόγραμμα ενδέχεται να καλεί προς εκτέλεση
κάποιο υποπρόγραμμα χωρίς παραμέτρους. Π.χ. - διαδικασία printlines, - ενσωματωμένες συναρτήσεις date, time, now. περισσότερα του ενός υποπρογράμματα. Ένα υποπρόγραμμα ενδέχεται να έχει τοπικές μεταβλητές. 29
30
Πρόγραμμα [28] Ένα αρχείο, το parag.txt, περιέχει τα παρακάτω στοιχεία παραγωγών, των οποίων η σοδειά καταστράφηκε: - Αριθμό Μητρώου, - Επώνυμο, - Όνομα, - Είδος προϊόντος που καλλιεργεί: Σίτος (Σ), Αραβόσιτος (Α) κλπ - Καλλιεργούμενη έκταση, σε στρέμματα. Να γραφεί πρόγραμμα το οποίο: 1. Διαβάζει τα παραπάνω στοιχεία του parag.txt. 2. Για κάθε παραγωγό σίτου: (i) Υπολογίζει ως ποσόν αποζημίωσής του, ευρώ για καθένα από τα πρώτα 30 στρέμματα, ευρώ για καθένα από τα τυχόν επόμενα 20 στρέμματα, ευρώ για καθένα από τα τυχόν υπόλοιπα στρέμματα. (ii) Εκτυπώνει σε ένα αρχείο εξόδου τον Αριθμό Μητρώου, Όνομα και Επώνυμό του καθώς και το ποσόν της αποζημίωσης που δικαιούται. 3. Υπολογίζει και εμφανίζει στη οθόνη: (i) το πλήθος των σιτοπαραγωγών, (ii) το συνολικό ποσόν που θα εισπράξουν όλοι οι σιτοπαραγωγοί, (iii) το μέσο ποσόν που θα εισπράξει κάθε σιτοπαραγωγός.
31
Αρχεία Περιεχόμενο Αρχείου Εισόδου (parag.txt)
1, ΑΒΡΑΜΙΔΗΣ, ΑΒΡΑΑΜ, Σ, 20 2, ΒΑΣΙΛΕΙΟΥ, ΒΑΣΙΛΕΙΟΣ, Α, 45 3, ΔΗΜΗΤΡΙΟΥ, ΔΗΜΗΤΡΙΟΣ, Σ, 40 4, ΓΕΩΡΓΙΟΥ, ΓΕΩΡΓΙΟΣ, Α, 55 5, ΘΕΟΔΩΡΟΥ, ΘΕΟΔΩΡΟΣ, Σ, 50 6, ΙΩΑΝΝΟΥ, ΙΩΑΝΝΗΣ, Κ, 65 7, ΝΙΚΟΛΑΟΥ, ΝΙΚΟΛΑΟΣ, Σ, 60 8, ΠΕΤΡΙΔΗΣ, ΠΕΤΡΟΣ, Κ, 75 Αναμενόμενο Περιεχόμενο Αρχείου Εξόδου (eispr.txt) 1, ΑΒΡΑΑΜ, ΑΒΡΑΜΙΔΗΣ, 12000 3, ΔΗΜΗΤΡΙΟΣ, ΔΗΜΗΤΡΙΟΥ, 22000 5, ΘΕΟΔΩΡΟΣ, ΘΕΟΔΩΡΟΥ, 26000 7, ΝΙΚΟΛΑΟΣ, ΝΙΚΟΛΑΟΥ, 29000
32
0. Χωρίς Υποπρόγραμμα
33
Χωρίς Υποπρόγραμμα [28] Option Explicit Dim am As Integer
Dim epon As String Dim onoma As String Dim eidos As String Dim ektasi As Single Dim poso As Single Dim synolo As Single Dim plithos As Integer Private Sub Command1_Click() ' 1. Διαχείριση Αρχείων Open "parag.txt" For Input As #1 Open "eispr.txt" For Output As #2 synolo = 0 plithos = 0 (συνεχίζει) 33
34
Χωρίς Υποπρόγραμμα [28] Do While Not (EOF(1)) Input #1, am, epon, onoma, eidos, ektasi If eidos = "Σ" Then If ektasi <= 30 Then poso = 600 * ektasi Else If ektasi <= 50 Then poso = * ektasi poso = * ektasi End If plithos = plithos + 1 synolo = synolo + poso Print #2, am & ",", onoma & ",", epon & ",", poso Loop (συνεχίζει)
35
Χωρίς Υποπρόγραμμα [28] Close #1 Close #2 If plithos > 0 Then Print "ΠΛΗΘΟΣ: " & plithos Print "ΣΥΝΟΛΟ: " & synolo Print "ΜΕΣΟΣ ΟΡΟΣ:" & synolo / plithos Else Print "ΔΕΝ ΥΠΑΡΧΟΥΝ ΣΙΤΟΠΑΡΑΓΩΓΟΙ." End If End Sub (τέλος)
36
1. Με Υποπρόγραμμα Συνάρτηση
36
37
Με Συνάρτηση (τροποποιήσεις) [29]
If eidos = "Σ" Then ' Κώδικάς χωρίς συνάρτηση (παλιός) If ektasi <= 30 Then poso = 600 * ektasi Else If ektasi <= 50 Then poso = * ektasi poso = * ektasi End If plithos = plithos + 1 synolo = synolo + poso Print #2, am & ",", onoma & ",", epon & ",", poso If eidos = "Σ" Then ' Κώδικάς με συνάρτηση (νέος) poso = apozimiosi(ektasi) plithos = plithos + 1 synolo = synolo + poso Print #2, am & ",", onoma & ",", epon & ",", poso End If 37
38
Με Συνάρτηση (τροποποιήσεις) [29]
If eidos = "Σ" Then poso = apozimiosi(ektasi) plithos = plithos + 1 synolo = synolo + poso Print #2, am & ",", onoma & ",", epon & ",", poso End If Function apozimiosi(e As Single) If e <= 30 Then apozimiosi = 600 * e Else If e <= 50 Then apozimiosi = * e apozimosi = * e End If End Function (τέλος)
39
Με Υποπρόγραμμα Συνάρτηση [29]
(Πλήρες Πρόγραμμα) Option Explicit Dim am As Integer Dim epon As String Dim onoma As String Dim eidos As String Dim ektasi As Single Dim poso As Single Dim synolo As Single Dim plithos As Integer (συνεχίζει) 39
40
Με Υποπρόγραμμα Συνάρτηση [29]
(Πλήρες Πρόγραμμα) Private Sub Command1_Click() ' 1. Διαχείριση Αρχείων Open "parag.txt" For Input As #1 Open "eispr.txt" For Output As #2 synolo = 0 plithos = 0 Do While Not (EOF(1)) Input #1, am, epon, onoma, eidos, ektasi If eidos = "Σ" Then poso = apozimiosi(ektasi) plithos = plithos + 1 synolo = synolo + poso Print #2, am & ",", onoma & ",", epon & ",", poso End If Loop Close #1 Close #2 40 (συνεχίζει)
41
Με Υποπρόγραμμα Συνάρτηση [29]
(Πλήρες Πρόγραμμα) If plithos > 0 Then Print "ΠΛΗΘΟΣ: " & plithos Print "ΣΥΝΟΛΟ: " & synolo Print "ΜΕΣΟΣ ΟΡΟΣ:" & synolo / plithos Else Print "ΔΕΝ ΥΠΑΡΧΟΥΝ ΣΙΤΟΠΑΡΑΓΩΓΟΙ." End If End Sub (συνεχίζει) 41
42
Με Υποπρόγραμμα Συνάρτηση [29]
(Πλήρες Πρόγραμμα) Function apozimiosi(e As Single) If e <= 30 Then apozimiosi = 600 * e Else If e <= 50 Then apozimiosi = * e apozimosi = * e End If End Function (τέλος) 42
43
2. Με Υποπρόγραμμα Διαδικασία
44
Με Υποπρόγραμμα Διαδικασία [30]
(τροποποιήσεις) If eidos = "Σ" Then ' Κώδικάς με συνάρτηση (παλιός) poso = apozimiosi(ektasi) plithos = plithos + 1 synolo = synolo + poso Print #2, am & ",", onoma & ",", epon & ",", poso End If If eidos = "Σ" Then ' Κώδικάς με διαδικασία (νέος) apozimiosi ektasi, poso plithos = plithos + 1 synolo = synolo + poso Print #2, am & ",", onoma & ",", epon & ",", poso End If
45
Με Υποπρόγραμμα Διαδικασία [30]
(τροποποιήσεις) If eidos = "Σ" Then apozimiosi ektasi, poso plithos = plithos + 1 synolo = synolo + poso Print #2, am & ",", onoma & ",", epon & ",", poso End If Sub apozimiosi(e As Single, p As Single) If e <= 30 Then p = 600 * e Else If e <= 50 Then p = * e p = * e End If End Sub (τέλος)
46
Με Υποπρόγραμμα Διαδικασία [30]
(Πλήρες Πρόγραμμα) Option Explicit Dim am As Integer Dim epon As String Dim onoma As String Dim eidos As String Dim ektasi As Single Dim poso As Single Dim synolo As Single Dim plithos As Integer (συνεχίζει) 46
47
Με Υποπρόγραμμα Διαδικασία [30]
(Πλήρες Πρόγραμμα) Private Sub Command1_Click() ' 1. Διαχείριση Αρχείων Open "parag.txt" For Input As #1 Open "eispr.txt" For Output As #2 synolo = 0 plithos = 0 Do While Not (EOF(1)) Input #1, am, epon, onoma, eidos, ektasi If eidos = "Σ" Then apozimiosi ektasi, poso plithos = plithos + 1 synolo = synolo + poso Print #2, am & ",", onoma & ",", epon & ",", poso End If Loop Close #1 Close #2 (συνεχίζει) 47
48
Με Υποπρόγραμμα Διαδικασία [30]
(Πλήρες Πρόγραμμα) If plithos > 0 Then Print "ΠΛΗΘΟΣ: " & plithos Print "ΣΥΝΟΛΟ: " & synolo Print "ΜΕΣΟΣ ΟΡΟΣ:" & synolo / plithos Else Print "ΔΕΝ ΥΠΑΡΧΟΥΝ ΣΙΤΟΠΑΡΑΓΩΓΟΙ." End If End Sub (συνεχίζει) 48
49
Με Υποπρόγραμμα Διαδικασία [30]
(Πλήρες Πρόγραμμα) Sub apozimiosi(e As Single, p As Single) If e <= 30 Then apozimiosi = 600 * e Else If e <= 50 Then apozimiosi = * e apozimosi = * e End If End Sub (τέλος) 49
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.