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

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

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

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

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

stamatiou έγραψε:
Δηλαδή το πρόγραμμα θα πρέπει να ζητά έναν int x και εγώ να δεσμέυω χώρο για x chars;


Ναι βασικά επειδη ειχε δημιουργηθει εξαρχης προβλημα με την scanf ο migf1 μου υπενθύμισε
να διαβάσω την είσοδο (δηλαδή το μήκος του string που θέλω να δεσμευτεί και που θα δινει ο χρήστης) με την fgets
και μετα να μετατρέπεται σε αριθμό με την atoi.

Το int x που λες εσυ μαλλον ειναι το αντίστοιχο int len που κάναμε και εμείς στις ασκήσεις. Ακριβως αυτο το πραγμα
ειναι η δυναμική δέσμευση μνήμης και φαινεται αλλα και ειναι πολυ καλη και ωραια τεχνικη ;)
Γνώσεις ⇛ 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, 21:10

btw παω να κάνω τωρα την τελευταια άσκηση που έβαλε ο migf1 με την realloc
αν θες ξανα την εκφώνηση την έχω :D
Γνώσεις ⇛ 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, 21:43

Κάτι προσπάθησα να κάνω: http://ideone.com/l0NbJ
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, 22:08

stamatiou έγραψε:Κάτι προσπάθησα να κάνω: http://ideone.com/l0NbJ


Δεν νομιζω οτι ειναι αυτη η λυση της ασκησης ρε συ :(
Θα σε σταματάει στο len-1 θα ρωτάει το χρήστη για επόμενους χαρακτήρες θα τους παίρνει θα κάνει ξανα realloc
και ολο αυτό μέχρι να δοθεί το ΕΝΤΕR.

Απο οσο φαντάζομαι θα ειναι κάτι σε στυλ :

Κώδικας: Επιλογή όλων
Give length : 5
Give string: Kostas


στο Kosta σε σταματάει (μιας και αν σε σταματούσε στο Kostas θα ήταν ηδη πολυ αργά μιας και θα ειχε μπει ο μηδενικος και αρα η συμβολοσειρα θα ειχε τερματισει) και θα σου λεει :

Κώδικας: Επιλογή όλων
Give the extra length: 9
Give string: sGewrgiou


Και στο ο του παραπάνω πάλι θα κόβεται και θα σε ξαναρωτάει το ιδιο και καθε φορα θα εκχωρεί με την realloc....

και ολη αυτη η δουλεια μέχρι να δώσεις ENTER.

Η ασκηση δεν ειναι δυσκολη το θεμα ειναι πως θα την καταφερουμε στην C.
Γνώσεις ⇛ 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, 23:36

θα σας το περιγράψω προφορικά, στην απλή μορφή του, και κάντε το εσείς κώδικα ;

Θα ορίσετε ένα σταθερό μέγεθος μνήμης, π.χ. 64 bytes, και αρχικά θα δεσμεύσετε τόση μνήμη για το c-string. Κατόπιν θα αρχίσετε να διαβάζετε χαρακτήρες από την κύρια είσοδο και θα τους βάζετε μέσα στο c-string. Μόλις ο χρήστης φτάσει στον 63ο χαρακτήρα, τότε αυτόματα θα δεσμεύεται άλλους 64 (δηλαδή σύνολο 64+64 = 128). Άμα ο χρήστης φτάσει στον 127ο χαρακτήρα, θα δεσμεύσετε αυτόματα άλλους 64, και πάει λέγοντας, έως ότου ο χρήστης πατήσεις ENTER.

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

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

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

migf1 έγραψε:θα σας το περιγράψω προφορικά, στην απλή μορφή του, και κάντε το εσείς κώδικα ;

Θα ορίσετε ένα σταθερό μέγεθος μνήμης, π.χ. 64 bytes, και αρχικά θα δεσμεύσετε τόση μνήμη για το c-string. Κατόπιν θα αρχίσετε να διαβάζετε χαρακτήρες από την κύρια είσοδο και θα τους βάζετε μέσα στο c-string. Μόλις ο χρήστης φτάσει στον 63ο χαρακτήρα, τότε αυτόματα θα δεσμεύεται άλλους 64 (δηλαδή σύνολο 64+64 = 128). Άμα ο χρήστης φτάσει στον 127ο χαρακτήρα, θα δεσμεύσετε αυτόματα άλλους 64, και πάει λέγοντας, έως ότου ο χρήστης πατήσεις ENTER.

ΥΓ. Ο κώδικας θα πρέπει να λαμβάνει υπόψη του και τον μηδενικό χαρακτήρα που θα πρέπει να μπει στο τέλος του c-string.

Και πώς θα δίνει είσοδο χωρίς να πατησει 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

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

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

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

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

migf1 έγραψε:Τι εννοείς; Αφού το γράφω πως η είσοδος θα σταματάει μόλις πατήσει ENTER.

Δηλαδή γράφει 65 χαρακτήρες και πατάει enter και μετά δεσμεύω άλλους 64;
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

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

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

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

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

migf1 έγραψε:θα σας το περιγράψω προφορικά, στην απλή μορφή του, και κάντε το εσείς κώδικα ;

Θα ορίσετε ένα σταθερό μέγεθος μνήμης, π.χ. 64 bytes, και αρχικά θα δεσμεύσετε τόση μνήμη για το c-string. Κατόπιν θα αρχίσετε να διαβάζετε χαρακτήρες από την κύρια είσοδο και θα τους βάζετε μέσα στο c-string. Μόλις ο χρήστης φτάσει στον 63ο χαρακτήρα, τότε αυτόματα θα δεσμεύεται άλλους 64 (δηλαδή σύνολο 64+64 = 128). Άμα ο χρήστης φτάσει στον 127ο χαρακτήρα, θα δεσμεύσετε αυτόματα άλλους 64, και πάει λέγοντας, έως ότου ο χρήστης πατήσεις ENTER.

ΥΓ. Ο κώδικας θα πρέπει να λαμβάνει υπόψη του και τον μηδενικό χαρακτήρα που θα πρέπει να μπει στο τέλος του c-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
Εκτύπωση

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

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

cron