Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 11 Σεπ 2011, 00:09

stamatiou έγραψε:
migf1 έγραψε:Πολλά και διάφορα :lol:

Χαλαρά όμως, δεν βιαζόμαστε (καλό το έργο; )

Off topic:
Εντάξει, την εξέγερση των πιθήηκων είδα, πολύ φαντασία, δεν λέψ αλλά σαν το Κόναν δεν ήταν (μιλάμε απίστευτη μάπα!) :D

Off topic:
Άσε, την πάτησα κι εγώ... και τα δυο τα είδα κι εγώ :lol:
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Σεπ 2011, 00:10

stamatiou έγραψε:
migf1 έγραψε:Πολλά και διάφορα :lol:

Χαλαρά όμως, δεν βιαζόμαστε (καλό το έργο; )

Off topic:
Εντάξει, την εξέγερση των πιθήηκων είδα, πολύ φαντασία, δεν λέψ αλλά σαν το Κόναν δεν ήταν (μιλάμε απίστευτη μάπα!) :D


Off topic:
αν θες να δεις καλη ταινιουλα δες το never back down / πειρατες καραιβικης το καινουργιο εχει μεσα την πενελοπε... πωπω ωραια πραγματα. Το inception επισης τα σπαει... αυτα τα 3 πρεπει να τα δειτε αμεσα....
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 11 Σεπ 2011, 00:29

Λοιπόν παιδιά, επειδή άλλαξε πάρα πολύ ο κώδικας με την αναπροσαρμογή λόγω χρήσης δομής για τον πίνακα (που πλέον δεν είναι πίνακας με τη στενή έννοια του όρου, είναι δομή που ονομάζεται Table, αλλά ο πίνακας-πίνακας είναι το πεδίο: buffer) σας τον δίνω έτοιμο όλον το κώδικα, με την ελπίδα πως οι απορίες σας δεν θα ξεπεράσουν τις 4 σελίδες :lol:

table2.c : http://ideone.com/hVnHW

Είμαι πολύ κουρασμένος τώρα για να κάνω πλήρη ανάλυση (από αύριο) αλλά τον ανέβασα σε ξεχωριστή διεύθυνση για να μπορείτε να τον συγκρίνετε με τον κώδικα του table.c που είχαμε μέχρι τώρα.

Λειτουργικά κάνουν ακριβώς το ίδιο πράγμα, αλλά το table2.c έχει ήδη την υποδομή να δέχεται πολύ πιο εύκολα μελλοντικές αλλαγές και μας βοηθάει να γράψουμε κώδικα που θα εκτελείται πιο γρήγορα.

Για παράδειγμα η συνάρτηση tablen() δεν υπάρχει πλεόν, γιατί το πλήθος των μη κενών στοιχείων έχει μπει ως πεδίο μέσα στη δομή (buflen το λέω). Οπότε αφενός μπορούμε να το χρησιμοποιούμε απευθείας ως: table->buflen (ή table.buflen) και αφετέρου το υπολογίζουμε μια φορά στην αρχή και τέρμα (θα το ενημερώνουμε δυναμικά και όταν προσθαφαιρούμε στοιχεία στο buffer αργότερα). Ενώ η tablen() κάθε φορά που την καλούσαμε μέτραγε κάθε φορά από την αρχή όλα τα στοιχεία του πίνακα.

Με λίγα λόγια, όλες τις βασικές μεταβλητές που τις είχαμε "ξέμπαρκες" πριν, τώρα έχουν μαζευτεί σε ένα μέρος, ως πεδία της δομής Table... οπότε στις συναρτήσεις μας περνάμε μονάχα την μεταβλητή table που την έχω ορίσει τύπου Table (και άρα έχουμε άμεση πρόσβαση σε όλα της τα πεδία ανά πάσα στιγμή, χωρίς να χρειάζεται να τα περνάμε ως ξεχωριστά ορίσματα).

Πιστεύω πως το μεγαλύτερο πρόβλημα που θα αντιμετωπίσετε θα είναι να συνηθίσετε την ιδέα πως το Table δεν είναι πια ένα κλασικό array, είναι μια ευρύτερη δομή που περιέχει και το array (το buffer) και τις μεταβλητές που κρατάνε κρίσιμες πληροφορίες για το buffer.

Δηλαδή όπου στο table.c λέγαμε table, τώρα λέμε table->buffer (ή table.buffer )... όπου λέγαμε tabsize τώρα λέμε table->bufsize (ή table.bufsize) κλπ κλπ.

Ελπίζω να μην τρομάξετε από την 1η ματιά και απογοητευτείτε. Αν το καλοσκεφτείτε μας είναι πολύ εύκολο όπως είναι τώρα. Δείτε για παράδειγμα πόσο πιο ανθρώπινα διαβάζεται η main() ;)

Περιμένω απορίες, και μετά η επόμενη άσκηση θα είναι να γράψουμε μια συνάρτηση που θα γεμίζει το buffer με τυχαίους αριθμούς ;) Θα σας πω ακριβώς όταν βεβαιωθούμε πρώτα πως έχουμε καταλάβει τον νέο κώδικα.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 11 Σεπ 2011, 00:29

Star_Light έγραψε:
stamatiou έγραψε:
migf1 έγραψε:Πολλά και διάφορα :lol:

Χαλαρά όμως, δεν βιαζόμαστε (καλό το έργο; )

Off topic:
Εντάξει, την εξέγερση των πιθήηκων είδα, πολύ φαντασία, δεν λέψ αλλά σαν το Κόναν δεν ήταν (μιλάμε απίστευτη μάπα!) :D


Off topic:
αν θες να δεις καλη ταινιουλα δες το never back down / πειρατες καραιβικης το καινουργιο εχει μεσα την πενελοπε... πωπω ωραια πραγματα. Το inception επισης τα σπαει... αυτα τα 3 πρεπει να τα δειτε αμεσα....

Thx, τα σημείωσα :)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Σεπ 2011, 01:27

Η βασικη ιδεα ειναι οτι περνας ενα αντιγραφο της δομης μεσα στην συνάρτηση.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 11 Σεπ 2011, 11:28

Καλημέρα (η θάλασσα ήταν υπέροχη σήμερα)!

Star_Light έγραψε:Η βασικη ιδεα ειναι οτι περνας ενα αντιγραφο της δομης μεσα στην συνάρτηση.

Αντίγραφο όταν την περνάς by value, κανονική όταν την περνάς by reference.

Όταν την περνάς ως by value όρισμα, τότε μέσα στη συνάρτηση χρησιμοποιείς την τελεία για να αναφερθείς στα πεδία της ( π.χ. table.buffer ). Όταν την περνάς ως by reference όρισμα, τότε μέσα στη συνάρτηση χρησιμοποιείς το -> για να αναφερθείς στα πεδία της ( π.χ. table->buffer ).

Τελικά δεν είναι και τόσο τραγικά δύσκολο όσο φοβόμουν πως θα σας φανεί, ε;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Σεπ 2011, 11:42

migf1 έγραψε:Καλημέρα (η θάλασσα ήταν υπέροχη σήμερα)!

Star_Light έγραψε:Η βασικη ιδεα ειναι οτι περνας ενα αντιγραφο της δομης μεσα στην συνάρτηση.

Αντίγραφο όταν την περνάς by value, κανονική όταν την περνάς by reference.

Όταν την περνάς ως by value όρισμα, τότε μέσα στη συνάρτηση χρησιμοποιείς την τελεία για να αναφερθείς στα πεδία της ( π.χ. table.buffer ). Όταν την περνάς ως by reference όρισμα, τότε μέσα στη συνάρτηση χρησιμοποιείς το -> για να αναφερθείς στα πεδία της ( π.χ. table->buffer ).

Τελικά δεν είναι και τόσο τραγικά δύσκολο όσο φοβόμουν πως θα σας φανεί, ε;


Ειναι οπως το ειχες πει και εσυ παλαιοτερα.... ειναι αλλο θεμα να μπορεσεις να περιγραψεις ενα προγραμμα... αλλο να καταλαβεις οντως πως δουλευει και αλλο να συνθεσεις στην συνεχεια ενα δικο σου , προς το παρον μπορεσα να περιγραψω τι ειναι αυτο που βλεπω μολις ανοιξει το ματι θα δω αν μπορω να καταλαβω και 100% πως δουλευει παντως τα χουμε κανει και στις λιστες :D
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 11 Σεπ 2011, 11:57

Οκ, εγώ το κατάλαβα το πρόγραμμα :D
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 11 Σεπ 2011, 12:14

Ναι, εδώ είναι ακόμα πιο εύκολα από ότι στις λίστες :)

Σήμερα που έχω καθαρό μυαλό, έγραψα πιο λεπτομερή σχόλια για κάθε συνάρτηση και πρόσθεσα στη γραμμή 67 τη συνάρτηση...
Κώδικας: Επιλογή όλων
Bool table_fill_randomly( Table *table, const int maxval )

με κενό το κυρίως σώμα της για να το γράψετε εσείς :) Το τι θέλουμε να κάνει αυτή η συνάρτηση το περιγράφω στα σχόλιά της. Εν τάχει, θέλουμε να γεμίζει τα στοιχεία του buffer με τυχαίες τιμές μεταξύ 0 και maxval (συμπεριλαμβανομένων )... αλλά χρειάζεται να κάνετε κι ελέγχους ασφαλείας.

Στη main() έχω πρσθέσει τη γραμμή που ενεργοποιεί τη στάνταρ γεννήτρια ψευδοτυχαίων αροθμών της C, κι έχω απενεργοποιήσει προσωρινά τις γραμμές που καλούν την table_fill_randomly() ... για να τη δοκιμάζετε όταν γράφετε τον κώδικά της, αλλάξτε το #if 0 σε #if 1.

Πάω να κάνω καφεδάκι και να επιστρέψω για να γράψω ένα post που θα εξηγεί τη φιλοσοφία του νέου μας κώδικα (του table2.c εννοώ).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 11 Σεπ 2011, 12:26

migf1 μολις τελειωσουμε με αυτα... θελεις να πάμε στα δικτυα και να αρχισουμε καποιον αλγοριθμο... πχ του Dijkstra? Τον ξερεις? Τον εχεις δει? αν και δεν νομιζω να ειναι δυσκολος για σενα.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι