Εμφάνιση αναρτήσεων με ετικέτα Πρόβλημα_Δύσκολο. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα Πρόβλημα_Δύσκολο. Εμφάνιση όλων των αναρτήσεων

Τετάρτη 6 Μαρτίου 2013

Λύσεις γρίφων 15-20

Οι γρίφοι δημοσιεύθηκαν εδώ : http://ideas-by-alkinoos.blogspot.gr/2013/02/15-20.html

Ακολουθούν οι λύσεις :

Γρίφος 15

Ο ιστός είναι η υποτείνουσα ορθογωνίου τριγώνου. Οι κάθετες πλευρές είναι 15 και 8. Το άθροισμα των τετραγώνων τους είναι 15*15 + 8*8 = 225 + 64 = 289. Αυτό έχει τετραγωνική ρίζα 17.

Γρίφος 16

Α αγρότες έχουν από 2 κατσίκες, Β αγρότες έχουν από 3 κατσίκες και Γ αγρότες έχουν από 4 κατσίκες. Οι αγρότες είναι Α + Β + Γ = 50, και επειδή Α = Β, ισχύει 2*Α + Β = 50.
Οι κατσίκες είναι 2*Α + 3*Β + 4*Γ και επειδή Α = Β, είναι 2*Α + 3*Β + 4*Α = 6*Α + 3*Β = 3 * (2*Α + Β) = 3*50 = 150.

Γρίφος 17

Τα τρία μερίδια είναι α, β και γ. Ισχύει α + β + γ = 17.
Η διαθήκη λέει ότι [α / (1/2)] = [β / (1/3)] και φυσικά [β / (1/3)] = [γ / (1/9].
Λύνοντας με αλγεβρικό τρόπο, (όπου κάπου εμφανίζεται το Ελάχιστο Κοινό Πολλαπλάσιο των παρονομαστών να είναι 18), το σύστημα των τριών εξισώσεων βρίσκουμε α = 9, β = 6, γ = 2.

Συνεχίζοντας όμως το παραμύθι, λέμε ότι τα παιδιά κάλεσαν έναν σοφό να έρθει να κάνει την μοιρασιά. Ήρθε αυτός με την καμήλα του, άκουσε το πρόβλημα και την έβαλε δίπλα στις άλλες, οπότε έγιναν 18. Λέει : Θα πάρει ο μεγάλος γιος το 1/2 από αυτές δηλαδή 9 καμήλες, Θα πάρει ο μεσαίος γιος το 1/3 από αυτές δηλαδή 6 καμήλες και θα πάρει ο μικρός γιος το 1/9 από αυτές δηλαδή 2 καμήλες.
Πήρανε τα παιδιά 9+6+2 = 17 καμήλες, πήρε κι ο σοφός την δική του και έφυγε.

Γρίφος 18

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

Γρίφος 19

Το πρόβλημα είναι από το βιβλίο Sam Loyd's Cyclopedia of 5000 Puzzles Tricks and Conundrums, (Corwin Books, New York City, 1914), σελίδα 156.
Η ποικιλία πατάτας είναι η PEACH-BLOWS. Αυτά τα γράμματα αντικαθιστούμε με 12345-67890 και προκύπτει η παρακάτω πρόσθεση:
__45200
___4305
_689989
__45810
_370810
1372372
___4887
___6300
___5810
___3720
___5820
_311720
___4890
_452202
_450831
__05221
--------+
3779887

Γρίφος 20

Αρχικά, 1% των 1000kg είναι το στερεό μέρος, που ζυγίζει 1000 * ( 1/100 ) = 10kg.
Μετά, τα 10kg αυτά είναι το 2% του συνολικού βάρους, άρα το συνολικό βάρος είναι 10 / ( 2/100 ) = 500kg.

Κυριακή 3 Μαρτίου 2013

Λύση γρίφου 12

Ο γρίφος δημοσιεύτηκε εδώ : http://ideas-by-alkinoos.blogspot.gr/2013/02/12.html

Ακολουθεί η λύση:


Γρίφος 12

Την πρώτη φορά που συναντιούνται τα πλοία έχουν διανύσει (μαζί, αθροιστικά) μία φορά το πλάτος του ποταμού και το αργό πλοίο έχει διανύσει 720 γιάρδες.

Όταν τα πλοία φθάσουν την απέναντι όχθη (όχι ταυτόχρονα, αλλά δεν πειράζει) έχουν διανύσει δύο φορές το πλάτος του ποταμού.

Την δεύτερη φορά που συναντιούνται τα πλοία έχουν διανύσει (μαζί) τρεις φορές το πλάτος του ποταμού και το αργό πλοίο έχει διανύσει ένα πλάτος συν 400 γιάρδες.

Από την αναλογία [1 / 3 ισούται με 720 / (πλάτος + 400)] προκύπτει ότι πλάτος = 1760 γιάρδες.

Τετάρτη 27 Φεβρουαρίου 2013

Γρίφοι 15-20

Γρίφος 15 (Τον έχει προτείνει ο φίλος αναγνώστης Carlo de Grandi, που έχει ιστολόγιο εδώ).

Στην οροφή ενός πύργου ύψους 15 μέτρων και πάνω στις πολεμίστρες υψώσαμε κατακόρυφα έναν ιστό για σημαία. Η βάση του δεν ήταν πολύ γερή και ο ιστός έγειρε πλάγια και ακούμπησε στο χώμα σε απόσταση 8 μέτρων από τον τοίχο του πύργου. Πόσο ήταν το μήκος του ιστού;


Γρίφος 16

Σε ένα χωριό ζούνε 50 αγρότες και έχουν 2, 3 ή 4 κατσίκες ο καθένας. Αν αυτοί που έχουν 2 κατσίκες είναι ίσοι στο πλήθος με αυτούς που έχουν 4, πόσες κατσίκες έχουν όλοι μαζί;


Γρίφος 17

Ένας γέρος άραβας είχε 17 καμήλες και τις άφησε στους τρεις γιούς του με διαθήκη που έλεγε
[να τις μοιράσουν μεταξύ τους σύμφωνα με τους αριθμούς 1/2, 1/3 και 1/9].
Από πόσες καμήλες θα πάρει ο κάθε γιός;


Γρίφος 18

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


Γρίφος 19

Ένας περιηγητής βλέπει μια επιγραφή σε ένα γραφικό παντοπωλείο ενός χωριού:

__CHESS
___CASH
_BOWWOW
__CHOPS
_ALSOPs
PALEALE
___COOL
___BASS
___HOPS
___ALES
___HOES
_APPLES
___COWS
_CHEESE
_chSOAP
__SHEEP
-------
ALLWOOL

Την εξετάζει προσεκτικά και λέει [Αν αντικαταστήσω τα γράμματα, αδιαφορώντας αν είναι κεφαλαία ή πεζά, με μονοψήφιους αριθμούς 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, στην πινακίδα θα φαίνεται μια σωστή πρόσθεση!].
Αν βρείτε τον τρόπο αντικατάστασης, θα διαπιστώσετε ότι τα γράμματα, με τη σειρά των αριθμών που αναπαριστούν, σχηματίζουν δυό αγγλικές λέξεις (μια ποικιλία πατάτας). Ποιές είναι;


Γρίφος 20 (Από το καλό βιβλίο [Το Κοτόπουλο από το Μινσκ] των Yuri B. Chernyak και Robert M. Rose, εκδόσεις Σαββάλας 2001).

Σε μια αποθήκη φρούτων αποθηκεύονται 1000kg φρέσκα μούρα, που περιέχουν 99% νερό. Μετά από μερικές μέρες αποθήκευσης διαπιστώθηκε ότι περιείχαν 98% νερό, λόγω ξήρανσης. Πόσα κιλά ζυγίζουν τώρα τα μούρα;


Δίνετε τις λύσεις στα σχόλια.
Θα δημοσιεύσω τις απαντήσεις σε μια εβδομάδα._

Δευτέρα 25 Φεβρουαρίου 2013

Γρίφος 13

Έχουμε μια αίθουσα με σχήμα ορθογώνιο παραλληλεπίπεδο.
Έχει διαστάσεις 12m x 12m x 30m.
Στην μία τετράγωνη πλευρά, υπάρχει η οπή Α, 1m από την οροφή και 6m από κάθε πλαϊνό τοίχο.
Στην απέναντι τετράγωνη πλευρά υπάρχει η οπή Β, 1m από το πάτωμα και 6m από κάθε πλαϊνό τοίχο.



Θα περάσουμε ένα καλώδιο από το εσωτερικό του δωματίου. Θα εισέρχεται από την οπή Α, θα εφάπτεται πάντοτε σε όποιες εσωτερικές επιφάνειες επιλέξετε, και θα εξέρχεται από την οπή Β.

Πόσο είναι το ελάχιστο μήκος του καλωδίου από το σημείο Α μέχρι το σημείο Β;

Μικρή βοήθεια : είναι λιγότερο από 42m.

Μεγάλη βοήθεια : ΒιρχέμΑόπαησατσόπαηρετόρκιμνητοιερόγαθυΠεμετεκσίρβαταμγύτπαναεμςατνούελυοΔ.

Παρακάτω ακολουθεί η λύση. Αποφύγετε να την διαβάσετε αμέσως!







Ακολουθεί η λύση. Η μεγάλη βοήθεια έλεγε "Δουλεύοντας με αναπτύγματα βρίσκετε με Πυθαγόρειο την μικρότερη απόσταση από Α μέχρι Β". Δημιουργώ το ανάπτυγμα του παραλληλεπίπεδου. Για να δοκιμάσω διάφορες διαδρομές, σχεδιάζω τον τοίχο με την οπή Α σε διάφορες θέσεις. Όπως στρέφω το τετράγωνο για να το βάλω δίπλα στο ταβάνι, δίπλα στον τοίχο, δίπλα στο πάτωμα, η οπή Α βρίσκεται στις θέσεις Α1, Α2, Α3, Α4.



Η απόσταση Α1-Β είναι (11 + 30 + 1) = 42m.

Η απόσταση Α2-Β είναι τετραγωνική ρίζα του [(τετράγωνο του 6+30+1) συν (τετράγωνο του 11+6)] = τετραγωνική ρίζα του [1369 + 289] = τετραγωνική ρίζα του [1658] = 40.71

Η απόσταση Α3-Β είναι τετραγωνική ρίζα του [(τετράγωνο του 1+30+1) συν (τετράγωνο του 6+12+6)] = τετραγωνική ρίζα του [1024 + 576] = τετραγωνική ρίζα του [1600] = 40.

Η απόσταση Α4-Β φαίνεται αρκετά μεγαλύτερη.

Παρατηρώντας το σχήμα, η διαδρομή του καλωδίου είναι : ξεκινάει από την οπή Α3, πηγαίνει λοξά προς το ταβάνι, περνάει την γωνία του ταβανιού, περνάει στον πλαϊνό τοίχο και τον κατεβαίνει λοξά, περνάει και από μια γωνία του πατώματος, και φθάνει στον τοίχο με την οπή Β προς την οποία ανεβαίνει λοξά.

Η ευθεία είναι συντομωτέρα πάσης άλλης γραμμής, στο επίπεδο!
Για να εφαρμόσουμε αυτόν τον κανόνα στο στερεό σχήμα, το μετατρέψαμε πρώτα σε επίπεδο παίρνοντας το ανάπτυγμά του.
Το τελικό μικρό ευθύγραμμο τμήμα ΔΕΝ είναι αυτό που όλοι δίνουν σαν λύση μόλις ακούσουν την εκφώνηση αυτού του προβλήματος.
Άρα, η καλύτερη λύση σε ένα πρόβλημα βρίσκεται αν εφαρμόσουμε όσα γνωρίζουμε με τον καλύτερο δυνατό τρόπο.

Κυριακή 24 Φεβρουαρίου 2013

Γρίφος 12

Από τους πιο γνωστούς προβληματιστές του κόσμου είναι ο Αμερικανός Σαμ Λόιντ (Sam Loyd). Μερικά βιογραφικά στοιχεία του μπορείτε να δείτε εδώ.
Τα σκακιστικά του προβλήματα (έφτιαξε περίπου 700+) είναι εξαιρετικά.

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



Με κλικ στην εικόνα την βλέπετε πιο καθαρά!

Δίνετε απαντήσεις στα σχόλια.
Θα δημοσιεύσω την λύση σε μια εβδομάδα.

Παρασκευή 26 Μαρτίου 2010

Οι πρώτοι 100 [πρώτοι αριθμοί]

Πρώτος, καλείται ένας φυσικός μεγαλύτερος του 1, που διαιρείται ακριβώς μόνο με την μονάδα και τον εαυτό του. Θα γνωρίζετε, υποθέτω, την μέθοδο εντοπισμού τους από τον Ερατοσθένη - το κόσκινο του Ερατοσθένη.

Παραδείγματα πρώτων αριθμών : 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41 ...

Ο αριθμός 2 είναι ο μόνος άρτιος (ζυγός) πρώτος αριθμός. Οι υπόλοιποι πρώτοι αριθμοί είναι περιττοί (μονοί).

Θέλουμε να φτιάξουμε ένα πρόγραμμα που θα υπολογίζει τους πρώτους 100 πρώτους αριθμούς. Ο έλεγχος για το αν κάποιος αριθμός είναι πρώτος θα γίνεται με μια λογική συνάρτηση.

Μέσα στην συνάρτηση θα προσπαθούμε να βρούμε αν ο δοθείς αριθμός Ξ διαιρείται με διαδοχικούς περιττούς αριθμούς, από 3 μέχρι Τετραγωνική_Ρίζα(Ξ). Δεν υπάρχει λόγος να ψάξουμε για μεγαλύτερους διαιρέτες, γιατί θα τους έχουμε ήδη συναντήσει ως πηλίκα, και θα έχουμε μάθει αν ο αριθμός Ξ διαιρείται.

Παραδείγματα :

16=2*8=4*4=8*2. Δεν ψάχνουμε για διαιρέτη πέρα από το 4.

60=2*30=3*20=4*15=5*12=6*10=10*6=12*5=15*4=20*3=30*2. Δεν ψάχνουμε για διαιρέτη πέρα από το Τ_Ρ(64)=7 κόμμα κάτι.

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

ΠΡΟΓΡΑΜΜΑ πρωτοι
! πρώτος καλείται ο φυσικός αριθμός που διαιρείται ακριβώς
! μόνο με την μονάδα και τον εαυτό του.
! Εδώ θα βρούμε και θα γράψουμε τους πρώτους 100 πρώτους αριθμούς
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΠΡ[100], i, imax, Ξ
ΑΡΧΗ
imax <- 100
ΠΡ[1] <- 2
i <- 1 ! το i μετράει πόσους πρώτους έχουμε βρεί
Ξ <- 3 ! ελέγχουμε μόνο τους περιττούς από το 3 και μετά
ΟΣΟ i < imax ΕΠΑΝΑΛΑΒΕ
ΑΝ einaiprotos(Ξ) ΤΟΤΕ
i <- i + 1
ΠΡ[i] <- Ξ
ΤΕΛΟΣ_ΑΝ
Ξ <- Ξ + 2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ imax ΜΕ_ΒΗΜΑ 10
ΓΡΑΨΕ ΠΡ[i], ΠΡ[i + 1], ΠΡ[i + 2], ΠΡ[i + 3], ΠΡ[i + 4], ΠΡ[i + 5], ΠΡ[i + 6], ΠΡ[i + 7], ΠΡ[i + 8], ΠΡ[i + 9]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
!
ΣΥΝΑΡΤΗΣΗ einaiprotos(Ξ): ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ξ, Σ
ΠΡΑΓΜΑΤΙΚΕΣ: ΡΙΖΑΞ
ΛΟΓΙΚΕΣ: διαιρείται
ΑΡΧΗ
ΡΙΖΑΞ <- Α_Μ(Τ_Ρ(Ξ))
Σ <- 3 ! οι διαιρέτες θα είναι περιττοί, από το 3 και μετά
διαιρείται <- ΨΕΥΔΗΣ
ΟΣΟ (Σ <= ΡΙΖΑΞ) ΚΑΙ (διαιρείται = ΨΕΥΔΗΣ) ΕΠΑΝΑΛΑΒΕ
ΑΝ Ξ MOD Σ = 0 ΤΟΤΕ
διαιρείται <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
Σ <- Σ + 2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
einaiprotos <- ΑΛΗΘΗΣ
ΑΝ διαιρείται ΤΟΤΕ
einaiprotos <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


Το εξαγόμενο είναι το ακόλουθο :
  2   3   5   7  11  13  17  19  23  29
 31  37  41  43  47  53  59  61  67  71
 73  79  83  89  97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229
233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349
353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463
467 479 487 491 499 503 509 521 523 541

Δευτέρα 22 Μαρτίου 2010

Ημερομηνία του Πάσχα

Πλησιάζει το Πάσχα (των Ορθοδόξων) και θέλουμε να μάθουμε πότε ακριβώς "πέφτει".
Θα χρησιμοποιήσουμε την μέθοδο Gauss.
Στο σημερινό πρόγραμμα διαβάζουμε το τετραψήφιο έτος και με ένα υποπρόγραμμα βρίσκουμε την ημερομηνία του Πάσχα και ένα λεκτικό για τον μήνα (στην γενική πτώση).
Το υποπρόγραμμα Βρες_Πάσχα θα παίρνει μία παράμετρο εισόδου [έτος] και θα επιστρέφει δύο παραμέτρους εξόδου [ημερομηνία, μηνός], άρα θα είναι διαδικασία. (Για μία παράμετρο εξόδου, αρκούσε ένα υποπρόγραμμα συνάρτηση).

ΠΡΟΓΡΑΜΜΑ πασχα
! υπολογίζουμε την ημερομηνία του Πάσχα για δεδομένο έτος
__ΜΕΤΑΒΛΗΤΕΣ
____ΑΚΕΡΑΙΕΣ: έτος, ημερομηνία
____ΧΑΡΑΚΤΗΡΕΣ: μηνός
ΑΡΧΗ
__ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
____ΓΡΑΨΕ 'Δώσε έτος τετραψήφιο : '
____ΔΙΑΒΑΣΕ έτος
__ΜΕΧΡΙΣ_ΟΤΟΥ έτος > 1900
__ΚΑΛΕΣΕ ΒρεςΠάσχα(έτος, ημερομηνία, μηνός)
__ΓΡΑΨΕ 'Το έτος ', έτος, ' έχει το πάσχα στις ', ημερομηνία, μηνός
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
!
ΔΙΑΔΙΚΑΣΙΑ ΒρεςΠάσχα(ετο, ημε, μην)
__ΜΕΤΑΒΛΗΤΕΣ
____ΑΚΕΡΑΙΕΣ: αα, ββ, γγ, δδ, ετο, ζζ, ημε
____ΧΑΡΑΚΤΗΡΕΣ: μην
ΑΡΧΗ
__αα <- ετο MOD 19
__ββ <- ετο MOD 4
__γγ <- ετο MOD 7
__δδ <- (19*αα + 16) MOD 30
__ζζ <- (2*ββ + 4*γγ + 6*δδ) MOD 7
__ημε <- 3 + δδ + ζζ
__μην <- ' Απριλίου'
__ΑΝ ημε > 30 ΤΟΤΕ
____ημε <- ημε - 30
____μην <- ' Μαΐου'
__ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Η εκτέλεση του προγράμματος είναι κάπως έτσι :

Δώσε έτος τετραψήφιο:
2010
Το έτος 2010 έχει το πάσχα στις 4 Απριλίου

Κυριακή 14 Φεβρουαρίου 2010

Ένας κύκλος μέσα σε ένα τετράγωνο

Η απογοήτευσή μου λόγω της κατάληψης του σχολείου μου είναι αντιστρόφως ανάλογη με την συχνότητα που γράφω εδώ αναρτήσεις το τελευταίο δίμηνο.
Είναι η τελευταία χρονιά που διδάσκω το μάθημα ΑΕΠΠ και θα ήθελα να παρουσιάσουν οι μαθητές μου κάπως μεγαλύτερη επίδοση φέτος.
Δυστυχώς χάσαμε αρκετές ώρες και θα έχουν την συνηθισμένη επίδοση που παρουσιάζουν όσοι παρακολουθούν φροντιστήρια : οι καλοί γράφουν και οι άλλοι θα ξαναδώσουν του χρόνου. Ας ελπίσουμε ότι θα διαψευσθώ και θα πάρουν όλοι στα γραπτά 20.

Δίνω την εξής άσκηση :
Ορίζουμε έναν τετραγωνικό πίνακα p με διαστάσεις imax=10, jmax=10.
Γεμίζουμε κάθε στοιχείο του πίνακα p με μονάδες (1).
Διαβάζουμε την ακτίνα r ενός κύκλου.
Μετά αλλάζουμε μερικά στοιχεία του πίνακα σε μηδενικά (0), ώστε να σχηματίζεται ένας κύκλος μηδενικών με κέντρο το μέσο του τετραγωνικού πίνακα και ακτίνα r.
Γράφουμε τον πίνακα για να δούμε το αποτέλεσμα.

Περιμένω τις λύσεις σας στην διεύθυνση manolas@sch.gr.
Θα αναρτήσω την προτεινόμενη από εμένα λύση (το πρόγραμμα που έχω φτιάξει έχει 32 συνολικά γραμμές) μετά από μία εβδομάδα περίπου.


Μετά από δύο εβδομάδες...

ΠΡΟΓΡΑΜΜΑ Α20091118
ΜΕΤΑΒΛΗΤΕΣ
__ΑΚΕΡΑΙΕΣ: i, imax, j, jmax, p[10, 10]
__ΠΡΑΓΜΑΤΙΚΕΣ: icenter, jcenter, r, rsin, rcos
ΑΡΧΗ
imax <- 10
jmax <- 10
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ imax
__ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ jmax
____p[i, j] <- 1
__ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ "Δώσε ακτίνα "
ΔΙΑΒΑΣΕ r
icenter <- (1 + imax)/2 _________________! 1. Ορίζω γραμμή του κέντρου
jcenter <- (1 + jmax)/2 _________________! 2. Ορίζω στήλη του κέντρου
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ imax ________________! 3. Για κάθε γραμμή...
__rsin <- i - icenter ___________________! ...βρίσκω την τεταγμένη
__ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ jmax ______________! 4. Για κάθε στήλη...
____rcos <- j - jcenter _________________! ...βρίσκω την τετμημένη
____ΑΝ r >= Τ_Ρ(rsin^2 + rcos^2) ΤΟΤΕ ___! 5. Στα σημεία εντός του...
______p[i, j] <- 0 _____________________! ...κύκλου μηδενίζω.
____ΤΕΛΟΣ_ΑΝ
__ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ imax
__ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ jmax
____ΓΡΑΨΕ p[i, j], " "
__ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
__ΓΡΑΨΕ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Αποτέλεσμα εκτέλεσης :

Δώσε ακτίνα 4
1 1 1 1 1 1 1 1 1 1
1 1 1 0 0 0 0 1 1 1
1 1 0 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 1 1
1 1 1 0 0 0 0 1 1 1
1 1 1 1 1 1 1 1 1 1

Τρίτη 11 Νοεμβρίου 2008

Πράξεις και τελεστές πράξεων και RPN

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

Έχουμε ένα σύνολο R με πραγματικούς αριθμούς.
Παίρνουμε πρώτα έναν αριθμό α από το σύνολο R.
Παίρνουμε ακόμη έναν αριθμό β από το σύνολο R.
Οι δυό αριθμοί κρατάνε τη σειρά τους, (πρώτα ο α και μετά ο β), κρατάνε την διάταξή τους, είναι ένα διατεταγμένο ζεύγος (α, β).
Η πράξη που θέλουμε να κάνουμε στο ζευγάρι αριθμών (α, β) συμβολίζεται με ένα τελεστή, ας πούμε Τ, και δίνει ένα αποτέλεσμα γ.
[Πιθανή γραφή : γ = ( α Τ β ) ]

Αν είναι αριθμητική πράξη ([πρόσθεση, αφαίρεση, πολλαπλασιασμός, διαίρεση, ύψωση σε δύναμη] όταν δηλαδή ο τελεστής είναι [+, -, *, /, ^]) τότε το γ είναι αριθμός που ανήκει επίσης στο σύνολο R. (Υπάρχουν κι άλλες πράξεις, όπως η ακέραια διαίρεση (με τελεστή \, όπου [7 \ 3] δίνει πηλίκο 2 και υπόλοιπο 1), που διαφέρει από την κανονική διαίρεση ([7 / 3] δίνει πηλίκο 2.3333..., ή μικτό 2 1/3). Για την ακέραια διαίρεση έχουμε ορίσει συναρτήσεις, όπως είναι η DIV και η MOD).

Αν είναι συγκριτική πράξη ([μεγαλύτερο από, μεγαλύτερο ή ίσο, ίσο, μικρότερο ή ίσο, μικρότερο, διάφορο από] όταν δηλαδή ο τελεστής είναι [>, >=, =, <=, <, <>]) τότε το γ είναι μία από τις δύο λογικές τιμές : Αληθής ή Ψευδής. (Υπάρχουν ακόμα οι λογικές πράξεις, (ο τελεστής είναι ΚΑΙ, Ή, ΌΧΙ), που γίνονται σε μεταβλητές (ή εκφράσεις) που έχουν λογικές τιμές, και πάλι το αποτέλεσμα είναι μία από τις δύο λογικές τιμές : Αληθής ή Ψευδής).

Υπάρχουν τρεις τρόποι να γράψουμε τον τελεστή της πράξης και το ζευγάρι (α, β).
(Τ α β), συμβολισμός prefix, ο τελεστής μπροστά. (Προτάθηκε το 1920 από τον Πολωνό μαθηματικό Jan Lukasiewicz).
(α Τ β), συμβολισμός infix, ο τελεστής ανάμεσα.
(α β Τ), συμβολισμός postfix, ο τελεστής ακολουθεί. (Προτάθηκε το 1960 από τους F. L. Bauer και E. W. Dijkstra).

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

Προηγείται η ύψωση σε δύναμη (α^β).
Δεύτερες πράξεις σε ιεραρχία είναι ο πολλαπλασιασμός (α*β) και η διαίρεση (α/β).
Ακολουθούν τρίτες σε ιεραρχία η πρόσθεση (α+β) και η αφαίρεση (α-β).
Αν σε μία έκφραση υπάρχουν παρενθέσεις, βρίσκεται πρώτα η τιμή της έκφρασης της πιο εσωτερικής παρένθεσης.
Αν σε μία έκφραση υπάρχουν πράξεις ίσης ιεραρχίας, εκτελούνται από αριστερά προς τα δεξιά.
Οι συγκριτικοί τελεστές έχουν μικρότερη ιεραρχία.
Οι λογικοί τελεστές έχουν μικρότερη από όλους, αλλά μεταξύ τους (αν θυμάμαι καλά!) προηγείται ο ΌΧΙ, μετά ο ΚΑΙ, μετά ο Ή. Το σωστό είναι να βάζουμε παρενθέσεις, για να μην υπάρχει αμφιβολία.

Ας δούμε ένα παράδειγμα εκτέλεσης πράξεων (Συμβολίζουμε τα ενδιάμεσα αποτελέσματα (results) με R1, R2, κλπ) :
(α - β * (γ + δ * ε)) - ζ / η
(α - β * (γ + R1)) - ζ / η
(α - β * (R2)) - ζ / η
(α - R3) - ζ / η
(R4) - ζ / η
R4 - R5
R6

Μια ενδιαφέρουσα παρατήρηση είναι ότι ο συμβολισμός του Πολωνού (Polish notation) Lukasiewicz και ο συμβολισμός με τον τελεστή να ακολουθεί (ανάστροφος συμβολισμός του Πολωνού, Reverse Polish Notation, RPN) δεν χρειάζονται παρενθέσεις!

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

Ας ξαναγράψουμε (δια "μαγικού τρόπου") την έκφραση του προηγούμενου παραδείγματος σε RPN μορφή :
α β γ δ ε * + * - ζ η / -
α β γ R1 + * - ζ η / -
α β R2 * - ζ η / -
α R3 - ζ η / -
R4 ζ η / -
R4 R5 -
R6

Όπως βλέπετε, γίνονται οι ίδιες πράξεις. Κάθε τελεστής εφαρμόζεται σε δύο παράγοντες/προσθετέους/κλπ αριστερά του.

Υπάρχει αλγόριθμος για μετατροπή μιάς αλγεβρικής έκφρασης σε RPN έκφραση.
Αν η αλγεβρική έκφραση δεν είναι σωστά γραμμένη, εύκολα εντοπίζεται το λάθος από τον αλγόριθμο μετατροπής (του περισσεύουν ή του λείπουν τελεστές).
Ο αλγόριθμος μετατροπής χρησιμοποιεί σωρούς (stacks) για τον χειρισμό των μεταβλητών και των τελεστών. Στον σωρό των τελεστών μπορεί να στέκεται τελεστής μεγαλύτερης ιεραρχίας πάνω από τους μικρότερης ιεραρχίας, αν όμως έρθει τελεστής μικρότερης ιεραρχίας η κλείσιμο παρένθεσης οι τελεστές βγαίνουν στον σωρό RPN.

Δείτε τον "μαγικό τρόπο" σε λειτουργία (αριστερά τα στοιχεία της έκφρασης, στη μέση [ο σωρός των τελεστών] και δεξιά [η έκφραση RPN]) :
στοιχεία της έκφρασηςο σωρός των τελεστώνη έκφραση RPNσχόλιο
( (

α ( α
- (- α
β (- αβ
* (-* αβ
( (-*( αβ
γ (-*( αβγ
+ (-*(+ αβγ
δ (-*(+ αβγδ
* (-*(+* αβγδ
ε (-*(+* αβγδε
) (-*(+*) αβγδε και αφού έκλεισε παρένθεση

(-* αβγδε*+
) (-*) αβγδε*+ και αφού έκλεισε παρένθεση


αβγδε*+*-
- - αβγδε*+*-
ζ - αβγδε*+*-ζ
/ -/ αβγδε*+*-ζ
η -/ αβγδε*+*-ζη
τέλος στοιχείων
αβγδε*+*-ζη/-

Ένα αρχαίο Fortran πρόγραμμα που έκανε στοιχειώδη μετατροπή έκφρασης σε Polish μορφή δίνεται παρακάτω :


______PROGRAM ALGPOL
C_________CASE STUDY 15 - (MAC CRACKEN ?)
C_________TRANSLATING ALGEBRAIC EXPRESSIONS TO POLISH NOTATION
______INTEGER BLANK,LPAREN,RPAREN,PLUS,MINUS,ASTRSK,SLASH,SOURCE(80),
_____1OPSTCK(80),POLISH(80),SHIER(80),OHIER(80)
______DATA BLANK,LPAREN,RPAREN,PLUS,MINUS,ASTRSK,SLASH/' ','(',')','+',
_____1'-','*','/'/
C_________
C_________INITIALIZE ARRAYS TO ZERO OR BLANK
_1001 DO 1002 L = 1, 80
______SHIER(L) = 0
______OHIER(L) = 0
______OPSTCK(L) = BLANK
______POLISH(L) = BLANK
_1002 CONTINUE
C_________READ A DATA CARD
______READ (10, 2001) SOURCE
C_________WRITE ALGEBRAIC STRING,(IN FORTRAN STYLE)
______WRITE(12, 2002) SOURCE
C_________L POINTS TO THE CURRENT CARD COLUMN
______L = 1
C_________ASSIGN HIERARCHY NUMBERS AND TEST FOR FIRST BLANK
_1003 IF(SOURCE(L) .EQ. BLANK) GO TO 1009
______IF(SOURCE(L) .EQ. LPAREN) GO TO 1004
______IF(SOURCE(L) .EQ. RPAREN) GO TO 1005
______IF(SOURCE(L) .EQ. PLUS .OR. SOURCE(L) .EQ. MINUS) GO TO 1006
______IF(SOURCE(L) .EQ. ASTRSK .OR. SOURCE(L) .EQ. SLASH) GO TO 1007
______GO TO 1008
_1004 SHIER(L) = 1
______GO TO 1008
_1005 SHIER(L) = 2
______GO TO 1008
_1006 SHIER(L) = 3
______GO TO 1008
_1007 SHIER(L) = 4
_1008 L = L + 1
______IF(L .GT. 80) GO TO 1009
______GO TO 1003
_1009 N = L - 1
C_________IF N IS NOW ZERO, CARD WAS BLANK, GO TO EXIT
______IF(N .EQ. 0) GO TO 1016
C_________INITIALIZE HIERARCHY NUMBERS
______OHIER(1) = - 1
C_________INITIALIZE POINTERS
______I = 1
______J = 2
______K = 1
C_________CHECK FOR OPERAND
_1010 IF(SHIER(I) .EQ. 0) GO TO 1012
C_________CHECK FOR RIGHT PARENTHESIS
______IF(SHIER(I) .EQ. 2) GO TO 1011
C_________OTHER OPERATOR IF HERE %% MOVE TO OPERATOR STACK
______OPSTCK(J) = SOURCE(I)
______OHIER(J) = SHIER(I)
______I = 1 + I
______J = J + 1
______GO TO 1010
C_________DELETE CORRESPONDING LEFT PARENTHESIS
_1011 I = 1 + I
______J = J - 1
______GO TO 1013
C_________MOVE OPERAND TO POLISH STRING
_1012 POLISH(K) = SOURCE(I)
______I = 1 + I
______K = K + 1
C_________CHECK HIERARCHY RANKINGS
_1013 IF (OHIER(J-1) .GE. SHIER(I)) GOTO 1014
C_________CHECK FOR END OF SOURCE STRING
______IF(I .GE. L) GO TO 1015
______GO TO 1010
C_________MOVE OPERATOR TO POLISH STRING
_1014 POLISH(K) = OPSTCK(J-1)
______K = K + 1
______J = J - 1
______GO TO 1013
C_________WRITE POLISH STRING
_1015 WRITE(12, 2003) POLISH
______GO TO 1001
C_________EXIT POINT
______STOP 1001
C_________I/O FORMATS
_2001 FORMAT(80A1)
_2002 FORMAT(* ALGEBRAIC NOTATION *,80A1)
_2003 FORMAT(* POLISH NOTATION *,80A1/)
______END


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

A+(B/C)/(D+(E+F)/(G*H-I/(J/K+L)))-M*N
A*(B+C)
(A+B)*C
A+B*C+D
(A+B)*(C+D)
A-B/C
(A-B)/C
A/B/C
(A/B)/C
A*B/C*D/E
A*B-C+D
A*B-(C+D)
A*(B-C)+D
A*(B-C+D)
A
(((A)))
((A)+((B)))
A+B+C+D
(A+B)+(C+D)
A+B/C+D/(E+F+G-H/I)*J
(((A+B)*C+D)*E+F)*G
A+B*(C+D*(E+F*(G+H)))
AB*CD+EF-*/
AB*3.C-/BB+*

Καλή διασκέδαση!