Thodoris21 Δημοσιεύτηκε Μάϊος 27, 2012 #1 Κοινοποίηση Δημοσιεύτηκε Μάϊος 27, 2012 Το νέο πρόβλημα είναι το εξής:Έχω ένα πίνακα 5x5 με ακέραιες τιμές,όπως παρακάτω.Θέλω να συγκρίνω κάθε στοιχείο με τα γειτονικά αλλά πρέπει να γίνει σύγκριση και με στοιχεία εκτός των ορίων.Για παράδειγμα το στοιχείο [0][0],από τα 8 γειτονικά του στοιχεία έχει και 5 είναι εκτός ορίων και αναμενόμενο είναι να χτυπάει.Υπάρχει κάποιος τρόπος να λυθεί αυτο το πρόβλημα?x x x x 2 2 2 5 3 1 x 4 3 4 5 1 5 4 2 0 0 5 1 4 1 5 0 0 3 0 4 1 4 1 1 Link to comment Share on other sites More sharing options...
nucleus Μάϊος 27, 2012 #2 Κοινοποίηση Μάϊος 27, 2012 Βρες ένα μέγιστο μήκος και βάλε αυτο δεν υπάρχουν πίνακες με δυναμικά όρια στην C.Αν δεν ξέρεις ή δεν μπορείς να υπολογίσεις ένα μέγιστο μήκος ίσως να πρέπει να αλλάξεις δομή δεδομένων. Link to comment Share on other sites More sharing options...
papajim Μάϊος 27, 2012 #3 Κοινοποίηση Μάϊος 27, 2012 Δε καταλαβαίνω ακριβώς το πρόβλημα όπως το διατυπώνεις. Δηλαδή ας πούμε έχεις ενα μεγάλο πίνακα και θες να συγκρίσεις τα στοιχεία σε έναν υποπίνακα; Επίσης τα 'x' τι συμβολίζουν; Sorry αλλά έχω μπερδευτεί λίγο Link to comment Share on other sites More sharing options...
Thodoris21 Μάϊος 27, 2012 Author #4 Κοινοποίηση Μάϊος 27, 2012 Εχω εναν πινακα 5x5 και θελω καθε στοιχειο του να το συγκρινω με τα γειτονικα του.Καθε στοιχειο εχει 8 γειτονικα(πανω κατω αριστερα δεξια διαγωνια).Αν το στοιχειο ειναι το 0,0 πως το συγκρινεις με το αριστερα του αφου βρισκεται εκτος του πινακα?Το x συμβολιζει οτι η τιμη αυτη βρισκεται εκτος των οριων του πινακα. Link to comment Share on other sites More sharing options...
papajim Μάϊος 27, 2012 #5 Κοινοποίηση Μάϊος 27, 2012 Εχω εναν πινακα 5x5 και θελω καθε στοιχειο του να το συγκρινω με τα γειτονικα του.Καθε στοιχειο εχει 8 γειτονικα(πανω κατω αριστερα δεξια διαγωνια).Αν το στοιχειο ειναι το 0,0 πως το συγκρινεις με το αριστερα του αφου βρισκεται εκτος του πινακα?Το x συμβολιζει οτι η τιμη αυτη βρισκεται εκτος των οριων του πινακα.Λύνεται σχετικά εύκολα αυτό που λες. Αν φεύγεις εκτός ορίων για θετικά i (γραμμές) ή j (στήλες) μπορείς να κρατάς πάντα το i mod (μήκος γραμμής) και j mod (μήκος στήλης). Αυτό μπορείς να το κάνεις κι όταν είσαι εντός δεν υπάρχει πρόβλημα.Στην περίπτωση που φύγεις εκτός ορίων αρνητικά μπορείς να προσθέτεις κατευθείαν το μήκος της γραμμής ή στήλης, που βρίσκεσαι για να πηγαίνει στη τελευταίο στοιχείο.PS. Μπερδεύτηκα γιατί έχεις βάλει πίνακα 6x5.PS2. Αν δε πρέπει να το κάνεις υποχρεωτικά σε C, μπορείς να το δεις σε Python που ο κόσμος είναι by default κυκλικός. Link to comment Share on other sites More sharing options...
nucleus Μάϊος 27, 2012 #6 Κοινοποίηση Μάϊος 27, 2012 Δεν κάνεις πίνακα ακεραίων αλλα πίνακα με structs.Κάθε struct περιέχει 9 ακεραίους αυτόν που θες να συγκρίνεις και τους γείτονες του.Αποθηκεύεις τα stuct σε ένα πίνακα αν ξέρεις πόσα είναι.Αν πρέπει να το κάνεις με πίνακα με όλα τα στοιχεία γειτονικα και μη σε 1 πίνακα την έκατσες. [8 θέσεις για τους γείτονες πάνω][8 θέσεις για τους γείτονες αριστερά][στοιχείο 5χ5 πίνακα υπό σύγκριση][8 θέσεις δεξιά] [8 θέσεις για τους γείτονες κάτω]άρα 21χ21 για ένα στοιχείο του 5χ5 (κάνε τους υπολογισμούς για όλα)Προτείνω την struct λύση Link to comment Share on other sites More sharing options...
Thodoris21 Μάϊος 27, 2012 Author #7 Κοινοποίηση Μάϊος 27, 2012 Πρεπει να το κανω με πινακα.Το μονο ευκολο που μου ερχεται ειναι αντι για πινακα 5x5 να φτιαξω ενα πινακα 7x7 οπου 2 γραμμες και στηλες παραπανω θα εχουν μηδενικα.Καπως ετσι δηλ...0 0 0 0 0 0 00 1 2 3 4 5 00 0 5 9 3 7 00 5 7 2 3 6 00 2 0 7 8 4 00 1 2 1 8 9 00 0 0 0 0 0 0 Link to comment Share on other sites More sharing options...
nucleus Μάϊος 27, 2012 #8 Κοινοποίηση Μάϊος 27, 2012 aaaaa 8 γειτονικα.ετσι? 1 2 3 4 5 6 7 8 οπότε ναι με padding θα το κάνεις όπως είπες δεν το σκέφτηκα έτσι απο την άλλη θα μπορούσες απλώς να ελέγχεις σε ποια γραμμή ή στήλη είσαι και αν είσαι στην πρώτη ή τελευταία να μην ψάχνεις τα απο πάνω και απο κάτω αντίστοιχα Link to comment Share on other sites More sharing options...
Thodoris21 Μάϊος 27, 2012 Author #9 Κοινοποίηση Μάϊος 27, 2012 Ναι αυτο ηθελα να κανω αλλα ο πινακας 5x5 ειναι ο δοκιμαστικος.Ο πραγματικος ειναι 4096x4096.Αυτο που λες πως μπορει να γινει δυναμικα?Δηλαδη,αν εισαι στην πρωτη γραμμη να μην ελεγχει το τα διαγωνια και τα πανω ας πουμε... Link to comment Share on other sites More sharing options...
Jaco Μάϊος 28, 2012 #10 Κοινοποίηση Μάϊος 28, 2012 Επειδή πρέπει να είναι πλήρως δυναμικός ο πίνακας, τότε σκέψου ότι για έναν MxN πίνακα θα πρέπει να ισχύει το εξής0 < [(x),( x-1), (x+1)], [(x+Ν), (x+Ν-1), (x+Ν+1)], [(x-Ν), (x-Ν-1), (x-Ν+1)] < Μ*ΝΑν δεν καταλαβαίνεις τι είναι αυτό, τότε σκέψου ότι το (x) είναι μια οποιαδήποτε θέση μνήμης στον πίνακά σου, οπότε οι πρώτες αγκύλες είναι το ίδιο το κελί, το προηγούμενο και το επόμενο, οι δεύτερες αγκύλες τα γειτονικά από κάτω, και οι τρίτες αγκύλες τα γειτονικά από πάνω... Οποιαδήποτε πράξη στις παρενθέσεις είναι μικρότερη το 0 και μεγαλύτερη του Μ*Ν είναι εκτός ορίων και δεν υπολογίζεται, οπότε δεν χρειάζεσαι padding, απλά έλεγχο... Link to comment Share on other sites More sharing options...
Thodoris21 Μάϊος 28, 2012 Author #11 Κοινοποίηση Μάϊος 28, 2012 Ναι αλλα αυτο δεν γραφεται στην C ετσι.Θελει τροποποιηση... Link to comment Share on other sites More sharing options...
Jaco Μάϊος 28, 2012 #12 Κοινοποίηση Μάϊος 28, 2012 Μήπως θες να σου γράψω και τον κώδικα...?Edit:Επίσης είναι 0<= και όχι 0< Link to comment Share on other sites More sharing options...
Thodoris21 Μάϊος 28, 2012 Author #13 Κοινοποίηση Μάϊος 28, 2012 Δεν μπορω να καταλαβω τι ειναι ολο αυτο!Με κομματα τι συμβολιζεις? Link to comment Share on other sites More sharing options...
Jaco Μάϊος 28, 2012 #14 Κοινοποίηση Μάϊος 28, 2012 [B][[/B]x-N-1[B]][/B]__[B][[/B]x-N[B]][/B]__[B][[/B]x-N+1[B]][/B][B][[/B]x-1[B]][/B]____[B][x][/B]____[B][[/B]x+1[B]][/B][B][[/B]x+N-1[B]][/B]__[B][[/B]x+N[B]][/B]__[B][[/B]x+N+1[B]][/B]Ίσως αυτό σε βοηθήσει περισσότερο... Είναι η οχτάδα που περιτριγυρίζει το [x] και για όλους τους αριθμούς πρέπει να ισχύει το 0 <= [...] < M*Ν, όπου Μ η διάσταση χ του πίνακα και Ν η διάσταση y... Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.