Παραδείγματα & Ασκήσεις στην C

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

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό migf1 » 04 Ιούλ 2011, 20:53

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

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό linuxs » 04 Ιούλ 2011, 21:00

migf1 έγραψε:Ώπα άκυρη η απάντησή μου! Αυτό που λες κάνουμε (νόμιζα πως ρώταγες γιατί δεν εναλλάσσουμε αυτά που δείχνουν οι δείκτες)
Ένα λεπτό γιατί μπερδεύτηκα και εγώ τώρα...έχουμε 2 δείκτες και δείχνουν σε 2 αντικείμενα. Η μια σκέψη είναι να αλλάξουμε τα αντικείμενα μεταξύ τους(το οποίο είναι και λάθος! :/ :?? ) και αυτό που κάνεις είναι εναλλαγή στους δείκτες δηλαδή τα αντικείμενα παραμένουν στην ίδια θέση μνήμης αλλα ο 1ος δείκτης δείχνει στο 2ο αντικείμενο και το ανάποδο. Είμαι σωστός? :/...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό migf1 » 04 Ιούλ 2011, 21:04

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

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό linuxs » 04 Ιούλ 2011, 21:13

...ωραία! Αλλα γιατί τόσο μεγάλο πρόγραμμα? :/ Υπόψην, έχω κάποιες δουλίτσες τώρα αργότερα θα τον κοιτάξω με λεπτομέρια! ;)
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό migf1 » 04 Ιούλ 2011, 21:24

Η swap_pointers() είναι το βασικό.

Στη main() την χρησιμοποιώ σε 4 διαφορετικούς τύπους δεικτών, αφενός για να δείξω πως ο κώδικας της swap_pointers() δουλεύει απαράλλαχτος για οποιονδήποτε τύπο, ακόμα και πρόσθετους τύπους (όπως ο struct test που έχω στην main() ) και αφετέρου για να δείξω τα type castings σε (void **).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό linuxs » 04 Ιούλ 2011, 21:33

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

swap_pointers( (void **) &px, (void **) &py );

θα επιμείνω στο παραπάνω! Το void ** τι είναι? Απλό casting κάνεις? :/ Νομίζω πως δεν έχω κάνει casting με void...γιατί δεν περνάς απλά την διεύθυνση? :/
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό linuxs » 04 Ιούλ 2011, 21:42

linuxs έγραψε:
Κώδικας: Επιλογή όλων

swap_pointers( (void **) &px, (void **) &py );

θα επιμείνω στο παραπάνω! Το void ** τι είναι? Απλό casting κάνεις? :/ Νομίζω πως δεν έχω κάνει casting με void...γιατί δεν περνάς απλά την διεύθυνση? :/


EDIT: Οκ μάλλον void χρησιμοποιείς για να χρησιμοποιείς πολλούς τύπους δεδομένων. Η θεωρία μου είναι η παρακάτω και πες μου που κάνω λάθος(αν). Απο την main περνάμε διευθύνσεις όπως συνήθως(δεν καταλαβαίνω το void **) μετά στην συνάρτηση το *x είναι η τιμή του x που είναι διεύθυνση...μπλά μπλά μπλά...i got it! thx ;) Το μόνο κόλλημα μου είναι στο void **
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό migf1 » 04 Ιούλ 2011, 22:26

Τώρα όμως δεν σε κατάλαβα εγώ :lol:

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

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό migf1 » 05 Ιούλ 2011, 00:29

Βρήκα στο νετ το παρακάτω καταπληκτικό macro που δείχνει να κάνει swap ΟΤΙΔΗΠΟΤΕ ! Δεν μετακινεί δείκτες, αντιγράφει απευθείας τα περιεχόμενα των μεταβλητών x και y, ότι και να είναι: απλές μεταβλητές, δείκτες, struct, πίνακες, τα πάντα!

Το καλείτε απλά με το όνομα των 2 μεταβλητών, χωρίς & μπροστά. Με ότι κι αν το δοκίμασα μέχρι στιγμής, δείχνει να μη "μασάει" πουθενά. Από άποψη ταχύτητας βέβαια δεν είναι optimal, αλλά είναι φοβερή φάση!

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

#define swap(x,y) do {\
unsigned char swap_temp[sizeof(x) == sizeof(y) ? (signed)sizeof(x) : -1];\
memcpy( swap_temp, &(y), sizeof(x) );\
memcpy( &(y), &(x), sizeof(x) );\
memcpy( &(x), swap_temp, sizeof(x) );\
} while(0)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό Star_Light » 05 Ιούλ 2011, 05:39

ας προσθεσω και εγω τον οβολον μου :D
αν και δεν ειναι τιποτα το φοβερο!!!


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


#include <stdio.h>
int main()
{
FILE *ptr; /*the file pointer*/
char *str="links.txt";

ptr=fopen(str,"a"); /*EPISTROFI deikti tipou FILE apo tin fopen
enw an sumvei la8os sti diarkeia tis diadikasias anoigmatos enos arxeiou 8a epistrepsei
enan deikti NULL diladi enan deikti pou deixnei se mi egkura dedomena */

fprintf(ptr,"The end of file");
fclose(ptr);

return 0;

}



ειναι απλα μια προσαρτηση στο τελος ενος αρχειου!
Γνώσεις ⇛ 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

cron