Εμφάνιση αναρτήσεων με ετικέτα Python. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα Python. Εμφάνιση όλων των αναρτήσεων

28 Φεβρουαρίου 2025

Θέμα Δ Προγραμματισμού Πανελλαδικές Ιούνιος 2024

 ΘΕΜΑ Δ

Δίνεται το αρχείο "branch.txt", το οποίο περιέχει ονόματα  υποκαταστημάτων μίας εταιρείας. Το αρχείο έχει ενδεικτικά την  παρακάτω δομή:

Micro_Vironas

Mega_Kifisia

.

.

Σε κάθε γραμμή του αρχείου "branch.txt" βρίσκεται το όνομα του υποκαταστήματος.

Να αναπτύξετε πρόγραμμα σε γλώσσα προγραμματισμού Python το οποίο:

 Δ1. Να διαβάζει το αρχείο "branch.txt" γραμμή προς γραμμή και να καταχωρίζει τα ονόματα των υποκαταστημάτων σε μία λίστα με όνομα ΟΝ. Θεωρήστε ότι στο αρχείο υπάρχουν τουλάχιστον δύο (2) υποκαταστήματα.

Μονάδες  4

 Δ2. Για κάθε υποκατάστημα:

α) Να διαβάζει την ημερήσια είσπραξη για κάθε μία από τις τριάντα (30) ημέρες του μήνα Ιουνίου (μον.3).

β) Να υπολογίζει το σύνολο των εισπράξεων του μήνα Ιουνίου και να το καταχωρίζει σε λίστα με όνομα

S_POSO (μον.4).

Μονάδες  7 

 Δ3.

α) Να υπολογίζει και να εμφανίζει τον μέσο όρο των εισπράξεων όλων των υποκαταστημάτων για τον μήνα Ιούνιο. 

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

Μονάδες  6

 Δ4.

 Να ταξινομεί τη λίστα S_POSO με χρήση του αλγορίθμου ταξινόμησης της ευθείας ανταλλαγής (φυσαλίδα – bubble sort) σε φθίνουσα σειρά, αναδιατάσσοντας συγχρόνως τη λίστα  ΟΝ, έτσι ώστε να διατηρείται η αντιστοιχία ονομάτων  υποκαταστημάτων – εισπράξεων. Σε περίπτωση * ισότητας εισπράξεων να γίνεται ταξινόμηση με αλφαβητική σειρά ως προς τα ονόματα της λίστας ΟΝ.

Μονάδες  8


 

* ΚΏΔΙΚΑΣ ΓΙΑ ΤΗΝ ΠΕΡΙΠΤΩΣΗ ΙΣΟΤΗΤΑΣ

for i in range (n-1):

    for j in range(n-1,i,-1):

        if S_POSO[j]>S_POSO[j-1]:

            S_POSO[j],S_POSO[j-1]=S_POSO[j-1],S_POSO[j]

            ON[j],ON[j-1]=ON[j-1],ON[j]

        elif S_POSO[j]==S_POSO[j-1]:

            if ON[j]<ON[j-1]:

                ON[j],ON[j-1]=ON[j-1],ON[j]

Εκφώνηση 

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

17 Μαρτίου 2024

Γέμισμα (εγγραφή) αρχείου και διάβασμα (ανάγνωση) αρχείου

 Γέμισμα αρχείου με προκαθορισμένο και μη προκαθορισμένο πλήθος γραμμών.

Ανάγνωση και εμφάνιση γραμμών αρχείου με for και με readline()

Αρχείο Python 


 


Εφαρμογή λειτουργίας r+ σε αρχείο

 Πρόγραμμα σε Python που ζητάει και γεμίζει ένα αρχείο με ακέραιους αριθμούς από το 1 - 100 μέχρι να δοθεί ακέραιος εκτός του εύρους 1-100. Οι αριθμοί γράφονται στο αρχείο σε μορφή συμβολοσειράς 3 χαρακτήρων και αλλαγή γραμμής π.χ. αν 5 γράφεται 005, αν 56 γράφεται 056.

Στη συνέχεια ανοίγουμε το αρχείο με τη λειτουργία r+ και διαβάζουμε 4 χαρακτήρες (την συμβολοσειρά 3 χαρακτήρων και την αλλαγή γραμμής).

Αν ο ακέραιος αριθμός που περιέχεται σε αυτούς τους χαρακτήρες είναι μικρότερος του 50 μετακινούμαστε στην αρχή της γραμμής μετακινούμενοι -5 χαρακτήρες πίσω με τη μέθοδο seek. Μετακινούμαστε -5 επειδή η μέθοδος seek υπολογίζει την αλλαγή γραμμής ως δύο χαρακτήρες. Στη συνέχεια γράφουμε στη θέση του αριθμού τρία Χ και αλλαγή γραμμής  --> "ΧΧΧ\n" και μετακινούμαστε στο τρέχον σημείο για να διαβάσουμε την επόμενη γραμμή 4 χαρακτήρων.

Όταν διαβάσει κενούς χαρακτήρες "" σταματάει η επανάληψη.

Ακολουθούν οι οθόνες από την εκτέλεση του προγράμματος (Το αρχείο πριν και μετά την εφαρμογή της r+):

Αρχείο Python
 

Αρχεία Python - Δραστηριότητα 3

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

Προτεινόμενη λύση 

Αρχείο txt ως είσοδο - όνομα αρχείου. Να αντιγραφεί στον ίδιο φάκελο με το αρχείο Python

 

8 Φεβρουαρίου 2022

Δημιουργία και ταξινόμηση τυχαίας λίστας

 

Να γίνει πρόγραμμα που δημιουργεί μια λίστα 10 τυχαίων μοναδικών αριθμών από το το 1 έως το 100 και μετά την ταξινομεί σε αύξουσα σειρά και την εμφανίζει

Προτεινόμενη λύση 

Συνάρτηση που ταξινομεί λογικές τιμές

 Δραστηριότητα 5 - αλγόριθμοι


Να γράψετε μια συνάρτηση σε Python η οποία θα δέχεται μια λίστα με λογικές τιμές True/False και θα διαχωρίζει τις τιμές αυτές, τοποθετώντας τα True πριν από τα False.

Προτεινόμενη λύση 

Συνάρτηση που ελέγχει αν μια λίστα είναι σε αύξουσα σειρά

Δραστηριότητα 3 - αλγόριθμοι


Να γράψετε μια συνάρτηση σε Python, η οποία θα δέχεται μια λίστα, θα ελέγχει αν τα στοιχεία της είναι σε αύξουσα σειρά και θα επιστρέφει αντίστοιχα True ή False. 

Υπόδειξη: Χρησιμοποιήστε μια λογική μεταβλητή.

Προτεινόμενη λύση 

13 Ιανουαρίου 2022

Εφαρμογή στοίβας με προσθήκη και αφαίρεση αριθμών


Να γράψετε ένα πρόγραμμα το οποίο θα διαβάζει αριθμούς από το πληκτρολόγιο, μέχρι να δοθεί ο αριθμός 0. Κάθε φορά που θα διαβάζει έναν θετικό αριθμό, θα τον προσθέτει σε μια στοίβα. Όταν διαβάζει έναν αρνητικό αριθμό θα αφαιρεί τόσους αριθμούς από τη στοίβα, αν αυτό είναι δυνατόν και θα τους εμφανίζει στην οθόνη.

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

 

24 Δεκεμβρίου 2021

Κλήση συνάρτησης από συνάρτηση - συμβολοσειρά και λίστα

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

 

 

 

 Ενδεικτική απάντηση με κυρίως πρόγραμμα - παράδειγμα εφαρμογής

28 Ιανουαρίου 2021

Επίλυση εξίσωσης δευτέρου βαθμού με συνάρτηση της Python 2.7

 Επίλυση εξίσωσης δευτέρου βαθμού της μορφής αx2 + βx + γ = 0, με α ≠ 0

με τη χρήση της διακρίνουσας Δ με Python 2.7

Δ = β2 – 4αγ

Η εξίσωση

αx2 + βx + γ = 0, α ≠ 0
Δ > 0Έχει δύο ρίζες άνισες τις pic236
Δ = 0Έχει μια διπλή ρίζα τη pic238
Δ < 0Είναι αδύνατη στο R .

Πηγή: 

http://users.sch.gr/fergadioti1/Institude_Geogebra/applets/A_alg_3exisoseis/33.html


Στην Python δημιουργούμε μία συνάρτηση quad(a,b,c) με παραμέτρους τους συντελεστές της δευτεροβάθμιας εξίσωσης α,β και γ (a,b,c).

Πρώτα υπολογίζουμε την διακρίνουσα  Δ = β2 – 4αγ    (d=b**2-4*a*c)

d<0 επιστρέφει το d και τα μηνύματα: "No real solution",  "No real solution"

Αλλιώς αν το d>0 η συνάρτηση επιστρέφει το d και δύο ρίζες:

x1=(-b+math.sqrt(d))/(2*a)

x2=(-b-math.sqrt(d))/(2*a)

return d,x1,x2

Τέλος αν d=0 (d==0)  η συνάρτηση επιστρέφει το d και μία διπλή ρίζα:

 x=-b/float(2*a)

return d,x,x

 

Η συνάρτηση και οι κλήσεις της συνάρτησης από τη γραμμή εντολών (εκτέλεση)


 
Το αρχείο Python με τη συνάρτηση επίλυσης δευτεροβάθμιας εξίσωσης

27 Ιανουαρίου 2021

Συνάρτηση δημιουργίας λίστας της ακολουθίας Fibonacci με Python

 

Οι Αριθμοί Φιμπονάτσι είναι οι αριθμοί της παρακάτω ακέραιας ακολουθίας:

 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 , … 

Εξ ορισμού, οι πρώτοι δύο αριθμοί Φιμπονάτσι είναι το 0 και το 1, και κάθε επόμενος αριθμός είναι το άθροισμα των δύο προηγούμενων.

Σε μαθηματικούς όρους, η ακολουθία Fn των αριθμών Φιμπονάτσι ορίζεται από τον αναδρομικό τύπο: 

F n = F n − 1 + F n − 2  

με F 0 = 0 και F 1 = 1 

Πηγή: https://el.wikipedia.org/wiki/Ακολουθία_Φιμπονάτσι

Στην Python γράφουμε μία συνάρτηση που δημιουργεί μια λίστα με την ακολουθία Fibonacci m αριθμών. Στο κυρίως πρόγραμμα ζητάμε το πλήθος m που πρέπει να είναι μεγαλύτερο του 2.

Στη συνάρτηση που παίρνει ως παράμετρο το πλήθος m των αριθμών της ακολουθίας δημιουργούμε τη λίστα με την ακολουθία. Αρχικά είναι [0,1] και κάθε νέο στοιχείο είναι το άθροισμα των δύο προηγούμενων. Αν n=len(L) τότε L.append(L[n-2]+L[n-1]). Αυτό επαναλαμβάνεται όσο ισχύει n<m ώστε να έχει η ακολουθία ακριβώς m αριθμούς.

 
Η συνάρτηση python και το κυρίως πρόγραμμα

20 Ιανουαρίου 2021

Βελτιωμένος αλγόριθμος ταξινόμησης ευθείας ανταλλαγής (bubble sort) - Δημιουργία τυχαίας λίστας διαφορετικών ακέραιων αριθμών (random - randint)

 


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

Όμως, στην κανονική του μορφή, κάνει συγκεκριμένα περάσματα (n-1, όπου n το μήκος της λίστας προς ταξινόμηση), ακόμα κι όταν η λίστα είναι ήδη ταξινομημένη.

Αυτό μπορεί να διορθωθεί ελέγχοντας αν στο τέλος ενός περάσματος από τα n-1, προκύψουν μηδενικές ανταλλαγές.

Στο αρχείο python που παρατίθεται, έχουμε την απλή υλοποίηση και την βελτιωμένη. Η λίστα των αριθμών παράγεται με την χρήση της βιβλιοθήκης random και της συνάρτησης randint, ώστε να έχουμε μια τυχαία και όχι προσχεδιασμένη λίστα.    

Αρχείο Python 1

 Αρχείο Python 2

Στην εικόνα που ακολουθεί φαίνεται ο κώδικας του προγράμματος και η εκτέλεση του, όπου φαίνεται ξακάθαρα ότι σε μία τυχαία αταξινόμητη λίστα στην απλή υλοποίηση του bubble sort κάνουμε δύο περάσματα επιπλέον σε σχέση με την βελτιωμένη υλοποίηση. Σε μία λίστα 10 αριθμών η διαφορά φαίνεται μικρή, αλλά σε πολύ μεγάλες λίστες υπάρχει μεγάλη εξοικονόμηση επαναλήψεων.


 

 

10 Ιουνίου 2020

Αφαίρεση αρνητικών αριθμών από μια λίστα με την χρήση της μεθόδου pop()


Πρόγραμμα με συνάρτηση που αφαιρεί τους αρνητικούς αριθμούς από μία λίστα ακεραίων αριθμών.
Η διάσχιση της λίστας πρέπει να γίνει από το τέλος προς την αρχή της λίστας για να μην παραλείπονται θέσεις και να μην έχουμε το μήνυμα "out of range", δηλαδή να ελέγχουμε μία θέση της λίστας που δεν υπάρχει πλέον.

Πρόγραμμα

[1, -2, -5, 3, 5, 87, 23, 78, -1923, -5, -45, -53, 100]
[1, 3, 5, 87, 23, 78, 100]



Παράδειγμα με παράλληλη ταξινόμηση





Διπλή παράλληλη ταξινόμηση, πρώτα σε αύξουσα σειρά και μετά σε φθίνουσα σειρά ώστε τα γράμματα που έχουν ίδιο αριθμό να είναι ταξινομημένα αλφαβητικά. Π.χ. 'b','f' που έχουν 85 και 'g', 'h' που έχουν 79

Παράδειγμα 

 Πριν την ταξινόμηση
['c', 'f', 'a', 'h', 'd', 'b', 'e', 'i', 'g']
[89, 85, 92, 79, 83, 85, 95, 82, 79]

Μετά την ταξινόμηση
['e', 'a', 'c', 'b', 'f', 'd', 'i', 'g', 'h']
[95, 92, 89, 85, 85, 83, 82, 79, 79]

1 Ιουνίου 2020

Πρόγραμμα Python που μεταφέρει τις λέξεις από ένα κείμενο σε λίστα


Να γίνει πρόγραμμα σε Python που:
1) Ζητάει από τον χρήστη ένα κείμενο (συμβολοσειρά) που αποτελείται από λέξεις.
2) Στη συνέχεια οι λέξεις μεταφέρονται μία μία σε μία λίστα. Θεωρούμε ότι μία λέξη τελείωσε όταν εντοπιστεί το κενό διάστημα " " ή ένας από τους χαρακτήρες ! , . : ; ? 
3) Να εμφανιστούν μία μία οι λέξεις που μεταφέρθηκαν στη λίστα.

Παρατήρηση: Οι χαρακτήρες ! , . : ; ? και το κενό διάστημα " " δεν μεταφέρονται στη λίστα, ακόμα κι αν υπάρχουν στη σειρά.
Π.χ.

Καλημέρα, που είσαι; Καιρό έχω να σε δω!!

Καλημέρα
που
είσαι
Καιρό
έχω
να
σε
δω

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


10 Μαΐου 2020

Θέμα πανελλαδικών ΓΕΛ (Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον) προσαρμοσμένο για Python


Στην 27η Βαλκανιάδα Πληροφορικής που θα διεξαχθεί στην Αθήνα τον Σεπτέμβριο του 2020, συμμετέχουν 40 μαθητές. Κάθε μαθητής παίρνει έναν κωδικό από 1 έως και 40, ο οποίος αντιστοιχεί στη σειρά που δήλωσε συμμετοχή. Κάθε μαθητής καλείται να επιλύσει έξι (6) προβλήματα. Για κάθε πρόβλημα αναπτύσσει τη λύση του σε μία γλώσσα προγραμματισμού και την υποβάλλει για βαθμολόγηση. Η λύση βαθμολογείται σε ακέραια κλίμακα από 0 έως 100. Κατά τη διάρκεια του διαγωνισμού κάθε μαθητής και για κάθε πρόβλημα μπορεί να υποβάλλει τη λύση του όσες φορές θέλει.

Να αναπτύξετε πρόγραμμα σε ΓΛΩΣΣΑ το οποίο:

1.Να διαβάζει επαναληπτικά τα ονόματα των μαθητών και να τα καταχωρίζει στη λίστα ΟΝ. Επίσης, να αρχικοποιεί με την τιμή 0 όλα τα στοιχεία της λίστας VATH (λίστα δύο διαστάσεων με 40 υπολίστες 6 στοιχείων), η οποία θα περιέχει τη βαθμολογία κάθε μαθητή για κάθε πρόβλημα.

2. Κάθε φορά που μία λύση προβλήματος υποβάλλεται και βαθμολογείται, το πρόγραμμα να διαβάζει τον κωδικό του μαθητή (από 1 έως και 40), αριθμό του προβλήματος (από 1 έως και 6) και τη βαθμολογία του (από 0 έως και 100).  Η βαθμολογία να καταχωρίζεται στην αντίστοιχη θέση της λίστας VATH μόνο αν είναι μεγαλύτερη από τη βαθμολογία που είναι ήδη καταχωρισμένη. Για τον τερματισμό της εισαγωγής δεδομένων το πρόγραμμα να εμφανίζει το μήνυμα «Υπάρχει νέα λύση προβλήματος; ΝΑΙ / ΟΧΙ». Αν εισαχθεί η τιμή «ΟΧΙ», να τερματίζεται η εισαγωγή δεδομένων.

3. Να υπολογίζει και να καταχωρίζει στην λίστα SV τα αθροίσματα των βαθμολογιών κάθε μαθητή στα έξι προβλήματα. Για τον σκοπό αυτό να καλεί μόνο μια φορά το υποπρόγραμμα με όνομα YSV. Να αναπτύξετε το υποπρόγραμμα YSV το οποίο να δέχεται ως είσοδο την λίστα VATH και να επιστρέφει ως έξοδο συμπληρωμένη την λίστα SV.

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

25 Μαρτίου 2020

Παράδειγμα με Κλάση Student (μαθητής) και μεθόδους


Δημιουργία κλάσης Student με χαρακτηριστικά (attributes):
  • am (Αριθμός Μητρώου), 
  • name (Ονοματεπώνυμο), 
  • sclass (Τάξη),
  • avg (Γενικό μέσο όρο βαθμολογίας), 
  • absences (Απουσίες)

Δημιουργία μεθόδων για:
  • Αύξηση απουσιών (absup)
  • Προαγωγή στην επόμενη τάξη (taxiup)
Δημιουργούμε στιγμιότυπο ζητώντας με την εντολές input και raw_input τα χαρακτηριστικά.

Γίνονται οι απαραίτητοι έλεγχοι τιμών

Ζητάμε τις απουσίες για τους 9 μήνες του σχ. έτους αυξάνοντας τις απουσίες με τη μέθοδο absup

Αν οι συνολικές απουσίες είναι πάνω από 114 ή ο μέσος όρος βαθμολογίας κάτω από 9.5 ο μαθητής δεν προάγεται αλλιώς προάγεται στην επόμενη τάξη

Το αρχείο Python

16 Φεβρουαρίου 2020

Διάσχιση γραμμών αρχείου με την δομή while. Παράδειγμα με υπολογισμό αθροίσματος

Πρόγραμμα που ανοίγει ένα αρχείο κειμένου που περιέχει ακέραιους θετικούς αριθμούς.
Διαβάζει μία μία τις γραμμές του αρχείου με τη χρήση της δομής while και τη μέθοδο readline() και προσθέτει τις γραμμές στο άθροισμα αφού τις μετατρέψει σε ακέραια μορφή.
Το αρχείο τελειώνει όταν η readline() επιστρέψει κενή συμβολοσειρά ""

Ο κώδικας του προγράμματος