ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Επαναληπτικές Ασκήσεις Χειμερινό Εξάμηνο 2016

Σχετικά έγγραφα
ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Επαναληπτικές Ασκήσεις Χειµερινό Εξάµηνο 2014

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Επαναληπτικές Ασκήσεις

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

Σημειωματάαριο Δευτέρας 16 Οκτ. 2017

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Σειρά Προβλημάτων 5 Λύσεις

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΡΙΤΗ 13 ΙΟΥΝΙΟΥ 2017

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Σημειωματάριο Τετάρτης 4 Οκτ. 2017

Λογικές εκφράσεις και μεταβλητές

Κεφάλαιο 8: Προγραμματίζοντας αλγορίθμους έξυπνα και δημιουργικά

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

Εισαγωγή στον Προγραμματισμό

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

ΗΥ-150. Προγραμματισμός

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

Πληρουορική Γ Γσμμασίοσ

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

2.1 Διαιρετότητα, ισοϋπόλοιποι αριθμοί. q Z, a = b q + r.

ΗΥ-150. Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

ΣΥΝΟΛΟ ΣΕΛΙ ΩΝ: ΕΠΤΑ (7)

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ-ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΠΑΛ- ΚΑΝΙΓΓΟΣ 13- ΤΗΛ

Θέματα Προγραμματισμού Η/Υ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Πληροφορική 2. Αλγόριθμοι

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

Διαδικασιακός Προγραμματισμός

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ. Για i από 1 μέχρι Μ Εμφάνισε A[4,i] Τέλος_επανάληψης. (μονάδες 6) ΤΕΛΟΣ 1ης ΑΠΟ 7 ΣΕΛΙΔΕΣ

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

A2. Να γράψετε για κάθε περίπτωση τον αριθμό της πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

for for for for( . */

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

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Εισαγωγή στους Υπολογιστές

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναδροµικές Συναρτήσεις Χειµερινό Εξάµηνο 2014

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 (ΕΠΤΑ)

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

Πανεπιστήμιο Πελοποννήσου. Σχολή Θετικών Επιστημών & Τεχνολογίας. Τμήμα Επιστήμης & Τεχνολογίας Υπολογιστών. Προγραμματισμός Ι Εργαστήριο

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

ΕΥΡΕΣΗ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Έλεγχος Ροής - Παραδείγµατα Χειµερινό Εξάµηνο 2014

ΚΟΡΥΦΑΙΟ ΦΡΟΝΤΙΣΤΗΡΙΟ korifeo.gr Μάθημα :Προγραμματισμός Εξεταζόμενη ύλη : 2o, 3o,4o,5o κεφάλαιο ΘΕΜΑ 1 ο

Σημειώσεις. Ο αριθμός των στοιχείων μίας λίστας μπορεί να βρεθεί με χρήση της συνάρτησης len:

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

Εισαγωγή στον Προγραμματισμό

Διαδικασιακός Προγραμματισμός

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

επιστρέφει αριθµό που προκύπτει µε αντιστροφή των στοιχείων του πρώτου

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

Άσκηση 1. Ποια από τα κάτω αλφαριθμητικά είναι αποδεκτά ως ονόματα μεταβλητών σε έναν αλγόριθμο i. Τιμή

ΕΠΛ131 Αρχές Προγραμματισμού

Εισαγωγή στην PHP. ΕΣΔ 232 Διαχείριση Δεδομένων στη Κοινωνία της Πληροφορίας. Περιεχόμενα. Περιεχόμενα

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Transcript:

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό Επαναληπτικές Ασκήσεις Χειμερινό Εξάμηνο 2016

Othello Υλοποίηση της συνάρτησης που υπολογίζει τις αναστροφές κάτω-αριστερά Αν συναντήσουμε μηδενικό σημαίνει ότι δεν κλείνει το διάστημα και άρα δεν έχουμε αναστροφές. Επιστρέφουμε κενή λίστα Φτάσαμε στα όρια χωρίς να κλείσει το διάστημα και άρα δεν υπάρχουν αναστροφές. Επιστρέφουμε κενή λίστα Ν = 8 def down_left(b,i,j,c): outlist = [] for k,l in zip(range(i-1,-1,-1),range(j+1,n)): if B[k][l] == c: return outlist if B[k][l] == 0: return [] else: outlist.append((k,l)) return [] Αν συναντήσουμε το ίδιο χρώμα κλείνει το διάστημα και άρα επιστρέφουμε τις θέσεις που έχουμε μαζέψει Βρήκαμε το αντίθετο χρώμα και άρα κρατάμε την θέση σαν υποψήφια για αναστροφή

Μεταβλητές Τι θα τυπώσουν τα παρακάτω προγράμματα? Γιατί? def add(): y = x+1 print(y) x = 3 add() 4 H add χρησιμοποιεί την καθολική μεταβλητή x def add(): x = x+1 print(x) x = 3 add() UnboundLocalError: local variable 'x' referenced before assignment Από την στιγμή που εκχωρούμε τιμή στην x γίνεται τοπική μεταβλητή

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? def add(x): y = x+1 print(y) 4 5 x = 3 y = 5 add(x) print(y) Το y είναι τοπική μεταβλητή στην add και δεν αλλάζει την μεταβλητή y στο κύριο πρόγραμμα

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? def createlist(x): L = [x,2*x] print(l) [2,4] [1,2] L = [1,2] x = 2 createlist(x) print(l) Το L είναι τοπική μεταβλητή στην add και δεν αλλάζει την μεταβλητή L στο κύριο πρόγραμμα

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? def add(x): x = x+1 print(x) 4 3 x = 3 add(x) print(x) Το x είναι παράμετρος στην add και άρα τοπική μεταβλητή. Επειδή είναι μη μεταβαλλόμενο αντικείμενο, η αλλαγή του x δεν μεταφέρεται στο κύριο πρόγραμμα

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? [1,2,3] [1,2,3] def add(l): L.append(3) print(l) Χ = [1,2] add(χ) print(χ) Οι μεταβλητές Χ και L δείχνουν στο ίδιο αντικείμενο, και η λίστα είναι μεταβαλλόμενο αντικείμενο. H αλλαγή στα περιεχόμενα του L αλλάζει και τα περιεχόμενα του Χ

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? [1,2,3] [1,2] def add(l): L = [1,2,3] print(l) Χ = [1,2] add(χ) print(χ) Τα Χ και L δείχνουν αρχικά στο ίδιο αντικείμενο. H αλλαγή στην τιμή του L αλλάζει το που δείχνει το L, αλλά επειδή είναι τοπική μεταβλητή δεν αλλάζει που δείχνει το Χ. Τα περιεχόμενα του αντικειμένου στο οποίο δείχνει το Χ δεν μεταβάλλονται.

Λίστες Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα 2 λίστες και θα επιστρέφει το γινόμενo των 2 «μεσαίων» στοιχείων τους. Π.χ. L1 = [5,1,3,2,4], L2 = [9,2,1,8,0] median(l1) = 3, median(l2) = 2 result = 6 def multimedians(l1,l2): L1.sort() L2.sort() return L1[len(L1)//2]*L2[len(L2)//2] 9

Αλφαριθμητικά Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα αλφαριθμητικό, το οποίο θα είναι ένα κείμενο, και θα επιστρέφει τη λέξη με τους περισσότερους χαρακτήρες. Η συνάρτηση θα πρέπει να μην υπολογίζει τυχόν τελείες ως μέρη των λέξεων. Π.χ. s = I went to the shops today. I bought a cake. result = bought def longest(s): s2 = s.replace('.',' ') l = s2.split() res = '' for w in l: if len(w)>len(res): res = w return res 10

Αλφαριθμητικά Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα αλφαριθμητικό και θα επιστρέφει ένα αντίγραφό του, όπου οι τελευταίοι 5 χαρακτήρες θα είναι με ανεστραμμένη σειρά. Π.χ. s = I went to the market result = I went to the mtekra def rev(s): x = s[-5:] l = list(x) l.reverse() y = ''.join(l) return s[:-5]+y 11

Λεξικά Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα αλφαριθμητικό, το οποίο θα είναι ένα κείμενο, και θα επιστρέφει ένα λεξικό, όπου για κάθε μήκος θα καταγράφεται πόσες λέξεις έχουν αυτό το μήκος. Η συνάρτηση θα πρέπει να μην υπολογίζει τυχόν τελείες ως μέρη των λέξεων. Π.χ. s = I went to the shops today. I bought a cake. result = {1: 3, 2: 1, 3: 1, 4: 2, 5: 2, 6: 1} def lengths(s): s2 = s.replace('.',' ') l = s2.split() d = {} for w in l: if len(w) in d: d[len(w)] += 1 else: d[len(w)] = 1 return d 12

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα και θα επιστρέφει μια νέα λίστα, η οποία θα έχει μόνο τα στοιχεία που δεν είναι 0. Π.χ. L = [3,2,1,0,3,2,0,2] result = [3,2,1,3,2,2] def nozeros(l): L2 = [] for x in L: if x!= 0: L2.append(x) return L2 13

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα και θα επιστρέφει μια νέα λίστα, η οποία θα έχει μόνο τα στοιχεία που δεν είναι 0, σε μία γραμμή χρησιμοποιώντας list comprehension. Π.χ. L = [3,2,1,0,3,2,0,2] result = [3,2,1,3,2,2] def nozeros(l): return [x for x in L if x!= 0] 14

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα και θα επιστρέφει μια νέα λίστα, η οποία θα έχει μόνο τα στοιχεία μέχρι το πρώτο 0. Π.χ. L = [3,2,1,0,3,2,0,2] result = [3,2,1] def untilzero(l): L2 = [] for x in L: if x == 0: break L2.append(x) return L2 15

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα και θα επιστρέφει μια νέα λίστα, η οποία θα έχει μόνο τα στοιχεία μέχρι το πρώτο 0, αλλά χωρίς τα 2. Π.χ. L = [3,2,1,0,3,2,0,2] result = [3,1] def untilzeronotwos(l): L2 = [] for x in L: if x == 0: break if x!= 2: L2.append(x) return L2 16

Έλεγχος ροής Γράψτε την προηγούμενη συνάρτηση ξανά, αλλά με χρήση while αντί για if. def untilzeronotwos2(l): L2 = [] while L: x = L.pop(0) if x == 0: break if x!= 2: L2.append(x) return L2 17

Έλεγχος ροής Γράψτε μία συνάρτηση η οποία παίρνει μια λίστα σαν όρισμα και αφαιρεί όλα τα μηδενικά, αλλάζοντας την λίστα-όρισμα αντί να επιστρέφει μία νέα λίστα. def nozeros(l): c = 0 for x in L: if x == 0: c+=1 for i in range(c): L.remove(0) def nozeros(l): while 0 in L: L.remove(0) 18

Έλεγχος ροής Γράψτε μία συνάρτηση η οποία παίρνει μια λίστα σαν όρισμα και αφαιρεί όλα τα στοιχεία μέχρι το πρώτο μηδενικό, αλλάζοντας την λίστα-όρισμα αντί να επιστρέφει μία νέα λίστα. def removeuntilzero(l): while L.pop(0)!= 0: pass 19

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα θετικό ακέραιο n και θα τυπώνει τις δυνάμεις του 2 απο το 2 1 εώς το 2 n χωρισμένες με διαστήματα Π.χ. n = 6 result = 2 4 8 16 32 64 def powers(n): for i in range(1,n+1): print(pow(2,i), end=' ') 20

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα αριθμών και θα επιστρέφει True αν η λίστα είναι αριθμητική ακολουθία, αλλιώς False. Αριθμητική ακολουθία: η διαφορά μεταξύ συνεχόμενων στοιχείων είναι σταθερή Π.χ. L = [3,6,9,12,15] True L = [3,6,9,10,13] False L = [3] True def arithmetic(l): if len(l)<2: return True diff = L[1]-L[0] for i in range(1,len(l)-1): if L[i+1]-L[i]!= diff: return False return True 21

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα αλφαριθμητικό και θα επιστρέφει το ακρώνυμό του. Η συνάρτηση θα πρέπει να μετατρέπει τα πεζά σε κεφαλαία όπου χρειάζεται Π.χ. s = central processing unit result = CPU def acronym(s): L = s.split() res = '' for w in L: res = res + w[0].upper() return res 22

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα L θα μετατρέπει κάθε στοιχείο L[i] της L στο άθροισμα των στοιχείων απο τη θέση i και μετά Π.χ. L = [2, 5, 6, 4, 3, 0] L = [20, 18, 13, 7, 3, 0] def rangesum(a): for i in range(len(a)-1): A[i] = sum(a[i:]) def rangesum(a): if len(a)>1: for i in range(len(a)-2,-1,-1): A[i] += A[i+1] 23

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα L, θα βρίσκει την υπολίστα της L με το μέγιστο άθροισμα και θα επιστρέφει το άθροισμα. Π.χ. L = [2, -5, 6, 4, -3, 10, -2, 1] result = 17 def maxsublist(l): m = L[0] # first elem of L for i in range(len(l)): #start index for j in range(i,len(l)): #end index if sum(l[i:j]) > m: m = sum(l[i:j]) return m 24

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα δισδιάστατο πίνακα Α και θα τον μετατρέπει ώστε κάθε στοιχείο στην πρώτη στήλη να είναι το άθροισμα όλων των στοιχείων της γραμμής του Π.χ. A = [[2, 5], [6, 4]] A = [[7, 5], [10, 4]] def rowsum(a): for i in range(len(a)): A[i][0] = sum(a[i]) 25

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα θετικό ακέραιο n και θα επιστρέφει πόσες φορές μπορούμε να διαιρέσουμε το n με το 2 (ακέραια διαίρεση) μέχρι το n να γίνει 1 Π.χ. n = 25 result = 4 def intlog(n): i=0 while n>1: n//=2 i+=1 return i 26

List Comprehension Συμπληρώστε το παρακάτω πρόγραμμα με μία γραμμή κώδικα ώστε να δημιουργεί μια λίστα L με τις λέξεις στο του s που δεν περιέχουν το γράμμα i s = this is a good day L = [w for w in s.split() if i not in w]

Συναρτήσεις Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν υποχρεωτικά ορίσματα δύο αριθμούς x και y και ένα προεραιτικό όρισμα z (z=1 αν δεν ορίζεται) και θα επιστρέφει τον αριθμό των βημάτων από τον x μέχρι τον y αν το κάθε βήμα είναι z. Π.χ. x = 4, y = 11, z =2 result = 4 (4-6, 6-8, 8-10, 10-11) def numsteps(x,y,z=1): if y<=x: return 0 numsteps = (y-x)//z if (y-x)%z: numsteps +=1 return numsteps 28

Συναρτήσεις και list comprehension Γράψετε μια συνάρτηση round(x) που να επιστρέφει τον πιο κοντινό ακέραιο στον x def round(x): if x-int(x) > 0.5: return int(x) + 1 else: return int(x) Συμπληρώστε το παρακάτω πρόγραμμα με μία γραμμή κώδικα ώστε να δημιουργεί μια λίστα Y με τις στρογγυλεμένες τιμές του Χ Χ = [1.2, 2.6, 3.7, 4.1] Υ = [round(x) for x in X]

Συναρτήσεις και list comprehension Γράψετε μια γραμμή κώδικα που υπολογίζει το ελάχιστο στοιχείο ενός δισδιάστατου πίνακα Α m = min([min(r) for r in A])

Αναδρομικές Συναρτήσεις Γράψτε μια αναδρομική συνάρτηση, η οποία θα υπολογίζει τον μέγιστο κοινό διαιρέτη δύο αριθμών χρησιμοποιώντας τον αλγόριθμο του Ευκλείδη: gcd(a,0) = a gcd(a,b) = gcd(b, a mod b) Π.χ. gcd(48,18) = gcd(18, 12) = gcd(12, 6) = gcd(6, 0) = 6 def gcd(a,b): if b==0: return a return gcd(b, a%b) # non-recursive def gcd(a,b): while b: a, b = b, a%b return a 31

Αναδρομικές Συναρτήσεις Γράψτε μια αναδρομική συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα θετικό ακέραιο n και θα επιστρέφει πόσες φορές μπορούμε να διαιρέσουμε το n με το 2 (ακέραια διαίρεση) μέχρι το n να γίνει 1 Π.χ. n = 25 result = 4 def intlog_rec(n): if n<=1: return 0 return 1 + intlog_rec(n//2) 32

Ταξινόμηση Τροποποιήστε τη bubblesort ώστε να ταξινομεί μια λίστα αριθμών βάζοντας πρώτα τους ζυγούς σε αύξουσα σειρά και μετά τους μονούς σε φθίνουσα σειρά Π.χ. [2, 5, 6, 4, 3, 0] -> [0, 2, 4, 6, 5, 3] def BubbleSort(lst): for i in range(len(lst)): # rounds for j in range(0,len(lst)-i-1): # i-th round if lst[j]%2 : # odd number if lst[j+1] % 2 == 0 or lst[j]<lst[j+1]: lst[j],lst[j+1] = lst[j+1],lst[j] else: # even number if lst[j+1] % 2 == 0 and lst[j]>lst[j+1]: lst[j],lst[j+1] = lst[j+1],lst[j] 33

Αρχεία Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα όνομα αρχείου, θα διαβάζει το αρχείο και θα γράφει σέ ένα άλλο αρχείο με όνομα stats.txt, τον αριθμό των χαρακτήρων, λέξεων, και γραμμών. Π.χ. testfile.txt Hello, World! How are you? stats.txt 26,5,2 def fstats(filename): try: f = open(filename) s = f.read() except IOError: print('error reading',filename) return g = open('stats.txt','w') g.write('%d,%d,%d' % (len(s),len(s.split()),s.count('\n')+1)) 34

Εξαιρέσεις Γράψτε μια συνάρτηση, η οποία θα ζητάει από το χρήστη να δίνει αριθμούς μέχρι να δώσει κενό. Η συνάρτηση να επιστρέφει τότε το μέσο όρο και τον μεσαίο (median) των αριθμών που έχουν εισαχθεί σαν μια πλειάδα. Αν ο χρήστης εισάγει μη έγκυρο αριθμό, η συνάρτηση θα επιστρέφει τα στατιστικά των μεχρι τότε αριθμών Π.χ. 13 1 2 4 4x result = (5, 4) 35

Εξαιρέσεις (συνέχεια) def stats(): L = [] while True: s = input() if not s: break try: L.append(eval(s)) except: break L.sort() if len(l)>0: return (float(sum(l))/len(l), L[len(L)//2]) 36

Τελική Εξέταση Ανοιχτά βιβλία: Μπορείτε να φέρετε μαζί σας τα βιβλία σας (σε έντυπη μορφή) και τις διαφάνειες του μαθήματος (σε έντυπη μορφή) και όποιες άλλες σημειώσεις θέλετε. Απαγορεύεται αυστηρά η ανταλλαγή έντυπου υλικού μεταξή των εξεταζομένων κατά τη διάρκεια της εξέτασης! Διάρκεια: 3:00 ώρες, έγκαιρη προσέλευση! Θέματα με στόχο: Την ανάπτυξη μιας συνάρτησης ή ένός προγράμματος που εκτελεί μια λειτουργία Την κατανόηση ενός δοθέντος προγράμματος ή συνάρτησης Την κατανόηση του χειρισμού των μεταβλητών. 37

Τελική Εξέταση Συμβουλές: Διαβάστε την ύλη προσεκτικά και σιγουρευτείτε ότι την κατανοείτε πλήρως. Εξασκηθείτε στο να βρίσκετε γρήγορα τις διαφάνειες που περιέχουν λεπτομέρειες που πιθανό να μην θυμάστε (π.χ. μεθόδους λιστών). Προετοιμαστείτε με πολλή εξάσκηση. Προσπαθήσετε να λύστε όσο πιο πολλές ασκήσεις μπορείτε. Κοιτάξετε ξανά τις ασκήσεις που κάναμε στο εργαστήριο. Διαβάστε όλα τα θέματα προσεκτικά πριν αρχίσετε να γράφετε. Κάποια από αυτά μπορεί να είναι πιο εύκολα από άλλα. Μην επιχειρήσετε να αντιγράψετε κάτι που δεν το καταλαβαίνετε. 38