Μια "αιρετική" αναζήτηση

Ξεκίνησε από gthal, 20 Ιαν 2011, 01:15:30 ΜΜ

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

gthal

Ένας μαθητής μου που γενικά δεν δέχεται να μαθαίνει πράγματα, αφού του έδειξα τη σειριακή αναζήτηση με τον τρόπο του βιβλίου (σχεδόν), άρχισε να λύνει τις ασκήσεις κάπως έτσι
  Εμφάνισε 'Δώσε στοιχείο προς αναζήτηση'
  Διάβασε x
  i← 1
  k← 1
  Όσο k=1 επανάλαβε 
	Αν A[i]=x τότε 
		k← 0
	αλλιώς_αν i=N τότε 
		k← 2
	Τέλος_αν 
	i← i+1
  Τέλος_επανάληψης 

  Αν k=0 τότε 
	Εμφάνισε 'Βέθηκε στη θέση ',i-1
  αλλιώς 
	Εμφάνισε 'Δεν βρέθηκε'
  Τέλος_αν

όπου Ν το μέγεθος του πίνακα βέβαια.

Η πρώτη μου αντίδραση ήταν "τι κάνεις εκεί !" αλλά μετά είδα ότι δεν έχει λάθος.
Είναι η πιο παρανοϊκή-αντιδραστική αναζήτηση που έχει τύχει να δω αλλά είναι σωστή (νομίζω).
Του είπα μόνο ότι ρισκάρει στη βιασύνη της διόρθωσης, σε μια τόσο τετριμμένη λειτουργία, ένα μάτι που έχει συνηθίσει να περιμένει διπλή συνθήκη στην όσο (η i<=N δεν λείπει από καμιά version που έχω δει ως τώρα), μια μεταβλητή για θέση και/ή μια λογική μεταβλητή, να το προσπεράσει εύκολα σαν λάθος.
Τι πιστεύετε;
Φιλικά,
Γιώργος Θαλασσινός

P.Tsiotakis

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

θα του έλεγα πως "είναι σα να πίνει γαλλικό καφέ σε ποτήρι κρασιού"




στον κλασσικό αλγόριθμο ξεδιπλώνεις και τη σκέψη σου:  "όσο δεν έχει εξαντληθεί ο πίνακας και δεν έχει βρεθεί το στοιχείο"

petrosp13

Ο αλγόριθμος του βιβλίου έχει πάρα πολλές αδυναμίες (περιττή λογική μεταβλητή κ.α.) και ένας καλός νους τις αντιλαμβάνεται αμέσως και σπεύδει να τις διορθώσει. Κάνουμε τέτοια κουβέντα στην τάξη με όσους νιώθουν
Εγώ θα τον επιβράβευα φυσικά και απλά θα του έλεγα ότι στους 2-3 τυποποιημένους αλγορίθμους που έχει το βιβλίο, καλό είναι να μην ρισκάρει αλλαγές στις εξετάσεις
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

P.Tsiotakis

Μια λογική μεταβλητή είναι πάντα περιττή και μπορεί να αντικατασταθεί, σαφώς...

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

petrosp13

Εννοώ ότι στην θέση της λογικής μεταβλητής, μπορεί να χρησιμοποιηθεί η μεταβλητή Θέση (Όσο Θέση=0)
Αν και είναι περίεργη η ιδέα να επιστρέφεται ως θέση η τιμή μηδέν αν δεν βρεθεί το αναζητούμενο στοιχείο
Γενικά έχει πολλές αδυναμίες ο αλγόριθμος που παρουσιάζεται στο βιβλίο
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

gthal

Παράθεση από: ptsiotakis στις 20 Ιαν 2011, 01:20:13 ΜΜ
θα του έλεγα πως "είναι σα να πίνει γαλλικό καφέ σε ποτήρι κρασιού"
Μου άρεσε αυτό  ;D

Πέτρο συμφωνώ, η χρήση της θέσης και της λογικής μεταβλητής είναι πλεονασμός.
Βρίσκω ότι τα παιδιά συμπαθούν περισσότερο τον αλγόριθμο με τη θέση αλλά τους λέω και τον αλγόριθμο με τη λογική μεταβλητή (χωρίς θέση), ώστε να εξοικειώνονται με τις λογικές μεταβλητές. Ουσιαστικά είναι η πρώτη στιγμή που βλέπουν πώς μπορεί να χρησιμοποιηθεί μια λογική μεταβλητή.
Φιλικά,
Γιώργος Θαλασσινός

DaKnOb

Δεν ξέρω για εσάς, αλλά εγώ πρώτη φορά που το έκανα μόνος μου έκανα αυτό:

//Δεδομένα Α,Ν,Query//
!Α = Μονοδιάστατος Πίνακας
!Ν = Μέγεθος Πίνακα
!Query = Λέξη προς αναζήτηση

!Αναζήτηση
Για ι από 1 μέχρι Ν
	Αν Α[ι] = Query τότε
		Εμφάνισε "Βρέθηκε στην θέση #", ι
		ι ← Ν + 1
	Τέλος_Αν
	Αν ι = Ν τότε
		Εμφάνισε "Δεν βρέθηκε"
	Τέλος_Αν
Τέλος_Επανάληψης


:P

P.Tsiotakis

πιθανώς θα πρέπει να διερευνήσεις και την ύπαρξη της δομής Όσο
  :police:

DaKnOb

Παράθεση από: Παναγιώτης Τσιωτάκης στις 25 Ιαν 2013, 11:34:50 ΜΜ
πιθανώς θα πρέπει να διερευνήσεις και την ύπαρξη της δομής Όσο
  :police:

Απλά μου αρέσουν οι εναλλακτικοί τρόποι σε όλα τα πράγματα. Γι αυτό ίσως και με έλκει το αντικείμενο.

gthal

Ναι, πολλοί μαθητές προτείνουν μια λύση που μοιάζει, όμως στα πλαίσια του μαθήματος απαγορεύεται να μεταβάλλουμε το μετρητή της για.
Φιλικά,
Γιώργος Θαλασσινός

DaKnOb

Παράθεση από: gthal στις 26 Ιαν 2013, 04:36:33 ΠΜ
Ναι, πολλοί μαθητές προτείνουν μια λύση που μοιάζει, όμως στα πλαίσια του μαθήματος απαγορεύεται να μεταβάλλουμε το μετρητή της για.

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

Κανένας

#11
και γιατι να μην κάνουμε αυτή:

θ<-0
Αρχή_επανάληψης
θ<-θ+1
Μέχρις_ότου Α[θ]=Query ή θ=Ν

Επιχειρήματα υπέρ:
1. Δεν χρειάζεται αποστήθιση, πράγμα που κάνουν κατά κανόνα οι μαθητές στον αλγόριθμο του βιβλίου. (Μόνο οι μαθητές;)
2. Για να βρεθεί χρειάζεται τουλάχιστον ένας έλεγχος (1η θέση). Τι λέμε συνέχεια για τη Μέχρις_ότου;
3. Η χρήση λογικής μεταβλητής είναι άστοχη εδώ,(Νομίζω είναι και η πρώτη φορά που χρησιμοποιείται στο βιβλίο)εφ' όσον η αναζήτηση
    σταματάει με την εύρεση. Αν θέλεις να διδάξεις τη χρήση λογικής μεταβλητής θα ήταν εύστοχο να το κάνεις με χρήση Για.
4. Αποδοτικότερος αλγόριθμος (εκτός ύλης, αλλά νομίζω πρέπει να αναφέρεται).

Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

evry

Δεν είναι πιο αποδοτικός.
Την ίδια πολυπλοκότητα έχει με όλους τους άλλους Ο(n).

Παράθεση από: nobody6 στις 14 Φεβ 2014, 11:10:31 ΜΜ
και γιατι να μην κάνουμε αυτή:

θ<-0
Αρχή_επανάληψης
θ<-θ+1
Μέχρις_ότου Α[θ]=Query ή θ=Ν

Επιχειρήματα υπέρ:
1. Δεν χρειάζεται αποστήθιση, πράγμα που κάνουν κατά κανόνα οι μαθητές στον αλγόριθμο του βιβλίου. (Μόνο οι μαθητές;)
2. Για να βρεθεί χρειάζεται τουλάχιστον ένας έλεγχος (1η θέση). Τι λέμε συνέχεια για τη Μέχρις_ότου;
3. Η χρήση λογικής μεταβλητής είναι άστοχη εδώ,(Νομίζω είναι και η πρώτη φορά που χρησιμοποιείται στο βιβλίο)εφ' όσον η αναζήτηση
    σταματάει με την εύρεση. Αν θέλεις να διδάξεις τη χρήση λογικής μεταβλητής θα ήταν εύστοχο να το κάνεις με χρήση Για.
4. Αποδοτικότερος αλγόριθμος (εκτός ύλης, αλλά νομίζω πρέπει να αναφέρεται).


What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Κανένας

#13
Είναι πιο αποδοτικός. Ο αλγόριθμος του βιβλίου έχει επιπλέον ένα Αν μέσα στην επανάληψη.
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

itt

Παράθεση από: nobody6 στις 15 Φεβ 2014, 01:34:16 ΜΜ
Είναι πιο αποδοτικός. Ο αλγόριθμος του βιβλίου έχει επιπλέον ένα Αν μέσα στην επανάληψη.

Το επιπλέον Αν δεν επηρρεάζει την τάξη πολυπλοκότητας του αλγορίθμου.

Νίκος Αδαμόπουλος

Παράθεση από: nobody6 στις 14 Φεβ 2014, 11:10:31 ΜΜ
3. Η χρήση λογικής μεταβλητής είναι άστοχη εδώ,(Νομίζω είναι και η πρώτη φορά που χρησιμοποιείται στο βιβλίο)εφ' όσον η αναζήτηση
    σταματάει με την εύρεση. Αν θέλεις να διδάξεις τη χρήση λογικής μεταβλητής θα ήταν εύστοχο να το κάνεις με χρήση Για.

Έστω και για μια φορά καλό είναι να δουν χρήση λογικής μεταβλητής. Άστοχη γιατί; Γιατί είναι πιο εύστοχο σε Για; Οι μαθητές μπορούν να πάρουν την ιδέα της λογικής μεταβλητής και να την χρησιμοποιήσουν και σε άλλες περιπτώσεις με μικρές προσαρμογές.

Παράθεση από: nobody6 στις 14 Φεβ 2014, 11:10:31 ΜΜ
4. Αποδοτικότερος αλγόριθμος (εκτός ύλης, αλλά νομίζω πρέπει να αναφέρεται).

Δεν είναι πιο αποδοτικός...

Κανένας

Δεν θεωρώ άστοχη τη λογική μεταβλητή αλλά τη χρήση της (εκμάθησή της) στη σειριακή αναζήτηση του βιβλίου.
Τη λογική μεταβλητή τη διδάσκω με το εξής πρόβλημα (χωρίς χρήση πίνακα):
"Γράψτε αλγόριθμο που διαβάζει 100 αριθμούς,  τυπώνει το άθροισμά τους  και μας πληροφορεί  αν διάβασε τον αριθμό 17".

Αν ο αλγόριθμος σταμάταγε με το διάβασμα του 17 η χρήση της λογικής μεταβλητής θα ήταν περιττή (άστοχη χρήση) γιατί την πληροφορία (αν δόθηκε το 17) θα την έπαιρνα απ' την τιμή της μεταβλητής με την οποία διαβάζω τους αριθμούς (α=17).
Στην πρώτη περίπτωση αντίθετα, η 100η (τελευταία) τιμή που δόθηκε στην μεταβλητή α δεν μου εξασφαλίζει  αν δόθηκε το 17,κι έτσι η λογική μεταβλητή μπορεί και γίνεται χρήσιμη.
Ανάλογα τα πράγματα αν τα παραπάνω γίνουν  με χρήση πίνακα.
Τώρα σχετικά με την απόδοση:
Σ' ένα πίνακα με 1 εκατομμύριο στοιχεία και το αναζητούμενο στοιχείο στην τελευταία θέση, ο αλγόριθμος του βιβλίου θα έκανε 1 εκατομμύριο συγκρίσεις
περισσότερες απ' τον προτεινόμενο. (Η πολυπλοκότητα φυσικά είναι ίδια Ο(Ν). και οι δύο έχουν μια απλή επανάληψη).
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

apoldem

Έχεις δίκιο nobody6 για την απόδοση. Άλλο πολυπλοκότητα άλλο απόδοση. Για ίδια πολυπλοκότητα ένας αλγόριθμος μπορεί να είναι πιο αποδοτικός από κάποιον άλλον. Η πολυπλοκότητα είναι εκτός ύλης αλλά η απόδοση; Αν δεν ενδιαφέρει καθόλου η απόδοση σε εκμάθηση αλγορίθμων τότε καλώς καταργείται το μάθημα. Μην τα θέλουμε όλα δικά μας.
Ο αλγόριθμος αναζήτησης του βιβλίου είναι πράγματι απαράδεκτος. Αυτό που προτείνεις όμως χάνει την τελευταία θέση (αν αυτό που ψάχνουμε είναι στην τελευταία θέση). Γιατί να μην γίνει με Όσο, που είναι και η κλασική σειριακή αναζήτηση:
θ <- 1
Όσο θ<Ν και Α[θ]<>Query επανάλαβε
  θ<-θ+1
Τέλος_επανάληψης
βρέθηκε <- θ<=Ν

nikolasmer

Παράθεση από: apoldem στις 16 Φεβ 2014, 10:08:31 ΠΜ
θ <- 1
Όσο θ<Ν και Α[θ]<>Query επανάλαβε
  θ<-θ+1
Τέλος_επανάληψης
βρέθηκε <- θ<=Ν

Έχω την εντύπωση πως και αυτός ο κώδικας δεν ελέγχει την τελευταία θέση.
Μερεντίτης Νικόλαος
Πληροφορικός

Κανένας

#19
Μετά το τέλος της επανάληψης μπαίνει ένα Αν έτσι κι αλλιώς, για να ελέγξουμε αν βρέθηκε το στοιχείο (εκεί γίνεται ο έλεγχος εύρεσης).
Με το Αν αυτό κανονίζουμε και τι θα επιστρέφει σαν αποτέλεσμα (ανάλογα αν η σειριακή είναι: τμήμα κώδικα, συνάρτηση, διαδικασία)

Αν Α[θ]=Query τότε
  !χρησιμοποιούμε την τιμή του θ αν είναι τμήμα κώδικα
  position<-θ            ! αν είναι συνάρτηση επιστρέφει position
  done<-ΑΛΗΘΗΣ      ! αν είναι διαδικασία επιστρέφει position και done
αλλιώς
  position<-0            ! αν είναι συνάρτηση επιστρέφει position

  done<-ΨΕΥΔΗΣ      ! αν είναι διαδικασία επιστρέφει position και done
Τέλος_Αν
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

apoldem

Σωστά nikolasmer! Ξέχασα ένα '='. Η συνθήκη στο Όσο είναι

Όσο θ<=Ν και Α[θ]<>Query επανάλαβε

μ' αρέσει που ξανάγραψα ολόκληρο τον αλγόριθμο για να ξανακάνει το ίδιο λάθος ;D

Κανένας

#21
Τώρα είναι λάθος!
Είναι πιθανό ο συγγραφέας της σειριακής του βιβλίου να κατέφυγε στη χρήση της λογικής μεταβλητής
θέλοντας να διορθώσει αυτό το λάθος.
Βγάζει τη συνθήκη Α[θ]<>Query (που δημιουργεί το λάθος) απ' το Όσο και τη βάζει μέσα στην επανάληψη
με τη μορφή του Αν και στη θέση της βάζει τη λογική μεταβλητή που παίρνει τιμή τερματισμού μέσα στο Αν.
Φυσικά είναι απλούστερο να διορθωθεί αν αντί θ<=Ν μπει θ<Ν.
Την τελευταία θέση την ελέγχει το εξωτερικό Αν το οποίο είναι έτσι κι αλλιώς απαραίτητο.

Επισυνάπτω σχετικό φύλλο εργασίας.
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

nikolasmer

Παράθεση από: apoldem στις 16 Φεβ 2014, 11:39:51 ΠΜ
Σωστά nikolasmer! Ξέχασα ένα '='. Η συνθήκη στο Όσο είναι

Όσο θ<=Ν και Α[θ]<>Query επανάλαβε

μ' αρέσει που ξανάγραψα ολόκληρο τον αλγόριθμο για να ξανακάνει το ίδιο λάθος ;D
Νομίζω ότι βγαίνει εκτός ορίων του πίνακα οταν και εφόσον γίνεται πλήρης αποσαφήνιση των λογικών τελεστών.
Μερεντίτης Νικόλαος
Πληροφορικός

apoldem

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

Νίκος Αδαμόπουλος

Παράθεση από: apoldem στις 16 Φεβ 2014, 01:13:07 ΜΜ
Εννοείται ότι δεν κάνουμε πλήρη αποτίμηση λογικών εκφράσεων. Δεν νομίζω να υπάρχει καμία δέσμευση από την πλευρά του βιβλίου, εκτός αν υπάρχει οδηγία από το υπουργείο και την αγνοώ.

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

P.Tsiotakis

βασικός στόχος του μαθήματος δεν είναι οι μαθητές να μάθουν να σκέφτονται και να διατυπώνουν σωστά και ολοκληρωμένα τη σκέψη τους;;

η μερική αποτίμηση δεν είναι σκέψη αλλά προγραμματιστικά τρικ, όπως τα άλματα στον κώδικα, το σπάσιμο της δομής Για και αρκετά άλλα

φιλικά, Π.

apoldem

@Νίκος Αδαμόπουλος
Αυτή η συντηρητική προσέγγιση κατάντησε να διδάσκουμε προγραμματισμό δεκαετίας 90 στα παιδιά. Η σύντομη αποτίμηση δεν είναι συμβατή με καμιά σημερινή γλώσσα (εκτός της Visual Basic, που και αυτή είναι παραγκωνισμένη έως ανύπαρκτη αυτή την στιγμή)

@Παναγιώτης Τσιωτάκης
Η σύντομη αποτίμηση εμποδίζει τα παιδιά να σκέφτονται; Προγραμματιστικό τρικ είναι επίσης όλος ο αντικειμενοστραφής προγραμματισμός. Να ξεχάσουμε όλες τις εξελίξεις στον προγραμματισμό τα 20 τελευταία χρόνια και να γυρίσουμε στην pascal και την basic.

Το βιβλίο μυρίζει μούχλα και ναφθαλίνη (γραμμένο στα τέλη της δεκαετίας του 90). Ας μην το κάνουμε χειρότερο απ' ότι είναι. Ο σημερινός προγραμματισμός δεν έχει καμία σχέση με αυτά που μαθαίνουν τα παιδιά. Η σύντομη αποτίμηση είναι στάνταρντ παντού. Η εντολή Για δεν υπάρχει πουθενά με την μορφή που την διδάσκουμε. Όλες οι γλώσσες υποστηρίζουν με τον έναν ή τον άλλον τρόπο ForEach για μια συλλογή δεδομένων. Κάποιες έχουν τελεστή hasNext για να ελέγχεις αν υπάρχει επόμενο στοιχείο στην συλλογή. Προγραμματισμός με δείκτη i που τρέχει τα στοιχεία ενός πίνακα είναι μακρινό παρελθόν. Ακόμη και οι πίνακες με το περιβόητο i, χρησιμοποιούνται πολύ λίγο πλέον και μόνο για συγκεκριμένες δουλειές. Και ναι, παρόλα αυτά, οι σημερινοί προγραμματιστές συνεχίζουν να σκέφτονται και να εκφράζουν την σκέψη τους μέσα από κώδικα και μάλιστα με πολύ μεγαλύτερη σαφήνεια απ' ότι πριν 20 χρόνια.

itt

Παράθεση από: Κανένας στις 16 Φεβ 2014, 02:13:01 ΠΜ
Τώρα σχετικά με την απόδοση:
Σ' ένα πίνακα με 1 εκατομμύριο στοιχεία και το αναζητούμενο στοιχείο στην τελευταία θέση, ο αλγόριθμος του βιβλίου θα έκανε 1 εκατομμύριο συγκρίσεις
περισσότερες απ' τον προτεινόμενο. (Η πολυπλοκότητα φυσικά είναι ίδια Ο(Ν). και οι δύο έχουν μια απλή επανάληψη).

Aυτό δεν έχει νόημα σαν συζήτηση. Δεν μπορείς να ξέρεις την απόδοση του αλγόριθμου άμα δεν κάνεις profile το runtime του. Αν υπάρχει ας πούμε μερική διάταξη στα δεδομένα του πίνακα ( και σε πραγματικά δεδομένα δεν θα ήταν καθόλου περίεργο) τότε ο branch predictor θα βελτιώσει τον χρόνο εκτέλεσης.

Παράθεση από: apoldem στις 16 Φεβ 2014, 10:08:31 ΠΜ
Έχεις δίκιο nobody6 για την απόδοση. Άλλο πολυπλοκότητα άλλο απόδοση. Για ίδια πολυπλοκότητα ένας αλγόριθμος μπορεί να είναι πιο αποδοτικός από κάποιον άλλον. Η πολυπλοκότητα είναι εκτός ύλης αλλά η απόδοση; Αν δεν ενδιαφέρει καθόλου η απόδοση σε εκμάθηση αλγορίθμων τότε καλώς καταργείται το μάθημα. Μην τα θέλουμε όλα δικά μας.

Ομολογώ ότι δεν καταλαβαίνω τι εννοείς. Μπορεί να φταίει το ότι δεν έχω κατανοήσει σε τι ακριβώς αναφέρεσαι ότι μιλάς για απόδοση, αλλά δεν βλέπω τι σχέση έχει με το μάθημα;

pgrontas

H μερική αποτίμηση (δηλ. (Αληθης ή _ ) = Αληθής, (Ψευδής και _ ) = Ψευδής, (Ψευδής ή _ ) = _, (Αληθής και _) = _) δεν είναι προγραμματιστικό τρικ. Είναι άμεση συνέπεια του ορισμού των λογικών πράξεων και υπάρχει διδακτική αξία στο να το επισημάνεις στους μαθητές.

Αν στα μαθηματικά είχαμε πολλαπλασιασμό μιας παράστασης με το μηδέν θα καθόμασταν ποτέ να υπολογίσουμε την παράσταση;
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Νίκος Αδαμόπουλος

Παράθεση από: apoldem στις 18 Φεβ 2014, 01:52:03 ΠΜ
@Νίκος Αδαμόπουλος
Αυτή η συντηρητική προσέγγιση κατάντησε να διδάσκουμε προγραμματισμό δεκαετίας 90 στα παιδιά. Η σύντομη αποτίμηση δεν είναι συμβατή με καμιά σημερινή γλώσσα (εκτός της Visual Basic, που και αυτή είναι παραγκωνισμένη έως ανύπαρκτη αυτή την στιγμή)

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

Έχω καταλάβει ότι όταν κάποιος είναι ακόμα νέος στο χώρο της εκπαίδευσης αρχικά μιλάει για προγραμματισμό (δεν εννοώ τριτοβάθμια εκπαίδευση). Όσο όμως ωριμάζουν οι σκέψεις για το χαρακτήρα και τη χρησιμότητα του μαθήματος, τότε αυτό αλλάζει... Εγώ θεωρώ ότι διδάσκουμε αλγοριθμική και όχι προγραμματισμό... Αν λέμε ότι διδάσκουμε προγραμματισμό τότε θα πρέπει να κάνουμε εξετάσεις μέσω υπολογιστών, κλπ. Επίσης τότε το σχολικό βιβλίο θα έπρεπε να είναι εγχειρίδιο κάποιας γλώσσας. Έχουν όμως όλα αυτά σχέση με το Γενικό Λύκειο; Μήπως κάπως έτσι πέρασε η άποψη ότι η ΑΕΠΠ είναι προγραμματισμός οπότε δεν μπορεί  να είναι πανελλαδικά εξεταζόμενο; Επίσης, μέσα σε όλα αυτά μιλάμε καθόλου για διδακτική ή τα προσπερνάμε όλα;

Υ.Γ.

Σχετικά με την δημοτικότητα των γλωσσών προγραμματισμού:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

(Δες το υπότιτλο του άρθρου... Πολλές φορές τα πράγματα δεν είναι όπως τα νομίζουμε!)

itt

Παράθεση από: Νίκος Αδαμόπουλος στις 18 Φεβ 2014, 09:23:14 ΠΜ
Υ.Γ.

Σχετικά με την δημοτικότητα των γλωσσών προγραμματισμού:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

(Δες το υπότιτλο του άρθρου... Πολλές φορές τα πράγματα δεν είναι όπως τα νομίζουμε!)

To ΤΙΟΒΕ στηρίζεται σε search engine hits*, δεν είναι αντιπροσωπευτικό της χρήσης μιας γλώσσας (Ούτε απαραίτητα της δημοτικότητάς της). Εννοώ ότι θα μπορούσαν εκατομμύρια σελίδες να κράζουν την VB, παρόλα αυτά το index στο TIOBE θα αυξανόταν, επειδή ακριβώς συζητιέται.

* http://www.tiobe.com/index.php/content/paperinfo/tpci/tpci_definition.htm

Νίκος Αδαμόπουλος

Έχουμε κάποιον άλλο καλύτερο δείκτη;

itt

Παράθεση από: Νίκος Αδαμόπουλος στις 18 Φεβ 2014, 06:32:16 ΜΜ
Έχουμε κάποιον άλλο καλύτερο δείκτη;

Όχι, γιατί κανένας δεν βγάζει νόημα. Το SO ας πούμε είναι αρκέτα biased ως προς την C#, αυτό δεν λέει τίποτα για την γλώσσα. Όπως επίσης δεν λέει τίποτα το ότι το subreddit της Haskell έχει πιο πολλούς χρήστες από αυτό της C#.   Γενικά δεν μπορείς να εκφράσεις μια μετρική που θα σου λύνει το πρόβλημα της δημοτικότητας εύκολα.

Σαφώς και η VB είναι σχετικά παραγκωνισμένη όταν έχεις C# + F# για να κάνεις τη δουλειά σου.



Νίκος Αδαμόπουλος

Παράθεση από: itt στις 18 Φεβ 2014, 07:41:32 ΜΜ
Σαφώς και η VB είναι σχετικά παραγκωνισμένη όταν έχεις C# + F# για να κάνεις τη δουλειά σου.

Ok. Άλλο όμως "σχετικά παραγκωνισμένη" και άλλο "παραγκωνισμένη έως ανύπαρκτη"...
Στην ουσία δεν αλλάζει τίποτα στη συζήτηση... Εγώ, όπως είπα, δεν είμαι υπέρ της διδασκαλίας κάποιας συγκεκριμένης γλώσσας...

thaaanos

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

itt

Παράθεση από: Νίκος Αδαμόπουλος στις 18 Φεβ 2014, 10:53:19 ΜΜ
Ok. Άλλο όμως "σχετικά παραγκωνισμένη" και άλλο "παραγκωνισμένη έως ανύπαρκτη"...
Στην ουσία δεν αλλάζει τίποτα στη συζήτηση... Εγώ, όπως είπα, δεν είμαι υπέρ της διδασκαλίας κάποιας συγκεκριμένης γλώσσας...

Συμφωνώ στο ότι δεν πρέπει να διδάσκεται συγκεκριμένη γλώσσα.

Παράθεση από: thaaanos στις 18 Φεβ 2014, 11:39:27 ΜΜ
Νομίζω οτι ξεφύγαμε... προσωπικά πιστεύω οτι η μερική αποτίμηση δεν είναι προγραμματιστικό τρικ. Είναι ένα ολόκληρο προγραμματιστικό παράδειγμα. Δεν γίνεται συναρτησιακός προγραμματισμός χωρίς μερική αποτίμηση.

Mια χαρά γίνεται, οι  Erlang , ML, Scala, F# είναι απλά παραδείγματα όπου δεν είναι το lazy evaluation η default προσέγγιση της γλώσσας.

thaaanos

Παράθεση από: itt στις 19 Φεβ 2014, 01:50:23 ΠΜ
Mια χαρά γίνεται, οι  Erlang , ML, Scala, F# είναι απλά παραδείγματα όπου δεν είναι το lazy evaluation η default προσέγγιση της γλώσσας.

Για το "μια χαρά" θα διαφωνήσω. Γίνεται specialization χωρίς partial evaluation;

P.Tsiotakis

Αρα 0*(1/0) κανει 0

Και βέβαια

Ψευδής και α[-5] = 3 κανει ψευδής


Και τελικα η γη κανει κυκλική ή ελλειπτικη τροχιά;;
Η αεππ ειναι εξεταζόμενο μάθημα;

pgrontas

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

Θα μπορούσαμε να πούμε ότι πρέπει να ικανοποιείται η καθοριστικότητα για να έχουμε μερική αποτίμηση, ώστε να έχουμε και την πίτα ολόκληρη και το σκύλο χορτάτο.

Όμως, για μένα δεν πρέπει να είναι θεολογικό το θέμα, ώστε να προσπαθήσουμε να  προσαρμοστούμε στο θέσφατο του βιβλίου το οποίο δεν ξέρουμε σε τι συνθήκες γράφτηκε. Για παράδειγμα οι πρώτοι παράγραφοι του κεφάλαιου των δομών δεδομένων, μπορεί να διαπιστώσει εύκολα κανείς ότι αποτελούν αντιγραφή του κλασικού βιβλίου του Μανωλόπουλου που πολλοί κάναμε στο πανεπιστήμιο στη δεκαετία του 90. Είναι παιδαγωγικά ορθή η αντιγραφή πανεπιστημιακού υλικού για μαθητές δευτεροβάθμιας ή η δημιουργία βιβλίου με copy - paste;

Αυτό λοιπόν που πρέπει να μας απασχολήσει είναι η ουσία δηλ. αν κερδίζουμε κάτι επιτρέποντας τη  μερική αποτίμηση, ακόμα και αν δεν ορίζεται η δεύτερη έκφραση.  Οι σχεδιαστές γλωσσών προγραμματισμού, έχουν αποφανθεί ναι και έχει προκύψει το όλο ρεύμα με τις lazy evaluation γλώσσες, με τα πολλά πλεονεκτήματα (infinite streams, sequences). Φυσικά αυτό δεν αφορά κάποια super-duper γλώσσα του 2014, αλλά υπάρχει στην Lisp. Επιπλέον δεν είναι τεχνικό τό θέμα, αλλά καθαρά αλγοριθμικό γιατί δείχνει πώς κάποιοι χρησιμοποίησαν πρωτότυπα αυτόν τον όρισμό των λογικών πράξεων και έλυσαν προβλήματα ή εισήγαγαν νέες δυνατότητες. Αυτόγια μένα έχει διδακτική αξία.

Κλείνοντας νομίζω ότι τα παιδιά του λυκείου ξέρουν ότι η Γη έχει ελλειπτική τροχιά.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

itt

Παράθεση από: thaaanos στις 19 Φεβ 2014, 12:22:50 ΜΜ
Για το "μια χαρά" θα διαφωνήσω. Γίνεται specialization χωρίς partial evaluation;

Το specialization είναι ένα optimization, δεν επηρρεάζει τα semantics της γλώσσας που χρησιμοποιείς. (Εκτός άμα εννοείς κάτι άλλο με το specialization) Ακόμα και tail elimination να μην έχεις, αυτό και πάλι δεν επηρρεάζει κάτι semantically.

Παράθεση από: Παναγιώτης Τσιωτάκης στις 19 Φεβ 2014, 01:27:01 ΜΜ

Και βέβαια

Ψευδής και α[-5] = 3 κανει ψευδής

Bασικά ναι

Α   Β   Α AND b
T   T        T
T   F        F
F   T        F
F   F        F
T   ⊥        ⊥
⊥   T        ⊥
F   ⊥        F
⊥   F        ⊥

Αλλά δεν διαφωνώ στο ότι δεν χρειάζεται να διδάσκεται.

thaaanos

#40
Σε επίπεδο software development, specialization, partial evaluation, επιτρέπουν design patterns και modularity.
Μην βλέπεις την αποτίμηση απλά σε μια αριθμητική έκφραση, φαντάσου εκφράσεις για τις οποίες η συγκεκριμένη συνάρτηση δεν έχει context για να αποτιμήσει.

Το call-by-name στην πραγματικότητα δεν είναι τίποτα άλλο παρά μασκαρεμένο partial evaluation.

Εγώ προσωπικά πιστεύω οτι τα διάφορα evaluation strategies πρέπει να διδάσκονται. Εάν δεν μιλήσουμε για την Eval() και την διαφορά έκφρασης και τιμής τότε γιατί θα πούμε;

itt

#41
Παράθεση από: thaaanos στις 19 Φεβ 2014, 07:08:54 ΜΜ
Σε επίπεδο software development, specialization, partial evaluation, επιτρέπουν design patterns και modularity.
Μην βλέπεις την αποτίμηση απλά σε μια αριθμητική έκφραση, φαντάσου εκφράσεις για τις οποίες η συγκεκριμένη συνάρτηση δεν έχει context για να αποτιμήσει.

Το call-by-name στην πραγματικότητα δεν είναι τίποτα άλλο παρά μασκαρεμένο partial evaluation.

Δεν διαφωνώ στη σημασία που έχει το evaluation stategy στην υλοποιήση διάφορων idioms. Αυτό  που λέω είναι ότι το αν είναι μια γλώσσα functional δεν καθόριζεται μόνο από το evaluation strategy που εφαρμόζει. Γενικά το από τι καθορίζεται είναι μια διαφωνία που ακόμα παίζει και δεν πιστεύω ότι θα υπάρξει ομοφωνία στο κοντινό μέλλον. Η Erlang πχ, είναι επιτυχημένη σε αυτό που κάνει, είναι referentially transparent et al. Αλλά είναι και strict. Δεν είναι functional; Δεν νομίζω.

Παράθεση από: thaaanos στις 19 Φεβ 2014, 07:08:54 ΜΜ
Εγώ προσωπικά πιστεύω οτι τα διάφορα evaluation strategies πρέπει να διδάσκονται. Εάν δεν μιλήσουμε για την Eval() και την διαφορά έκφρασης και τιμής τότε γιατί θα πούμε;

Noμίζω ότι είναι λίγο υπερβολικό να διδάσκονται. Μια χαρά μπορείς να διδάξεις αλγόριθμους χωρίς να θίξεις αυτό το θέμα.


Νίκος Αδαμόπουλος

Ξεχνάμε ότι έχουμε συγκεκριμένο βιβλίο για την ΑΕΠΠ, συγκεκριμένη ύλη που πρέπει να καλυφθεί, και συγκεκριμένο στόχο: να εξεταστούν οι μαθητές σε πανελλήνιες. Μην ξεχνάμε το πλαίσιο στο οποίο κινούμαστε... Βέβαια όταν το πλαίσιο αυτό αλλάξει (εύχομαι ποτέ!), και δεν θα υπάρχει το βαρίδι των εξετάσεων (!), θα έχουμε τη δυνατότητα να κάνουμε τους μαθητές πραγματικούς software developers...

petrosp13

Οι εξετάσεις δεν είναι βαρίδι, αλλά κίνητρο
Αν θεωρείτε ότι σε μάθημα που δεν εξετάζεται, θα αναπτύξετε software developers, νομίζω ότι θα διαψευστείτε από την πρώτη χρονιά κιόλας
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

stpdt

#44
Παράθεση από: petrosp13 στις 19 Φεβ 2014, 11:42:45 ΜΜ
Οι εξετάσεις δεν είναι βαρίδι, αλλά κίνητρο
Αν θεωρείτε ότι σε μάθημα που δεν εξετάζεται, θα αναπτύξετε software developers, νομίζω ότι θα διαψευστείτε από την πρώτη χρονιά κιόλας

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

Δεν έχουν όλοι οι developers την "ίδια ύλη", αντίθετα ο καθένας είναι εξειδικευμένος στο κομμάτι του κώδικα που γράφει, και όλοι μαζί συνθέτουν το τελικό αποτέλεσμα.  Εφόσον ο καθένας βρίσκεται στο "δικό του κόσμο" και επικοινωνεί με τους άλλους μέσω των specifications και του  interface που έχει προαποφασιστεί, δεν έχει νόημα η σύγκριση γιατί δεν είναι καθόλου εύκολο να συγκριθούν ανόμοια πράγματα μεταξύ τους. Δεν μπορείς να συγκρίνεις μήλα με πορτοκάλια.

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

Στο μάθημά μου, φυσικά όταν αυτό δεν είναι το μάθημα πανελληνίων, και όταν το αναλυτικό πρόγραμμα μου δίνει την δυνατότητα, προσπαθώ να εξετάζω διαφορετικά.

Βάζω τους μαθητές να κάνουν "παραγγελίες" προγραμματων ο ένας στον άλλο, και βαθμολογώ με καλό βαθμό όσους μαθητές φέρουν είς πέρας τις "παραγγελίες", λαμβάνοντας υπόψη και τον βαθμό δυσκολίας της "παραγγελίας" (εκεί είναι η δική μου κρίση). Θεωρώ αυτή την προσέγγιση πιο κοντά στην πραγματικότητα του software development.

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

Παράθεση από: stpdt στις 20 Φεβ 2014, 01:34:51 ΠΜ
Οι εξετάσεις είναι βαρίδι, με την έννοια ότι όλοι οι μαθητές εξετάζονται στα ίδια πράγματα, στην ίδια ύλη. Ενώ αυτό που συμβαίνει στην πραγματικότητα κατά την ανάπτυξη ενός λογισμικού είναι ακριβώς το αντίθετο.

Δεν έχουν όλοι οι developers την "ίδια ύλη", αντίθετα ο καθένας είναι εξειδικευμένος στο κομμάτι του κώδικα που γράφει, και όλοι μαζί συνθέτουν το τελικό αποτέλεσμα.  Εφόσον ο καθένας βρίσκεται στο "δικό του κόσμο" και επικοινωνεί με τους άλλους μέσω των specifications και του  interface που έχει προαποφασιστεί, δεν έχει νόημα η σύγκριση γιατί δεν είναι καθόλου εύκολο να συγκριθούν ανόμοια πράγματα μεταξύ τους. Δεν μπορείς να συγκρίνεις μήλα με πορτοκάλια.

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

Στο μάθημά μου, φυσικά όταν αυτό δεν είναι το μάθημα πανελληνίων, και όταν το αναλυτικό πρόγραμμα μου δίνει την δυνατότητα, προσπαθώ να εξετάζω διαφορετικά.

Βάζω τους μαθητές να κάνουν "παραγγελίες" προγραμματων ο ένας στον άλλο, και βαθμολογώ με καλό βαθμό όσους μαθητές φέρουν είς πέρας τις "παραγγελίες", λαμβάνοντας υπόψη και τον βαθμό δυσκολίας της "παραγγελίας" (εκεί είναι η δική μου κρίση). Θεωρώ αυτή την προσέγγιση πιο κοντά στην πραγματικότητα του software development.

Το μάθημα έχει σαν πρωταρχικό στόχο την ανάπτυξη δεξιοτήτων και ικανοτήτων σχετικών με την αλγοριθμική και την ορθολογική χρήση τους στην καθημερινή ζωή.

Αν είναι να πούμε ότι θα τους κάνουμε software developers, ειδικά σε μία τάξη όπως η Γ Λυκείου, το χάσαμε το κορμί πατριώτη...


nikolasmer

Καλημέρα σε όλους.
Πρόσφατα κατέβασα μια εφαρμογή Εύρεσης Θέσης (GPS δηλαδή) στο κινητό μου και μου άρεσε η αναζήτηση που κάνει όταν πληκτρολογείς τη διεύθυνση που θέλεις να σε πάει.
Έχει αραδιασμένα τα γράμματα της ελληνικής αλφαβήτου, όπως και κάποια σύμβολα και σημεία στήξης. Αρχικά πριν πατήσω οποιοδήποτε γράμμα, σύμβολα είναι απενεργοποιημένα. Μετά την εισαγωγή του πρώτου χαρακτήρα απενεργοποιούνται άλλα γράμματα ή ενεργοποιούνται άλλα και πάει λέγοντας. Σε κάθε γράμμα που πληκτρολογεί κάποιος , προφανώς αναζητά σε μια βάση ονομάτων περιοχών αν καποιες τοποθεσίες συνεχίζονται με ενα συγκεκριμμένο χαρακτήρα και αν καμία από αυτές δεν έχει τέτοιο, τότε ο συγκεκριμένος χαρακτήρας απενεργοποιείται.
Αυτή η αναζήτηση έχει κάποιο όνομα; Μπορεί να υπολοιηθεί στα πλαίσια του μαθήματος;

Υ.Γ. Η εφαρμογή λέγεται GPS Navigation Be on road για όποιον ενδιαφέρεται να δει πώς λειτουργεί, γιατί η επεξήγηση που δίνω παραπάνω δεν είναι και η καλύτερη. (Αν υπάρχει βέβαια πρόβλημα με τη δημοσιοποίηση του ονόματος πολυ ευχαρίστως να το διαγράψω)
Μερεντίτης Νικόλαος
Πληροφορικός

sstergou

Νομίζω αυτό που περιγράφεις υλοποιείται με ένα Trie

nikolasmer

Παράθεση από: sstergou στις 21 Ιουν 2014, 02:48:31 ΜΜ
Νομίζω αυτό που περιγράφεις υλοποιείται με ένα Trie
Ναι αυτό είναι!!!
Σας ευχαριστώ πάρα πολύ!!
Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

Μερεντίτης Νικόλαος
Πληροφορικός