Ελληνικο tutorial για τη c

Ξεκίνησε από Shadowfax, 29 Ιουν 2009, 04:03:36 ΜΜ

« προηγούμενο - επόμενο »

Shadowfax

Θελω ενα καλο tutorial για να αρχισω να μαθαινω c. Και θα ειναι καλυτερα αν ειναι στα ελληνικα. Οποιος μπορει ας προτεινει κατι. Ευχαριστω!

cookie

Κι εγώ θέλω οπότε όποιος μπορεί ας μας βοηθήσει και τους δύο! :)


Shadowfax


Laertis

Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

potato

Καλό θα ήταν να μη διαβάσεις από τα 2 πρώτα links που έδωσε ο evry, μιας και είναι C++, τα 2 επόμενα είναι ok, αλλά είναι μόνο σημειώσεις(δεν μαθαίνεις από σημειώσεις), τα 2 τελευταία είναι στα Αγγλικά(που αν τελικά θες αγγλικά διάβασε το K&R, υπάρχει και online)

Γνώμη μου:
1) Προσπάθησε να διαβάσεις Αγγλικά συγγράματα, σελίδες κλπ.
2) Αν επιμένεις τόσο στα ελληνικά, δεν σε ενδιαφέρει να προχωρήσεις πολύ στο θέμα, δηλαδή μόνο να περάσεις κανένα μάθημα σε C, πάρε το K&R στα ελληνικά από κανένα Παπασωτηρίου. (που είναι πιο ακριβό από το Αγγλικό, and here is where we laugh!)
Be open source. Knowledge belongs to the world.

evry


  Τα link με τη C++ τα έβαλα διότι είναι πιο εύκολο για κάποιον να ξεκινήσει με το C κομμάτι της C++ παρά με καθαρή C. π.χ. άλλο να κάτσεις να μάθεις πως δουλεύουν οι printf, scanf και άλλο να χρησιμοποιείς κατευθείαν cin, cout που είναι πολύ πιο απλά. Έτσι επικεντρώνεσαι στις αλγοριθμικές δομές της γλώσσας και όχι σε τεχνικά στοιχεία που θα σε καθυστερήσουν. Στη συνέχεια ασχολείσαι και με αυτά.
    Έχω δοκιμάσει αυτή την προσέγγιση στο σχολείο και δούλεψε μια χαρά σε τμήμα που είχα για τον πανελλήνιο διαγωνισμό πληροφορικής.
    Φυσικά αν θέλεις να μάθεις "καθαρή" C θα πρέπει να πέσεις κατευθείαν στα βαθιά :(
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

potato

Παράθεση από: evry στις 30 Ιουν 2009, 11:39:03 ΠΜ

  Τα link με τη C++ τα έβαλα διότι είναι πιο εύκολο για κάποιον να ξεκινήσει με το C κομμάτι της C++ παρά με καθαρή C. π.χ. άλλο να κάτσεις να μάθεις πως δουλεύουν οι printf, scanf και άλλο να χρησιμοποιείς κατευθείαν cin, cout που είναι πολύ πιο απλά.

Συμφωνώ. Υπάρχουν οι putchar() / getchar() αντίστοιχα στη C.
Be open source. Knowledge belongs to the world.

evry

 Ναι οκ, αλλά δεν είναι το ίδιο. Δηλαδή στη C διαβάζεις τους χαρακτήρες και μετά πρέπει να κατασκευάσεις το δεδομένο και να το μετατρέψεις (casting) στον αντίστοιχο τύπο. Επίσης το διαβάζεις χαρακτήρα-χαρακτήρα.
   Στη C++ γράφοντας cin >> a διαβάζεις κατευθείαν αυτό που θέλεις χωρίς να μπλέξεις με αυτά. Ο τελεστής >> έχει γίνει overloaded για όλους τους τύπους (ακόμα και για τους δικούς σου) και η συμπεριφορά του εξαρτάται από τον τύπο της μεταβλητής a. Αυτή η απόκρυψη των τεχνικών λεπτομερειών του I/O της C είναι πολύ καλή για έναν αρχάριο.

Παράθεση από: potato στις 30 Ιουν 2009, 02:09:25 ΜΜ
Παράθεση από: evry στις 30 Ιουν 2009, 11:39:03 ΠΜ

  Τα link με τη C++ τα έβαλα διότι είναι πιο εύκολο για κάποιον να ξεκινήσει με το C κομμάτι της C++ παρά με καθαρή C. π.χ. άλλο να κάτσεις να μάθεις πως δουλεύουν οι printf, scanf και άλλο να χρησιμοποιείς κατευθείαν cin, cout που είναι πολύ πιο απλά.

Συμφωνώ. Υπάρχουν οι putchar() / getchar() αντίστοιχα στη C.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

potato

Μα αυτά είναι τα πρώτα πράγματα που μαθαίνεις στη C, γιατί να τα αποφύγεις, από που θα ξεκινήσεις αν δεν ξεκινήσεις από I/O χαρακτήρα-χαρακτήρα?
Επίσης αυτό δεν είναι το "C πράγμα της C++" όπως είπες πιο πάνω. Είναι καθαρό OO.

Αλλά ακόμη δεν καταλαβαίνω, γιατί να μη μάθει/διαβάσει κάποιος κατευθείαν C, γιατί δημιουργούμε έναν ενδιάμεσο δρόμο?
Be open source. Knowledge belongs to the world.

evry


  Φαντάσου έναν μαθητή/φοιτητή που δεν ξέρει προγραμματισμό και η C είναι η πρώτη του γλώσσα, αλλά ακόμα και να μην ήταν. Τι θα κάνεις στα πρώτα μαθήματα? δεν θα κάνεις την έννοια της μεταβλητής, και σιγά σιγά θα πας δομή επιλογής κλπ? φυσικά για δείκτες δεν το συζητάμε , θα πας αρκετά μετά.
    Για να ξεκινήσεις από το I/O χαρακτήρα/χαρακτήρα από το πρώτο μάθημα πρέπει ο μαθητής να ξέρει : δομή επιλογής / δομή επανάληψης / casting μεταξύ τύπων και άλλα πολλά. Θα τα κάνεις αυτά σε 1 μάθημα ?
Αν πάλι ξεκινήσεις από scanf/printf δεν θα πρέπει να εξηγήσεις τι είναι το & στην scanf? Πως? αφού ακόμα δεν ξέρουν pointers?
   Άρα όταν ξεκινάς από C ξεκινάς από τα απλά και αυτός ακριβώς είναι ο λόγος που δεν ξεκινάς από αυτό που είπες αλλά από ένα απλό προγραμματάκι με μεταβλητές, πραξούλες, και εντολές εισόδου/εξόδου. Και εκεί είναι το πρόβλημα. Ποιες εντολές I/O θα χρησιμοποιήσεις χωρίς να σου φύγουν οι μισοί μαθητές /φοιτητές? Σίγουρα όχι αυτές που ανέφερα προηγουμένως.
   Ενώ τα cin,cout είναι ότι πρέπει και μπορείς να τους τα εξηγήσεις και μια χαρά π.χ. η εντολή
cin >> number  μεταφέρει έναν αριθμό από το πληκτρολόγιο (cin) προς τη (>>) μεταβλητή number. Και τέλειωσες, ούτε να ελέγχει τι τύπο έχει ούτε τίποτα.
     Επίσης αυτό που είπα για να το χρησιμοποιήσει ο μαθητής πρέπει να ξέρει OO??? Απλά το χρησιμοποιεί, δεν χρειάζεται να ξέρει τι κρύβεται από πίσω, άσε που δεν είναι ακριβώς καθαρός OO, αφού το operator overlaoding είναι πατέντα της C++.
    Το πρόβλημα αυτό που λέω με τις εντολές εισόδου/εξόδου όταν κάποιος ξεκινάει με C έχει απασχολήσει πολλούς επιστήμονες που ασχολούνται με τη διδασκαλία της C, οι οποίοι αναγκάζονταν να φτιάχνουν βιβλιοθήκες i/o για αυτόν τον σκοπό (τα ίδια και στην java). Τώρα όμως με τα cin/cout η μετάβαση ενός μαθητή στη C γίνεται πολύ πιο ομαλά.
    Πολλές φορές όταν διδάσκουμε ένα δύσκολο αντικείμενο που δεν καταλαβαίνουν τα παιδιά είμαστε αναγκασμένοι να δημιουργήσουμε έναν ενδιάμεσο δρόμο, ο οποίος είναι πολλές φορές και ο πιο γρήγορoς
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

potato

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

Ξεκινάς από τη μεταγλώττιση με C compilers. (Τι θα του πεις εσύ? g++? Και μετά από λίγο καιρό "τελικά άλλος είναι  o C compiler")
Μετά printf("Hello World!");
Μετά για την έννοια της μεταβλητής κτλ. (όπως πάει και το K&R)


Όσο για τα cin/cout, εννοώ ότι αρχίζει και μπαίνει σε μία λογική που είναι τελείως ξένη με τη C. Ξεκίνησε να μαθαίνει με high level συναρτήσεις I/O, και εκεί είναι που θα πει, "σιγά μη κάτσω να μάθω pointers, δεν τους καταλαβαίνω!"

Και κάποια στιγμή ο μαθητής θα αντιμετωπίσει το λεγόμενο "XY πρόβλημα". Έχεις ένα πρόβλημα Χ , το οποίο πιστεύεις ότι μπορείς να το λύσεις μέσω του Y και κάθεσαι ασχολείσαι/παιδεύεσαι/ρωτάς για το Υ και πάει λέγοντας.

Δεν ξέρω, κατά τη γνώμη μου είναι λάθος να θες να μάθεις C και να το κάνεις μέσω μίας άλλης γλώσσας. Πράγματι, είναι αρκετοί που έχουν αντιμετωπίσει πρόβλημα με τη δομή του K&R, όμως με 2-3 online references  για μερικά δύσκολα σημεία κάθε φορά και μόνο K&R μαθαίνεις άνετα C.
Be open source. Knowledge belongs to the world.

evry


   Οι περισσότεροι που μάθαμε, μάθαμε from scratch επειδή μάθαμε μόνοι μας. Το θέμα είναι όμως τι γίνεται με αυτούς που δεν έμαθαν και για τους λόγους που δεν έμαθαν. Και αυτοί δεν είναι λίγοι. Σε κάθε τμήμα πληροφορικής 1 στους 2 φοιτητές αποφεύγει τη C όπως ο διάολος το λιβάνι. Αυτή τη στιγμή οι περισσότερες έρευνες που έχουν γίνει και έχουν δημοσιευτεί σε περιοδικά και συνέδρια καταλήγουν σε μια top-down στρατηγική. Δηλαδή αποκρύπτεις όσο το δυνατόν περισσότερες λεπτομέρειες μπορείς ώστε να επικεντρωθείς στις αλγοριθμικές δομές. Αν προσπαθήσεις να κάνεις και τα 2, δηλαδή και αλγοριθμική σκέψη και στοιχεία της C το πιθανότερο είναι ότι αρκετοί φοιτητές θα πελαγώσουν και θα τα παρατήσουν κάποια στιγμή. Φυσικά αυτοί που θέλουν να ασχοληθούν όπως λες θα συνεχίσουν, αλλά το μάθημα δε γίνεται μόνο για αυτούς.

Τέλος δεν θα ξεκίναγα ούτε με g++ ούτε με gcc αλλέ με το Dev++ ή το Codeblocks και έτσι θα απέφευγα την τρομακτική για κάποιους command line του unix/linux σε πρώτη φάση :)
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr