Θα ήθελα να ρωτήσω αν είναι παιδαγωγικά πιο εύπεπτο στους μαθητές η χρήση λογικής μεταβλητής για τερματισμό επανάληψης. Και σε περιπτώσεις με τιμή φρουρό και σε περιπτώσεις με όριο και γενικότερα.
Εννοείς αντί να γράψουν π.χ. ΜΕΧΡΙΣ_ΟΤΟΥ βρεθηκε=ΑΛΗΘΗΣ να γράψουν ΜΕΧΡΙΣ_ΟΤΟΥ βρεθηκε σκέτο;
Δεν τους είναι πιο εύπεπτο. Προσωπικά αν και τους εξηγώ τον πλεονασμό, δεν φαίνεται να τους κάθεται καλά. Ίσως το συνηθίζουν από τα φροντιστήρια και μετά πρέπει να το ξεσυνηθίσουν.
Φέτος, μάλιστα ένας καλός μαθητής που έχω, όταν τους το ανέφερα, είχε μια στιγμή 'ίδωμεν το φώς το αληθινο' :angel: :angel: :angel: .
Ίσως πρέπει να μπει κάποιο θέμα πανελληνίων σχετικό >:D >:D >:D
Πάντως γενικά οι μαθητές δεν συμπαθούν τις λογικές μεταβλητές. Προτιμούν πλήθος = 0 κτλ.
Αν κατάλαβα καλά τι εννοείς.
Παράθεση από: pgrontas στις 23 Νοε 2025, 10:37:27 ΠΜΔεν τους είναι πιο εύπεπτο. Προσωπικά αν και τους εξηγώ τον πλεονασμό, δεν φαίνεται να τους κάθεται καλά. Ίσως το συνηθίζουν από τα φροντιστήρια και μετά πρέπει να το ξεσυνηθίσουν.
Πάντως γενικά οι μαθητές δεν συμπαθούν τις λογικές μεταβλητές. Προτιμούν πλήθος = 0 κτλ.
Αν κατάλαβα καλά τι εννοείς.
Όλα έχουν να κάνουν εδώ με το διδάσκοντα. Θα πρέπει, κατά τη γνώμη μου πάντα, να εξηγεί το πλεονασμό ΜΕΧΡΙΣ_ΟΤΟΥ χ = ΑΛΗΘΗΣ ( ο οποίος είναι safe ) κι επίσης θα πρέπει να δείχνει και τις εναλλακτικές δυνατές λύσεις ώστε τα παιδιά να βλέπουν διάφορες προσεγγίσεις. Δε ξέρουν τι θα αντικρύσουν στις Πανελλήνιες και δε ξέρουν τι θα απαιτείται. Όσο πιο ευρύ το φάσμα των λύσεων που συζητείται τόσο το καλύτερο.
Όντως οι μαθητές αποφεύγουν τις λογικές μεταβλητές.
Στην αναζήτηση το κάνω εγώ αυτό.
Μπορείς να βάλεις μια λογική μεταβλητή found.
Εναλλακτικά όμως, επειδή τη θέση που βρέθηκε τη θέλουμε συνήθως ( i βρεθηκε το συμβολίζω ιβ) κάνω και το εξής:
Αρχικοποιώ τη ιβ <- -1 που είναι απαράδεκτη τιμή για δείκτη πίνακα.
Αν το ιβ <> -1 σημαίνει πως βρέθηκε και δε χρησιμοποιούν λογική μεταβλητή. Είναι πλεονασμός λογική μεταβλητή. ΑΛΛΑ ΣΤΟ ΒΙΒΛΙΟ ΕΤΣΙ ΤΟ ΥΛΟΠΟΙΕΙ.
Άρα; Κάνω και τα δύο.
Καθένα παιδί, αν ΞΕΡΕΙ και τα δύο, ας κάνει ό,τι θέλει.
Για μένα είναι πολύ σημαντικά τα ονόματα των μεταβλητών.
Όπως λέει και το quote μου 'Οι αλγόριθμοι πρέπει να μπορούν να διαβάζονται'.
Με αυτή την έννοια δεν μου αρέσει καθόλου η πρακτική του βιβλίου που στην αναζήτηση αλλά και σε άλλα σημεία (found, flag, top κλπ.) κάνει ανάμιξη εντολών στα ελληνικά, μεταβλητών στα αγγλικά κλπ.
Παράθεση από: pgrontas στις 23 Νοε 2025, 10:37:27 ΠΜ Ίσως το συνηθίζουν από τα φροντιστήρια και μετά πρέπει να το ξεσυνηθίσουν.
Εγώ πάλι έτσι το διδάσκω στο φροντιστήριο και το μαθαίνουν στο σχολείο αλλιώς
Αν και είμαι υπέρ της πλήρους γραφής της συνθήκης γιατί δεν είμαι ασφαλής με την επάρκεια του εκάστοτε βαθμολογητή
Όντως τους χαλάει η χρήση λογικής μεταβλητής και προτιμούν λύση με πλήθος
Δεν εννοούσα το παραπάνω. (Το αν θα βάλουμε και σχεσιακό τελεστή εννοώ).
Αυτό που ήθελα να δω είναι αν γίνεται πιο κατανοητή η λύση άσκησης με λογική μεταβλητή ως έξοδο από επανάληψη και η τιμή της να αλλάζει μέσα σε Αν. Είμαι με κινητό και δε μπορώ να γράψω κώδικα τώρα να το δείξω. Αλλά αυτό που λέω είναι μια παραλλαγή της break όπου θα βγαίνει από επανάληψη κλπ ο χρήστης, αλλαζοντας την τιμή της λογικής μεταβλητής.
Το παρατηρώ σε λύσεις που δίνουν τα εργαλεία ai ως ενδεδειγμένη λύση και προβληματίζομαι αν είναι παιδαγωγικά πιο καλό και εύπεπτο για τους μαθητές μας.
Δηλαδή αυτό;
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
...
ΑΝ ... τότε
ΒΓΕΣ<- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
...
ΜΕΧΡΙΣ_ΟΤΟΥ ΒΓΕΣ(=ΑΛΗΘΗΣ)
Αν και μου φαίνεται ότι είναι γενικά και υπό προϋποθέσεις καλύτερη πρακτική, λόγω της αρχής της τοπικότητας (αποφασίζω να βγω όταν παραβιάζεται η συνθήκη και όχι πιο κάτω), νομίζω ότι όχι δεν θα το καταλάβαιναν καλύτερα τα παιδιά, λόγω αφενός της αποστροφής τους προς τις λογικές μεταβλητές και αφετέρου του καθιερωμένου τρόπου διδασκαλίας (συνήθεια).
Βέβαια αυτά μπορούν να αλλάξουν - μιλάω για την παρούσα κατάσταση.
Για το δεύτερο που λες Παναγιώτη με ενδιαφέρει . Αξίζει να το προσπαθήσουμε ή διδακτικά θα δυσκολέψει το μαθητή. Έχουμε κάτι σχετικό καμία έρευνα κάτι , που να θέλει αυτό τον τρόπο να είναι καλύτερος ;
Νικο, δεν ξέρω κάτι.
Αυτό που με προβληματίζει είναι ότι δε σε πετάει κατευθείαν έξω όπως η break, αλλά περιμένεις να φτάσεις στη συνθήκη. Ανάλογα με τις ενδιάμεσες εντολές ενδεχομένως να υπάρχει κίνδυνος να εκτεθείς σε λογικά λάθη.
Αυτό που θα πρέπει να καλλιεργήσουμε είναι το να γράφουν τις εντολές που επηρεάζουν τη συνθήκη, όσο πιο κοντά σε αυτή γίνεται. Και τότε δε θα έχει τόσο σημασία η χρήση της λογικής μεταβλητής.
Ποιος είναι ο λόγος να ελέγξεις κάτι εντός επανάληψης και να χρησιμοποιήσεις λογική μεταβλητή αντί να γράψεις κατευθείαν την συνθήκη τερματισμού/επανάληψης;
Η μικρότερη συνθήκη;
Έτσι προστίθενται αχρείαστες εντολές εντός επανάληψης
Αν και γενικά όλα αυτά είναι υποκειμενικά όπως τα περισσότερα στον προγραμματισμό
Αντιγράφω απο GPT
LIMIT = 10.30 # όριο πρόκρισης
MAX_TRIES = 5 # μέγιστες προσπάθειες
students = [] # λίστα με στοιχεία (όνομα, καλύτερη επίδοση, προσπάθειες, προκρίθηκε)
while True:
name = input("Δώσε όνομα μαθητή (ή ΤΕΛΟΣ): ")
if name.upper() == "ΤΕΛΟΣ":
break
best_throw = 0
qualified = False
tries_used = 0
# Διαβάζουμε μέχρι 5 προσπάθειες
for i in range(1, MAX_TRIES + 1):
distance = float(input(f"Προσπάθεια {i} σε μέτρα: "))
tries_used += 1
if distance > best_throw:
best_throw = distance
if distance >= LIMIT:
qualified = True
break # σταματάει όταν περάσει το όριο
students.append((name, best_throw, tries_used, qualified))
# --- Αποτελέσματα για κάθε μαθητή ---
print("\n--- ΑΠΟΤΕΛΕΣΜΑΤΑ ΜΑΘΗΤΩΝ ---")
for name, best, tries, qualified in students:
if qualified:
print(f"{name}: ΠΡΟΚΡΙΝΕΤΑΙ με {best} μέτρα σε {tries} προσπάθειες.")
else:
print(f"{name}: ΔΕΝ ΠΡΟΚΡΙΝΕΤΑΙ. Καλύτερη επίδοση: {best} μέτρα.")
# --- Δύο καλύτερες επιδόσεις ---
print("\n--- ΔΥΟ ΚΑΛΥΤΕΡΕΣ ΕΠΙΔΟΣΕΙΣ ---")
# ταξινόμηση κατά επίδοση (φθίνουσα)
sorted_students = sorted(students, key=lambda x: x[1], reverse=True)
top2 = sorted_students[:2]
for s in top2:
print(f"{s
}: {s[1]} μέτρα")
# --- Ποσοστό προκριθέντων ---
total = len(students)
qualified_count = sum(1 for s in students if s[3] == True)
if total > 0:
percentage = (qualified_count / total) * 100
else:
percentage = 0
print(f"\nΠοσοστό μαθητών που προκρίθηκαν: {percentage:.2f}%")
Αυτή είναι η λύση για το θέμα Γ 2025
και χωρίς λίστες
LIMIT = 10.30
MAX_TRIES = 5
total_students = 0 # σύνολο μαθητών
qualified_students = 0 # πόσοι προκρίθηκαν
best1_name = ""
best2_name = ""
best1_score = -1
best2_score = -1
while True:
name = input("Δώσε όνομα μαθητή (ή ΤΕΛΟΣ): ")
if name.upper() == "ΤΕΛΟΣ":
break
total_students += 1
best_throw = 0
qualified = False
tries_used = 0
# έως 5 προσπάθειες
for i in range(1, MAX_TRIES + 1):
distance = float(input(f"Προσπάθεια {i} σε μέτρα: "))
tries_used += 1
if distance > best_throw:
best_throw = distance
if distance >= LIMIT:
qualified = True
break
# --- Αποτελέσματα για τον μαθητή ---
if qualified:
print(f"{name}: ΠΡΟΚΡΙΝΕΤΑΙ με {best_throw} μέτρα σε {tries_used} προσπάθειες.")
qualified_students += 1
else:
print(f"{name}: ΔΕΝ ΠΡΟΚΡΙΝΕΤΑΙ. Καλύτερη επίδοση: {best_throw} μέτρα.")
# --- Ενημέρωση δύο καλύτερων επιδόσεων ---
if best_throw > best1_score:
best2_score = best1_score
best2_name = best1_name
best1_score = best_throw
best1_name = name
elif best_throw > best2_score:
best2_score = best_throw
best2_name = name
# --- Δύο καλύτερες επιδόσεις ---
print("\n--- ΔΥΟ ΚΑΛΥΤΕΡΕΣ ΕΠΙΔΟΣΕΙΣ ---")
if best1_score >= 0:
print(f"1η καλύτερη: {best1_name} με {best1_score} μέτρα")
if best2_score >= 0:
print(f"2η καλύτερη: {best2_name} με {best2_score} μέτρα")
# --- Ποσοστό προκριθέντων ---
if total_students > 0:
percentage = qualified_students * 100 / total_students
else:
percentage = 0
print(f"\nΠοσοστό μαθητών που προκρίθηκαν: {percentage:.2f}%")
Δεν έχω εξετάσει την ορθότητα της λύσης απλά αναρωτιέμαι γιατί το LLM προτείνει αυτό σαν λύση. Οι προτροπές που του έδωσε δεν ήταν προς αυτή την κατεύθυνση . Μάλλον ήταν "λύσε μου αυτό το θέμα" και μόνο αυτό και μετά του ζήτησα χωρίς λίστες. Αυτό το γιατί με τρώει. Γιατί έχει μάθει σε αυτό τον τρόπο λύσης; Είναι πιο αποδοτικός; Ακολουθείται και εφαρμόζεται από προγραμματιστές ανα την υφήλιο;
Just that.
Στη συνομιλία όταν του ζήτησα να κάνει μετατροπή σε ΓΛΩΣΣΑ μου είπε: "... Σε ΓΛΩΣΣΑ ΔΕΝ υπάρχει
while True, οπότε η ακριβής ισοδύναμη μεταφορά γίνεται με ατέρμονη επανάληψη και έλεγχο διακοπής με flag/έλεγχο στο τέλος......"
Δεν μπορούμε να ξέρουμε Νίκο, γιατί έβγαλε αυτή τη λύση.
Μία θεωρία είναι αυτό που είπες, ότι εμφανίζεται πιο πολύ στα δεδομένα μάθησης.
Μία άλλη θεωρία ότι είναι ο κώδικας που σου έβγαλε είναι πιο κοντά στην εκφώνηση λεκτικά π.χ. το "θα ολοκληρώνεται όταν δοθεί για όνομα του μαθητή η λέξη 'ΤΕΛΟΣ' " ταιριάζει πιο πολύ με το "if == ΤΕΛΟΣ και break" παρά με το "while !="
Μία άλλη θεωρία είναι ότι είναι πιο απλό, άρα πιο εύκολο (φθηνό) να παραχθεί.
Τα LLMs είναι από τη φύση τους black boxes και τα διάφορα optimizations που τους βάζουν περιπλέκουν την κατάσταση ακόμα περισσότερο.
Παράθεση από: pgrontas στις 23 Νοε 2025, 06:57:00 ΜΜΔεν μπορούμε να ξέρουμε Νίκο, γιατί έβγαλε αυτή τη λύση.
Μία θεωρία είναι αυτό που είπες, ότι εμφανίζεται πιο πολύ στα δεδομένα μάθησης.
Μία άλλη θεωρία ότι είναι ο κώδικας που σου έβγαλε είναι πιο κοντά στην εκφώνηση λεκτικά π.χ. το "θα ολοκληρώνεται όταν δοθεί για όνομα του μαθητή η λέξη 'ΤΕΛΟΣ' " ταιριάζει πιο πολύ με το "if == ΤΕΛΟΣ και break" παρά με το "while !="
Μία άλλη θεωρία είναι ότι είναι πιο απλό, άρα πιο εύκολο (φθηνό) να παραχθεί.
Τα LLMs είναι από τη φύση τους black boxes και τα διάφορα optimizations που τους βάζουν περιπλέκουν την κατάσταση ακόμα περισσότερο.
Ευχαριστώ για την κατατοπιστικότατη απάντηση φίλε.