Αποστολέας Θέμα: Διορθώσεις Βιβλίου Προγραμματισμός Υπολογιστών Γ ΕΠΑΛ  (Αναγνώστηκε 17762 φορές)

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3133
  • to Iterate is human to Recurse divine
Αυτό δεν είναι σωστό. Μπορεί να δουλεύει, δηλαδή χρηστικά να φαίνεται έτσι, όμως ο μηχανισμός μεταβίβασης παραμέτρων δεν έχει καμία σχέση με το mutability ενός αντικειμένου. π.χ. στο παρακάτω παράδειγμα
Κώδικας: Python
  1. def byvalueString( s ):
  2.     s = s + " version 3 "
  3.  
  4. s = "python"
  5. byvalue(s)
  6.  
το αποτέλεσμα θα είναι "python". Το αντικείμενο δεν θα αλλάξει. Αυτό όμως θα συμβεί όχι γιατί το πέρασμα είναι κατά τιμή αλλά επειδή χρησιμοποιούμε το τελεστή ανάθεσης τιμής για να "τροποποιήσουμε" το αντικείμενο. Στην πραγματικότητα δεν τροποποιούμε το αντικείμενο αλλά δημιουργούμε ένα νέο το οποίο όμως ορίζεται μόνο τοπικά μέσα στη συνάρτηση. Εδώ θα πρέπει να διευκρινήσουμε τα εξής:
Περνιέται αντίγραφο όχι όλου του αντικειμένου αλλά μόνο της αναφοράς του. Άρα αν πειράξουμε την αναφορά αυτή η αλλαγή δεν περνάει στο κύριο πρόγραμμα. Θα πρέπει να πειράξουμε το αντικείμενο αλλά δεν μπορούμε γιατί είναι immutable.
Η ιδέα μοιάζει λίγο με τον τρόπο με τον οποίο περνιούνται τα αντικείμενα στη Java. Δεν λέω ότι είναι το ίδιο αλλά είναι κάτι κοντινό για να καταλάβουμε τι συμβαίνει.
Δες τώρα το παρακάτω παράδειγμα:
Κώδικας: Python
  1. def byvalueList( L ):
  2.     L = L + [100]
  3. L = [1,2,3]
  4. byvalueList(L)
  5. print L
  6.  
που θα εμφανίσει [1,2,3]. Η λίστα δεν θα αλλάξει παρόλο που είναι mutable, αφού έχει δημιουργηθεί μια νέα λίστα με τον τελεστή "="
Κοίτα όμως παρακάτω:
Κώδικας: Python
  1. def byrefList( L ):
  2.     L.append(100)
  3. L = [1,2,3]
  4. byvalueList(L)
  5. print L
  6.  
Τώρα η λίστα θα αλλάξει γιατί έχουμε καλέσει μια member function. Τέτοια μέθοδος δεν υπάρχει σε string γιατί είναι immutable.

Καλό θα ήταν οι παραπάνω έννοιες να παρουσιαστούν με τη μορφή παραδειγμάτων στον διερμηνευτή και να γίνει συζήτηση με τους μαθητές.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

anastasd7

  • Νέος
  • *
  • Μηνύματα: 1
Συνάδελφοι θα ήθελα να επισημάνω και εγώ με τη σειρά μου ένα λαθάκι που εντόπισα. Στο πρόγραμμα με την range στη σελίδα 139 του βιβλίου το αποτέλεσμα θα είναι 4950 και όχι 5050 όπως φαίνεται στο βιβλίο.

mimisss

  • Νέος
  • *
  • Μηνύματα: 9
Ουδέν σχόλιον.
« Τελευταία τροποποίηση: 13 Ιούν 2019, 03:08:12 μμ από mimisss »
Καθηγητής ΠΕ86 στο 1ο ΕΠΑΛ Άστρους

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3133
  • to Iterate is human to Recurse divine
Σε πολλά προβλήματα αρκεί να ελέγξουμε την ύπαρξη και όχι τη θέση.
Αυτό είναι πολύ πιο γενικό, διότι κανείς δεν σου εξασφαλίζει ότι αυτό που ψάχνεις εμφανίζεται το πολύ μια φορά. Άρα και από θέμα απλότητας για τα παιδιά πολύ καλά κάνει και επιστρέφει True ή False.
Μπορεί κανείς να ζητήσει σαν άσκηση μια δυαδική αναζήτηση που θα επιστρέφει τη θέση.
« Τελευταία τροποποίηση: 16 Φεβ 2017, 11:25:45 πμ από evry »
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

mimisss

  • Νέος
  • *
  • Μηνύματα: 9
Ουδέν σχόλιον.
« Τελευταία τροποποίηση: 13 Ιούν 2019, 03:07:24 μμ από mimisss »
Καθηγητής ΠΕ86 στο 1ο ΕΠΑΛ Άστρους

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3133
  • to Iterate is human to Recurse divine
οκ γράψαμε λάθος τη δυαδική αναζήτηση.
Στείλε όμως ένα email και στους συγγραφείς ενός από τα πιο δημοφιλή βιβλία για αλγορίθμους σε Python  (σελ. 155)
Problem Solving with Algorithms and Data Structures
να το διορθώσουν και αυτοί, μια και το παρατήρησες εσύ. Εγώ θα ενημερώσω τη συγγραφική ομάδα.
Επίσης στείλε και στους διαχειριστές της διαδικτυακής έκδοσης του βιβλίου
https://interactivepython.org/runestone/static/pythonds/SortSearch/TheBinarySearch.html
να διορθώσουν και αυτοί το λάθος τους.

Α και στείλε και ένα μήνυμα αν θες και στους καθηγητές των αντίστοιχων μαθημάτων στα πανεπιστήμια του Toronto και του Wisconsin να το διορθώσουν και αυτοί γιατί έχουν κάνει το ίδιο λάθος.
http://pages.cs.wisc.edu/~bobh/367/SORTING.html#bin
http://www.cs.toronto.edu/~reid/search/bincode.html
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

mipap

  • Νέος
  • *
  • Μηνύματα: 2
Συνάδελφοι, ο αλγόριθμος στη συνάρτηση της σελίδας 84 δεν δουλέυει. Αν αλλάξει το range του 2ου for και μειωθεί η εσοχή από το 2ο for και μετά οπως παρακάτω, τοτε δουλεύει:
def insertionSort(array):
    for i in range(1,len(array)):
        value=array
        pos=i
        # αναζήτηση
        while pos>0 and array[pos-1]>value:
            pos=pos-1
        #μετακινηση των στοιχείων μια θέση δεξια
        for j in range(i-1,pos-1,-1):
            array[j+1]=array[j]
        #το στοιχειο τοποθετειται στη θέση pos
        array[pos]=value

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3133
  • to Iterate is human to Recurse divine
έχεις δίκιο, η έκδοση που δίνεις είναι η σωστή.
Ο αλγόριθμος πάντως είναι εκτός ύλης.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

aprekates

  • Βετεράνος
  • ****
  • Μηνύματα: 87
    • Enomem
Έχω την εξής παρατήρηση σε σχέση με την επεξήγηση-ανάλυση του αλγορίθμου της φυσαλίδας στη σελίδα79.
Ενώ στην αρχή της σελίδας αναφέρεται ότι "πρέπει να εκτελέσουμε το παραπάνω τμήμα κώδικα τόσες φορές όσες είναι τα στοιχεία της, δηλαδή Ν", αμέσως παρακάτω "καταλήγουμε στον αλγόριθμο" που όμως εκτελείται για Ν-1 φορές (for i in range(1,N,1)).
Προφανώς ο συντάκτης έχει λάβει υπόψη του την παρατήρηση που αναφέρει στη συνέχεια: "φαίνεται ότι δεν χρειάζονται Ν επαναλήψεις, αλλά Ν-1" και  που οδηγούν στον βελτιωμένο τελικό αλγόριθμο της σελίδας 80.
Πιστεύω ότι πρέπει να διορθωθεί η εξωτερική for του αλογορίθμου της σελίδας 79 σε  for i in range(0,N,1): έτσι ώστε αφενός να υπάρχει αντιστοιχία με το κείμενο και αφετέρου να είναι πιο κατανοητές οι παρατηρήσεις που οδηγούν στη βελτίωση του αλγορίθμου της σελ.80.

Νομίζω το λάθος στη σελ 79 δεν ειναι στο (1,Ν,1) αλλά στο μέσα fοr
που πρέπει να γίνει range(N-1,0,-1)  αλλιώς δεν θα συμμετέχει στις συγκρίσεις το στοιχείο array[0].

 Το δοκίμασα και σε κώδικα . Ο κωδικας του βιβλιου αφηνει το πρωτο στοιχειο απειραχτο.




evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3133
  • to Iterate is human to Recurse divine
@aprekates
έχεις δίκιο, τουλάχιστον η τελική έκδοση του αλγορίθμου στην επόμενη σελίδα είναι σωστή.
Έχουμε μαζέψει αρκετές διορθώσεις οι οποίες θα μπουν στην νέα έκδοση του βιβλίου. Προς το παρόν θα βγει μια λίστα με παροράματα.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 812
Δεν θέλω να υποβάλλω διόρθωση αλλά μία πρόταση. Σελίδα 139, δείχνει τους τρόπους διάσχισης μίας λίστας

Δεν θα ήταν ένας επίσης ωραίος τρόπος για να παρουσιάζεται στα παιδιά και ο παρακάτω:
Κώδικας: [Επιλογή]
for i in range(len(L)):
   print L[i]

demy8

  • Θαμώνας
  • ***
  • Μηνύματα: 35
 :)

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3133
  • to Iterate is human to Recurse divine
Στη σελίδα 139 αφού παρουσιαστεί η range έχει μερικά παραδείγματα διάσχισης λίστας με τον τρόπο που αναφέρεις
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

  • Η παιδεία είναι: στους φτωχούς, ΠΛΟΥΤΟΣ. Στους πλούσιους, ΣΤΟΛΙΔΙ. Στους νέους, ΚΑΙ ΤΑ ΔΥΟ (Διογένης) !
  • Δεινόσαυρος
  • *****
  • Μηνύματα: 1226
    • http://users.sch.gr/lambrosbouk
Έχουμε μαζέψει αρκετές διορθώσεις οι οποίες θα μπουν στην νέα έκδοση του βιβλίου. Προς το παρόν θα βγει μια λίστα με παροράματα.

Θα ανεβάσεις εδώ σε pdf όλες τις έως τώρα καταγεγραμμένες διορθώσεις; Μέχρι στιγμής υπάρχει η έκδοση 1.1 των διορθώσεων.
Λάμπρος Μπουκουβάλας

http://lambrosbouk.wordpress.com
http://blogs.sch.gr/lambrosbouk

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

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3133
  • to Iterate is human to Recurse divine
Ανέβασα στο πρώτο μήνυμα του thread την τελευταία έκδοση των διορθώσεων.
Προσοχή όμως!!! Αυτές είναι διορθώσεις που έχω συγκεντρώσει εγώ για τα κεφάλαια 5,8 μαζί με τις παρατηρήσεις των συναδέλφων σε αυτό το thread τους οποίους και ευχαριστώ πολύ.
Αυτές οι διορθώσεις δεν είναι επίσημες. Οι επίσημες διορθώσεις θα περιλαμβάνουν και άλλες που έχουν σημειωθεί και από τα άλλα μέλη της συγγραφικής ομάδας και θα δημοσιευθούν επίσημα από το ΙΕΠ.
Όποιος συνάδελφος έχει παρατήρηση, πρόταση ή διόρθωση μπορεί να το αναφέρει εδώ ώστε να είμαστε έτοιμοι για τη νέα έκδοση του βιβλίου του χρόνου στην οποία θα έχουν διορθωθεί όλα τα λάθη.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr