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

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

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

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

Δημοσίευσηαπό migf1 » 29 Αύγ 2011, 15:09

Star_Light έγραψε:Ωραια. Τοτε ας μεινουμε μονο στα strings. Eχεις δικιο γιατι θα παιδευτουμε χωρις λογο και θα παιδεψουμε και σενα.
Επομενως προτεινε εσυ που ξερεις και αριστα το αντικειμενο
απλα δοκιμασα να σκεφτω να μπλεξουμε strings μαζι με κρυπτογραφηση
ουσιαστικα ασκησεις των strings οι οποιες θα προσφερουν κρυπτογραφηση.

Τα strings είναι απλά στη θεωρία αλλά η διαχείρισή τους μπορεί να γίνει εξαιρετικά πολύπλοκη στην πράξη. Το θέμα είναι πως αποτελούν θεμελιώδη έννοια στη C (βασικά σε όλες τις γλώσσες) και χρησιμοποιούνται σχεδόν παντού. Στη C έχουν και το επιπλέον χαρακτηριστικό πως εμβαθύνοντας στη διαχείρισή τους εξοικειωνόμαστε και με άλλες θεμελιώδεις έννοιες της γλώσσας, όπως για παράδειγμα τους δείκτες αλλά και την εξάσκηση προγραμματιστικής σκέψης κι εφαρμογής της.

Πάρε για παράδειγμα το θέμα που θίχτηκε με τους δυαδικούς αριθμούς. Από τη στιγμή που δεν υπάρχει built-in data type για δυαδικούς αριθμούς, για να κρατήσεις κάπου την δυαδική απεικόνιση ενός οποιουδήποτε αριθμού είσαι υποχρεωμένος να δημιουργήσεις μια δομή με το κάθε στοιχείο της δομής να αντιστοιχεί στο καθένα από τα δυαδικά ψηφία. Αν εξαιρέσουμε τα bit-arrays που χρησιμοποιούνται κι αυτά πολύ συχνά για τη διαχείριση των bits, τα strings είναι η προφανής δομή που χρησιμοποιείται (με τον κάθε χαρακτήρα του string να αντιστοιχεί σε ένα δυαδικό ψηφίο του αριθμού).

Στον κώδικα που σας έδωσα για απλή διαχείριση δυαδικών ψηφίων σε προηγούμενο ποστ, η συνάρτηση: char *s_byte2binary( char *s, const Byte byte ) είναι αυτή που δέχεται την τιμή του αριθμού στο όρισμα byte (σε όποια βάση κι αν είναι από τις υποστηριζόμενες της γλώσσας... δεκαδική, δεκαεξαδική, οκταδική), υπολογίζει ως χαρακτήρες τα δυαδικά ψηφία που αντιστοιχούν στον αριθμό, και τους χαρακτήρες αυτούς τους αποθηκεύει στο 1o της όρισμα που είναι το c-string s, το οποίο κι επιστρέφει.

Το να διαβάζει λοιπόν κανείς αυτή τη συνάρτηση και να καταλαβαίνει τι κάνει είναι ένα πράγμα, το να μπορεί να την φτιάξει μόνος του είναι άλλο πράγμα και το να μπορεί να τη φτιάξει απελευθερωμένη από περιττές εξαρτήσεις ώστε να μπορεί να χρησιμοποιηθεί αυτόνομη σε οποιοδήποτε πρόγραμμα (reusable coding) είναι επίσης άλλο πράγμα.

Παρομοίως, από τη στιγμή που η γλώσσα δεν έχει built-in data type για δυαδικούς αριθμούς, το να διαβάσεις από την κύρια είσοδο τα ψηφία ενός δυαδικού αριθμού η προφανής επιλογή είναι να τα διαβάσεις μέσα σε ένα string, το οποίο κατόπιν θα χρειαστεί να το διαχειριστείς προκειμένου να μετατρέψεις τα δυαδικά ψηφία στην τιμή που τους αντιστοιχεί σε κάποια άλλη από τις υποστηριζόμενες βάσεις (δεκαδική, δεκαεξαδική, οκταδική).

Οπότε λίγο-πολύ γίνεται δώρο-άδωρον να πας σε θεωρία κρυπτογράφησης ή δικτύων ή sockets ή δομών δεδομένων... ή ... ή ... όταν δεν έχεις εμπεδώσει στη πράξη κάτι το τόσο θεμελιώδες όσο είναι τα strings. Διότι πολύ απλά ακόμα και να καταλάβεις τις παραπάνω θεωρίες δεν μπορείς να τα κάνεις πράξη όταν στερείσαι της θεμελιώδους ικανότητας να διαχειρίζεσαι strings. Πας να εφαρμόσεις αυτά που διάβασες και κατάλαβες αλλά δεν μπορείς επειδή στερείσαι πιο απλών (στοιχειωδών) γνώσεων ή/και πρακτικής.

Για παράδειγμα σε αυτό εδώ το post: viewtopic.php?p=202700#p202700 είχα προτείνει 2-3 ασκήσεις ειδικά για strings, οι οποίες προσφέρουν σε όποιον τις λύσει μόνος του μια πολύ καλή αρχή για την κατανόηση όχι μόνο των strings, αλλά και για εξάσκηση προγραμματιστικής σκέψης γενικότερα. Με εξαίρεση την τελευταία (με τα σύμφωνα και τα φωνήεντα) που την πάλεψε ο φίλος Stamatiou αλλά κι αυτός κατάλαβα πως την παράτησε, δεν είδα να ασχολήθηκε κανείς.

Προς Θεού, μη νομίζετε πως σας κάνω κάποια παρατήρηση ή πως ξέρω-γω σας μαλώνω ή οτιδήποτε τέτοιο, απλά πρέπει να αποδεχτείτε πως η (πικρή; ) πραγματικότητα στον προγραμματισμό είναι πως όταν αφήνουμε στη μέση πράγματα για να πάμε σε άλλα (είτε πιο προχωρημένα είτε όχι) κατεβάζουμε μόνοι μας τον πήχη και ουσιαστικά υπονομεύουμε μόνοι μας την όποια προσπάθεια κάνουμε για να μάθουμε μια γλώσσα. Όπως επίσης πως ο προγραμματισμός δεν είναι εύκολο πράγμα... όσο πιο πολύ θέλει να προχωρήσει κάποιος τόσο πιο δύσκολος γίνεται και τόσο περισσότερο βγαίνουν στην επιφάνεια τα όποια κενά έχει από προηγούμενα στάδια της εκμάθησής του.

Το "λίγο από όλα" φλετράρει επικίνδυνα με το "τίποτα πουθενά" (κάπου το χω ξαναγράψει αυτό :lol:). Για παράδειγμα, το να πει κάποιος πως ξέρει δομές δεδομένων επειδή έχει διαβάσει κι ενδεχομένως έχει καταλάβει τόσο τη θεωρία όσο και τον κώδικα που έχει διαβάσει στη θεωρία, δεν λέει σχεδόν τίποτα αν δεν μπορεί να κάνει πράξη αυτά που έχει διαβάσει κι έχει καταλάβει. Υπάρχει μεγάλη κι ουσιαστική απόσταση μεταξύ του "έχω καταλάβει" από το "υλοποιώ αυτά που έχω καταλάβει"... κι ακόμα πιο μεγάλη είναι η απόσταση από το "συνθέτω αυτά που έχω καταλάβει". Το 3ο προϋποθέτει ουσιαστική κατανόηση του 2ου, το οποίο με τη σειρά του προϋποθέτει ουσιαστική κατανόηση του 1ου.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 29 Αύγ 2011, 15:46

Προς θεού δεν νομίζουμε σε καμιά περίπτωση πως αυτό είναι κατσάδιασμα και καλά κάνεις και μας συνεφέρεις που και που μιας και το έχουμε αυτό :lol: !
Λοιπόν μήπως θα ήταν μια καλή αρχή να κοιτάξουμε εκείνο τον κώδικα που είχες ανεβάσει στο Ideone; :D
Edit: Τι είναι τα bitmasks και τα bit-arrays;
Τελευταία επεξεργασία από stamatiou και 29 Αύγ 2011, 15:48, έχει επεξεργασθεί 1 φορά/ες συνολικά
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 29 Αύγ 2011, 15:47

Ποιον από όλους;

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

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

Δημοσίευσηαπό Star_Light » 29 Αύγ 2011, 15:57

Kαλα προφανως και ο migf1 δεν εχει αδικο σε αυτα που λεει... ελπιζω μονο να μην εννοει οτι θα πρεπει να ασχοληθεις μονο με C
πχ εγω θελω να ασχοληθω και με δικτυα... απο τις 4 ωρες την ημερα πιστευω οι 2 μπορουν να πηγαινουν στο ενα και οι αλλες 2 στο αλλο
χωρις να υπαρχει καποιο προβλημα. Και εν παση περιπτωση ας χρειαστουν και 5 χρονια για να γινεις ενας καλος προγραμματιστης της C και με καλη βαση στα δικτυα . Ειτε 5 ειτε 10. Λιγο - λιγο καθε μερα πιστευω ειναι ενταξει ποια η αποψη σου migf1 ?

Π.Σ Στην τελευταια παραγραφο που μας εξηγει γιατι δεν πρεπει να πηγαινεις απο το 1 στο 3 χωρις να χεις καταλαβει το 2 ουσιαστικα εχει φτιαξει μια λιστα 1->2->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++

Δημοσίευσηαπό stamatiou » 29 Αύγ 2011, 16:03

migf1 έγραψε:Ποιον από όλους;

ΥΓ. Γράψε ποιον εννοείς μέχρι να πάω σπίτι (σε κάνα μισάωρο θα έχω πάει)

http://ideone.com/VccYM
Star_Light έγραψε:Kαλα προφανως και ο migf1 δεν εχει αδικο σε αυτα που λεει... ελπιζω μονο να μην εννοει οτι θα πρεπει να ασχοληθεις μονο με C
πχ εγω θελω να ασχοληθω και με δικτυα... απο τις 4 ωρες την ημερα πιστευω οι 2 μπορουν να πηγαινουν στο ενα και οι αλλες 2 στο αλλο
χωρις να υπαρχει καποιο προβλημα. Και εν παση περιπτωση ας χρειαστουν και 5 χρονια για να γινεις ενας καλος προγραμματιστης της C και με καλη βαση στα δικτυα . Ειτε 5 ειτε 10. Λιγο - λιγο καθε μερα πιστευω ειναι ενταξει ποια η αποψη σου migf1 ?

Π.Σ Στην τελευταια παραγραφο που μας εξηγει γιατι δεν πρεπει να πηγαινεις απο το 1 στο 3 χωρις να χεις καταλαβει το 2 ουσιαστικα εχει φτιαξει μια λιστα 1->2->3 χεχεχεχεχε

Όντως! Μην αφήσεις τα δίκτυα γιατί εμείς μετά από πού θα μάθουμε;! :lol:
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 29 Αύγ 2011, 16:24

καλα τα δικτυα δεν τα αφηνω αλλωστε η σχολη που τελειωσα σε αυτο εδινε εμφαση απο κωδικα δεν τα πηγαιναμε καλα βεβαια βαζανε μεν εργασιες αλλα και εναν ετοιμο να τους πηγαινες απο το ιντερνετ και χωρις να χεις και πολυ ιδεα δεν εδιναν και τοση σημασια για αυτο θελω να μαθω και προγραμματισμο τωρα οπωσδηποτε , απλα ο επομενος οδηγος θα ειναι πιο συμπαγης και θα κοιταξω να βρω σημεια που να ειναι πυρηνας για αυτο το επιπεδο και οχι πολλες γενικοτητες που μπορει καποιος να διαβασει και απο αλλου ως εκ τουτου θα αργησει λιγο να ανεβει.
Γνώσεις ⇛ 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 » 29 Αύγ 2011, 16:57

Star_Light έγραψε:
...
Λιγο - λιγο καθε μερα πιστευω ειναι ενταξει ποια η αποψη σου migf1 ?

Ο κάθε άνθρωπος είναι διαφορετικός, άλλος μπορεί να μαθαίνει και να εμπεδώνει πέραν του ενός πράγματος παράλληλα, άλλος μπορεί να χρειάζεται καιρό για να εμπεδώσει ένα μόνο πράγμα. Όταν ξεκινάμε να μάθουμε κάτι από το 0 η πλειοψηφία από εμάς ανήκει στη 2η κατηγορία. Στον προγραμματισμό μάλιστα το να μπορούμε να υλοποιούμε αυτά που διαβάζουμε είναι εξίσου σημαντικό, ίσως και πιο σημαντικό, από το να καταλαβαίνουμε τι διαβάζουμε.

stamatiou έγραψε:
http://ideone.com/VccYM

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

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

Δημοσίευσηαπό stamatiou » 29 Αύγ 2011, 17:23

migf1 έγραψε:
Star_Light έγραψε:
...
Λιγο - λιγο καθε μερα πιστευω ειναι ενταξει ποια η αποψη σου migf1 ?

Ο κάθε άνθρωπος είναι διαφορετικός, άλλος μπορεί να μαθαίνει και να εμπεδώνει πέραν του ενός πράγματος παράλληλα, άλλος μπορεί να χρειάζεται καιρό για να εμπεδώσει ένα μόνο πράγμα. Όταν ξεκινάμε να μάθουμε κάτι από το 0 η πλειοψηφία από εμάς ανήκει στη 2η κατηγορία. Στον προγραμματισμό μάλιστα το να μπορούμε να υλοποιούμε αυτά που διαβάζουμε είναι εξίσου σημαντικό, ίσως και πιο σημαντικό, από το να καταλαβαίνουμε τι διαβάζουμε.

stamatiou έγραψε:
http://ideone.com/VccYM

Α, αυτό με τους πίνακες εννοείς. Πιστεύω είναι πιο χρήσιμες στην παρούσα φάση οι ασκήσεις για τα strings (δική μας υλοποίηση των στάνταρ strncpy και strncmp και μετά αυτή με τα σύμφωνα-φωνήεντα, για την οποία θα χρειαστεί να φτιαχτούν 2 άλλες συναρτήσεις)

:crazy: Τι να πρωτοπιάσουμε; :lol: Ξεκινάμε με ποια από όλες;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 29 Αύγ 2011, 17:29

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

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

Δημοσίευσηαπό Star_Light » 29 Αύγ 2011, 18:40

ΟΚ! θΑ ΞΑΝΑΔΟΘΕΙ η εκφωνηση? η ειναι αυτη της σελιδας 83 ? :crazy:
Γνώσεις ⇛ 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
Εκτύπωση

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

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