ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

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

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 27 Ιουν 2011, 22:30

Όχι δεν είναι λόγω έλλειψης βιβλιοθηκών. Ακόμα και κοινές βιβλιοθήκες να υπάρχουν στις 2 πλατφόρμες σε επίπεδο κώδικα (όπως υπάρχουν, π.χ. το OpenGL) θα πρέπει στην κάθε πλατφόρμα να υπάρχουν τα binary files της βιβλιοθήκης, τα οποία είναι machine-dependent. Και φυσικά να ξαναγίνει compile το πρόγραμμα που τις χρησιμοποιεί.

Π.χ. το GLUT είναι μια open source βιβλιοθήκη από συναρτήσεις που απλοποιεί τη χρήση του OpenGL API. Για να το χρησιμοποιήσεις είτε θα πρέπει να κάνεις compile του κώδικά της πριν τη χρησιμοποιήσεις στα προγράμματά σου, είτε να κατεβάζεις απευθείας τα pre-compiled binary αρχεία της για την πλατφόρμα που σε ενδιαφέρει.

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

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 27 Ιουν 2011, 22:39

migf1 έγραψε:Όχι δεν είναι λόγω έλλειψης βιβλιοθηκών. Ακόμα και κοινές βιβλιοθήκες να υπάρχουν στις 2 πλατφόρμες σε επίπεδο κώδικα (όπως υπάρχουν, π.χ. το OpenGL) θα πρέπει στην κάθε πλατφόρμα να υπάρχουν τα binary files της βιβλιοθήκης, τα οποία είναι machine-dependent. Και φυσικά να ξαναγίνει compile το πρόγραμμα που τις χρησιμοποιεί.

Π.χ. το GLUT είναι μια open source βιβλιοθήκη από συναρτήσεις που απλοποιεί τη χρήση του OpenGL API. Για να το χρησιμοποιήσεις είτε θα πρέπει να κάνεις compile του κώδικά της πριν τη χρησιμοποιήσεις στα προγράμματά σου, είτε να κατεβάζεις απευθείας τα pre-compiled binary αρχεία της για την πλατφόρμα που σε ενδιαφέρει.

Άλλο παράδειγμα, το Glade μπορείς επίσης να το σκεφτείς ως βιβλιοθήκη του GTK+ API, κλπ


Eιχα την εντυπωση πως για να δουλεψει σωστα ενα προγραμμα θα πρεπει να έχουν εγκατασταθει μαζι με αυτο και οι απαραιτητες εξαρτησεις.
Φανταζομαι δεν σχετιζονται οι εξαρτησεις με τις βιβλιοθηκες ε????
Γνώσεις ⇛ 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: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 27 Ιουν 2011, 22:49

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

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 27 Ιουν 2011, 23:04

migf1 έγραψε:Όχι δεν είναι λόγω έλλειψης βιβλιοθηκών. Ακόμα και κοινές βιβλιοθήκες να υπάρχουν στις 2 πλατφόρμες σε επίπεδο κώδικα (όπως υπάρχουν, π.χ. το OpenGL) θα πρέπει στην κάθε πλατφόρμα να υπάρχουν τα binary files της βιβλιοθήκης, τα οποία είναι machine-dependent. Και φυσικά να ξαναγίνει compile το πρόγραμμα που τις χρησιμοποιεί.

Π.χ. το GLUT είναι μια open source βιβλιοθήκη από συναρτήσεις που απλοποιεί τη χρήση του OpenGL API. Για να το χρησιμοποιήσεις είτε θα πρέπει να κάνεις compile του κώδικά της πριν τη χρησιμοποιήσεις στα προγράμματά σου, είτε να κατεβάζεις απευθείας τα pre-compiled binary αρχεία της για την πλατφόρμα που σε ενδιαφέρει.

Άλλο παράδειγμα, το Glade μπορείς επίσης να το σκεφτείς ως βιβλιοθήκη του GTK+ API, κλπ


Δηλαδη υπαρχουν μεν κοινες βιβλιοθηκες και στα 2 συστηματα.... Αλλα στο ενα συστημα μπορει να μην έχουν μεταγλωτιστει? Δεν σε πιανω.....
Γνώσεις ⇛ 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: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 27 Ιουν 2011, 23:23

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

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 27 Ιουν 2011, 23:37

Πολυ ωραια! Ναι οκ πρεπει να διαβασω μονος μου! Στο μεταξυ καταφερα να βγαλω την πρωτη μου συνδεδεμενη λιστα (τελειως μονος μου) εννοω απο το 0 ξεκινωντας απο το #include<stdio.h> καλα φυσικα αμα δεν ειχα την δικη σου βοηθεια ακομη θα εψαχνα!!!

ιδου σιγα σιγα και βημα βημα ο νεος κωδικας!

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


#include<stdio.h>

typedef struct
{
int id;
char name[7];
struct customer *next;

} customer;

int main ()
{
int i;
customer array[3]={{1,"Kwstas"},{2,"Nikos"},{3,"Stelios"}};
customer *head , *new;
customer *next;
head=NULL;


for(i=0; i<3; i++)
{
new=(struct customer *)malloc(sizeof(customer));
new->next=head;
head=new;
}


for(new=array; new<&array[3]; new++)
printf("%d %u %s\n", new->id , new->next , new->name);

return 0;
}



Γιατι ομως σαν εξοδο μου βγαζει

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


1. Ο Kwstas
2 O Nikos
3 O Stelios



lol! Δεν θελω αρθρο.

Και κατι τελευταιο... το new->next=head;
ειναι δείκτης σε δείκτη????
Γνώσεις ⇛ 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: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 28 Ιουν 2011, 00:05

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

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

#include<stdio.h>

typedef struct
{
int id;
char name[7];
struct customer *next;
} customer;

int main ()
{
int i;
customer array[ 3 ] = { {1,"Kwstas"}, {2,"Nikos"}, {3,"Stelios"} };
/*
customer *head , *new;
// customer *next; // unused
head = NULL;

for(i=0; i<3; i++)
{
new = (struct customer *) malloc( sizeof(customer) );
new->next = head;
head = new;
}
*/
customer *new;
for (new=array; new < &array[3]; new++)
printf("%d %u %s\n", new->id , new->next , new->name);

return 0;
}



Το "δείκτης σε δείκτης" σαν ορολογία το χρησιμοποιούμε για διπλούς δείκτες (π.χ.: customer **pp). To new->next = head είναι 2 μεταβλητές μονών δεικτών (customer *), που τους βάζεις να δείχνουν στο ίδιο μέρος ("κουτί") της μνήμης.
Τελευταία επεξεργασία από migf1 και 28 Ιουν 2011, 00:09, έχει επεξεργασθεί 1 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 28 Ιουν 2011, 00:07

Α, και btw, εφόσον τον 3ο πελάτη τον αρχικοποιείς με όνομα "Stelios" που έχει 7 γράμματα, το name[7] κάντο name[8] στον ορισμό του struct customer, για να έχει χώρο και για τον κενό χαρακτήρα στο τέλος του "Stelios".
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό migf1 » 28 Ιουν 2011, 00:45

Αν ξέρεις Αγγλικά μπορείς να διαβάσεις εδώ: http://cslibrary.stanford.edu/103/ (σε μορφή pdf) το μάθημα του Stanford University για τις λίστες. Είναι πλήρως αναλυτικό (ίσως κι εκνευριστικά αναλυτικό :P), με παραδείγματα κώδικα, και με υλοποίηση έξτρα συναρτήσεων.

Δεν χρειάζεσαι πίνακα για να υλοποιήσεις μια λίστα.

Ένα άλλο καλό tutorial, πιο συνοπτικό είναι αυτό εδώ: http://www.cprogramming.com/tutorial/lesson15.html (είναι για C++ αλλά το 99% του κώδικα που χρησιμοποιεί είναι ίδιο με της C).

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

Οπότε δεν θέλει βιασύνες και απογοητεύσεις. Με καλή διάθεση και υπομονή και λίγη εξάσκηση, θα σου φαίνονται μετά πολύ πιο εύκολοι :)

Εννοείται πως ότι χρειαστείς ρώτα, ε;

Οι δομές δεδομένων (structs στην C, records στην Pascal, κλπ) της στοίβας και της απλά συνδεδεμένης λίστας, είναι μεν οι απλούστερες από τις σύνθετες δομές, αυτό όμως δεν σημαίνει πως είναι γενικώς εύκολες. Κυρίως γιατί πριν από όλα τεστάρουν το κατά πόσο έχει κατανοήσει κανείς τους δείκτες, και "χτίζουν" πάνω σε αυτή την προϋπόθεση.

Αφού τα καταφέρεις με την απλά συνδεδεμένη λίστα (single linked list) μπορείς μετά να πας και στην στοίβα (stack). Μπορεί να υλοποιηθεί είτε ως λίστα (με αποκλειστική χρήση δεικτών δηλαδή, με κόμβους κλπ) είτε ως πίνακας με έναν εξωτερικό δείκτη που δείχνει στην εκάστοτε κορυφή της στοίβας.

Και οι 2 αυτές δομές (λίστα και στοίβα) χρησιμοποιούνται κατά κόρον (είτε στις απλές τους μορφές, είτε σε πιο πολύπλοκες παραλλαγές τους).

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

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 28 Ιουν 2011, 00:57

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

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

#include<stdio.h>

typedef struct
{
int id;
char name[7];
struct customer *next;
} customer;

int main ()
{
int i;
customer array[ 3 ] = { {1,"Kwstas"}, {2,"Nikos"}, {3,"Stelios"} };
/*
customer *head , *new;
// customer *next; // unused
head = NULL;

for(i=0; i<3; i++)
{
new = (struct customer *) malloc( sizeof(customer) );
new->next = head;
head = new;
}
*/
customer *new;
for (new=array; new < &array[3]; new++)
printf("%d %u %s\n", new->id , new->next , new->name);

return 0;
}



Το "δείκτης σε δείκτης" σαν ορολογία το χρησιμοποιούμε για διπλούς δείκτες (π.χ.: customer **pp). To new->next = head είναι 2 μεταβλητές μονών δεικτών (customer *), που τους βάζεις να δείχνουν στο ίδιο μέρος ("κουτί") της μνήμης.



Aρχικοποιω εναν πινακα οπου καθε στοιχειο του ειναι μια υλοποιηση της παραπανω δομης. Ετσι δεν ειναι???? To new->next = head είναι 2 μεταβλητές μονών δεικτών (customer *) μου λες αλλα εφοσον εχω δηλωσει 3 δεικτες ρε παιδι μου.... *next *head *new... αυτο δεν καταλαβαινω. Καθαρο μυαλο εχω απλα με απογοητευει καποιες φορες που θελω τοσο διαβασμα για να τα παρω.
Γνώσεις ⇛ 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
Εκτύπωση

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

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