| Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ. |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
| |
|
#1
|
|
Κατ αρχήν καλησπέρα/καλημέρα σε όλους. Απλά θέλω να διευκρινίσω μερικά πράγματα 1) Από το 6ο ποστ του θέματος έχω ανεβάσει το from_cuts2sums.xls που λύνει το πρόβλημα με 12 αριθμούς και auto-calculation. Δείτε το εδώ 2) Η ΜΟΝΗ πλήρης και έγκυρη λύση για το πρόβλημα με 100 αριθμούς είναι η δημιουργία και ο έλεγχος των 2^100 συνδυασμών. 3) Η πρόταση του φίλου Γιώργου (kapetang) για χρήση της Επίλυσης (solver) δεν μας δίνει καμιά απολύτως εγγύηση όταν οι αριθμοί είναι περισσότεροι από 32 Για του λόγου το αληθές ενώ άφησα το PC μου να δουλεύει με Excel 2010 όλη νύχτα χθες με 100 τυχαίους αριθμούς (από 1,00 έως 9999,99) και ζητούμενο ένα τυχαίο άθροισμα μεταξύ 10.000,00 και 99.999,99 το πρωί βρήκα την λύση που θα δείτε στο συνημμένο η οποία είναι πλήρως αποδεκτή. Δείτε την συνημμένη εικόνα. Όσες φορές όμως και αν ξαναπροσπάθησα να λύσω το πρόβλημα με "Επίλυση" δεν μου έδωσε καμιά αποδεκτή λύση. ![]() Σε ξένα sites βρήκα διάφορα περί "επίλυσης", αλλά από ότι δείχνουν τα πειράματά μου και οι δοκιμές μου ( αλλά και τα σχόλια των χρηστών στα ξένα sites) όταν έχουμε πολλές μεταβλητές (στη περίπτωσή μας 100) ο περιορισμός δυαδικών τιμών (binary) δεν λαμβάνεται υπόψιν από το πρόσθετο της επίλυσης. Ο solver μπερδεύεται όπως λένε οι δημιουργοί του. ![]() Τώρα η φίλη Μάρω από την άλλη δεν μας δίνει τα αναγκαία στοιχεία "Δέξου μόνο ότι έτσι έχουν τα δεδομένα 100 αριθμοί (περίπου) που με τον αντίστοιχο συνδυασμό θα μας δίνουν σαν αποτέλεσμα το ποσό που θα ορίζω εγώ." άρα μάλλον μιλάμε για να μιλάμε και να καταναλωνόμαστε. ![]() Μάρω μου, και εγώ θέλω 10.000.000 euro αλλά που θα τα βρω δεν με απασχολεί. Εσύ θα πρέπει να μου απαντήσεις απλά δεχόμενη ότι θέλω 10 εκατομμύρια. Φαντάζομαι ότι δεν μπορείς να βοηθήσεις σε αυτή την περίπτωση. Νομίζω θα συμφωνήσεις μαζί μου !!! ![]() Πιστεύω ότι σαφώς πρέπει να υπάρχει σχέση μεταξύ αριθμών και ζητούμενου αποτελέσματος αλλιώς δεν είναι δυνατόν να εγγυηθούμε κάποια λύση, και προσωπικά δεν διαθέτω τις γνώσεις για τον προσδιορισμό αυτής της σχέσης, αφού μάλλον αγνοώ τι σημαίνει "πιστοποίηση". Αν σας έλεγα βρείτε τους πραγματικούς θετικούς αριθμούς που μας δίνουν σαν σύνολο άθροισμα 5 η απάντηση είναι ότι οι αριθμοί μπορεί να είναι άπειροι. Αν σας έλεγα όμως να βρείτε του ακέραιους θετικούς αριθμούς τότε θα μπορούσατε να δώσετε μια ή περισσότερες απαντήσεις. Αν σας έδινα κάποιους αριθμούς και σας ζητούσα να βρείτε αυτούς που μας δίνουν άθροισμα 5 θα μου απαντούσατε ότι ότι απλά δεν στέκει το ερώτημα και σαν λείπουν λεπτομέρειες, γιατί αν όλοι οι αριθμοί είναι μεγαλύτεροι του ζητούμενου αθροίσματος ΔΕΝ ΥΠΑΡΧΕΙ ΛΥΣΗ. Το αν υπάρχει λύση και ποια, εξαρτάται από τους συγκεκριμένους αριθμούς και το πλήθος τους. Ελπίζω να είναι σαφές ότι η φίλη Μάρω πρέπει να βοηθήσει περισσότερο αν θέλει να βρεθεί κάποια λύση στο ζητούμενο, αλλιώς όποιος θέλει μπορεί να παλέψει το "έλεγχος όλων των 2^100 συνδυασμών" με κάποιο κώδικα. Εναλλακτικά αν θέλετε παίξτε με το χωρισμό των 100 αριθμών σε δωδεκάδες (ποστ #6) και μοιράστε το τελικό ποσό σε ανάλογα τμήματα οπότε να υπολογίσετε 8-9 επιμέρους αθροίσματα. Συγνώμη αν υπήρξα κουραστικός αλλά ήθελα να κάνω τις παραπάνω διευκρινήσεις. Δείτε το συνημμένο xlsx (excel 2010) για το πως θα μπορούσε να γίνει χρήση του πρόσθετου Επίλυση (solver) που πρότεινε ο φίλος Γιώργος, και σε μια νύχτα έδωσε αποδεκτή λύση για τους συγκεκριμένους 100 τυχαίους αριθμούς και το συγκεκριμένο επιθυμητό αποτέλεσμα αθροίσματος !!! Δεν θα το διακινδυνεύσω να πω ότι μέσω solver έχετε τη λύση. Θανάσης. |
|
#2
| ||||
| ||||
|
Καλημέρα σε όλους! Δείτε το συνημμένο παράδειγμα παρακάτω για αρχή. Θεωρητικά μπορεί να συνδυάζει 1000 νούμερα και νομίζω ότι είναι αρκετά γρήγορο. Έχει ακόμα μεγάλα περιθώρια βελτίωσης αλλά κι έτσι που είναι λειτουργεί ικανοποιητικά. Τα λέμε... καλό ξημέρωμα! Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών Τελευταία επεξεργασία από το χρήστη Tasos : 18-12-10 στις 08:38. Αιτία: Μικροβελτιώσεις στο συνημμένο |
|
#3
| |
| Παράθεση:
Πολύ καλό !!! ΜΠΡΑΒΟ Τάσο. Θα πρότεινα να το ανεβάσεις στα χρήσιμα. |
|
#4
| |||
| |||
|
Καλησπέρα στην παρέα Φίλε Θανάση ευχαριστώ για τις πληροφορίες σχετικά με το Solver και τις δοκιμές, που έκανες. Πίστευα ότι είναι κομμένο και ραμμένο για το πρόβλημα της Μάρως. Φαίνεται όμως ότι ήμουν υπερβολικά αισιόδοξος. Αγαπητέ Αλέξανδρε θα με ενδιέφερε να δω την προσέγγισή σου ( έτσω με εικονικά δεδομένα) και πιστεύω σ’ αυτό να συμφωνούν και οι υπόλοιποι. Τάσο μου χτύπησες την κατάλληλη στιγμή. Είχα αρχίσει να προσαρμόζω, στο ζητούμενο, τη λύση για τη βέλτιστη κοπή, που έχει πολλούς περιορισμούς και ευτυχώς με πρόλαβες. Ένα μεγάλο μπράβο και από μένα .Αγαπητή Μάρω συνέχισε να βάζεις δύσκολα και να μας προβληματίζεις. Γιώργος |
|
#5
| |||
| |||
| Παράθεση:
νομίζω πως με παρεξήγησες ...... δεν κατάφερα να σε κάνω να με καταλάβεις για τον ίδιο λόγο που δεν θα καταλάβαινα τη δουλεία ενός γιατρού αφού είμαι μια απλή λογίστρια ![]() Από την άλλη νομίζω πως το παράδειγμα σου ήταν ατυχές γιατί δεν χρησιμοποιώ την excel για να παίξω tetris ούτε να περάσω την ώρα μου. Ειναί κλειδί της δουλειάς μου και για το λόγο αυτό σου είπα απλά να δεχτείς ότι έτσι έχουν τα πράγματα. Στην προσπάθεια να κατανοήσεις το πρόβλημά μου "κόλλησες" στη λέξη πιστοποίηση..... είναι αυτό που λέμε ...... βλέπεις το δέντρο και χάνεις το δάσος !!!! Και για να μην σε αφήσω με την απορία πιστοποίηση είναι η ανάλυση της δουλειάς κάποιου μεταφραζόμενη σε ποσότητα επι τιμή (αναλυτικά). Στην ουσία εκεί πρέπει αναφέρεις λεπτομερώς τις εργασίες σου κοστολογόντας τις. Όπως και να έχει σε ευχαριστώ για την προσπάθειά σου. ???Σας ευχαριστώ ΟΛΟΥΣ πραγματικά για την ανταπόκρισή σας στο πρόβλημα μου και σας εύχομαι καλά Χρίστουγεννα με υγεία. Ένα μεγάλο-μεγάλο ευχαριστώ στο Forum και έυχομαι να χιλιάσει τα μέλη του για να έχουμε περισσότερα προβλήματα να λύνουμε και συνεπώς περισσότερο ελεύθερο χρόνο για όλους μας. Μάρω |
|
#6
| |||
| |||
|
Καλησπέρα σε όλους, Κι εγώ θα ήθελα να συγχαρώ τον Τάσο για τη λύση που δίνει, αφού οι περισσότεροι από εμάς δε φαντάζονταν να φτάνει κανείς τόσο γρήγορα στο αποτέλεσμα. Εγώ μάλιστα συνεχίζω να είμαι αυτής της άποψης. Θα ήθελα όμως να το σχολιάσω και λίγο. Παράθεση:
Τάσο, αν κατάλαβα καλά, το πρόγραμμα με την εκκίνηση ακολουθεί βάση του recursion που έχει, μια δενδροειδή αναζήτηση, έτσι ώστε στην κατεύθυνση που ψάχνει, αν δεν καταλήξει εντός ορίων ανοχής, να κάνει το backtracking. Δηλαδή να αλλάξει κατεύθυνση, δίχως να χρειάζεται να διανύσει όλο το δρόμο προς τα πίσω. Αν κατά το ψάξιμο πετύχει ένα άθροισμα να είναι εντός ορίων ανοχής, τότε σταματά. Αν στέκουν τα παραπάνω, τότε σίγουρα έχει βρει την πρώτη λύση. Αυτό δε σημαίνει ότι έχει βρει και την ιδανική. Θα σου ήμουν ευγνώμων, αν μου(μας) εξηγούσες λίγο τη στρατηγική που ακολουθείς. Στη συνέχεια (κάτι άσχετο με το πρόβλημα) παρατήρησα ότι χρησιμοποιείς το DoEvents, και θυμήθηκα τον πονοκέφαλο που μου έχει προξενήσει αυτή η εντολή. Με την εντολή αυτή καταφέρνει το παράθυρο του Excel (και συνεπώς το UI-thread) να επεξεργαστεί τυχόν μηνύματα που στέλνει το λειτουργικό (message-pump). Έτσι μπορεί το παράθυρο να αντιδρά σε εντολές του χρήστη. Αυτό όμως επιτρέπει στο χρήστη παράλληλα, να ξεκινήσει δεύτερη αναζήτηση, ενώ τρέχει η πρώτη! Φιλικά Ανδρέας |
|
#7
|
|
Καλησπέρα/Καλημέρα σε όλους και όλες. Επειδή δεν μου αρέσουν οι προσωπικές διαμάχες θα περιοριστώ στο να πω ότι: όταν εγώ ρώτησα όχι μόνο για το δάσος: "Δηλαδή το αρχικό ποσό δεν έχει σχέση με τις εργασίες ?" ρώτησα και για το δέντρο: "Γίνονται εργασίες χωρίς να υπάρχουν χρήματα ?" και ζήτησα να μάθω ακόμα και το είδος του δέντρου: "πιστοποίηση = ???" Δεν πήρα συγκεκριμένη απάντηση σε κανένα από τα 3 ερωτήματα και ερμήνευσα την απάντηση σαν: "δεν μας γ..... Αν μπορείς δώσε μου την λύση σε αυτό που ζητάω και μην με σκοτίζεις." Γεγονός που με δυσαρέστησε και έκφρασα σε επόμενο μήνυμα μου.Μάλλον πρόκειται για παρεξήγηση (και ίσως λάθος ερμηνεία της απάντησης) που όμως νομίζω ξεκαθάρισε. ![]() Τέλος καλό όλα καλά βρέθηκε κάποια λύση και αυτό μετράει. ![]() Πάμε παρακάτω. Θέτω λοιπόν νέο διπλό ερώτημα: ![]() α) Χρειάζεται να συνεχίσουμε το ψάξιμο; Μιας και η πολύ καλή λύση του Τάσου "δεν ικανοποιεί πλήρως" το ζητούμενο όπως το προσδιόρισε τόσο ο ίδιος λέγοντας "σαν αρχή..." αλλά και ο Ανδρέας λέγοντας ότι "έχει βρει την πρώτη λύση" και όχι απαραίτητα την ιδανική. (Δηλαδή αν έχουμε σαν αριθμούς τους αριθμούς από 1-9 και ψάχνουμε αποτέλεσμα 9 θα μας δώσει σαν λύση το 1, 2, 6 και όχι το 9 που όπως είπε η Μάρω είναι το επιθυμητό αποτέλεσμα. Με άλλα λόγια το ποια λύση θα πάρουμε με το κώδικα του Τάσου εξαρτάται από το πως είναι καταχωρημένοι οι αριθμοί μας. Ο κώδικας δεν λαμβάνει καθόλου υπόψιν το πόσοι αριθμοί συμμετέχουν στο αποτέλεσμα. Μια ταξινόμηση κατά αύξουσα σειρά (δυνατότητα που μας δίνει ο Τάσος με το checkbox) νομίζω θα μας δώσει πάντα την λύση με το μεγαλύτερο πλήθος αν δεν κάνω λάθος. Το αντίστροφο δηλαδή μια ταξινόμηση με φθίνουσα σειρά δεν νομίζω ότι θα μας δώσει την λύση με το μικρότερο πλήθος.) Για να βρούμε δηλαδή την ιδανική λύση πρέπει να εξετάσουμε όλους τους συνδυασμούς όπως έχω ήδη πει. ή β) θεωρούμε ότι έχει καλυφθεί το θέμα; Άρα πάμε για άλλα. Γεγονός είναι ότι το συγκεκριμένο ερώτημα έφερε στην επιφάνεια δύο νέα για το φόρουμ μας ζητήματα: 1) Επίλυση (Solver) στο excel και 2) χρήση recursion σε κώδικα VBA. όπου ίσως θα ήταν σκόπιμο να ανοιχτούν σαν νέα θέματα αν υπάρχει ανάγκη. Φιλικά Θανάσης |
|
#8
| |||
| |||
|
Συμφωνώ μαζί σου Θανάση στο θέμα της ταξινόμησης. Η λύση του Τάσου με γλύτωσε πάντως από ένα μεγάλο πονοκέφαλο. Δεν είμαι πλεονέκτρα αλλά αν υπήρχε λύση για μικρότερο πλήθος δεν θα έλεγα όχι .Δυστυχώς οι γνώσεις μου δεν φτάνουν μέχρι εκεί για να μπορώ να βοηθήσω παραπάνω. Την καλησπέρα μου, Μάρω |
|
#9
|
|
Καλησπέρα/ καλημέρα σε όλους και όλες Φίλε Τάσο, υπάρχει κάποιο λάθος στο xl_CompineNumbers.xls που ανέβασες, και δεν εννοώ το p αντί του b για το combine ![]() Αν δώσουμε σαν αριθμούς 8 , 7, 6, 5, 3, 2 χωρίς ταξινόμηση ή αν ο πρώτος αριθμός είναι μεγαλύτερος του ζητούμενου, δηλαδή για τους αριθμούς 11, 9 , 3, 6 χωρίς ταξινόμηση Με ζητούμενο αποτέλεσμα 9 και στις δύο περιπτώσεις δεν βρίσκει λύση, ενώ είναι προφανές. Κάνω λοιπόν μια πρόταση/διόρθωσης ![]() αλλάζουμε το τελευταίο "Exit FOr" σε "ccrMatch = ccrMatch - ArrItems(x)" και έτσι νομίζω ότι λύνεται το πρόβλημα. Τώρα για το ελάχιστο πλήθος νομίζω ότι θα γίνει πολύ χρονοβόρα για να εξετάσει όλους τους συνδυασμούς και να βρει τον ιδανικό. Μάλλον θα πρέπει να αρκεστούμε στην αντίστροφη ταξινόμηση που όμως όπως προείπα ναι μεν δεν εγγυάται το ελάχιστο πλήθος, αλλά είναι σαφώς μικρότερο από την αύξουσα ταξινόμηση η οποία δίνει το μέγιστο πλήθος. Ας αλλάξουμε λοιπόν και το "Order1:=xlAscending" σε "Order1:=xlDescending" στην CommandButton2_Click() Καλή βδομάδα σε όλους και καλές γιορτές. Θανάσης :icon_out: ΥΓ. Τάσο, ξαναλέω ότι θα πρέπει να το ανεβάσεις στα χρήσιμα. |
|
#10
| ||||
| ||||
|
Φίλοι μου καλημέρα! Το αρχικό συνημμένο που είχα ανεβάσει φτιάχτηκε "στα γρήγορα" λόγω ώρας (δείτε την ώρα του μηνύματος...) και φόρτου εργασίας αφήνοντας το ανοιχτό για οποιαδήποτε προγραμματιστική βελτίωση /επέκταση.Στο παρακάτω συνημμένο πρόσθεσα κάποιες λεπτομέρειες, λαμβάνοντας υπ όψη μου τις παρατηρήσεις σας. Φυσικά όποιος θέλει μπορεί να το μετατρέψει/βελτιώσει ή να κάνει τις παρατηρήσεις του. Να είστε καλά Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
![]() |
| Ετικέτες |
| recursion, vba |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| [Συναρτήσεις] Άθροιση ποσότητας ανά κωδικό. | nikosjc | Excel - Ερωτήσεις / Απαντήσεις | 3 | 02-04-14 13:36 |
| [ Συναρτήσεις ] ΑΘΡΟΙΣΗ ΧΡΟΝΟΥ | vangelis67 | Access - Ερωτήσεις / Απαντήσεις | 4 | 29-11-11 15:58 |
| [Συναρτήσεις] ΑΘΡΟΙΣΗ ΣΤΟ EXCEL | alatis | Excel - Ερωτήσεις / Απαντήσεις | 2 | 04-10-11 15:46 |
| [Γενικά] Ευρεση και αθροιση δεδομένων | misirlis | Excel - Ερωτήσεις / Απαντήσεις | 2 | 08-05-11 17:05 |
| [Γενικά] αθροιση | misirlis | Excel - Ερωτήσεις / Απαντήσεις | 11 | 11-01-11 05:17 |
Η ώρα είναι 22:52.








???
και έκφρασα σε επόμενο μήνυμα μου.
.

αφήνοντας το ανοιχτό για οποιαδήποτε προγραμματιστική βελτίωση /επέκταση.
Υβριδικός τρόπος

