17 Μαρτίου 2019

Αναδρομικές συναρτήσεις

Αναδρομική λέγεται μια συνάρτηση που για να επιστρέψει το αποτέλεσμα που επιθυμούμε καλεί τον εαυτό της. Για παράδειγμα το παραγοντικό ενός ακέραιου θετικού αριθμού είναι ν!=1*2*.....*(ν-1)*ν
π.χ. 5!=1*2*3*4*5 και μπορεί να γραφτεί ν!=ν*(ν-1)! , 5!=4!*5

Παραδείγματα αναδρομικών συναρτήσεων στην Python

#Αναδρομικές συναρτήσεις
def factorial(n):
    p=1
    if n>=2:
        p=n*factorial(n-1)
    return p
def power(x,y):
    p=1
    if y>=1:
        p=x*power(x,y-1)
    return p

Παραδείγματα σε αρχείο python

9 Φεβρουαρίου 2019

Συνδυαστική άσκηση επιλογής, συνάρτησης, συμβολοσειρών, λιστών και αλγορίθμων


Ένα υποκατάστημα σούπερ μάρκετ έχει δημιουργήσει δύο λίστες για τα προϊόντα που πουλάει. Στη πρώτη  λίστα, με όνομα bcodes, είναι οι γραμμωτοί κωδικοί των προϊόντων (bar codes) σε μορφή συμβολοσειράς και στη δεύτερη, με όνομα sales, είναι οι αντίστοιχες συνολικές πωλήσεις των προϊόντων σε ευρώ (€) για το έτος 2018.





Π.χ.
bcodes [‘5201171000126’,’6901100341234’,…….,’8300112291033’],
sales  [1253,3872,…………..,7812]
Οι δύο λίστες έχουν ακριβώς τις ίδιες θέσεις.
Οι αντίστοιχες θέσεις της κάθε λίστας αναφέρονται στο ίδιο προϊόν.

Ο διευθυντής του υποκαταστήματος ζήτησε από τον προγραμματιστή να δημιουργήσει μια συνάρτηση σε python, με παραμέτρους τις δύο λίστες (bcodes,sales), που να αναζητά στην πρώτη λίστα τα ελληνικά προϊόντα, γνωρίζοντας ότι οι ελληνικοί γραμμωτοί κωδικοί ξεκινούν από ‘520’, και να βάζει τους ελληνικούς κωδικούς σε μια λίστα grcodes και τις αντίστοιχες πωλήσεις σε μια λίστα grsales. Στη συνέχεια θα ταξινομεί τις δύο λίστες grcodes και grsales σε φθίνουσα σειρά (από τις μεγαλύτερες προς τις μικρότερες) σύμφωνα με τις πωλήσεις και θα τις επιστρέφει (return) σε μορφή λίστας με δύο υπολίστες [grcodes,grsales].  



22 Απριλίου 2018

Άσκηση πανελλαδικών ΓΕΛ στο μάθημα ΑΕΠΠ προσαρμοσμένη για Python


Δημόσιος οργανισμός διαθέτει ένα συγκεκριμένο ποσό για την επιδότηση επενδυτικών έργων. Η επιδότηση γίνεται κατόπιν αξιολόγησης και αφορά δύο συγκεκριμένες κατηγορίες έργων με βάση τον προϋπολογισμό τους. Οι κατηγορίες και τα αντίστοιχα ποσοστά επιδότησης επί του προϋπολογισμού φαίνονται στον παρακάτω πίνακα.

Κατηγορία
έργου
Προϋπολογισμός
έργου σε ευρώ
Ποσοστό
Επιδότησης
Μικρή
200.000 – 299.999
60%
Μεγάλη
300.000 – 399.999
70%

Η εκταμίευση των επιδοτήσεων των αξιολογηθέντων έργων γίνεται με βάση τη χρονική σειρά υποβολής τους. Μετά από κάθε εκταμίευση μειώνεται το ποσό που διαθέτει ο οργανισμός. Να αναπτύξετε πρόγραμμα σε Python το οποίο:

1. Να διαβάζει το ποσό που διαθέτει ο οργανισμός για το πρόγραμμα επενδύσεων συνολικά, ελέγχοντας ότι το ποσό είναι μεγαλύτερο από 5.000.000 ευρώ.

2. Να διαβάζει το όνομα κάθε έργου. Η σειρά ανάγνωσης είναι η σειρά υποβολής των έργων. Η επαναληπτική διαδικασία να τερματίζεται, όταν αντί για όνομα έργου δοθεί η λέξη «ΤΕΛΟΣ», ή όταν το διαθέσιμο ποσό έχει μειωθεί τόσο, ώστε να μην είναι δυνατή η επιδότηση ούτε ενός έργου μικρής κατηγορίας. Για κάθε έργο, αφού διαβάσει το όνομά του, να διαβάζει και τον προϋπολογισμό του (δεν απαιτείται έλεγχος εγκυρότητας του προϋπολογισμού).

3. Για κάθε έργο να ελέγχει αν το διαθέσιμο ποσό καλύπτει την επιδότηση, και μόνον τότε να γίνεται η εκταμίευση του ποσού. Στη συνέχεια, να εμφανίζει το όνομα του έργου και το ποσό της επιδότησης που δόθηκε.

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

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


Ενδεικτική λύση

15 Απριλίου 2018

Άσκηση πανελλαδικών ΓΕΛ στο μάθημα ΑΕΠΠ προσαρμοσμένη για Python


Σε κάποιο σχολικό αγώνα, για το άθλημα «Άλμα εις μήκος» καταγράφεται για κάθε αθλητή η καλύτερη έγκυρη επίδοσή του. Τιμής ένεκεν, πρώτος αγωνίζεται ο περσινός πρωταθλητής. Η Επιτροπή του αγώνα διαχειρίζεται τα στοιχεία των αθλητών που αγωνίστηκαν. Να γράψετε πρόγραμμα σε python που:



1. Να ζητάει το ρεκόρ αγώνων και να το δέχεται, εφόσον είναι θετικό και μικρότερο των 10 μέτρων.

2. Να ζητάει τον συνολικό αριθμό των αγωνιζομένων και για κάθε αθλητή το όνομα και την επίδοσή του σε μέτρα. Τα στοιχεία αυτά (όνομα και επίδοση) θα καταχωρούνται σε δύο λίστες athlets και jumps με τη σειρά που αγωνίζονται.

3. Να εμφανίζει το όνομα του αθλητή με τη χειρότερη επίδοση.

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

5. Να βρίσκει και να εμφανίζει τη θέση που κατέλαβε στην τελική κατάταξη ο περσινός πρωταθλητής.

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



Ενδεικτική λύση

20 Μαρτίου 2018

Παράδειγμα δημιουργίας κλάσης Καλαθοσφαιριστή με ιδιότητες όνομα, ύψος, πόντους και φάουλ και μεθόδων σημείωσης πόντων και φάουλ

Παράδειγμα δημιουργίας κλάσης Καλαθοσφαιριστή με ιδιότητες όνομα, ύψος, πόντους και φάουλ και μεθόδων σημείωσης πόντων (scores) και φάουλ (makesfoul).
Οι αρχικές τιμές για τους πόντους και τα φάουλ ενός παίκτη (στιγμιότυπο κλάσης Καλαθοσφαιριστή) είναι 0.
Ζητάμε τα ύψη των παικτών h1 και h2
Δημιουργούμε δύο παίκτες (στιγμιότυπα) p1 και p2 με ονόματα Player1 και Player2 και ύψη h1 και h2.
Ακολουθούν οι παρακάτω ενέργειες:
Ο p1 κάνει φάουλ
Ο p2 βάζει 3 πόντους
Ο p1 κάνει φάουλ
Ο p2 βάζει 2 πόντους
Ο p2 κάνει φάουλ
Εμφανίζονται οι πόντοι και τα φάουλ των 2 παικτών

Το παράδειγμα