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

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

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

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

Δημοσίευσηαπό Star_Light » 02 Αύγ 2011, 11:38

wow!!!!! Θα ξεκινησω να διαβαζω τον κωδικα που πρωτο εβαλες απο την αρχη της(προηγούμενης) σελιδας... παντως αυτο με τα levels πολυ καλο!

Καπως ετσι γινονται και οι αναβαθμίσεις στα προγραμματα ε? Προστίθονται νεες δυνατότητες.... προχθες ξεκινησαμε την εκδοση 1.0 και σημερα εχουμε φτασει στην εκδοση 3.0!!!!!! Αν και τα λεω λαθος... γιατι οταν αλλαζει το αριστερο νουμερο (περισσοτερο σημαντικο bit :lol: :lol: ) δεν δειχνει οτι απλα άλλαξε ο πυρηνας ξερω γω του κωδικα?
Γνώσεις ⇛ 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++

Δημοσίευσηαπό Star_Light » 02 Αύγ 2011, 11:52

αραγε πως θα μπορουσαμε να φτιαξουμε και ενα παιχνιδι με ζαρια !!!! Εχει αρχισει και δινει ιδεες ο migf1!!!

Kατι ακομη.... οι διευθυνσεις ας πουμε των μεταβλητων που δεσμευουμε στο προγραμμα μας... περνανε στους καταχωρητες??? ή πρεπει εγω να γραψω και το προσδιοριστικο register????
Γνώσεις ⇛ 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 » 02 Αύγ 2011, 11:57

Ναι, ναι :)

Υπάρχουν διάφορες φόρμουλες για τις εκδόσεις, π.χ. 1.02 με το 1 να είναι major upgrade και το 02 minor upgrade. Σε γενικές γραμμές, η πλήρης φόρμουλα πάει κάπως έτσι: version.major.minor.build (αλλά μπορείς να μη τα χρησιμοποιείς όλα).

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

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

Δημοσίευσηαπό migf1 » 02 Αύγ 2011, 11:59

Star_Light έγραψε:αραγε πως θα μπορουσαμε να φτιαξουμε και ενα παιχνιδι με ζαρια !!!! Εχει αρχισει και δινει ιδεες ο migf1!!!

Kατι ακομη.... οι διευθυνσεις ας πουμε των μεταβλητων που δεσμευουμε στο προγραμμα μας... περνανε στους καταχωρητες??? ή πρεπει εγω να γραψω και το προσδιοριστικο register????

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

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

Δημοσίευσηαπό migf1 » 02 Αύγ 2011, 12:03

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

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

Δημοσίευσηαπό Star_Light » 02 Αύγ 2011, 12:20

βασικα εγω θα μεινω λιγο ακομη στις συναρτησεις για να ξεκαθαρισω καποια πραγματα.....

τελικα υπαρχει πολυ ψωμι στις συναρτησεις αν μαθεις να τις χειριζεσαι και να τις χρησιμοποιεις!

δεν καταλαβαινω πως αφου με το const δηλωνουμε ROM memory πως καθε φορα το inbuf μας μπορει να διαβαζει διαφορετικο string απο τον χρηστη....
Γνώσεις ⇛ 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 » 02 Αύγ 2011, 12:36

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

τελικα υπαρχει πολυ ψωμι στις συναρτησεις αν μαθεις να τις χειριζεσαι και να τις χρησιμοποιεις!

δεν καταλαβαινω πως αφου με το const δηλωνουμε ROM memory πως καθε φορα το inbuf μας μπορει να διαβαζει διαφορετικο string απο τον χρηστη....

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

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

Δημοσίευσηαπό Star_Light » 02 Αύγ 2011, 13:39

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

τελικα υπαρχει πολυ ψωμι στις συναρτησεις αν μαθεις να τις χειριζεσαι και να τις χρησιμοποιεις!

δεν καταλαβαινω πως αφου με το const δηλωνουμε ROM memory πως καθε φορα το inbuf μας μπορει να διαβαζει διαφορετικο string απο τον χρηστη....

Αφού δεν το έχουμε δηλωμένο ως const char *, ως char * το έχουμε δηλωμένο.


βασικα για την sscanf ελεγα....

Κώδικας: Επιλογή όλων
int sscanf ( const char * str, const char * format, ...);
Γνώσεις ⇛ 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 » 02 Αύγ 2011, 13:41

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

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

Δημοσίευσηαπό migf1 » 02 Αύγ 2011, 14:40

Πριν πάμε σε πίνακες, λέω να πω μερικά πράγματα για τους πρόσθετους τύπους δεδομένων (custom data types) μιας και βοηθάνε πολύ στην καλύτερη κατανόηση του κώδικά, και τον κάνουν και πιο... ανθρώπινο στο διάβασμά του. Θα πω και μερικά πράγματα και για τα macros και τα enumerated types (τύποι απαρίθμησης). Μετά θα δώσω τον τελευταίο κώδικα του μικρού μας guessing game.

Έχουμε αρχίσει να αγγίζουμε πολύ πιο ενδιαφέροντα θέματα πια :)

MACROS ( #define )

Καταρχήν έχουμε ήδη μιλήσει διάσπαρτα για macros, κυρίως για το ρόλο τους ως σταθερές, π.χ...
Κώδικας: Επιλογή όλων
#define MAXLEN 20
το οποίο μας επιτρέπει να χρησιμοποιούμε τη λέξη MAXNAME αντί για το νούμερο 20 οπουδήποτε στον κώδικά μας.

Τα macros όμως μπορούν να έχουν και παραμέτρους και το σώμα τους να είναι κανονικός κώδικας, όπως για παράδειγμα το...
Κώδικας: Επιλογή όλων
#define OUT_OF_BOUNDS(x, low, high) ( (x) < (low) || (x) > (high) )
το οποίο ελέγχει αν το x είναι μικρότερο του low ή μεγαλύτερο του high.

Έτσι, όποτε θέλουμε στον κώδικά μας να ελέγξουμε μια μεταβλητή μας αν βρίσκεται ή όχι ανάμεσα σε δυο όρια τιμών, μπορούμε να γράφουμε κάτι σαν το παρακάτω...
Κώδικας: Επιλογή όλων

int n = 10;
if ( OUT_OF_BOUNDS(n, -100, 100) )
// το n είναι εκτός ορίων
else
// το n είναι εντός ορίων

Εκτός από απλούς ελέγχους, μπορούμε να τα βάλουμε να επιστρέφουν και τιμές όταν η συνθήκη του σώματός τους γίνει FALSE ή TRUE. Αυτό το κάνουμε συνήθως με χρήση των τελεστών ? : (λειτουργούν σαν if-else αλλά επιστρέφουν και τιμές). Για παράδειγμα, να ένα macro που επιστρέφει την απόλυτη τιμή της παραμέτρου του...

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

#define ABS(x) ( (x) > 0 ? (x) : -(x) )
αν το x είναι μεγαλύτερο από το 0, επιστρέφεται ατόφιο αλλιώς επιστρέφεται το αρνητικό του.

Τα macros διαβάζονται από τον pre-processor ο οποίος αντικαθιστά το κυρίως σώμα τους σε οποιοδήποτε σημείο του κώδικα βλέπει το όνομα του macro. Το αποτέλεσμα, το περνάει μετά στον compiler. Είναι δηλαδή σαν να είχαμε γράψει εμείς με το χέρι τον κώδικα του macro σε όλα τα σημεία του προγράμματός μας, αντί για το όνομα του macro.

ΣΗΜΑΝΤΙΚΗ ΣΗΜΕΙΩΣΕΙΣ:
  • όταν ορίζετε macros με παραμέτρους, τότε στο κυρίως σώμα του macro την κάθε παράμετρο να τη βάζετε ΥΠΟΧΡΕΩΤΙΚΑ μέσα σε παρένθεση
  • όταν το κυρίως σώμα του macro περιέχει κώδικα, περικλείετέ το ΟΛΟΚΛΗΡΟ σε παρανθέσεις (υπάρχουν κι εξαιρέσεις, αλλά είναι σπάνιες)
  • ποτέ μην καλείτε macros περνώντας τους αυξανόμενη ή μειούμενη παράμετρο ( x++, x--, κλπ).
  • τα macros ΔΕΝ μπορούν να δεχτούν σαν παράμετρο συναρτήσεις
  • τα macros ΔΕΝ είναι συναρτήσεις
Παρόλο που μοιάζουν με συναρτήσεις, τα macros ΔΕΝ είναι συναρτήσεις! Πέρα από τα παραπάνω, τα macros δεν έχουν πρότυπα, δεν ελέγχουν τους τύπους των παραμέτρων τους, και είναι πολύ δυσκολότερο να τα αποσφαλματώσετε σε περίπτωση που παράγουν λάθη (είναι επιρρεπή σε λάθη στα χέρια αρχαρίων, ειδικά όταν έχουν πολύπλοκο κώδικα μέσα σε macros).

Το πλεονέκτημα των macros είναι πως εκτελούνται ταχύτατα συγκριτικά με τις συναρτήσεις, αλλά καταναλώνουν σημαντικά μεγαλύτερη μνήμη. Σε γενικές γραμμές, να τα χρησιμοποιείτε για απλά πράγματα και σύμφωνα με τις παραπάνω σημειώσεις, ώστε να μην έχετε κίνδυνο προβλημάτων.

Δείτε ένα χαρακτηριστικό παράδειγμα, λανθασμένης χρήσης του macro OUT_OF_BOUNDS...

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

#include <stdio.h>

#define OUT_OF_BOUNDS(x, low, high) ( (x) < (low) || (x) > (high) )
// ---------------------------------------------------------------------------
int main( void )
{
int x = 9;

if ( OUT_OF_BOUNDS(x++, 1, 10) )
puts("x out of bounds");
printf("x = %d\n", x);

return 0;
}

Ενώ θα περιμέναμε να μην μπει καθόλου στο if και να μας τυπώσει: "x = 10" αυτό όντως δεν μπαίνει στο if, αλλά τυπώνει "x = 11". Αυτό συμβαίνει διότι ο κώδικας του macro επεκτείνεται ως εξής:

Κώδικας: Επιλογή όλων
if ( ( (x++) < (1) || (x++) > (10) )
δηλαδή αυξάνει 2 φορές το x!

Χρειάζεται λοιπόν προσοχή, οπότε κρατήστε τα πράγματα όσο πιο απλά μπορείτε και βεβαιωθείτε πως ακολουθείτε τις σημειώσεις που αναγράφω πιο πάνω.

Τέλος, τα ονόματα των macros (με ή χωρίς παραμέτρους) συνηθίζεται να γράφονται με ΚΕΦΑΛΑΙΑ γράμματα, για να ξεχωρίζουν αμέσως!

ENUM (Τύποι Απαρίθμησης)

Το λεγόμενο enumerated type στη C είναι ένας εναλλακτικός τρόπος του #define (macros) για να ορίζουμε σταθερές. Πολλοί μάλιστα το προτιμούν γιατί τα enum μπορούν να έχουν scope (π.χ. αν οριστούν τοπικά μέσα σε μια συνάρτηση, τότε έχουμε πρόσβαση σε αυτά μόνο μέσα στη συνάρτηση). Αντίθετα τα macros ορίζονται έξω από όλες τις συναρτήσεις και το scope τους είναι όλες οι συναρτήσεις του πηγαίου αρχείου.

Ορίστε ένα παράδειγμα ορισμού του enumerated type colors:

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

int main ( void )
{
enum colors { RED, GREEN, BLUE }; // ορισμός τύπου απαρίθμησης: colors
enum colors xrwma; // ορισμός μεταβλητής: xrwma (που είναι τύπου: enum colors)
...
switch ( xrwma )
{
case RED:
...
break;
case GREEN:
...
break;
case BLUE:
...
break;
default:
puts("Δεν υπάρχει τέτοιο χρώμα");
break;
}

return 0;
}

Αν δεν ορίσουμε συγκεκριμένες τιμές για την κάθε σταθερά μέσα στο enum τότε ξεκινάνε από το 0 στην πρώτη και αυξάνουν κατά 1 την κάθε επόμενη. Μπορούμε όμως να τους βάλουμε ότι τιμές θέλουμε. Δείτε το παρακάτω παράδειγμα:

Κώδικας: Επιλογή όλων
enum colors { RED=1, GREEN, BLUE=10, BROWN };
Εδώ το GREEN ισούται με 2 και το BROWN με 11.

Αν θέλουμε μπορούμε να ορίσουμε στην ίδια γραμμή και το enumerated type και μεταβλητές που θα είναι αυτού του τύπου.

Π.χ.

Κώδικας: Επιλογή όλων
enum colors { NOCOLOR, RED, GREEN, BLUE, BROWN } xrwma, xrwmata[10];
το xrwmata[10] είναι πίνακας με θέσεις για 10 στοιχεία τύπου enum colors, και το xrwma είναι μια μεταβλητή τύπου enum colors.

Σε αντίθεση με άλλες γλώσσες (όπως π.χ. την Pascal) και κατά την προσφιλή της συνήθεια να είναι πολύ χαλαρή στο έλεγχο των τύπων, η C δεν διενεργεί ελέγχους για τα αν μια μεταβλητή τύπου enum φιλοξενεί τιμή που δεν υπάρχει μέσα στον ορισμό του enum. Οπότε για παράδειγμα αν γράψετε: xrwma = -1 ο compiler δεν πρόκειται να παραπονεθεί.

Βασικά τα enum types έχουν μέσα τους απλούς int. Πάντως, επειδή είναι απλές σταθερές, είναι καλό τα ονόματά τους να τα ορίζετε με ΚΕΦΑΛΑΙΑ γράμματα (όπως συνηθίζεται και στα απλά #define).

TYPEDEF ( Πρόσθετοι Τύποι )

Με το keyword typedef μπορούμε να ορίζουμε πρόσθετους τύπους δεδομένων στα προγράμματά μας (custom data types), πέρα δηλαδή από τους στάνταρ: char, int, float, κλπ, κλπ.

Στην ουσία το typdef απλώς δημιουργεί μια εναλλακτική ονομασία ενός υπάρχοντος τύπου. Αν για παράδειγμα αντί για int εμείς θέλουμε να γράφουμε integer, τότε μπορούμε να ορίσουμε κάτι σαν το παρακάτω...

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

κι από εκεί και πέρα μπορούμε να χρησιμοποιούμε "integer" αντί για "int", χωρίς αυτό να σημαίνει πως δεν θα λειτουργεί και το "int" (θα λειτουργούν και τα δυο). Το συγκεκριμένο βέβαια παράδειγμα δεν έχει καν λόγο ύπαρξης, αλλά βοηθάει στο να καταλάβουμε τι κάνει το typedef.

Εκεί που το typdef χρησιμοποιείται κατά κόρον είναι όταν θέλουμε να ορίσουμε εναλλακτικές ονομασίες σε δικά μας enum, struct και union. Για struct και union δεν έχουμε μιλήσει ακόμα, αλλά δείτε το παρακάτω παράδειγμα το οποίο ορίζει έναν πρόσθετο τύπο Bool με πιθανές τιμές FALSE (0) και TRUE (1)...

Κώδικας: Επιλογή όλων
typedef enum { FALSE=0, TRUE } Bool; // ισοδυναμεί με: typedef enum { FALSE, TRUE } Bool;

Σημειώστε πως όταν υπάρχει typedef μπροστά, τότε το Bool που ακολουθεί το άγκιστρο κλεισίματος δεν ορίζει μεταβλητή ( όπως οι xrwma και xrwma[10] στο παράδειγμα του enum πιο πάνω ) αλλά ορίζει το όνομα του δικού μας πρόσθετου τύπου. Για αυτό ακριβώς και δεν δώσαμε ονομασία στο enum πριν από το άγκιστρο ανοίγματος.

Θα μπορούσαμε όμως...
Κώδικας: Επιλογή όλων
typedef enum bool { FALSE, TRUE } Bool;

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

enum bool { FALSE, TRUE };
typedef enum bool Bool;

Με οποιοδήποτε από τα παραπάνω μπορούμε πλέον να έχουμε μεταβλητές τύπου Bool και να τις συγκρίνουμε ή να τους εκχωρούμε τιμές FALSE και TRUE.

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

#include <stdio.h>

typedef enum { FALSE=0, TRUE } Bool;

// ---------------------------------------------------------------------------
int main( void )
{
Bool flag;
int x = 10;

flag = (x == 20); // εδώ το flag παίρνει την τιμή FALSE (δηλαδή 0) γιατί το x ΔΕΝ ισούται με 20
printf("flag = %d\n", flag);

flag = (x != 20); // εδώ το flag παίρνει την τιμή TRUE (δηλαδή 1) γιατί το x όντως ΔΙΑΦΕΡΕΙ από το 20
printf("flag = %d\n", flag);

return 0;
}


Το παράδειγμα που δώσαμε με τα χρώματα στην ενότητα του ENUM μπορεί τώρα να γραφτεί και ως εξής:

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

int main ( void )
{
typedef enum { RED, GREEN, BLUE } Colors;
Colors xrwma;
...
switch ( xrwma )
{
case RED:
...
break;
case GREEN:
...
break;
case BLUE:
...
break;
default:
puts("Δεν υπάρχει τέτοιο χρώμα");
break;
}

return 0;
}


Τα ονόματα των πρόσθετων τύπων δεδομένων συνηθίζεται να τα γράφουμε με ΚΕΦΑΛΑΙΟ ΤΟ ΠΡΩΤΟ ΓΡΑΜΜΑ ή αν αποτελείται από 2 ή περισσότερες λέξεις, τότε με κεφαλαίο το 1ο γράμμα της κάθε λέξης (π.χ. LangCode, MsgPos... για να δανειστώ 2 πρόσθετους τύπους από τον τελευταίο κώδικα του guessing game).

Πιστεύω πως και με τα παραπάνω, γίνεται πια πολύ πιο κατανοητός ο τελευταίος κώδικας του Guessing Game, στον οποίο πρόσθεσα μερικά σχόλια ακόμα και τον ανέβασα στο ideone.com: http://ideone.com/OlB9v

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

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

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