Δύσκολες Ασκήσεις στις Δομές Επανάληψης

Ξεκίνησε από olga_ath, 13 Οκτ 2010, 02:47:27 ΜΜ

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

evry

Ο πρώτος είναι 2520 = 9x8x7x5.
Τα 1,2,3,4,6,10 προκύπτουν από συνδυασμούς διαιρετών των 4 παραπάνω παραγόντων.
Λογικά μετά δεν θα είναι
  1 x 2520
  2 x 2520
  3 x 2520
  .........
  + 10x2520

ή (1+..+10)*2520 = 10(10+1)/2 * 2520

αλλά κάτι δε μου πάει καλά στον συλλογισμό μου....
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

nikolasmer

Είχα την εντύπωση πως υπάρχουν αριθμοί "ενδιάμεσα" από τα πολλαπλάσια του 2520!!!

Παράθεση από: evry στις 17 Νοε 2015, 11:42:32 ΠΜ
Ο πρώτος είναι 2520 = 9x8x7x5.
Τα 1,2,3,4,6,10 προκύπτουν από συνδυασμούς διαιρετών των 4 παραπάνω παραγόντων.
Λογικά μετά δεν θα είναι
  1 x 2520
  2 x 2520
  3 x 2520
  .........
  + 10x2520

ή (1+..+10)*2520 = 10(10+1)/2 * 2520

αλλά κάτι δε μου πάει καλά στον συλλογισμό μου....
:'( :'( :'( :'(
Τόσο απλό ήταν τελικά...

Το αλλάζω....
Να βρεθεί το άθροισμα των 10 θετικών πρώτων αριθμών που θα συναντήσετε οι οποίοι μπορούν να διαιρεθούν ακριβώς ο καθένας τους, χωρίς να αφήνει υπόλοιπο, με όλους τους αριθμούς από το 1 μέχρι το 10 ο πρώτος , με τους αριθμούς 1 - 20 ο δεύτερος, με τους αριθμούς 1 - 30 ο τρίτος και λοιπά...... μέχρι τον δέκατο αριθμό ο οποίος θα πρέπει να διαιρείται με όλους τους αριθμούς από το 1 - 100.  :P :P :P

Υ.Γ. Πρέπει να ξαναδιαβάσω το αγαπημένο μου βιβλίο "How to be smarter,  for Dummies!!!" ακούγοντας το αγαπημένο μου τραγουδάκι  https://www.youtube.com/watch?v=iCnvd5_Q7gQ

Την καλησπέρα μου στον Κύριο Βραχνό με μεγατόνους σεβασμού!
Μερεντίτης Νικόλαος
Πληροφορικός

gthal

#77
Παράθεση από: evry στις 17 Νοε 2015, 11:42:32 ΠΜ
αλλά κάτι δε μου πάει καλά στον συλλογισμό μου....
Μια χαρά είναι ο συλλογισμός σου :)

Δίνω μια λύση για το τελευταίο πρόβλημα, που νομίζω ότι θα δούλευε.
Τώρα για την πολυπλοκότητά της δεν ξέρω...
ΠΡΟΓΡΑΜΜΑ nikolasmer
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: S, i, k, a, ΕΚΠ
ΑΡΧΗ
  S <- 0
  ΕΚΠ <- 1
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10   ! για τους 10 αριθμούς που ψάχνουμε
    a <- 10*i
    ΓΙΑ k ΑΠΟ a-9 ΜΕΧΡΙ a
      ΕΚΠ <- ΕΚΠ * k DIV ΜΚΔ(ΕΚΠ, k)
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ! η τιμή του ΕΚΠ τώρα είναι ο μικρότερος αριθμός που
    ! διαιρείται ακριβώς με όλους τους ακέραιους από 1 μέχρι 10*i
    ΓΡΑΨΕ ΕΚΠ
    S <- S + ΕΚΠ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ 'Το άθροισμα είναι: ', S

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ ΜΚΔ (x, y): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: x, y, z
ΑΡΧΗ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΑΝ x < y ΤΟΤΕ
      z <- x
      x <- y
      y <- z
    ΤΕΛΟΣ_ΑΝ
    x <- x MOD y
  ΜΕΧΡΙΣ_ΟΤΟΥ x = 0
  ΜΚΔ <- y
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Βρίσκει ταχύτατα ότι οι 4 πρώτοι ζητούμενοι αριθμοί είναι
2520
232792560
2329089562800
5342931457063200
αλλά από τον πέμπτο και μετά οι αριθμοί γίνονται τόσο μεγάλοι που κλατάρει η αριθμητική του διερμηνευτή
καμιά ιδέα για να ξεπεραστεί αυτό?
Φιλικά,
Γιώργος Θαλασσινός

bugman

Δες ατο παρακάτω πρόγραμμα (το είχα δημοσιεύσει στο SpiNet-Γλωσσομάθεια, το 2003), ένα ενδιαφέρον θέμα για το μέγεθος των αριθμών.  Αντί να κάνω όλους τους πολλαπλασιασμούς και μετά τη διαίρεση, κάνω μια διαίρεση και ένα πολλαπλασιασμό διαδοχικά! Άρα για να κρατήσεις ένα πολύ μεγάλο αριθμό..θα τον έχεις ως δυο αριθμούς, Α και Β όπου ο μεγάλος είναι ο Α*Β
(και εδώ υπάρχει μια διαίρεση με όσα δεκαδικά θέλουμε για να δείξουμε ένα νούμερο, απλά προσαρμόζουμε το που θα δείξουμε - ή όχι- το κόμμα των δεκαδικών).
Εφόσον κρατάμε αριθμούς ως σειρά γινομένων, θα δουλεύουμε πιο αποδοτικά!
Δίνω την ιδέα και τα εργαλεία. Όχι το πρόγραμμα!

ΠΡΟΓΡΑΜΜΑ Α
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ,Κ
  ΠΡΑΓΜΑΤΙΚΕΣ: Π, Π1, ΠΕ
ΑΡΧΗ
  ΓΡΑΨΕ 'Συνολικές 6-αδες από 49 νούμερα'
  Χ <-- 6
  Π <-- 49
  ΓΡΑΨΕ 'Π=', 49
  ΓΙΑ Κ ΑΠΟ Χ ΜΕΧΡΙ 2 ΜΕ ΒΗΜΑ -1
    Π1 <-- Π
    ΠΕ <-- (50-Κ)/Κ
    Π <-- Π*ΠΕ
    ΓΡΑΨΕ  '*',Α_Μ(50-Κ),'/ ', Α_Μ(Κ),' = ', Π1,'*',ΠΕ,' => Π=', Π
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ 'ΕΠΑΛΗΘΕΥΣΗ=', (49*48*47*46*45*44)/(6*5*4*3*2)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

nikolasmer

Παράθεση από: evry στις 17 Δεκ 2010, 05:23:29 ΜΜ
Τρεις Ασκήσεις που θεωρώ δύσκολες και κρύβουν σημαντικούς διδακτικούς στόχους όσον αφορά τον προγραμματισμό

1. Να γίνει αλγόριθμος ο οποίος θα διαβάζει αριθμούς μέχρι να δοθεί 0 και θα εμφανίζει τον αριθμό που δόθηκε τις περισσότερες  φορές.
Παραφράζοντας λίγο την άσκηση του κ. Βραχνου.....αυτό λύνεται χωρίς δυναμικές δομές;
Μερεντίτης Νικόλαος
Πληροφορικός

evry

Έβγαλες το "συνεχόμενες" ε?
Δεν λύνεται χωρίς δυναμικές δομές εκτός αν ξέρεις ποιοι είναι οι αριθμοί οπότε μπορείς να δεσμεύσεις πίνακα μετρητών.
Ωστόσο υπάρχει μια πολύ ωραία και κομψή λύση σε Python με χρήση λεξικού. ;)

Παράθεση από: nikolasmer στις 03 Νοε 2016, 12:17:03 ΜΜ
Παραφράζοντας λίγο την άσκηση του κ. Βραχνου.....αυτό λύνεται χωρίς δυναμικές δομές;

ΥΓ. Άστο αυτό το κ. Βραχνέ  :-[
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Κωστας τζιαννης

#81
Παράθεση από: evry στις 16 Ιαν 2011, 08:27:39 ΜΜ
Το θέμα της 1ης φάσης του Πανελλήνιου Διαγωνισμού Πληροφορικής φέτος,

ΜΕΓΙΣΤΟΠΟΙΗΣΗ ΚΕΡΔΟΥΣ

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

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


Τι λέτε? θα μπορούσε να μπει άσκηση στο μάθημά μας?
Προσωπικά μου φαίνεται πολύ καλό

καλη ασκηση .παρακατω η λυση ΧΩΡΙΣ πινακα

nikolasmer

Έναν αριθμό μπορούμε να τον σπάσουμε σε γινόμενο πρώτων παραγόντων (χωρίς αναδρομή;)
Μερεντίτης Νικόλαος
Πληροφορικός

gpapargi

Ναι. Είναι και άσκηση στο τετράδιο μαθητή

nikolasmer

Παράθεση από: gpapargi στις 05 Οκτ 2018, 10:06:30 ΠΜ
Ναι. Είναι και άσκηση στο τετράδιο μαθητή
και έπειτα να τον γράψουμε σε παραγοντοποιημενη μορφή ; Ανεξάρτητου πλήθους παραγόντων;
Μερεντίτης Νικόλαος
Πληροφορικός

gpapargi

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

nikolasmer

Παράθεση από: gpapargi στις 05 Οκτ 2018, 10:42:57 ΠΜ
Ε ναι, αφού κάνεις το ένα κάνεις και το άλλο. Το βασικό σημείο είναι ότι δεν ψάχνεις τους πρώτους για να κάνεις διαιρέσεις. Κάνεις διαιρέσεις με όλους τους ακεραίου διαδοχικά. Αλλά οι σύνθετοι δε θα πετύχουν τέλεια διαίρεση γιατί ότι πρώτο παράγοντα περιέχουν έχει ήδη απορροφήσει όλες τις διαιρέσεις που θα μπορούσε να κάνει ο σύνθετος. 
Θα το προσπαθήσω.
Σας ευχαριστώ .
Μερεντίτης Νικόλαος
Πληροφορικός

Κανένας

#87
Μια εκδοχή σε Γλωσσομάθεια:

ΠΡΟΓΡΑΜΜΑ Ανάλυση_σε_γινόμενο_πρώτων_παραγόντων
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: n,i,m
ΑΡΧΗ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
   ΓΡΑΨΕ 'Δώσε φυσικό αριθμό'
   ΔΙΑΒΑΣΕ n
  ΜΕΧΡΙΣ_ΟΤΟΥ n>0 KAI A_Μ(n)=n
  ΓΡΑΨΕ_ n,'=',1
  i <-- 1
  ΟΣΟ n<>1 ΕΠΑΝΑΛΑΒΕ
    i <-- i+1
    m <-- 0
    ΟΣΟ n mod i=0 ΕΠΑΝΑΛΑΒΕ
      m <-- m+1
      n <-- n div i
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΑΝ m>0  ΤΟΤΕ
      ΓΡΑΨΕ_ 'x',i,'^',m
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/


dski

#89
Παράθεση από: sakisnemkav στις 26 Σεπ 2019, 10:33:53 ΠΜ
https://www.youtube.com/watch?v=5LlHaoqBfbk&t=

Μπράβο για την προσπάθεια. Το βίντεο είναι κατατοπιστικό. Μια παρατήρηση όμως για την περίπτωση των αρνητικών αριθμών: Ωραία ιδέα να καλύψεις και αυτή την περίπτωση, όμως, νομίζω, ότι, όταν όλη η ιδέα του αλγορίθμου είναι να δείξει ότι ο πολλαπλασιασμός γίνεται με πρόσθεση, ολίσθηση και σύγκριση, το να εμφανίσεις μέσα στον αλγόριθμο το γινόμενο Α*Β (έστω και μετά τον υπολογισμό της απόλυτης τιμής του αποτελέσματος) είναι σαν να καταργείς όλη την ιδέα. Υποτίθεται ότι αυτό θέλουμε να αποφύγουμε. Πιθανώς μάλιστα αυτό να μπερδέψει τους μαθητές που μπορεί εύλογα να ρωτήσουν αφού έχουμε έτσι κι αλλιώς το Α*Β μέσα στον αλγόριθμο γιατί να χρησιμοποιήσουμε τον πολλαπλασιασμό αλά ρωσικά για να το υπολογίσουμε;

Εφόσον έχεις ήδη πει ότι ο Η/Υ εκτελεί συγκρίσεις, μια ιδέα, αντί του Α*Β, θα ήταν εδώ να χρησιμοποιηθεί μια σύνθετη λογική συνθήκη στο στυλ: Α>0 και Β>0 ή Α<0 και Β<0 (δεν μου έρχεται κάτι πιο έξυπνο που να μην απαιτεί πολλαπλασιασμό ή κλασσική διαίρεση).

Με κίνδυνο να φανώ "σπαστικός" θα έλεγα να αποφύγεις ακόμη και το -1 * S και να γράψεις απλά -S ώστε να μην υπάρχει πουθενά στον αλγόριθμο η πράξη του πολλαπλασιασμού την οποία υποτίθεται ότι υλοποιεί ο αλγόριθμος (ΟΚ, δεν είμαι σίγουρος πως θα υλοποιούνταν το -S στην πράξη αλλά ο αντίθετος ενός ακεραίου μπορεί να βρεθεί χωρίς πολλαπλασιασμό με χρήση του συμπληρώματος ως προς 2 για να απαντήσω σε πιθανή ερώτηση μαθητή πως θα υπολογίσω τον αντίθετο χωρίς πολλαπλασιασμό. Ψιλά γράμματα μάλλον αλλά κουβέντα να γίνεται... :-) )