Jump to content



Τιμές εκτός ορίων σε πίνακα στην C


Thodoris21

Recommended Posts

Το νέο πρόβλημα είναι το εξής:

Έχω ένα πίνακα 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

Βρες ένα μέγιστο μήκος και βάλε αυτο δεν υπάρχουν πίνακες με δυναμικά όρια στην C.Αν δεν ξέρεις ή δεν μπορείς να υπολογίσεις ένα μέγιστο μήκος ίσως να πρέπει να αλλάξεις δομή δεδομένων.

Link to comment
Share on other sites

Δε καταλαβαίνω ακριβώς το πρόβλημα όπως το διατυπώνεις.

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

Επίσης τα 'x' τι συμβολίζουν;

Sorry αλλά έχω μπερδευτεί λίγο :hm:

Link to comment
Share on other sites

Εχω εναν πινακα 5x5 και θελω καθε στοιχειο του να το συγκρινω με τα γειτονικα του.Καθε στοιχειο εχει 8 γειτονικα(πανω κατω αριστερα δεξια διαγωνια).Αν το στοιχειο ειναι το 0,0 πως το συγκρινεις με το αριστερα του αφου βρισκεται εκτος του πινακα?

Το x συμβολιζει οτι η τιμη αυτη βρισκεται εκτος των οριων του πινακα.

Link to comment
Share on other sites

Εχω εναν πινακα 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

Δεν κάνεις πίνακα ακεραίων αλλα πίνακα με structs.Κάθε struct περιέχει 9 ακεραίους αυτόν που θες να συγκρίνεις και τους γείτονες του.Αποθηκεύεις τα stuct σε ένα πίνακα αν ξέρεις πόσα είναι.

Αν πρέπει να το κάνεις με πίνακα με όλα τα στοιχεία γειτονικα και μη σε 1 πίνακα την έκατσες.

                                        [8 θέσεις για τους γείτονες πάνω]
[8 θέσεις για τους γείτονες αριστερά][στοιχείο 5χ5 πίνακα υπό σύγκριση][8 θέσεις δεξιά]
[8 θέσεις για τους γείτονες κάτω]

άρα 21χ21 για ένα στοιχείο του 5χ5 (κάνε τους υπολογισμούς για όλα)

Προτείνω την struct λύση

Link to comment
Share on other sites

Πρεπει να το κανω με πινακα.Το μονο ευκολο που μου ερχεται ειναι αντι για πινακα 5x5 να φτιαξω ενα πινακα 7x7 οπου 2 γραμμες και στηλες παραπανω θα εχουν μηδενικα.Καπως ετσι δηλ...

0 0 0 0 0 0 0

0 1 2 3 4 5 0

0 0 5 9 3 7 0

0 5 7 2 3 6 0

0 2 0 7 8 4 0

0 1 2 1 8 9 0

0 0 0 0 0 0 0

Link to comment
Share on other sites

aaaaa 8 γειτονικα.ετσι?

1 2 3

4 5

6 7 8

οπότε ναι με padding θα το κάνεις όπως είπες δεν το σκέφτηκα έτσι :wall:

απο την άλλη θα μπορούσες απλώς να ελέγχεις σε ποια γραμμή ή στήλη είσαι και αν είσαι στην πρώτη ή τελευταία να μην ψάχνεις τα απο πάνω και απο κάτω αντίστοιχα

Link to comment
Share on other sites

Ναι αυτο ηθελα να κανω αλλα ο πινακας 5x5 ειναι ο δοκιμαστικος.Ο πραγματικος ειναι 4096x4096.Αυτο που λες πως μπορει να γινει δυναμικα?Δηλαδη,αν εισαι στην πρωτη γραμμη να μην ελεγχει το τα διαγωνια και τα πανω ας πουμε...

Link to comment
Share on other sites

Επειδή πρέπει να είναι πλήρως δυναμικός ο πίνακας, τότε σκέψου ότι για έναν 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


[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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.