Λύσεις Δραστηριοτήτων βιβλίου "Προγραμματισμός Υπολογιστών Γ' ΕΠΑΛ"

Ξεκίνησε από taxata, 10 Νοε 2016, 08:07:04 ΜΜ

« προηγούμενο - επόμενο »

taxata

Καλησπέρα σε όλους,
παραθέτω ένα σύνδεσμο με προτάσεις επίλυσης των δραστηριοτήτων του διδακτικού υλικού
του μαθήματος του Προγραμματισμού Υπολογιστών της Γ' ΕΠΑΛ.
Οι λύσεις  εμπεριέχουν τις εκφωνήσεις,
μικρή τεκμηρίωση και τα σενάρια επίλυσης με ένα βαθμό ελευθερίας ως προς τα αρχικά προβλήματα
για να διευκολύνουν τη λειτουργικότητα εκτέλεσης του κώδικα.

Ελπίζω να φανούν χρήσιμες.
http://blogs.sch.gr/chatzipap/new_epal_programming/

Τάσος_Χατζηπαπαδόπουλος
Κύριε δεν έχω internet
http://users.sch.gr/chatzipap/

demy8



dimitra

Ενιαίο, δημόσιο και δωρεάν δωδεκάχρονο σχολείο.

taxata

Η έκδοση των λύσεων
στον παραπάνω σύνδεσμο ενημερώθηκε.
::)
Τάσος_Χατζηπαπαδόπουλος
Κύριε δεν έχω internet
http://users.sch.gr/chatzipap/

Λάμπρος Μπουκουβάλας

Λάμπρος Μπουκουβάλας
MSc - MRes

http://blogs.sch.gr/lambrosbouk

Ο Θουκυδίδης  (που τον διαβάζουν οι ξένοι, αλλά όχι εμείς)  έγραφε: «Αταλαίπωρος τοις πολλοίς η ζήτησις της αληθείας, και επί τα ετοίμα μάλλον τρέπονται» (Ι, 20, 3). Οι περισσότεροι δηλαδή αναζητούν αβασάνιστα την αλήθεια και στρέφονται σε ό,τι βρίσκουν έτοιμο. Δεν προβληματίζονται...

kouretas

Για τη δραστηριότητα 3 σελ 103. Όσον αφορά το σκέλος εγγραφής στο δεύτερο αρχείο
το περιεχόμενο του πρώτου με αντίστροφη σειρά παραθέτω μία λύση χωρίς τη χρήση reversed list.

Επίσης θα ήθελα να ρωτήσω αν η μέθοδος reversed μπορεί να θεωρηθεί εντός ύλης.

f1 = open("output.txt", "r")
f2 = open("output2.txt", "w")
s1=""
for item in f1:
    print item
    s1=str(item+s1)
f2.write(str(s1))
f1.close()
f2.close()

evry

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

Κώδικας: python
# Δραστηριότητα 3, σελ. 103
def askisi3():
    input = open('input.txt', 'r')
    string = ''
    for line in input:
        print line
        string = line + string
    output = open('output.txt', 'w')
    output.write(string)
    input.close()
    output.close()


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

Επίσης θα πρέπει να εξηγήσεις ότι επειδή αυτά που μεταφέρουμε είναι strings περιέχουν μέσα τον χαρακτήρα τέλους γραμμής '\n'. Αν δώσεις αριθμούς και τους μετατατρέψουν με την int και μετά τους πετάξουν σε ένα αρχείο εκεί θα δουν ότι εκτυπώνονται ο ένας δίπλα στον άλλον και όχι κάτω από τον άλλον
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

polikarpos

Ευχαριστούμε για τις  λύσεις!
Μια μικρή διόρθωση στη
ΚΕΦΑΛΑΙΟ 5ο ΚΛΑΣΣΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ
Δραστηριότητα 4 / Σελίδα 87 (βελτιωμένη φυσαλίδα)
# Βελτιωμένη Φυσαλίδα
def shortBubblesort(aList):
        done = False
        i = 0
        while i < len(aList) - 1  and done == False :
            done = True
            for j in range(len(aList) - 1, i , -1):
                if aList[j] < aList[j-1] :
                    aList[j], aList[j-1] = aList[j-1], aList[j]
                    done = False
               


έχει ξεχαστεί το i=i+1
Βέβαια και έτσι δουλεύει  το οποίο σημαίνει ότι θα μπορούσαμε να το λύσουμε κι έτσι
# Βελτιωμένη Φυσαλίδα
def shortBubblesort(aList):
        done = False
        
        while  done == False : #ή not done
            done = True
            for j in range(len(aList) - 1, i , -1):
                if aList[j] < aList[j-1] :
                    aList[j], aList[j-1] = aList[j-1], aList[j]
                    done = False
               


οι μαθητές  μου πάντως (αυτοί που θυμούνται  το break)προτιμούν τη παρακάτω  λύση
               
N = len( array )
for i in range(1 , N, 1):
    done = True
    for j in range(N-1 , i-1 , -1): 
        if array[ j ] < array[ j-1 ] :
            array [ j ] , array [ j-1 ] = array[ j-1 ] , array[ j]
            done = False
    if done:
        break
               


www.sepchiou.gr
moodle.sepchiou.gr
museum.sepchiou.gr

taxata

@polikarpos
Ορθή η παρατήρησή σου συνάδελφε ευχαριστώ..
Για το "break" που χρησιμοποιούν οι μαθητές σου ίσως θέλει λίγο προσοχή (ως βολικότατη εντολή διαφυγής παρασύρθηκα και εγώ μου φαίνεται το χρησιμοποίησα κάπου στις λύσεις) γιατί αφενός δεν αναφέρεται στο βιβλίο (οπότε είναι ένα ερώτημα εάν μπορεί να χρησιμοποιηθεί σε εξετάσεις) αφετέρου ίσως εγείρει κουβέντα εάν και κατά πόσο παραβιάζει τις αρχές του δομημένου προγραμματισμού.
Τάσος_Χατζηπαπαδόπουλος
Κύριε δεν έχω internet
http://users.sch.gr/chatzipap/

evry

Η δίκη μου γνώμη είναι ότι στον σύγχρονο προγραμματισμό η χρήση της break επιβάλλεται. Δεν είναι κάτι που μπορεί να δημιουργήσει σοβαρά προβλήματα όπως ήταν η goto ή ακόμα και η continue της C. Σε πολλές περιπτώσεις θα διευκολύνει πολύ τους μαθητές.
Το ότι κάτι δεν υπακούει πιστά στις αρχές του δομημένου προγραμματισμού δεν είναι απαραίτητα κακό.
Το θέμα είναι κατά πόσο η χρήση της break θα διευκολύνει ή θα χειροτερέψει τη μαθησιακή διαδικασία. Στην αρχή και εγώ έχω δει στην τάξη ότι οι μαθητές προτιμούν την break. Αλλά αυτό είναι λογικό αφού οι μαθητές θα προτιμήσουν ότι τους κάνει τη ζωή εύκολη.
Το ερώτημα είναι : Μπορούν να απαντήσουν πάντα ποια είναι η επόμενη εντολή που θα εκτελεστεί μετά τη break? Αν το έχουν καταλάβει αυτό νομίζω ότι δεν υπάρχει πρόβλημα.

Ωστόσο η break δεν υπάρχει σε κανένα από τα δυο βιβλία. Ο λόγος είναι ότι ήδη το μάθημα έχει αρκετές αλλαγές σε σχέση με το προηγούμενο, και δεν υπάρχει λόγος να πέσουμε με τα μούτρα στην Python. Ας εξασφαλίσουμε πρώτα μια ομαλή μετάβαση και τα στοιχειώδη και μετά μπορούμε να δούμε και πρακτικές που αλλάζουν αρκετά τον τρόπο σκέψης π.χ. ας εξασφαλίσουμε πρώτα ότι όλοι οι συνάδελφοι κάνουν Python στην Β ώστε να διευκολύνουν το μάθημα της Γ και ότι η υπάρχουσα ύλη Β+Γ μπορεί να διδαχθεί σε 200 ώρες (4ώρεςx25 εβδομάδες για κάθε έτος) και αν χρειάζονται διορθωτικές κινήσεις.
Άρα καλό θα ήταν να μην δείχνουμε την break στους μαθητές γιατί αν τη χρησιμοποιήσουν στις εξετάσεις θα υπάρχει θέμα, αφού δεν είναι στην ύλη τους.
ΥΓ. Ωστόσο υπάρχει μη δομημένη τεχνική στην ύλη και αυτή είναι η χρήση της return  ;)
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

polikarpos

H χρήση του   break συμφωνώ ότι δεν είναι στην ύλη. Πέρσυ δεν είχαμε ιδέα τι θα είναι και τι όχι στην ύλη και το χρησιμοποίησα. 
Από τους   μαθητές μου 3 στους 9 θυμούνται τη χρήση  του break. Αυτό ομολογώ ότι σπάνια έως ποτέ δε συμβαίνει στα ΕΠΑΛ και δε μπορώ να μην το ενθαρρύνω παρότι τους είπα ότι είναι εκτός  ύλης.
Πάντως το να συζητάμε τέτοια θέματα και ταυτόχρονα να μην είναι σίγουρο ότι όλοι κάνουν Python στη Β είναι κάπως.....
www.sepchiou.gr
moodle.sepchiou.gr
museum.sepchiou.gr

evry

Πάντως η break δεν είναι κάτι καινούργιο, δεν είναι αποκλειστικό χαρακτηριστικό της Python. Και η Pascal έχει break αλλά εκεί κανείς δεν την χρησιμοποιούσε.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Λάμπρος Μπουκουβάλας

Ας μη βασιζόμαστε τόσο πολύ στη διδαγμένη ύλη για Python της β' λυκείου.
Μη ξεχνάτε ότι πρόκειται για μονόωρο μάθημα.
Λάμπρος Μπουκουβάλας
MSc - MRes

http://blogs.sch.gr/lambrosbouk

Ο Θουκυδίδης  (που τον διαβάζουν οι ξένοι, αλλά όχι εμείς)  έγραφε: «Αταλαίπωρος τοις πολλοίς η ζήτησις της αληθείας, και επί τα ετοίμα μάλλον τρέπονται» (Ι, 20, 3). Οι περισσότεροι δηλαδή αναζητούν αβασάνιστα την αλήθεια και στρέφονται σε ό,τι βρίσκουν έτοιμο. Δεν προβληματίζονται...

evry

Λάμπρο για το μάθημα "Αρχές Προγραμματισμού" λέμε που διδάσκεται 4 ώρες (1Θ + 3Ε)
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr