pavlos1908 Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Καλησπερα, στο μαθημα των δομων δεδομενων στο τμημα μου, εχουμε την εξης προγραμματιστικη ασκηση (η γενικη περιγραφη της γιατι η αναλυτικη πιανει 1μιση σελιδα, αν χρειαστει την στελνω με πμ): Γενικη Περιγραφη: Στην εργασια αυτη καλειστε να υλοποιησετε ενα προγραμμα που προσομειωνει την διαδικασια επιλογης και αποστολης δωρων του Αγιου Βασιλειου σε γεωγραφικα διαμερισματα διαφορων χωρων του κοσμου κατα τη περιοδο των Χριστουγεννων. Και πρεπει να επιλεξουμε να κανουμε την ασκηση αυτη ειτε με C ειτε με Java. Ισχυει οτι δεν επιτρεπεται να χρησιμοποιηθουν ετοιμες δομες δεδομενων ειτε στην Java ειτε στην C και οτι στην Java δεν επιτρεπεται η χρηση boolean τυπων. Μας διδεται ο main κωδικας καθως και καποιες κλασεις -με σχολια οσον αφορα το τι πρεπει να υλοποιησει η κλαση- που πρεπει να υλοποιηθουν. Θα χρησιμοποιηθουν κυριως λιστες στον κωδικα. Το ερωτημα μου ειναι ποια πιστευετε οτι θα ηταν καταλληλοτερη επιλογη γλωσσας (αν και δυσκολευομαι αρκετα να κατανοησω τις δομες δεδομενων μεσω κωδικα, θεωρητικα τα πιανω, πρακτικα υπαρχει ενα θεματακι). Να τονισω οτι ειμαι 3ο εξαμηνο, C εκανα το 1ο και JAVA κανω αυτο το εξαμηνο.
DDevil Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Εγω θα επέλεγα την γλώσσα στην οποια ειμαι πιο γνώστης. Με την C αν κάνεις υλοποιήσεις θα πρεπει να ξέρεις καλά δεικτες σε δομές και δυναμική δέσμευση μνήμης.
sundance_kid Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Αν κατανοήσεις δομές & δείκτες σε C, πιστεύω ολοκληρώνεσαι στο σκεπτικό του development. Οπότε C, αυτό το βιβλίο και καλή επιτυχία!
White_Cat Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Καλημέρα !Κατά κοινή ομολογία, η Java είναι σαφώς καταλληλότερη γλώσσα σε σχέση με τη C για το συγκεκριμένο τύπο προγράμματος που σου ζητείται να φτιάξεις.Άφού έχεις διδαχθεί τη C σε κάποιο βαθμό, σίγουρα θα έχεις καταλάβει ότι οι δείκτες είναι ίσος το πιο δύσκολο σημείο της γλώσσας. Αυτό ισχύει διότι για να υλοποιηθεί ο,τιδήποτε μέσω δεικτών απαιτείται απ' ευθείας χαμηλού επιπέδου αλληλεπίδραση με τη μνήμη. Ακόμα και οι πλέον έμπειροι προγραμματιστές της C παραδέχονται ότι η πρακτική αυτή είναι ιδιαίτερα επιρρεπής σε λάθη. Για παράδειγμα, άμα κάποιος προσπαθήσει να υλοποιήσει μία διασυνδεδεμένη λίστα στη C, είναι πάρα πολύ εύκολο από μία απλή αβλεψία να αλλοιώσει το δείκτη που αποθηκεύει τη διεύθυνση της κεφαλής της λίστας. Έτσι θα έχει χάσει τη λίστα μια για πάντα. Το ίδιο ισχύει και για άλλες διασυνδεδεμένες δομές δεδομένων. Αντίθετα, όταν η Sun Microsystems παρουσίασε την πρώτη έκδοση της Java το 1996, οι βασικές καινοτομίες που προκάλεσαν αίσθηση ήταν δύο :α) Η Java μπορούσε να δημιουργήσει προγράμματα που δεν απαιτούσαν ούτε καν επαναμεταγλώτιση για να τρέξουν σε διαφορετικές πλατφόρμες.β) Η Java δεν είχε (και δεν έχει) καθόλου τους δείκτες που προκαλούν πονοκέφαλο στους προγραμματιστές τυς C. Έτσι μπορεί να υλοποιήσει τις γνωστές δομές δεδομένων, χωρίς να χρειάζεται απ' ευθείας αλληλεπίδραση με τη φυσική μνήμη του υπολογιστή. Οι πρόσφατες εκδόσεις της Java συμπεριλαμβάνουν έτοιμες δομές δεδομένων, όμως όπως λέει η εκφώνηση της άσκησής σου, δεν σε αφήνει να τις χρησιμοποιήσεις. Αλλά αυτό μη σε φοβίζει, επειδή όπως θα δεις είναι αρκετά εύκολο να υλοποιήσεις μόνος σου όποιες δομές χρειάζονται.Στον παρακάτω σύνδεσμο υπάρχουν πανεπιστημιακές σημειώσεις που παρουσιάζουν αναλυτικά τη χρήση διασυνδεδεμένων λιστών σε Java, χωρίς να βασίζονται καθόλου στα έτοιμα πακέτα της γλώσσας. Ο κώδικας που βρήκα στο κείμενο αυτό είναι ένα πολύ καλό σημείο εκκίνησης για να μπορέσεις να κάνεις την άσκηση που σου ζητείται.http://www.cs.uoi.gr/~loukas/courses/Data_Structures/index.files/3-Arrays-and-Lists.pdfΚαλή επιτυχία στις σπουδές σου,Φιλικά,Ο Άσπρος Γάτος 2
DDevil Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Memory leaks , seg faults και άλλα τέτοια που μπορει να ταλαιπωρήσουν τον προγραμματιστή.
groot Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Καλημέρα ! Κατά κοινή ομολογία, η Java είναι σαφώς καταλληλότερη γλώσσα σε σχέση με τη C για το συγκεκριμένο τύπο προγράμματος που σου ζητείται να φτιάξεις. Αδερφέ γάτε... όχι κατά κοινή ομολογία. Εκτός και εάν ως "κοινή ομολογία" ορίζεις την γνώμη σου. Υπάρχουν 1000+2 παράμετροι για να πεις ποια είναι η καταλληλότερη γλώσσα... στην συγκεκριμένη περίπτωση δε (φοιτητής), η C είναι η καταλληλότερη. Θα έχει χρόνο να εκτιμήσει την Java, και εφόσον έχει δει μόνος του τους pointers σε μία λίστα (που στην Java είναι όλα pointers, άλλο ένα λάθος του post σου), όταν θα είναι στην πτυχιακή, σε μεγαλύτερο εξάμηνο ή όταν θα πιέζει το deadline για την παράδοση του project.
DDevil Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Αυτά τα κολληματα των καθηγητων δεν μπορω να τα καταλαβω ρε φιλε... τι θα πει απαγορευεται να πάρεις ετοιμες δομές δηλαδη αμα εσυ έβρισκες έναν κώδικα απο το Ιντερνετ τον έκανες trace ,με δικές σου καταλληλες εισοδους καταλαβαινες πως λειτουργουσε του έβαζες σχόλια άλλαζες και λιγο την συνάρτηση εισοδου ειτε για επεξεργασια περισσοτερων τυπων δεδομένων ειτε για οτιδηποτε άλλο αυτον σε τι θα τον πειραζε δηλαδη? Δηλαδη έχει κατσει και έχει φτιαξει 2 διαφορετικές εκφωνησεις? αν χρησιμοποιήσεις C σου έχει τα δικα του προτυπα συναρτήσεων / ορισμούς και αλλη μια για τις κλάσεις της Java? :S
White_Cat Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Αγαπητέ groot,Μάλλον δεν κατανόησες ακριβώς τι είπα. Στη Java είναι όλα classes, interfaces, objects, properties & methods. Δεν έχει δείκτες με την έννοια της C, ακριβώς επειδή δεν υπάρχει απευθείας πρόσβαση στη RAM. Όλα γίνονται μέσω της Java Virtual Machine.Αντιθέτως, η χαμηλού επιπέδου πρόσβαση στη RAM που υπάρχει στη C είναι πηγή προβλημάτων. Αυτό είπα.Ευχαριστώ που διάβασες το μήνυμά μου,Ο Άσπρος Γάτος
pavlos1908 Δημοσ. 23 Οκτωβρίου 2015 Μέλος Δημοσ. 23 Οκτωβρίου 2015 Λοιπον καταρχην ευχαριστω για τις απαντησεις σας. Να σημειωσω οτι το project ειναι μεχρι 10 Νοεμβρη περιπου. Επισης, η αληθεια ειναι οτι με την C στο πρωτο εξαμηνο δεν τα πηγα αρκετα καλα εξαιτιας των δεικτων μιας και σε καποια θεματα μπερδευομουν. Σε αντιθεση με την Java που μπορω να πω οτι μου αρεσει. Βεβαια, αν επιλεξω την C τελικα, με το βιβλιο που παρεθεσε επανω ο sundance_kid φανταζομαι ισως προλαβω να εξοικοιωθω σε δεικτες κλπ. και να υλοποιησω το project.
DDevil Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Λοιπον καταρχην ευχαριστω για τις απαντησεις σας. Να σημειωσω οτι το project ειναι μεχρι 10 Νοεμβρη περιπου. Επισης, η αληθεια ειναι οτι με την C στο πρωτο εξαμηνο δεν τα πηγα αρκετα καλα εξαιτιας των δεικτων μιας και σε καποια θεματα μπερδευομουν. Σε αντιθεση με την Java που μπορω να πω οτι μου αρεσει. Βεβαια, αν επιλεξω την C τελικα, με το βιβλιο που παρεθεσε επανω ο sundance_kid φανταζομαι ισως προλαβω να εξοικοιωθω σε δεικτες κλπ. και να υλοποιησω το project. Εισαι σιγουρος οτι θα εξοικοιωθείς? γιατι το βιβλιο αυτο ειναι γνωστο ως η βιβλος της C έχει γραφτει απο τους δημιουργους της. Δεν ειναι βιβλιο που θα διευκολυνει εναν πρωτάρη.
pavlos1908 Δημοσ. 23 Οκτωβρίου 2015 Μέλος Δημοσ. 23 Οκτωβρίου 2015 Εισαι σιγουρος οτι θα εξοικοιωθείς? γιατι το βιβλιο αυτο ειναι γνωστο ως η βιβλος της C έχει γραφτει απο τους δημιουργους της. Δεν ειναι βιβλιο που θα διευκολυνει εναν πρωτάρη. Εχω κανει C στο πρωτο εξαμηνο, και τα πηγα σχετικα καλα αν εξαιρεσεις το κομματι των δεικτων. Και οταν λεω δεικτων δεν εννοω πχ ενας δεικτης σε μια int την χρησιμοτητα του τι μπορουμε να κανουμε κλπ., αλλα ενας δεικτης σε μια δομη δεδομενων πχ (struct) ή double pointer κλπ. Επισης να αναφερω οτι για δομες μεσω ευδοξου λεω να παρω αυτο το βιβλιο: https://static.eudoxus.gr/books/preview/72/cover-32997672.jpg Αν επιλεξω Java, θα με βοηθησει καθολου στην υλοποιηση του project?
groot Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Αγαπητέ groot, Στη Java είναι όλα classes, interfaces, objects, properties & methods. Αγαπητέ Γάτε... Είσαι λάθος! Για την ακρίβεια, αυτό που λες είναι ένα από τα μεγάλα πράγματα που ΘΑ ΗΘΕΛΕ/ΕΠΡΕΠΕ να είχε κάνει η Java αλλά ΔΕΝ το έκανε. Π.χ.; int VS Integer και double VS Double. Άρα, ΔΕΝ είναι τα πάντα objects (όπως, π.χ., ήταν στην smalltalk). Τέλος, ΝΑΙ. Τα πάντα (εκτός των primitive types) είναι MEMORY REFERENCES. Σε ποια memory δείχνουν, αδιάφορο. Αλλά ΕΙΝΑΙ. Άρα, ΕΙΝΑΙ pointers. Για αυτό και οι default τιμές είναι null σε ό,τι object type υπάρχει... γιατί είναι memory reference!
visualizer Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Επιλέγεις την γλώσσα που πιστεύεις ότι μπορείς να γράψεις καλύτερο κώδικα...και οι δυο γλώσσες είναι εξισού καλές το θέμα είναι ποιά μπορείς να χειριστείς καλύτερα.Αν με ρωτάς προσωπικά εφόσον δεν έχεις εμπειρία με την C θα σου έλεγα να επιλέξεις JAVA μιας και είναι πιο φιλική για αρχάριους.
DDevil Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Εχω κανει C στο πρωτο εξαμηνο, και τα πηγα σχετικα καλα αν εξαιρεσεις το κομματι των δεικτων. Και οταν λεω δεικτων δεν εννοω πχ ενας δεικτης σε μια int την χρησιμοτητα του τι μπορουμε να κανουμε κλπ., αλλα ενας δεικτης σε μια δομη δεδομενων πχ (struct) ή double pointer κλπ. Επισης να αναφερω οτι για δομες μεσω ευδοξου λεω να παρω αυτο το βιβλιο: https://static.eudoxus.gr/books/preview/72/cover-32997672.jpg Αν επιλεξω Java, θα με βοηθησει καθολου στην υλοποιηση του project? Δεν ξέρω δεν το έχω διαβάσει. Ο διπλός δεικτης δεν ειναι δυσκολος αμα έχεις καταλαβει τους απλούς. Απλά η *pp σαν περιεχόμενο έχει διεύθυνση ενος άλλου δεικτη. Πχ #include<stdio.h> int main(void) { int x=1; int *p=&x; int **pp = &p; printf("%d , %d " , *pp , p ); // Exoun ises times. return 0; } 2
Giorgos65ert Δημοσ. 23 Οκτωβρίου 2015 Δημοσ. 23 Οκτωβρίου 2015 Δεν ξέρω δεν το έχω διαβάσει. Ο διπλός δεικτης δεν ειναι δυσκολος αμα έχεις καταλαβει τους απλούς. Απλά η *pp σαν περιεχόμενο έχει διεύθυνση ενος άλλου δεικτη. Πχ #include<stdio.h> int main(void) { int x=1; int *p=&x; int **pp = &p; printf("%d , %d " , *pp , p ); // Exoun ises times. return 0; } Επίσης με την ίδια λογική μπορείς να δουλέψεις και με τριπλούς-τετραπλούς-etc δέκτες! ένα παράδειγμα: #include <stdio.h> int main(void){ int value = 2; int *p = &value; int **pp = &p; int ***ppp = &pp; int ****pppp = &ppp; printf("*p = %i\n**pp = %i\n***ppp = %i\n****pppp = %i\n",*p,**pp,***ppp,****pppp); return 0; } 3
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα