Προγραμματισμός σε C - Λύνουμε ασκήσεις

...ασύγχρονα μαθήματα γλώσσας C

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό simosx » 30 Μάιος 2011, 23:01

Star_Light έγραψε:Απλα δεν καταλαβαινω ποια η διαφορα αν το βαλω στο αποθετηριο πχ????

ειμαι λιγο ασχετος με το θεμα για αυτο ρωταω....


Διάβασε ξανά αυτά που αναφέρω αμέσως παραπάνω. Με τις εντολές αυτές λαμβάνεις το αποθετήριο ΚΩΔΙΚΑ (δεν είναι αποθετήριο για προγράμματα...) που έφτιαξα, και επιλύει το πρόβλημα με τη μεταγλώττιση.
Για να κάνεις μεταγλώττιση γράφεις «make» και πατάς Enter. Αυτό ήταν.

Είναι νέα πράγματα, ωστόσο τώρα είναι που μαθαίνεις εξαιρετικά πράγματα.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό limas » 30 Μάιος 2011, 23:13

Στο αρχειο που εχεις την main σου, κανε include το αρχειο "module.c". Στην συνεχεια, κανε include στο module.c το module.h ή οπως αλλιως το λες. Γενικα, οταν θελουμε να εχουμε ενα header αρχειο, βαζουμε τα προτοτυπα μεσα σε αυτο, οπως πολυ σωστα κανεις, αλλα αυτο το αρχειο το κανουμε πριν την υλοποιηση των συναρτησεων μας στο .c αρχειο . Επισης, αποφευγουμε να κανουμε τα ιδια includes στα διαφορα αρχεια που θελουμε να συνδεσουμε. Αλλιως μπορουμε να τα κανουμε ολα include ΠΑΝΤΑ, χρησιμοποιώντας τα εξης:
#ifndef <token>
/* code */
#else
/* code to include if the token is defined */
#endif


Eλπιζω να βοηθησα!!! ;)
Γνώσεις ⇛ Linux:Χαμηλό ┃ Προγραμματισμός:Ναι ┃ Αγγλικά:Μέτρια
Λειτουργικό σε Η/Υ ϰ μοντέλο: Ubuntu 10.04.1 LTS σε Intel(R) Core(TM) 2 Duo CPU @ 2.00GHz
Προδιαγραφές ⇛ T5750│ RAM:3GB │Mesa DRI Intel(R) 965GM GEM │ Atheros AR5001 │Intel 82801H │ TFT 15.6''
limas
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 359
Εγγραφή: 06 Σεπ 2009, 15:47
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό Star_Light » 31 Μάιος 2011, 00:05

@σιμοςχ

Κώδικας: Επιλογή όλων


kostas@kostas-SSL:~$ cd /home/kostas/starlight/.git
kostas@kostas-SSL:~/starlight/.git$ ls
branches  description  hooks  info  module2.c  module.h  packed-refs
config    HEAD         index  logs  module.c   objects   refs
kostas@kostas-SSL:~/starlight/.git$ make module.c
make: Nothing to be done for `module.c'.
kostas@kostas-SSL:~/starlight/.git$


@limas το εκανα αυτο που μου ειπες και τρεχει μονο το 3ο αρχειο.... αυτο με την κεντρικη συναρτηση main το interface του χρηστησ δηλαδη... το αρχειο επικεφαλιδας ηταν οκ εξαρχης.... τωρα το 1ο που εχει μεσα τις συναρτησεις ορισμενες ως προς την λειτουργια που θα επιτελεσουν δεν τρεχει με τιποτα εβαλα και αυτο που μου ειπες και εβγαλε 50 ερρορς!!!!!!!!!
Γνώσεις ⇛ 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 - Λύνουμε ασκήσεις

Δημοσίευσηαπό simosx » 31 Μάιος 2011, 00:21

simosx έγραψε:@Star_Light: είδα τον κώδικα σου και κάτι με έσπρωξε να φτιάξω αποθετήριο.

Τρέξε
Κώδικας: Επιλογή όλων
sudo apt-get install git


και μετά
Κώδικας: Επιλογή όλων
git clone git://github.com/simos/starlight.git


Μπαίνεις στον υποκατάλογο starlight (Εσύ μπήκες στον υποκατάλογο starlight/.git/ που δεν έπρεπε) και γράφεις make. Αυτό ήταν! Μεταγλώττιση!
Το πρόγραμμα φαίνεται να μη δουλεύει σωστά, οπότε θέλει παραπάνω δουλειά.
Αν διαβάζεις το περιοδικό LinuxInside, στο δεύτερο τεύχος υπάρχει άρθρο μου για το Git
και το πως βοηθάει στο να προγραμματίζεις.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό simosx » 31 Μάιος 2011, 00:31

Κώδικας: Επιλογή όλων
> git clone git://github.com/simos/starlight.git
Cloning into starlight...
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 14 (delta 4), reused 0 (delta 0)
Receiving objects: 100% (14/14), done.
Resolving deltas: 100% (4/4), done.
                                                                               
> cd starlight/
> ls -l
total 16
-rw-r--r-- 1 user user 118 2011-05-31 00:29 Makefile
-rw-r--r-- 1 user user 815 2011-05-31 00:29 module.c
-rw-r--r-- 1 user user 127 2011-05-31 00:29 module.h
-rw-r--r-- 1 user user 307 2011-05-31 00:29 prog.c

> make
gcc -c module.c -o module.o
gcc prog.c module.o -o prog

> ls -l
total 32
-rw-r--r-- 1 user user  118 2011-05-31 00:29 Makefile
-rw-r--r-- 1 user user  815 2011-05-31 00:29 module.c
-rw-r--r-- 1 user user  127 2011-05-31 00:29 module.h
-rw-r--r-- 1 user user 3208 2011-05-31 00:29 module.o
-rwxr-xr-x 1 user user 8791 2011-05-31 00:29 prog
-rw-r--r-- 1 user user  307 2011-05-31 00:29 prog.c

> ./prog
Dwste A gia to paragontiko , B gia ton MKD kai C gia tin dunami
Dwste q an thelete na bgeite apo to programma
A
Dwste to n10
Dwste to n10
Dwste to n^C
                                                                               

προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό Star_Light » 31 Μάιος 2011, 01:08

ΟΚ! Απλα αυτο το προγραμμα δηλαδη κανει ενα πηγαιο αρχειο να τρεξει οπως και αν ειναι????
ΓΙατι οκ ετρεξε με αυτο. Βεβαια εχει λογικα σφαλματα αρκετα απο οσο ειδα οποτε πρεπει να το ξανακοιταξω ουτως η αλλως.

EDIT : οΚ Θα το διαβασω και μονος μου. Ευχαριστω για ολα!!! Τα λογικα σφαλματα να τα κοιταξω με τον gnu debbuger? :P

http://en.wikipedia.org/wiki/Git_%28software%29
Γνώσεις ⇛ 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 - Λύνουμε ασκήσεις

Δημοσίευσηαπό Star_Light » 31 Μάιος 2011, 01:28

απλα θελω να δω πως καταφερε να τρεξει το προγραμμα ..... επειδη πιο πολυ με ενδιαφερει η εκμαθηση
αλλιως θα το ειχα κανει με πολυ απλουστερο τροπο... :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 - Λύνουμε ασκήσεις

Δημοσίευσηαπό simosx » 31 Μάιος 2011, 01:41

Star_Light έγραψε:απλα θελω να δω πως καταφερε να τρεξει το προγραμμα ..... επειδη πιο πολυ με ενδιαφερει η εκμαθηση
αλλιως θα το ειχα κανει με πολυ απλουστερο τροπο... :D


Ο κώδικας είναι και στο https://github.com/simos/starlight

Για την εκτέλεση, https://github.com/simos/starlight/blob/master/Makefile
Κώδικας: Επιλογή όλων
gcc -c module.c -o module.o
gcc prog.c module.o -o prog


δηλαδή, μεταγλωττίζουμε το module.c σε object μόνο! (παράμετρος -c).
και μετά
μεταγλωττίζουμε το prog.c με το module.o για να φτιάξουμε το prog
Το παραπάνω Makefile είναι πολύ απλό και θα μπορούσε να γίνει καλύτερο.

Για παράδειγμα, το
Κώδικας: Επιλογή όλων
module.o: module.c module.h
      gcc -c module.c -o module.o


λέει ότι για να φτιάξουμε το module.o, πρέπει να προϋπάρχουν τα module.c και module.c. Αν η ημερομηνία τους είναι νεότερη από του module.o, τότε αν τρέξουμε 'make' θα εκτελεστεί η εντολή μεταγλώττισης ξανά. Η εντολή είναι στη δεύτερη γραμμή.

Είναι κακή πρακτική να κάνεις include άλλα αρχεία C.
Αυτό που κάνεις είναι μεταγλωττίζεις τα επιμέρους αρχεία σε .o και μετά τα κάνεις link. Στο παράδειγμα δεν το δείχνω, ωστόσο ο τρόπος μου είναι μια ικανοποιητική αρχή.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προγραμματισμός σε C - Λύνουμε ασκήσεις

Δημοσίευσηαπό Star_Light » 31 Μάιος 2011, 02:02

Γιατι ειναι κακη πρακτικη να κανεις include αλλα αρχεια C???

Καταλαβα... δημιουργεις ενα αντικειμενικο αρχειο .ο και μετα καλεις τον συνδετη.

Τον συνδετη με ποια εντολη τον καλεις ? Τον καλεσες και ο ιδιος τον συνδετη ??? ωστε να περιλαβει και τα 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 - Λύνουμε ασκήσεις

Δημοσίευσηαπό simosx » 31 Μάιος 2011, 02:31

Star_Light έγραψε:Τον συνδετη με ποια εντολη τον καλεις ? Τον καλεσες και ο ιδιος τον συνδετη ??? ωστε να περιλαβει και τα 3 αρχεια

ή ουσιαστικα το προγραμμα για να διευκολυνει τους προγραμματιστες την διαδικασια την έχει εννοια?


Στο παράδειγμα δεν καλώ το συνδέτη (linker) για να μη το κάνω αρκετά δύσκολο.
Ο λόγος που αποδομείς το πρόγραμμα σε μικρές ενότητες είναι για να μειώσεις τη δυσκολία του,
και όταν πας να το μεταγλωττίσεις, να γνωρίζει το σύστημα ποια .o αρχεία είναι ενημερωμένα, και να μην τα μεταγλωττίζει.
Διαφορετικά, και με μικρή αλλαγή στον κώδικα, θέλει μεταγλώττιση όλα ξανά.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

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

Επιστροφή στο Μαθήματα C