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

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

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

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

Δημοσίευσηαπό Star_Light » 14 Φεβ 2012, 22:25

HACKER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Γνώσεις ⇛ 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 » 15 Φεβ 2012, 03:31

migf1 μπορεις να δώσεις ένα παράδειγμα string pointer????

Αν εχω καταλαβει καλα απο ολα οσα εχω διαβασει γιατι σαν να ξανασκάλωσα (τα άτιμα πάντως μπορει να σε μπερδέψουνε για πλάκα έτσι? )

Κώδικας: Επιλογή όλων
char s1[SIZE]={'\0'};


ας πούμε εδω το s1 ειναι ένα string δηλαδη ένας δείκτης στο 1ο στοιχείο αυτου του πίνακα χαρακτήρων.
Το περνάς σαν δείκτη σε char λοιπον μέσα στην συνάρτηση αλλα δεν μπορεις σε καμία περιπτωση να το αποκαλέσεις
δείκτη σε string γιατι τοτε θα επρεπε να ειναι διπλος?!

* Μου έχει μεινει μια συνάρτηση ακομη στο swap των strings. Ολα τα άλλα οκ!
Τελευταία επεξεργασία από Star_Light και 15 Φεβ 2012, 03:32, έχει επεξεργασθεί 1 φορά/ες συνολικά
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 15 Φεβ 2012, 03:31

Σας έγραψα κώδικα για σκέτο τον Vigenere, χωρίς να χρησιμοποιώ δομές, για να σας είναι πιο απλό να το παρακολουθήσετε. Πάλι όμως χρησιμοποιεί δείκτες και strings.

http://ideone.com/SvFRR

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

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

Δημοσίευσηαπό Star_Light » 15 Φεβ 2012, 03:33

migf1 έγραψε:Σας έγραψα κώδικα για σκέτο τον Vigenere, χωρίς να χρησιμοποιώ δομές, για να σας είναι πιο απλό να το παρακολουθήσετε. Πάλι όμως χρησιμοποιεί δείκτες και strings.

http://ideone.com/SvFRR

ΥΓ. Είμαι πολύ κουρασμένος τώρα για επεξηγήσεις, από αύριο πάλι ;)


Οκ ρε συ κανενα προβλημα... Υπερ ευχαριστούμε. Καλη ξεκουραση να εχεις
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 15 Φεβ 2012, 03:33

Star_Light έγραψε:migf1 μπορεις να δώσεις ένα παράδειγμα string pointer????

Αν εχω καταλαβει καλα απο ολα οσα εχω διαβασει γιατι σαν να ξανασκάλωσα (τα άτιμα πάντως μπορει να σε μπερδέψουνε για πλάκα έτσι? )

Κώδικας: Επιλογή όλων
char s1[SIZE]={'\0'};


ας πούμε εδω το s1 ειναι ένα string δηλαδη ένας δείκτης στο 1ο στοιχείο αυτου του πίνακα χαρακτήρων.
Το περνάς σαν δείκτη σε char λοιπον μέσα στην συνάρτηση αλλα δεν μπορεις σε καμία περιπτωση να το αποκαλέσεις
δείκτη σε string γιατι τοτε θα επρεπε να ειναι διπλος?!

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

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

Δημοσίευσηαπό Star_Light » 15 Φεβ 2012, 03:36

Τέλεια ! Ευχαριστώ. Μια μέρα που θα έχω χρονο θα μπω να ψάξω και τις 200 σελίδες και μετα θα ενημερώσω τον clepto να βάλει περιεχόμενα σε αυτο το θρεντ πχ -> ΣΕΛ . 80 - 100 συζητήσεις για τα strings και συναρτήσεις χειρισμού τους.

ΣΕΛ. 190 -> swap πινάκων ...

ΣΕΛ. 196 ... ΚΡΥΠΤΟΓΡΑΦΗΣΕΙΣ ... κώδικες Καισαρα - Vigenere για να έχουμε ευκολο ευρετήριο και στο μέλλον. Ολοι μας

Καληνυχτα
Γνώσεις ⇛ 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 » 15 Φεβ 2012, 20:51

Btw εγω εχω κολλήσει για τα καλά στο swap 2 strings manually.... ΜΟυ χει σπάσει τα ούμπαλα .Τι με δεικτες το κανω
τι με πίνακες.... με εχει μπερδεψει.

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

void swap( char s1[SIZE] , char s2[SIZE])
{
char tmp[SIZE];
int i;

if( !s1 && !s2)
return ;

while( s1[i] && s2[i] != '\0' )

{
tmp[i] = s1[i];
s1[i] = s2[i];
s2[i] = tmp[i];

i++;
}

printf("%s" , s1);
printf("%s" , s2);

return ;
}


Αυτη συνάρτηση δουλεύει καλα για μέχρι και έναν χαρακτήρα διαφορά στα 2 strings... Αν πχ το Β ειναι κατα 2 χαρακτήρες μεγαλύτερο αρχίζουν
τα παρατράγουδα. :/ νομιζω το

Κώδικας: Επιλογή όλων
if( !s1 && !s2)
return ;


για την έκδοση των πινάκων δεν κάνει κατι.
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 15 Φεβ 2012, 21:24

Μην παιδεύεσαι manually...

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

int s_swap( char **s1, char **s2 )
{
char *temp = NULL;

if ( !s1 || !s2 )
return 0; /* FALSE */

temp = *s1;
*s1 = *s2;
*s2 = temp;

return 1; /* TRUE */
}

int main( void )
{
char *s1 = "str1long";
char *s2 = "str2";

puts( s1 );
puts( s2 );
s_swap( (char **)&s1, (char **)&s2 );
puts( s1 );
puts( s2 );

return 0;
}


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

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

Δημοσίευσηαπό migf1 » 15 Φεβ 2012, 21:33

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

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

Δημοσίευσηαπό Star_Light » 15 Φεβ 2012, 21:49

Δηλαδη αυτο που ηθελα να κάνω δεν γινοταν με απλούς δείκτες? Πρεπει να χρησιμοποιήσω διπλους?

Πχ ο κωδικας που σου εδωσα παραπανω έχει το εξής θέμα :

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


Name : Kwstas
Subname : Papagewrgopoulos
Πληκτρολογήστε 1 ή 2 για εκτύπωση σειράς Name -> Subname ή αντίστροφης σειράς Subname -> Name : 2
PapagewKwstas
rgopoulos
* END *
Γνώσεις ⇛ 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
Εκτύπωση

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

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