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

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

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

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

Δημοσίευσηαπό migf1 » 19 Φεβ 2012, 16:44

Οκ :)

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

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

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

migf1 έγραψε:Οκ :)

Σε λιγάκι ανεβάζω πλήρη Vigenere, με προσθήκη κρυπτογράφησης αρχείων :)


Ok. Κοιτα αν θελει κανεις αλλος την λυση της ασκησης που έβαλες... ανεβασε την μεν αλλα σε spoiler.
Γνώσεις ⇛ 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 » 19 Φεβ 2012, 16:58

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

while(getchar()!='\n')
{

if( s[len-1] )
{

s = realloc( s , MAXLEN);

fgets( s , MAXLEN , stdin);
getchar();

puts(s);

len=strlen(s);

}
}


Η getchar ειναι μονο το προβλημα που μου τρωει εναν χαρακτηρα στην αρχη?
Αν την 1η δωσω το Kostas και το δεσμεύσει με την calloc μετα αυτο δινει 6 αρα παει στο 5 (εκει που ειναι κανονικα το s) και
δεσμευει για αλλους 64? οποτε το επομενο ειναι 69 αρα το len-1 εκει ειναι 68? Γιατι μου τρωει τον χαρακτηρα προσπαθω να καταλαβω
Γνώσεις ⇛ 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 » 19 Φεβ 2012, 17:05

Για αρχή, σταμάτα να χρησιμοποιείς την fgets(). Έπειτα, σκέψου τι κάνεις με εκείνο το...
Κώδικας: Επιλογή όλων

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

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

Δημοσίευσηαπό Star_Light » 19 Φεβ 2012, 17:07

Στο μεταξυ οπου και αν εβαλα το printf να ζηταει ενα string... μα εξω απο την while , μεσα και πανω ακριβως απο την if ...μεσα στην if και πανω ακριβως απο την realloc κατω απο την realloc.... γενικα πανω - κατω - αριστερα - δεξια - ευθεια - λοξα........

δεν μου το βγαζει οπως θελω και μου σπαει τα &&&%%%^%$%$%$$ (σε κρυπτογραφημενη μορφη... δεν θες να το αποκρυπτογραφησεις :lol: :lol: )

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

kostas@kostas-SSL:~/PROGRAMS$ ./exercise
Give the string: kostas
To string einai: kostas
alex
Give a string: To string einai: lex
Γνώσεις ⇛ 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 » 19 Φεβ 2012, 17:16

Ολοκληρωμένος ο Vigenere, τόσο για κείμενα από την κύρια είσοδο, όσο και για αρχεία κειμένου: http://ideone.com/B2tLV

Κάνει heavy-usage δεικτών αλλά και castings (τα περισσότερα είναι δηλωμένα ως (unsigned char) & (unsigned char *) κλπ οπότε τα κάνω cast σε (char) & (char *) κλπ όταν τα περνάω ως ορίσματα σε συναρτήσεις που δεν περιμένουν unsigned ).

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

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

Δημοσίευσηαπό stamatiou » 19 Φεβ 2012, 17:28

Δηλαδή ο χρήστης πατάει 65 χαρακτήρες χωρίς να έχει πατήσει το ENTER. Εγώ που θα ξέρω εφόσον οι fgets, η scanf και η getchar για να πάρουν είσοδο πρέπει οχρήστης να πατήσει ENTER
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 » 19 Φεβ 2012, 17:35

stamatiou έγραψε:Δηλαδή ο χρήστης πατάει 65 χαρακτήρες χωρίς να έχει πατήσει το ENTER. Εγώ που θα ξέρω εφόσον οι fgets, η scanf και η getchar για να πάρουν είσοδο πρέπει οχρήστης να πατήσει ENTER


'Απατη την βλέπω να πηγαινει και αυτη απο μεριας μου.
Γινεται χαμος με τις printf , με μπερδεψε τελειως και με αυτο που ειπε
με την getchar.... τεσπα ας την δωσει δεν ξερω αμα εχω ορεξη να ασχοληθω μαζι της αλλο

αμα δεν εχω μπροστα μου ενα τουτοριαλ να βλεπω τι ακριβως γινεται μεσα στο συστημα
δεν μπορω να κανω καμια τετοια ασκηση. Δεν μπορω να φανταστω καν πως ειναι αποθηκευμενο
μεσα το string , απο ποιο σημειο και μετα γινεται realloc πως εχω προσβαση σε αυτο το σημειο κτλπ κτλπ.
Γνώσεις ⇛ 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 » 19 Φεβ 2012, 19:38

Star_Light έγραψε:.... τεσπα ας την δωσει δεν ξερω αμα εχω ορεξη να ασχοληθω μαζι της αλλο...

Off topic:
Ενδεχομένως να αντηχεί "cool" όταν ισχυρίζεται κάποιος ότι ασχολείται με τον προγραμματισμό, και ακόμα πιο "cool" να ισχυρίζεται πως είναι προγραμματιστής, αλλά οι ισχυρισμοί απέχουν αιώνες από την πραγματικότητα .

Ο προγραμματισμός θέλει δίψα, αφοσίωση και... ούμπαλα. Δεν είναι καπρίτσιο της στιγμής για να ασχολούμαστε μόνο όταν έχουμε όρεξη, ούτε μαθαίνεται σε φόρουμ, σε chat rooms και σε tutorials. Μαθαίνεται με στρώσιμο κ...., με σύστημα, με προσπάθεια, με επιμονή, με υπομονή, με άααααααααααααααπειρο γράψιμο κώδικα κι επίσης με άαααααααααααααααααααααααπειρο διάβασμα κώδικα άλλων, από real-life εφαρμογές.

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

Σκληρό ίσως, αλλά πέρα για πέρα αληθές.


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

Ειλικρινά μου ακούγεται αδιανόητο να μη μπορείτε ούτε καν να διαβάσετε τους χαρακτήρες ενός string από την κύρια είσοδο και να τους μετράτε καθώς τους βάζετε μέσα στο string! Είναι ειλικρινά απίστευτο και δεν έχει απολύτως καμία σχέση με την realloc(), δεν έχει καν σχέση με δυναμική διαχείριση μνήμης.

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

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

Δημοσίευσηαπό stamatiou » 19 Φεβ 2012, 19:45

migf1 έγραψε:
Star_Light έγραψε:.... τεσπα ας την δωσει δεν ξερω αμα εχω ορεξη να ασχοληθω μαζι της αλλο...

Off topic:
Ενδεχομένως να αντηχεί "cool" όταν ισχυρίζεται κάποιος ότι ασχολείται με τον προγραμματισμό, και ακόμα πιο "cool" να ισχυρίζεται πως είναι προγραμματιστής, αλλά οι ισχυρισμοί απέχουν αιώνες από την πραγματικότητα .

Ο προγραμματισμός θέλει δίψα, αφοσίωση και... ούμπαλα. Δεν είναι καπρίτσιο της στιγμής για να ασχολούμαστε μόνο όταν έχουμε όρεξη, ούτε μαθαίνεται σε φόρουμ, σε chat rooms και σε tutorials. Μαθαίνεται με στρώσιμο κ...., με σύστημα, με προσπάθεια, με επιμονή, με υπομονή, με άααααααααααααααπειρο γράψιμο κώδικα κι επίσης με άαααααααααααααααααααααααπειρο διάβασμα κώδικα άλλων, από real-life εφαρμογές.

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

Σκληρό ίσως, αλλά πέρα για πέρα αληθές.


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

Ειλικρινά μου ακούγεται αδιανόητο να μη μπορείτε ούτε καν να διαβάσετε τους χαρακτήρες ενός string από την κύρια είσοδο και να τους μετράτε καθώς τους βάζετε μέσα στο string! Είναι ειλικρινά απίστευτο και δεν έχει απολύτως καμία σχέση με την realloc(), δεν έχει καν σχέση με δυναμική διαχείριση μνήμης.

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

Εντάξει να διαβάζουμε έναν έναν τους χαρακτήρες, αλλά για να γίνει αυτό δεν πρέπει να πατήσει ο χρήστης ENTER; Να γράψει το κείμενο των 65 χαρακτηρών και να πατήσει ENTER για τα διαβάσουμε με ένα loop με την getchar. Αυτό δε θέλουμε να κάνουμε;
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
Εκτύπωση

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

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

cron