τελικό διαγώνισμα 2019

Ξεκίνησε από epsilonXi, 16 Μαΐου 2019, 03:56:38 ΜΜ

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

epsilonXi

καλό σας μεσημέρι...

κι από μένα το τελευταίο διαγώνισμα της χρονιάς

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

Λαμπράκης Μανώλης

καλησπέρα, ευχαριστούμε για το διαγώνισμα

να ρωτησω, στο Α5 που ζητάς να μην χρησιμοποιηθεί κανένας λογικός τελεστής, αυτό ισχύει και για το μέχρις ότου ?? για την δομή επιλογής σίγουρα υπάρχει τρόπος, για το μέχρις_ότου γίνεται να μην χρησιμοποιηθεί λογικός τελεστής ?? αν έχει κάποιο κολπάκι να τα ψάξουμε  >:D :police:

epsilonXi

όταν λέμε «κανένας», εννοούμε «κανένας»

ειδικά το συγκεκριμένο δε θέλει πάρα πολλή φαντασία

gpapargi

Φαντάζομαι εμφωλεύσεις και λογική μεταβλητή

Λαμπράκης Μανώλης

Έτσι βγαίνει μια χαρα νομίζω...εγω σκεφτόμουν μήπως υπάρχει κάποιο μαθηματικό τρικ που πραγματοποιεί τον έλεγχο σε μια γραμμή... Πάντως έχω παρατηρήσει πως οι μαθητές ( και οι καθηγητές πολλές φορές) σε τέτοιες ασκήσεις με μετατροπές γενικά, έχουν συχνά απορίες για το τι μπορούν να αλλάξουν για να πετύχουν το τελικό αποτέλεσμα... Δηλαδη αν μπορούν εμφωλευμενα, η απλά αν, η νέες μεταβλητές η ο, τι άλλο σκεφτούν.. Νομίζω γενικά έχουν ένα δίκιο, είναι ασκήσεις που μπορεί να ερμηνευτουν διαφορετικά

epsilonXi

αντί για τούτο:

αρχή_επανάληψης
...
μέχρις_ότου α<=β και α<=γ

σκέφτομαι τούτο:

αρχή_επανάληψης
   αρχή_επανάληψης
      ...
   μέχρις_ότου α<=β
μέχρις_ότου α<=γ

η εμφώλευση μας δίνει την έννοια του ΚΑΙ


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

αρχή_επανάληψης
...
μέχρις_ότου 2*α<=β+γ

bugman

#6
για α=0 και β=-1 και γ=2
το 2*α<=β+γ βγαίνει 0<=1 που είναι αληθές
στο εσωτερικό  μέχρις_ότου το α<=β  είναι ψευδές άρα θα γίνει επανάληψη, άρα δεν είναι ισοδύναμο με το "αλγεβρικό". Η εμφώλευση δεν δίνει την έννοια του ΚΑΙ, επειδή η εσωτερική επανάληψη θα εκτελεστεί χωρίς έλεγχο της δεύτερης συνθήκης που είναι στην εξωτερική επανάληψη. Για το λόγο αυτό το ΚΑΙ παίζει το ρόλο ότι οι συνθήκες, και οι δύο, θα εξεταστούν σε ένα σημείο. Ακόμα και να υποθέσουμε το short circuit, αυτό έχει νόημα μόνο αν η πρώτη συνθήκη είναι ψευδής να ακυρώσει τον έλεγχο της δεύτερης, αφού αρκεί η πρώτη ψευδής για να βγάλει αποτέλεσμα ψευδής. Οι μέχρις ότου έχουν το αληθές ως συνθήκη τερματισμού της επανάληψης, άρα για να εξεταστεί η δεύτερη συνθήκη πρέπει η πρώτη να βγει αληθής, και αυτό είναι ανάποδο από την έννοια του short circuit για την ΚΑΙ είναι σωστό (διορθώθηκε). Στη ΓΛΩΣΣΑ δεν μας απασχολεί το short circuit οπότε θέλουμε οι δυο συνθήκες να εκτελούνται μαζί στο ίδιο σημείο, ή έκφραση.  Επίσης η ιδέα "αλγεβρικού" ισοδύναμου πρέπει να αποφεύγεται για δυο ακόμα λόγους. Πρώτος είναι ότι χάνουμε σε αναγνωσιμότητα του κώδικα, και δεύτερος ότι ενδέχεται να έχουμε σε προσθέσεις υπερχείλιση (που δεν θα είχαμε στις απλές συνθήκες).

epsilonXi

1ον:

(1) α<=β
(2) α<=γ
(3) 2*α<=β+γ

σχετικά με τα «αλγεβρικά» σίγουρα έκανα λάθος, αφού με δεδομένες τις συνθήκες (1) και (2), είναι βέβαιο ότι θα ισχύει και η (3), ενώ με δεδομένη την (3) δεν είναι βέβαιο ότι θα ισχύουν οι (1) και (2), και ντροπή μου που το είπα χθες


2ον:
δεν καταλαβαίνω γιατί τα εμφωλευμένα μέχρις_ότου δε μου δίνουν την έννοια του ΚΑΙ:

αρχή_επανάληψης
  αρχή_επανάληψης
  #label1
    ...
  μέχρις_ότου α<=β
μέχρις_ότου α<=γ
#label2

αφού ο μόνος τρόπος για να βρεθείς εκτός loops, στο label2, θα είναι εφόσον επαληθεύονται ταυτόχρονα ΚΑΙ οι δύο συνθήκες,
ενώ εάν οποιαδήποτε από τις δύο δεν επαληθεύεται, η ροή επαναφέρεται στο ίδιο σημείο, στο label1




bugman

Εδώ λοιπόν εγώ έχω κάνει λάθος, η ΚΑΙ σε short circuit εξετάζει την δεύτερη συνθήκη μόνο αν η πρώτη βγει αληθές άρα στο παράδειγμα όταν η πρώτη επανάληψη τερματίσει.

Άρης Κεσογλίδης

Μία λύση που σκέφτηκα είναι να βάλουμε μία νέα μεταβλητή.
Η ΟΣΟ, εκτελείται όσο το  α  είναι μεγαλύτερο τουλάχιστον από ένα από τα β , γ.
Άρα σταματάει όταν το  α  γίνει μικρότερο ή ίσο από τον ελάχιστο των β και γ.

Οπότε λέω :

διάβασε β,γ
α <-  (β+γ) div 2

min <-  α
ΑΝ  β < min  ΤΟΤΕ
      min <-  β
ΤΕΛΟΣ_ΑΝ

ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
      .....(εμφ. ΑΝ)
      .....
ΜΕΧΡΙΣ_ΟΤΟΥ   α <= min

Άρης Κεσογλίδης
Μαθηματικός
Μεταπτυχιακό στη "Θεωρητική Πληροφορική και Θεωρία Συστημάτων και Ελέγχου"

epsilonXi

καλησπέρα σε όλους,

με τις λύσεις που προτείνω


epsilonXi

Παράθεση από: Άρης Κεσογλίδης στις 27 Μαΐου 2019, 04:07:11 ΠΜ
Μία λύση που σκέφτηκα είναι να βάλουμε μία νέα μεταβλητή.
Η ΟΣΟ, εκτελείται όσο το  α  είναι μεγαλύτερο τουλάχιστον από ένα από τα β , γ.
Άρα σταματάει όταν το  α  γίνει μικρότερο ή ίσο από τον ελάχιστο των β και γ.

αμέ, γιατί όχι

τώρα ξαναπαρατηρώ ότι στην έκδοση που ανέβασα έλεγα
α <-- (β+γ) div 2
αλλά στην έκδοση που έδωσα στα παιδιά έλεγα
α <-- β+γ

ώστε η συνθήκη στο ΟΣΟ να είναι εξ αρχής αληθής, και να μη χρειαστούν απανωτές εμφωλεύσεις με ΑΝ και ΜΕΧΡΙΣ_ΤΟΥ

panosz

Παράθεση από: epsilonXi στις 27 Μαΐου 2019, 04:00:58 ΜΜ
καλησπέρα σε όλους,

με τις λύσεις που προτείνω



Καλησπέρα,
Στο Θέμα Α.5:
εκφώνηση: α <-- (β+γ)div2
Στην περίπτωση που δοθούν ίδια β και γ ή διαφέρουν κατά μία μονάδα, τότε η ΟΣΟ δεν εκτελείται ποτέ. Σωστά ?
Αν ναι, τότε στη λύση, μήπως πρέπει να προηγηθεί μια ΑΝ ?

Φιλικά,
Panos

epsilonXi

Παράθεση από: panosz στις 27 Μαΐου 2019, 04:53:07 ΜΜ
Στο Θέμα Α.5:
εκφώνηση: α <-- (β+γ)div2
Στην περίπτωση που δοθούν ίδια β και γ ή διαφέρουν κατά μία μονάδα, τότε η ΟΣΟ δεν εκτελείται ποτέ. Σωστά ?
σωστά βέβαια

όπως είπα, η έκδοση που έδωσα τελικά λέει
α <-- β+γ, χωρίς το div 2