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

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

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

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

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

Star_Light έγραψε:
...
Απλη μετατόπιση κανει ναι. Βασικα κάνει την εξής μετατόπιση .

Παίρνει κάθε φορα το υπόλοιπο της διαίρεσης του πλήθους των γραμματών του αλφαβητου με το άθροισμα του κλειδιού και του εκάστοτε χαρακτήρα την φορά στο αρχικό κειμενο το οποιο το λεμε plaintext.

Δηλαδη :

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


En = (p + k) mod 26


mod -> υπολοιπο διαίρεσης
(p+k) -> άθροισμα του κλειδιού και του εκάστοτε χαρακτήρα την φορά στο αρχικό κειμενο

26 για αγγλικο , 24 για ελληνικο αφλάβητο.

Έτσι είναι.

Ο τρόπος για να ανεξαρτητοποιήσετε το αλφάβητο από τα ASCII codes των γραμμάτων του είναι να δουλεύετε με τα indicies των γραμμάτων μέσα στο αλφάβητό σας, και όχι απευθείας με τα ASCII codes τους.

Δηλαδή, αν π.χ. έχουμε το αλφάβητο: "j*8Kl_-tW" και θέλουμε να κρυπτογραφήσουμε ας πούμε το K με μετατόπιση 2 χαρακτήρων, αντί να προσθέσουμε το 2 στο ASCII code του Κ το προσθέτουμε στο index του K (δηλαδή στη θέση που έχει μέσα στην αλφάβητο, που είναι η 3η μιας και οι πίνακες είναι πάντα zero-indexed). Οπότε ο χαρακτήρας που βρίσκεται στη θέση 3 (το Κ) θα αντικατασταθεί με τον χαρακτήρα που βρίσκεται στη θέση 3+2=5 (το _).

Δηλαδή αν ab το αλφάβητο, τότε η παραπάνω περιγραφή μεταφράζεται σε...
Κώδικας: Επιλογή όλων

int i, shiftby = 2;
ab[i] = ab[i+shiftby];
και προφανώς με ελέγχους με mod κλπ.

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

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

Δημοσίευσηαπό Star_Light » 18 Φεβ 2012, 16:58

@migf1 απο κεκτημένη ταχύτητα

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

if( s == NULL)
{
puts("Calloc failed");
return 0;
}


αν και το 0 δειχνει στο OS οτι ολα πηγαν καλα.

btw νομιζω πως η συνάρτηση δεν χρειάζεται σε αυτη τη περίπτωση αλλωστε μονη της η μνήμη "κοβει" τους περιττους χαρακτηρες.
Γνώσεις ⇛ 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 » 18 Φεβ 2012, 17:17

ή ακομα καλύτερα

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

enum { SUCCESS = 0 , FAIL}
.....
if( s == NULL)
{
puts("Calloc Failed");
return FAIL;
}


http://tldp.org/LDP/abs/html/exitcodes.html
Γνώσεις ⇛ 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 » 18 Φεβ 2012, 18:05

migf1 έγραψε:
Περιμένουμε κώδικα που να διαβάζει μέσα σε ένα c-string απροσδιόριστο πλήθος χαρακτήρων που θα πληκτρολογεί ο χρήστης στην κύρια είσοδο, ως 1η άσκηση για τη συνάρτηση realloc().


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

Δημοσίευσηαπό migf1 » 18 Φεβ 2012, 18:56

Star_Light έγραψε:
...Θα την δοκιμάσω αποψε. Το απροδιοριστο πλήθος χαρακτήρων ειναι που με μπερδευει λιγο.

Σου έχω εξηγήσει πριν από 1-2 μέρες πως θα το κάνεις.

έγραψε:Να φτιαξω κωδικα ο οποιος οπως ειναι τωρα απλα παιρνει το string που χει δωσει ο χρηστης και να τον ρωταει ποσο θελει να το επιμηκύνει?

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

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

Δημοσίευσηαπό migf1 » 18 Φεβ 2012, 18:58


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

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

Δημοσίευσηαπό Star_Light » 18 Φεβ 2012, 20:00

stamatiou έγραψε:Δοκίμασα να κάνω υλοποίηση και με τη συνάρτηση αλλά δεν ξέρω κατά πόσο είναι ο αλγόριθμος σωστός... :/
http://ideone.com/FPUnS


Βtw κατι που είδα τωρα! Ο Αλγόριθμος ειναι πάντα σωστος με την έννοια που το λες εσυ εννοεις τον κώδικα και οχι τον αλγόριθμο.
Θελω να πώ ειναι ηδη καλα ορισμένος και διαθεσιμος. Γιατι μπορει να μην ειναι πχ σωστος ως προς την αποδοση σκεψου πχ τον BUbble sort στην ταξινόμηση που ειναι ενας απο τους χειροτερους με τετραγωνικη πολυπλοκότητα ! Ο καθε αλγοριθμος
ειναι ανεξάρτητος της καθε γλώσσας. Εσυ εννοεις οτι ο κωδικας σου δεν ειναι σωστος.
Γνώσεις ⇛ 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

Δημοσίευσηαπό stamatiou » 18 Φεβ 2012, 20:06

Δηλαδη πρέπει να δίνει ο χρήστης ένα string και εμείς να κάνουμε δυναμική δέσμευση για την αποθήκευσή του;
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 18 Φεβ 2012, 20:10

stamatiou έγραψε:Δηλαδη πρέπει να δίνει ο χρήστης ένα string και εμείς να κάνουμε δυναμική δέσμευση για την αποθήκευσή του;


Δυναμική ειναι η αποθήκευση κατα το runtime . Ο χρήστης δινει ένα μήκος και εσύ με βάση αυτο το μήκος το αποθηκεύεις στη μνήμη καλώντας την calloc και βάζοντας ένα δείκτη (σε χαρακτήρα) να δείχνει αυτο το σημείο μεσα στην μνήμη .

http://www.cplusplus.com/reference/clib ... ib/calloc/

η calloc επιστρέφει δείκτη.
Γνώσεις ⇛ 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

Δημοσίευσηαπό stamatiou » 18 Φεβ 2012, 20:44

Star_Light έγραψε:
stamatiou έγραψε:Δηλαδη πρέπει να δίνει ο χρήστης ένα string και εμείς να κάνουμε δυναμική δέσμευση για την αποθήκευσή του;


Δυναμική ειναι η αποθήκευση κατα το runtime . Ο χρήστης δινει ένα μήκος και εσύ με βάση αυτο το μήκος το αποθηκεύεις στη μνήμη καλώντας την calloc και βάζοντας ένα δείκτη (σε χαρακτήρα) να δείχνει αυτο το σημείο μεσα στην μνήμη .

http://www.cplusplus.com/reference/clib ... ib/calloc/

η calloc επιστρέφει δείκτη.

Δηλαδή το πρόγραμμα θα πρέπει να ζητά έναν int x και εγώ να δεσμέυω χώρο για x chars;
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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