MitsakosGR Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 @V.I.Smirnov Έχω απλά μία απορία (χωρίς να θέλω να ανάψω φωτιές και τσακωμούς ούτε να σου πάω κόντρα, απλή απορία έχω και έχω διαβάσει όλα τα προηγούμενα): Αφού η C++ υποστηρίζει ενδογενώς την δομή του πίνακα (όχι μαθηματικού ή οτιδήποτε άλλου πίνακα, απλά την δομή του πίνακα υποστηρίζει) πώς λες ότι δεν την υποστηρίζει; Μπορώ να ορίσω έναν πολυδιάστατο πίνακα και να αναθέσω και να ανατρέξω τις τιμές του. Εκτός αν θεωρείς ότι το ακόλουθο δεν είναι πίνακας ακεραίων(δομή πίνακα πάντα, όχι μαθηματικός πίνακας, πράξεις κτλ) >int myArray[5][5] Αν αναφερόσουν σε πίνακες όπως τους γνωρίζουμε από τα μαθηματικά θα συμφωνούσα απόλυτα μαζί σου ότι στην C++ δεν υποστηρίζονται ενδογενώς και πρέπει να τους υλοποιήσουμε μόνοι μας (ή καποια βιβλιοθήκη όπως είπες) αλλά σαν δομή γιατί δεν υποστηρίζεται;;; Υ.Γ. Αν καταλαβαίνω σωστά τον όρο ενδογενώς στον προγραμματισμό, σημαίνει κάτι που υποστηρίζεται στην γλώσσα που γράφεις χωρίς να χρειαστεί να γράψεις ούτε γραμμή κώδικα. Ενδογενής, -ής, ές επίθ [<αρχ. ενδογενής < ένδον + γίγνομαι] που γεννιέται ή παράγεται μέσα στον οργανισμό, από εσωτερική αιτίαΕλληνικό Λεξικό, Τεγόπουλος - Φυτράκης, Ε΄ Έκδοση Υ.Γ.2 Τόσο μεγάλη είναι η χρήση της λέξης ενδογενώς σε αυτό το thread που ακόμα και το google αν γράψεις "ενδογενώς" στο έχει στα πρώτα αποτελέσματα!!!
worldcitizen Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 Αν ένα include είναι πρόβλημα (και μια δυσκολία στην σύνταξη, και το γεγονός ότι δεν μπορείς (με τον τρόπο που το έγραψα) να έχεις μεγάλους πίνακες) δεν πάει να πει ότι δεν υποστηρίζεται ενδογενώς! My $0.02 απλά για να δω την συνέχεια > #include <stdio.h> #include <algorithm> using namespace std; int main(int argc, const char *argv[]) { float a[10][10]; int i,j; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { a[i][j] = i*j + 0.524; printf("%f ", a[i][j]); } } printf("\n%f\n",*max_element(&a[0][0],&a[9][9]+1)); return 0; }
V.I.Smirnov Δημοσ. 1 Φεβρουαρίου 2011 Μέλος Δημοσ. 1 Φεβρουαρίου 2011 @bnvdarklord Ακριβώς ! Χαίρομαι που το κατάλαβε κάποιος παρά τη συσκότιση που φέρνουν οι ημιμαθείς. Η C++ δεν υποστηρίζει (αριθμητικούς) πίνακες ως βασική, πρωτογενής δομή. Όμοια, στους βασικούς τύπους δεδομένων της (int, float κλπ) δεν περιέχει μιγαδικούς. Κι' αυτοί "κατασκευάζονται εξωτερικά". Ειδικά για τους πίνακες, η έλλειψή τους είναι πολύ ενοχλητική διότι αποτελούν το κυριότερο μέσο στην καθημερινή πρακτική. Δες μόνον πόσα threads εδώ πέρα αφορούν πίνακες. Και δυστυχώς η έλλειψη αυτή υποκαθίσταται δύσκολα και με κουσούρια. Αντίθετα με το matlab και την fortran. Το matlab δεν είναι ακριβώς μια γλώσσα προγραμματισμού όπως οι κλασσικές αλλά ένα CAS (όπως άλλωστε και το mathematica ) και έτσι η σύγκρισή του με την C++ δεν είναι δίκαια. Αλλά η σύγκριση με την fortran είναι αναπόφευκτη. Και σε ότι αφορά τους πίνακες, το γεγονός ότι τους υποστηρίζει ως βασικό τύπο την καθιστά άπιαστη σε σχετικά θέματα. Ένα χαρακτηριστικό παράδειγμα από πραγματική εφαρμογή : >do i=1,n if (abs(A(i,i))<=TINY) goto 10 A(i+1:,i) = A(i+1:,i)/A(i,i) A(i+1:,i+1:) = A(i+1:,i+1:) - spread(A(i+1:,i),2,n-i)*spread(A(i,i+1:),1,n-i) end do do i=1,n x(i) = x(i)-sum( A(i,:i-1)*x(:i-1) ) end do Το παραπάνω απόσπασμα είναι από επίλυση γραμμικού συστήματος όπως μαθαίναμε στο σχολείο : κάνει έναν πίνακα τριγωνικό και βρίσκει τους αγνώστους με back-substitution. Λειτουργεί είτε για πραγματικούς είτε για μιγαδικούς. Η απαλοιφή των γραμμών γίνεται με την εντολή > A(i+1:,i+1:) = A(i+1:,i+1:) - spread(A(i+1:,i),2,n-i)*spread(A(i,i+1:),1,n-i) Στην C++ θα απαιτούσε 3 for εισάγοντας πολυπλοκότητα και συσκοτίζοντας τον αλγόριθμο της απαλοιφής. Στο ίδιο παράδειγμα, ο υπολογισμός της ορίζουσας του τριγωνικού πλέον πίνακα A γίνεται απλά (περίπου) > det = detsgn*product( (/(A(i,i), i=1,n)/) ) δείχνοντας άμεσα την μαθηματική πράξη : κατασκευή ενός πίνακα από τα διαγώνια στοιχεία του A και πολλαπλασιασμός αυτών με την εντολή product. Αυτά στην C++ δεν μπορούν γενικά να γίνουν με τέτοια κομψότητα και λιτότητα. Όσο για επίλυση με μιγαδικούς, εκεί θα ήταν μια μικρή ιστορία. Π.χ. το Numerical Recipes λέει σχετικά "λύστε χωριστά για το πραγματικό και το φανταστικό μέρος..." Δηλ. να διασπαστούν οι πίνακες κλπ. Τρέχα γύρευε. Όλα αυτά συμβαίνουν διότι δεν υποστηρίζει ενδογενώς πίνακες και μιγαδικούς : πρέπει να αντιμετωπίζονται ως block μνήμης από τον προγραμματιστή (αντί από τον compiler) και δεν έχει εντολές για τον άμεσο χειρισμό τους. @Μitsakos "Eνδογενής υποστήριξη" σημαίνει να ανήκει (ο πίνακας) στον βασικό κορμό της γλώσσας και να υπάρχει ενσωματωμένη λειτουργικότητα για τον χειρισμό του οπως οι παραπάνω εντολές (ή κατ' ελάχιστον οι βασικές πράξεις). Το ίδιο και με τους μιγαδικούς : στις C/C++ δεν είναι βασικός τύπος δεδομένων όπως π.χ. οι int και float, πρέπει να φτιαχτούν και παρέχονται από βιβλιοθήκες. Αντίθετα, σε άλλες γλώσσες ο αριθμητικός πίνακας υφίσταται στον κορμό τους ως τύπος δομής και υποστηρίζεται με πλήθος λειτουργιών, έτοιμων και βελτιστοποιημένων απαλλάσσοντας τον προγραμματιστή από σχετική μέριμνα. Αυτό λέω ότι δεν έχει η C++. Τόνισα την συγκεκριμένη λέξη από την πρώτη στιγμή ακριβώς γι' αυτό. Είναι προφανές ότι στην C++ μπορούν να φτιαχτούν και υποστήριξή τους με αυτή την έννοια προφανώς υπάρχει. (Και με την ίδια λογική υπάρχει και στην assembly.) ΑΛΛΑ η χρηστικότητα δεν είναι σχεδόν ποτέ η ίδια με αυτήν που θα παρείχε μια ενσωματωμένη, πλήρης υλοποίηση: προβλήματα συμβατότητας ανάμεσα σε διαφορετικές υλοποιήσεις, συμβιβασμοί/προβλήματα ταχύτητας, αδικαιολόγητη πολυπλοκότητα για απλές λειτουργίες (πχ. πολυδιάστατοι πίνακες ή/και slices αυτών με την vector της STL δίνουν κάτι απίστευτα μακρυνάρια ως όνομα) κ.α. Όποιος τα δοκίμασε, τα ξέρει από πρώτο χέρι. Τέλος, κάθε άποψη είναι καλοδεχούμενη όταν δεν εμφορείται από ειρωνίες και και μειωτικούς χαρακτηρισμούς - μπορούμε να συζητήσουμε ότι θέλεις. Εξάλλου εγώ δεν έχω σπουδάσει πληροφορική. Σε αντίθεση με άλλους που επιμένουν ανόητα, μιλώ μόνον για ότι νομίζω πως ξέρω καλά. -
bnvdarklord Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 @V.I.Smirnov Παρόλα αυτά νομίζω οτι το εκφράζεις λάθος, ενώ εννοείς το ίδιο με τους υπόλοιπους. Η C++ υποστηρίζει natively πινακες. Η C++ δεν υποστηρίζει βασικές (αλγεβρικές; ) λειτουργίες πινάκων.
MitsakosGR Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 @Μitsakos"Eνδογενώς" σημαίνει να ανήκει στον βασικό κορμό της γλώσσας και να υπάρχει ενσωματωμένη λειτουργικότητα για τον χειρισμό τους. Αυτό ΔΕΝ το έχει η C++. Μα το θέμα είναι ότι έχει ενσωματωμένη λειτουργικότητα για τον χειρισμό τους. Σου δίνει την δυνατότητα προσπέλασης και τροποποίηση των στοιχείων τους, δηλαδή την πιο πρωτογενή λειτουργία ενός πίνακα (καμία άλλη, απλά αυτή). Σε αφήνει εντελώς ελεύθερο στον τρόπο με τον οποίο θα τους χειριστείς όμως. Δεν σου δίνει ενδογενώς την δυνατότητα C[z] = A[x] + B[y] στην οποία γίνεται αλγεβρικό άθροισμα πινάκων, αλλά σου δίνει την δυνατότητα να φτιάξεις overloaded operators που να κάνουν όποια λειτουργία θέλεις. Αυτό γιατί μπορεί για εσένα το άθροισμα πινάκων να είναι αλγεβρικό, ενώ για εμένα να απαιτείται το σύμβολο "+" με διαφορετικό τρόπο. Θα συμφωνήσω με τον bnvdarklord στο post του. Μήπως εννοούμε το ίδιο απλά εκφρασμένο διαφορετικά απλά;
Erevis Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 @V.I. Smirnov Tο θέμα είναι οτι η FORTRAN είναι γλώσσα που φτιάχτηκε ακριβώς γι'αυτού το είδους προβλήματα. Είναι γλώσσα επιστημονικού ενδιαφέροντος. Η C++ από την άλλη φτιάχτηκε κυρίως για προγραμματισμό συστήματος. Απ'ότι καταλαβαίνεις κι από μόνος σου, συγκρίνεις μήλα με πορτοκάλια. ΕΝΝΟΕΙΤΑΙ, πως το κύριο μέλημα της C++, δεν είναι να λύνει γραμμικά συστήματα πινάκων και να εκτελεί πράξεις μεταξύ τους (παρ'όλο που σου δίνει τα εργαλεία να φτίαξεις μόνος σου τη λειτουργικότητα). Ίσως να είναι και από τις τελευταίες έγνοιες του standard committee το συγκεκριμένο. Κατα τ'άλλα, το ύφος σου είναι σαν να πάει κάποιος που γράφει σε C++ και να πει σ'αυτόν που γράφει web εφαρμογές με Javascript: "ΧΑΧΑ, ΔΕ ΜΠΟΡΕΙΣ ΝΑ ΓΡΑΨΕΙΣ KERNEL ΣΕ JAVASCRIPT, XAXA".
V.I.Smirnov Δημοσ. 1 Φεβρουαρίου 2011 Μέλος Δημοσ. 1 Φεβρουαρίου 2011 @Erevis Δεν συγκρίνω μήλα με πορτοκάλια. Αυτό είναι σωστό για σύγκριση με το matlab που ήδη ανέφερα ότι δεν είναι δίκαια. Το άλλο που λες είναι καταρχήν σωστό, η C++ (και κυρίως η C) είναι για system programming. ΑΛΛΑ επειδή είναι και γλώσσα γενικής χρήσης και επειδή οι πίνακες είναι εργαλείο καθημερινής δουλειάς λειτουργικότητα για πίνακες θα έπρεπε να έχει. Αντίστοιχα, επειδή ο προγραμματισμός με αντικείμενα (ΟΟ) επίσης είναι σημαντικό μοντέλο καθημερινής χρήσης, θα ζητούσε κάποιος η fortran να έχει αντικείμενα. Και όντως έχει ! Ενδογενώς, δηλ στον βασικό κορμό της όπως και η C++. Όχι με τρίτες βιβλιοθήκες ή τεχνάσματα αλλά στο βασικό standard. Είναι άλλο πράγμα να υπάρχουν έτοιμες εντολές επίσημες, τυποποημένες και βελτιστοποιημένες (αυτό είναι ενδογενής υποστήριξη) και άλλο, εντελώς διαφορετικό, να ορίζει ο προγραμματιστής block μνήμης και να τα χειρίζεται ως πίνακες. Εγώ εννοώ σαφώς το πρώτο. -
Erevis Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 Κι επαναλαμβάνω ότι η C++ ΔΕΝ έχει σαν κύριο μέλημα τις αλγεβρικές πράξεις πινάκων. ΘΑ ΗΤΑΝ ΛΑΘΟΣ ΝΑ ΤΙΣ ΕΧΕΙ, από τη στιγμή που οι πράξες με πραγματικούς αριθμούς είναι ΠΟΛΥ ΑΡΓΕΣ με τον τρόπο που τις εκτελεί η C/C++. Για πίνακες έχει όση λειτουργικότητα χρειάζεται για τη διαχείρηση της μνήμης τους, εισαγωγή/εξαγωγή στοιχειών, χρήσιμους αλγορίθμους (μέγιστο/ελάχιστο, άθροισμα στοιχείων 2 STL containers, εσωτερικό γινόμενο 2 STL containers). Το κύριο μέλημα της C/C++ είναι η γρήγορη προσπέλαση και καλή διαχείρηση της μνήμης..στο οποίο η FORTRAN είναι δεκαετίες πίσω. Γι'αυτό κάθε γλώσσα έχει την χρήση της (ΧΡΥΣΟΣ ΚΑΝΟΝΑΣ). Στο τέλος-τέλος, άμα καίγεσαι τόσο πολύ, γιατί δεν κάνεις export τον κώδικα της FORTRAN που έχεις για τις αλγεβρικές πράξεις σε βιβλιοθήκη αντικειμενικού κώδικα και να τις καλείς από C/C++? Σχεδόν όλοι οι σύγχρονοι linkers το υποστηρίζουν.
V.I.Smirnov Δημοσ. 1 Φεβρουαρίου 2011 Μέλος Δημοσ. 1 Φεβρουαρίου 2011 Δεν είναι υποστήριξη πινάκων αυτό - τουλάχιστον όπως το περιέγραψα πιο πάνω. Η υποστήριξη που παρέχει η STL είναι εξαιρετικά χρήσιμη σε ότι αφορά πίνακες που μπορούν να αποθηκεύουν γενικά δεδομένα δηλ. ως containers όπως λες. Αυτό μάλιστα. Αλλά στα αριθμητικά, αυτά που έχει δεν είναι τίποτε για να κάνεις κάτι πιο πολύπλοκο - χώρια η βραδύτητα. Εγώ απλώς πιστεύω ότι θα έπρεπε να υπάρχει κάτι ακριβώς επειδή η χρήση πινάκων αριθμών είναι τετριμμένη καθημερινά και μας δυσκολεύει συνέχεια. Θα έπρεπε να υπάρχει μια υλοποίηση όπως της Boost αλλά και για δυναμικούς πίνακες : της boost είναι ότι θα ήθελε κάποιος αλλά δυστυχώς μόνον για στατικούς πίνακες, δηλ το πιο χρήσιμο λείπει ! Για τις πράξεις με πραγματικούς αριθμούς, δεν ξέρω πώς εννοείς ότι τις κάνει η C++. Εκείνο που ξέρω είναι ότι όντως υπήρχε πρόβλημα στην ταχύτητα της C++ αλλά αφορoύσε το αντικειμενοστρεφές κομμάτι της. Η κατάσταση έχει βελτιωθεί (φτιάχτηκαν καλύτεροι compilers) και άρα η υποτιθέμενη βραδύτητα δεν είναι λόγος για να μην υπάρχουν εντολές πινάκων. Εξάλλου δεν έχει ούτε μιγαδικούς - άλλη αδικαιολόγητη έλλειψη. Η C/C++ στηρίζεται σε έναν αραιό πυρήνα και όλη λειτουργικότητά της παρέχεται από βιβλιοθήκες. Δεν ξέρω αν ή κατά πόσο αυτό είναι η αιτία για τις παραπάνω ελλείψεις... Για την προσπέλαση/χειρισμό της μνήμης από την fortran κάνεις λάθος όπως οι περισσότεροι που δεν την ξέρουν. Καταρχήν, το ότι όλες οι πράξεις αριθμητικών πινάκων γίνονται vectorizing και το ότι υπάρχει πρόβλεψη για χρήση παραλληλίας (π.χ. μοντέλο SPMD με τα coarrays) δείχνει άριστη διαχείριση της μνήμης και ταχύτητα που δεν έχει η C++. Εξάλλου, αν ήταν αλλιώς, αυτά δεν θα μπορούσαν να γίνουν. Για γενικότερες δομές δεδομένων έχει δείκτες σε πιο high level χειρισμό από τους αντίστοιχους στην C++ και σχεδόν όλα (λίστες, δέντρα, hash tables κλπ) μπορούν να γίνουν το ίδιο αποτελεσματικά. Απλώς είναι ασυνήθιστο να γραφούν εκεί - εγώ δεν θα το επιχειρούσα. Επιπλέον, έχει και δείκτες και εντολές διαχείρισης μνήμης σε μορφή όπως στη C (εντολές loc, malloc, free) αλλά δεν είναι standard. Το τελευταίο που λες (συνεργασία των δύο γλωσσών) το έχω δοκιμάσει κατά καιρούς επιτυχώς. Ειδικά η τελευταία έκδοση της γλώσσας παρέχει διαλειτουργικότητα με την C που είναι πλέον στο standard. Αλλά τέτοια τεχνάσματα δεν βολεύουν γενικά. Το καλύτερο θα ήταν να είχε η C++ δική της διαχείριση πινάκων και να απαλλασόμασταν από τους αυτοσχεδιασμούς. -
Erevis Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 Ν'αποκτήσει η C++ αλγεβρικές πράξεις ενδογενώς, είναι από πολύ δύσκολο εως απίθανο. Πρώτα απ'όλα, στη C/C++ οι πίνακες αντιμετωπίζονται εξ'ολοκλήρου ως containers. Μόνο γι'προσπέλαση/αποθήκευση και τίποτε άλλο. Ούτε καν bounds checking στο iteration/random access δεν παρέχει, φαντάσουν να δοκιμάσει να κάνει κάποιος πράξεις με πίνακες που έχουν διαφορετικό μέγεθος..κόλαση θα γίνει. H φιλοσοφία της C++ είναι "You don't pay for what you don't get to use". Η υποστήριξη αλγεβρικών πράξεων σε πίνακες όμως, θα ζημιώσει αυτούς που δε θέλουν τη λειτουργικότητα από τη στιγμή που αυτή θα υποστηρίζεται σε πολύ low-level επίπεδο Επομένως, για να υλοποιηθούν αυτά που ζητάς ενδογενώς πρέπει να αλλάξει αρκετά στη νοοτροπία της η γλώσσα κι αυτό δεν θα γίνει. Ειδικά για μια μικρή μερίδα προγραμματιστών. Το καταλαβαίνω πως για σενα είναι καθημερινότητα αυτό που ζητάς, αλλά στο 90% των projects που χρησιμοποιούν C++ κι έχω συμμετάσχει ή εχω μελετήσει τον κωδικά τους ΔΕΝ χρησιμοποιούνται αλγεβρικές πράξεις μεταξύ πινάκων. Το υπόλοιπο 10% είναι 3d games, modelers κτλ τα οποία έχουν ανάγκη για τέτοιου είδους πράξεις αλλά σε πολύ πρωτογενές επίπεδο, πχ. μετασχηματισμός πινάκων, που δεν είναι και κάτι το εξηζητημένο να υλοποιήσεις μόνος σου.
Timonkaipumpa Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 Επειδή κάτι ακούστηκε για "ημιμαθείς"... Οι πίνακες στους υπολογιστές είναι μία ΣΥΓΚΕΚΡΙΜΕΝΗ δομή δεδομένων, την οποία μπορούμε να χρησιμοποιήσουμε για να κάνουμε - αναπαραστήσουμε ΚΑΙ πράξεις αλγεβρικών πινάκων. Οι αλγεβρικοί πίνακες.. ΥΠΑΡΧΟΥΝ ΜΟΝΟ ΣΤΟ ΧΑΡΤΙ. Εκτός και εάν οι υπολογιστές... έχουν κάποιο μαγικό εξάρτημα το οποίο είναι ακριβώς όπως ένας αλγεβρικός πίνακας και έχει αυτή ακριβώς την λειτουργικότητα και ΔΕΝ αποτελείται από τρανζίστορ... ή εκτός και εάν στη φύση υπάρχει κάτι που έχει ακριβώς την μορφή του αλγεβρικού πίνακα και έχει μέσα του αριθμούς.... Έτσι, στους υπολογιστές... οι αλγεβρικοί πίνακες είναι ΥΠΟΣΥΝΟΛΟ της έννοιας πίνακας... Άρα... όταν κάποιος λέει για υποστήριξη πινάκων και εννοεί ΜΟΝΟ τους αλγεβρικούς (που είναι ΜΟΝΟ ΣΤΟ ΧΑΡΤΙ) χωρίς να καταλαβαίνει το τι λέει... (δεδομένου της "σαφήνειας των λεγομένων") Guess who is "ημιμαθής"!!!!! Ανακεφαλαιώνοντας... Εάν κανείς είναι βιτσιόζος... μπορεί να χρησιμοποιήσει το ΝΟΗΤΙΚΟ εργαλείο της άλγεβρας που λέγεται πίνακας με λίστες (ή και κυκλικές ουρές, χωρίς να κάνει dequeue) Θα κάνει μία κλάση που θα την λέει CMyVitsiozikosArray και έχει member data μία λίστα και member functions τις αναγκαίες μεθόδους για την υλοποίηση της λειτουργικότητας των ΑΛΓΕΒΡΙΚΩΝ ΠΙΝΑΚΩΝ. Και μέσα σε κάθε κόμβο.. βάζει και ένα δεύτερο int για να έχει και μιγαδικούς! Klein mein (αλήθεια.. έτσι γράφεται; ) Το MATLAB/ Fortran, έχουν επιλέξει και αυτά μία δομή δεδομένων την οποία χρησιμοποιούν για να δημιουργήσουν ΑΛΓΕΒΡΙΚΟΥΣ ΠΙΝΑΚΕΣ. ΔΕΝ ΥΠΑΡΧΕΙ κάτι το οποίο είναι ΑΛΓΕΒΡΙΚΟΣ ΠΙΝΑΚΑΣ, αυτό καθεαυτό, σε έναν Η/Υ.- Μπλοκ μνήμης είναι τα πάντα... και προσθέσεις, αφαιρέσεις, συγκρίσεις και μεταβάσεις σε συγκεκριμένες περιοχές μνήμης (σε μία απλή εκδοχή). Εάν αυτό (ο αλγεβρικός πίνακας) είναι πιο γρήγορο ή πιο εύκολα υλοποιήσιμο ή μπορεί κανείς να το χειριστεί πιο εύκολα σε μία γλώσσα ή ένα υπολογιστικό περιβάλλον... ΔΕΝ ΕΧΕΙ ΚΑΜΙΑ ΣΧΕΣΗ με το εάν υποστηρίζει μία άλλη γλώσσα πίνακες ή όχι. Οι αλγεβρικοί πίνακες είναι ένα νοητικό εργαλείο, με συγκεκριμένους κανόνες. Έτσι, μπορεί κανείς να φτιάξει την λειτουργικότητά του σε κάποια γλώσσα προγραμματισμού. Ακόμα και σε brainfuck (πολύ θα ήθελα να το δω αυτό). ΔΕΝ ΤΙΘΕΤΑΙ ΖΗΤΗΜΑ υποστήριξης.- Δεν είναι aftersales υπηρεσία... που λες "α! Πήρα τηλέφωνο την C++ και με εξυπηρέτησαν άψογα". Είναι ένα συγκεκριμένο νοητικό κατασκεύασμα (από τα πολύ βασικά, ναι) το οποίο μπορείς να το υλοποιήσεις σε μία γλώσσα προγραμματισμού, αρκεί αυτή να έχει πράξεις(!). Εάν είναι εύκολη, δύσκολη, γρήγορη, αργή, πράσινη, κόκκινη, κίτρινη, μπλε η υλοποίηση... ΔΕΝ ΑΛΛΑΖΕΙ ΤΟ ΓΕΓΟΝΟΣ ΟΤΙ ΜΠΟΡΕΙ ΝΑ ΥΛΟΠΟΙΗΘΕΙ. Και επειδή έγινε λόγος για "υποστήριξη"... ΔΕΝ ΤΙΘΕΤΑΙ ΘΕΜΑ ΥΠΟΣΤΗΡΙΞΗΣ. ΔΕΝ ΕΙΝΑΙ ΥΠΗΡΕΣΙΕΣ Η ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ.- Μπορούν ή δεν μπορούν να υλοποιήσουν.- Από εκεί και πέρα, διαλέγεις αυτό που μπορείς να χρησιμοποιήσεις, βάσει hardware και s/w. Υ.Γ. Να μην ξεχνιόμαστε... Smirnoφούλη μου... γιατί δεν αράζεις με την αρχική πατάτα σου και θες να το επεκτείνεις το θέμα; Δεν σου φτάνει μία; Πρέπει να κάνεις hat trick; :D
Επισκέπτης Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 Μήπως θα ήταν πιο σωστό να πούμε πως η C++ δεν υποστηρίζει matrices(μητρώα) αλλά arrays(πίνακες);Υπάρχει σαφής διαφορά μεταξύ τους.
V.I.Smirnov Δημοσ. 1 Φεβρουαρίου 2011 Μέλος Δημοσ. 1 Φεβρουαρίου 2011 @Εrevis Ίσως έχεις δίκιο, εκτεταμενη χρήση πράξεων σε πίνακες δεν γίνεται καθημερινά. Αλλά σε βασικό επίπεδο, συνέχεια τις βρίσκουμε μπροστά μας. Π.χ. ένα πλήθος από threads εδωπέρα αφορά στοιχειώδη διαχείριση αριθμητικών πινάκων. Αν υπήρχε έστω και μερικώς η λειτουργικότητα που ανέφερα, τα περισσότερα από αυτά τα προβλήματα δεν θα υπήρχαν. Αυτό το καταλογίζω ως έλλειψη, τίποτε άλλο. @nicktamias Σωστός ! Ακριβώς αυτό είναι. Αν και υπάρχει αυτή η διαφορά, η διδασκαλία των πινάκων γίνεται με αριθμούς. Το αποτέλεσμα είναι να ταυτίζονται λαθεμένα οι δύο έννοιες, ενώ θα έπρεπε να αναφέρεται ότι ο πίνακας ως δομή δεδομένων και το αριθμητικό μητρώο κάπου διαφοροποιούνται. Ωστόσο η έλλειψη υποστήριξης των μητρώων σε βασικό επίπεδο δεν δικαιολογείται από αυτό. Πιθανόν δεν το επιτρέπει ο τρόπος που αναπτύχθηκε η γλώσσα αυτή. Εδώ θυμάμαι έκδοση basic που τους χειριζόταν έτσι, όχι η C++. -
Timonkaipumpa Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 H φιλοσοφία της C++ είναι "You don't pay for what you don't get to use". Η υποστήριξη αλγεβρικών πράξεων σε πίνακες όμως, θα ζημιώσει αυτούς που δε θέλουν τη λειτουργικότητα από τη στιγμή που αυτή θα υποστηρίζεται σε πολύ low-level επίπεδο τι εννοείς υποστήριξη; Να είναι έτοιμο; Γιατί μόνο αυτό έχει μείνει... Εφόσον μπορείς να το κάνεις (ασχέτως του πόσο γρήγορο θα είναι ή/και εύχρηστο), πώς εννοείς την υποστήριξη; Παράδειγμα. Το να έχει μία μέθοδο getMaxValue που να παίρνει όρισμα array; Εάν δεν κάνεις include την stdio μπορείς να γράψεις στην κονσόλα; Όχι. Άρα, δεν υποστηρίζει ούτε το output σε console η C++; Να μου πεις ότι δεν έχει την λειτουργικότητα της ADA/JAVA όσο αφορά σε monitors.. να πω ΟΚ! (εκτός και εάν την έχει, και κάνω λάθος.. κάποιος πιο έμπειρος θα μπορούσε να συνεισφέρει)
Erevis Δημοσ. 1 Φεβρουαρίου 2011 Δημοσ. 1 Φεβρουαρίου 2011 Ρε συ Smirnov, μου φαίνεται ότι η εμμονή σου να περάσεις ότι είσαι πιο έξυπνος από τους άλλους σε κάνει να βλέπεις το δένδρο και να χάνεις το δάσος. Οι σκοπός των ασκήσεων που ποστάρουν εδω πέρα τα παιδιά, δεν ειναι να μάθουν μαθηματικά και να κάνουν τέλειους υπολογισμούς αλλά να μάθουν κάποιες δομές και features μιας γλώσσας. Π.χ το thread από το οποίο έγινε σπλιτ αυτό που γράφουμε τώρα, το point της άσκησης ήταν η εκμάθηση της STL απ'ότι κατάλαβα, μιας και υπήρχε πολύ εύκολη λύση με STL και functors->predicates. Επίσης σε κάποιο υποτιθέμενο thread μπορεί να έχει κάποιος άσκηση το πως να φτιάξει μια κλάσση Matrix. Ναι το ξέρουμε ότι η FORTRAN το υποστηρίζει ενδογενώς αλλά το point της άσκησης θα ήταν να μάθει ο φοιτητής templates και operator overloading, όχι το πως να κάνει αλγεβρικές πράξεις με μια γλώσσα προγραμματιμού. Το εξήγησα αποπάνε στο post μου, αλλά ας δόσω ένα ΥΠΟΤΙΘΕΜΕΝΟ παράδειγμα: > int array1[10], array2[23]; array1 += array2; //πρόταση 1 Ξέρω πως αύτη στιγμή ότι η πρόταση 1 είναι pointer arithmetic (άλλος ένας λόγος για τον οποίο δεν γίνεται η C++ να υποστηρίξει πράξεις μεταξύ arrays). Φαντάσου όμως να έκανε αλγεβρική πράξη μεταξύ των πινάκων. Ο compiler θα έπρεπε να κάνει ένα διάολο bound checkings, κάτι το οποίο είναι ανεπίτρεπτο για C/C++. Tώρα όσο για τον όρο υποστήριξη, εννοώ να υπάρχει ενδογενώς σαν feature. Αν είναι λάθος, cut me some slack
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.