thyra_7 Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 for (i=0; i<50; i++) { if (P>0) thetikoi=P; } Εχω ενα προβλημα..Οταν τρεχω το προγραμμα σε περιπτωση που το P ειναι αρνητικο μου βαζει σκουπιδια στον πινακα thetiokoi....Πως γινεται να το διωρθωσω? Ο πινακας P εχει τιμες και ειναι 50 θεσεων και οι δυο..
albNik Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Σκουπιδια περιεχουν οι πινακες μεχρι εσύ να τους βάλεις κάτι, αρχικοποιησε τον με όλα 0 η ολα αρνητικα (-1)
defacer Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Περίπου γίνεται αυτό που λέει ο albNik (όχι ακριβώς γιατί αν οι πίνακες είναι από class type δεν περιέχουν βέβαια σκουπίδια). Η πολύ σημαντική ερώτηση όμως που παραμένει αναπάντητη είναι: εσύ τι περίμενες να γίνεται; (και σε δεύτερη φάση: γιατί το περίμενες αυτό?)
thyra_7 Δημοσ. 17 Δεκεμβρίου 2012 Μέλος Δημοσ. 17 Δεκεμβρίου 2012 γινεται με καποιον τροπο να αφησω κανε μερικα κελια ενος πινακα? *κενα
Star_Light Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 γινεται με καποιον τροπο να αφησω κανε μερικα κελια ενος πινακα? *κενα Ναι. Άν εξαρχης αρχικοποιήσεις ολα τα στοιχεια του πίνακα σου με 0 και στην συνέχεια γεμίσεις επιλεκτικά μονο κάποια.
thyra_7 Δημοσ. 17 Δεκεμβρίου 2012 Μέλος Δημοσ. 17 Δεκεμβρίου 2012 εννοω ουτε το 0...Ενα κελι να μην περιεχει τιποτα....Λογικα οχι απλως ρωταω....
defacer Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 γινεται με καποιον τροπο να αφησω κανε μερικα κελια ενος πινακα? Φυσικά και δεν γίνεται. Είναι σα να λες "γίνεται μια μεταβλητή να μην έχει τιμή;" Κατ' αναλογία με την αρκετά πετυχημένη παρομοίωση "η μεταβλητή είναι σαν ένα ποτήρι" -- το ποτήρι δεν μπορεί ποτέ να είναι "τελείως άδειο". Μπορεί να μην ξέρεις τι έχει μέσα, ή να μη σ' ενδιαφέρει, ή μπορεί να έχει μέσα αέρα, αλλά πάντα κάτι θα υπάρχει. Αν θέλεις να προσποιηθείς ότι μια μεταβλητή δεν έχει τιμή, τότε δύο είναι οι λύσεις: Χρειάζεσαι μια άλλη μεταβλητή (1 bit αρκεί) στην οποία θα σημειώνεις αν η πρώτη έχει τιμή (με την έννοια που το αντιλαμβάνεσαι εσύ) ή όχι, ή Αν υπάρχει κάποια τιμή την οποία δεν πρόκειται να χρησιμοποιήσεις ποτέ "στ' αλήθεια", τότε μπορείς να τη χρησιμοποιήσεις για να συμβολίσεις την "απουσία τιμής" (όπως το μηδέν που συζητάμε)
Timonkaipumpa Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Εάν είναι 50 θέσεων και έχει σημασία και το 0 αλλά και όλοι οι αριθμοί, τότε μπορείς αντί για 1 x 50 πίνακα να έχεις 2 x 50 και στην 2η γραμμή να κρατάς μία ένδειξη εάν είναι γεμάτο το κελί ή όχι. Οπότε, αρχικοποιείς κανονικά τον 2 x 50 πίνακα σε τιμή '0' και στις 2 γραμμές και χρησιμοποιείς για την εκχώρηση τιμών μόνο την 1τη γραμμή. Όποτε βάλεις τιμή στην 1τη γραμμή βάζεις απλά ένα '1' στο αντίστοιχο κελί στην 2η. Έτσι, εάν ένα "κελί" έχει '0' στην 2η γραμμή είναι "άδειο".
defacer Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Με την ευκαιρία να αναφερθώ και πάλι στις "ερωτήσεις που δεν διατυπώθηκαν". Έστω ότι αυτό που ρωτάς γίνεται. Ο πίνακας int i[10] έχει υποθετικά το πρώτο κελί "κενό". Τι θα έπρεπε τότε να γίνει όταν γράψεις >int x = i[0] + 1;
Timonkaipumpa Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Ακόμα καλύτερα, θα μπορούσες να έχεις έναν πίνακα 1 x 50 με τύπο int*. Δηλαδή, > int* a[50]; Όπου, εάν έχεις βάλει τιμή τότε το κελί δείχνει στην τιμή αυτή αλλιώς είναι NULL. Σε μνήμη το ίδιο θα σου πιάσει (με μία γρήγορη σκέψη, edit, με μία 2η νομίζω θα πιάσει λιγότερο).
defacer Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Ακόμα καλύτερα, θα μπορούσες να έχεις έναν πίνακα 1 x 50 με τύπο int*. Δηλαδή, Ας μη μπερδεύουμε το τι θέλουμε να καταφέρουμε με το μηχανισμό που χρησιμοποιούμε για να το καταφέρουμε. Αν ο πίνακας θέλεις στη ζωή να έχει μέσα ints, το να τον κάνεις να έχει int* γι' αυτό και μόνο το λόγο είναι κακή ιδέα. Σκέψου μόνο πόσο περιπλέκεται η διαχείριση μνήμης και timon. Γενικά στη C++ πίνακας από bare pointers = asking for trouble. Πρέπει να έχεις συγκεκριμένο και ικανό λόγο για να κάνεις κάτι τέτοιο, και σχεδόν πάντα δεν υπάρχει τέτοιος λόγος (βέβαια το πώς και γιατί αυτού του ισχυρισμού ξεφεύγει πολύ από το επίπεδο της παρούσας ερώτησης).
Timonkaipumpa Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Μαζί σου... αλλά απλά για 50 ints δεν νομίζω να έχει πρόβλημα... συν ότι έχει έναν άμεσο τρόπο να ελέγξει εάν είναι γεμάτο ή όχι. Μία function θα φτιάξει για να εισάγει και μία για να σβήνει κελιά και είναι ready!
migf1 Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Στην συντριπτική πλειοψηφια των περιπτώσεων υπάρχει πάντα μια τιμή που δεν την χρειάζεσαι, όπως είναι η 0 στο δικό σου παράδειγμα. Στην αρκετά σπάνια περίπτωση που χρειάζεσαι όλες τις τιμές ενός int, είναι πολύ συχνά θεμιτό να "θυσιάσεις" μια από αυτές (συνήθως μια εκ των INT_MAX, INT_MIN που ορίζονται στο climits) χρησιμοποιώντας την ως "κενό" και να το αναφέρεις στην τεκμηρίωση του προγράμματός σου. Κατόπιν κάνεις ότι σου είπε ο Starlight.
defacer Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Καταλαβαίνω αλλά μου φαίνεται ότι έτσι μαθαίνει ο άλλος να κάνει λάθος πράγματα οπότε I wouldn't be caught dead να προτείνω κάτι τέτοιο. Θα προτιμούσα χίλιες φορές τη λύση με δεύτερο "παράλληλο" πίνακα στην προκειμένη. Κατά τα άλλα εδώ χρειάζεται ένας πίνακας από std::pair<bool, int>. C++ διάολε. Έχει βαρεθεί η ψυχή μου να βλέπω "C με cout". 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα