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

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

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

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

Δημοσίευσηαπό Qdata » 08 Αύγ 2011, 11:41

migf1 έγραψε:Μα είναι αναγραμματισμός :lol:

ΥΓ. Εν τω μεταξύ είχα κι εγώ λάθος στη 2η λύση με τον πίνακα, το διόρθωσα.


Όπ, μισό λεπτό.Φαίνεται εγώ έλυσα άλλη άσκηση. :D .Όταν έλεγες αναγραμματισμό κατάλαβα κάτι σαν αυτό:
abcd - αναγραμματισμός: dcba
Δηλαδή το a πάει στο τέλος, b προ τελευταίο, c δεύτερο, d πρώτο.
Λάθος μου!Συγνώμη! :oops:
Τώρα κατάλαβα την άσκηση.Πάω να την λύσω σωστά αυτή την φορά. :)
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 08 Αύγ 2011, 11:55

Qdata έγραψε:
migf1 έγραψε:Μα είναι αναγραμματισμός :lol:

ΥΓ. Εν τω μεταξύ είχα κι εγώ λάθος στη 2η λύση με τον πίνακα, το διόρθωσα.


Όπ, μισό λεπτό.Φαίνεται εγώ έλυσα άλλη άσκηση. :D .Όταν έλεγες αναγραμματισμό κατάλαβα κάτι σαν αυτό:
abcd - αναγραμματισμός: dcba
Δηλαδή το a πάει στο τέλος, b προ τελευταίο, c δεύτερο, d πρώτο.
Λάθος μου!Συγνώμη! :oops:
Τώρα κατάλαβα την άσκηση.Πάω να την λύσω σωστά αυτή την φορά. :)

Α, εσύ εννόησες αντιστροφή (reverse) ε;

Σου δίνω μια λύση για reverse σε spoiler, αλλά την υλοποιώ με δείκτες (νιώθω πιο άνετα με αυτούς όταν διαχειρίζομαι strings)...
Spoiler: show
Κώδικας: Επιλογή όλων

char *s_reverse(char *s)
{
if ( !s ) // early exit
return NULL;

char *cp1, *cp2, dummy;

cp2 = s + strlen(s) - 1; // set cp2 at end of s
for (cp1=s; cp1 < cp2; cp1++, cp2--) {
dummy = *cp1;
*cp1 = *cp2;
*cp2 = dummy;
}

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

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

Δημοσίευσηαπό stamatiou » 08 Αύγ 2011, 12:21

Το δικό μου λάθος ήταν ότι έπρεπε να τα περάσω by reference τα arrays στη συνάρτηση;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 08 Αύγ 2011, 12:24

Καλημερα/Καλησπερα στην παρεα... εγω σημερα λεω να λυσω και αυτα

http://www.careerride.com/C-Tutorial.aspx

Εχει ωραια quiz εδω για οποιον θελει....
Γνώσεις ⇛ 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/C++

Δημοσίευσηαπό migf1 » 08 Αύγ 2011, 12:56

stamatiou έγραψε:Το δικό μου λάθος ήταν ότι έπρεπε να τα περάσω by reference τα arrays στη συνάρτηση;

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

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

Δημοσίευσηαπό stamatiou » 08 Αύγ 2011, 14:26

migf1 έγραψε:
stamatiou έγραψε:Το δικό μου λάθος ήταν ότι έπρεπε να τα περάσω by reference τα arrays στη συνάρτηση;

Τους πίνακες (άρα και τα strings) σπάνια χρειάζεται να τους περνάς by reference, οπότε δεν πρέπει να είναι εκεί το λάθος. Βασικά δεν καταλαβαίνω καθόλου τι προσπαθείς να κάνεις με την super_func().

Απλά έπαιρνε 2 arrays και έβαζε από το πρωτο array που είναι το input και βάζει σε μια array κάνει + το κατάλληλο μέρος του πίνακα και τώρα που δεν τα πέρασα τα ορισματα by value το array δεν άλλαξε...
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 08 Αύγ 2011, 16:34

stamatiou έγραψε:
migf1 έγραψε:
stamatiou έγραψε:Το δικό μου λάθος ήταν ότι έπρεπε να τα περάσω by reference τα arrays στη συνάρτηση;

Τους πίνακες (άρα και τα strings) σπάνια χρειάζεται να τους περνάς by reference, οπότε δεν πρέπει να είναι εκεί το λάθος. Βασικά δεν καταλαβαίνω καθόλου τι προσπαθείς να κάνεις με την super_func().

Απλά έπαιρνε 2 arrays και έβαζε από το πρωτο array που είναι το input και βάζει σε μια array κάνει + το κατάλληλο μέρος του πίνακα και τώρα που δεν τα πέρασα τα ορισματα by value το array δεν άλλαξε...

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

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

Δημοσίευσηαπό stamatiou » 09 Αύγ 2011, 18:49

Έκανα 2 πίνακες, ο ένας κρατούσε το input και ο άλλος int που στην αρχή ήταν όλα 0. Μετά διάβαζε έναν έναν τους χαρακτήρες και αν διάβαζε Space πχ έκανε Space - 32 και έβγαινε 0 άρα θα έκανε +1 το arrayint[0]. Αυτό θα το έκανα και στο 2ο input. Μετά τα σύγκρινα.
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 09 Αύγ 2011, 18:49

Να βάλουμε άλλη μια άσκηση για strings έτσι για να τα εμπεδώσουμε;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 09 Αύγ 2011, 20:58

stamatiou έγραψε:Έκανα 2 πίνακες, ο ένας κρατούσε το input και ο άλλος int που στην αρχή ήταν όλα 0. Μετά διάβαζε έναν έναν τους χαρακτήρες και αν διάβαζε Space πχ έκανε Space - 32 και έβγαινε 0 άρα θα έκανε +1 το arrayint[0]. Αυτό θα το έκανα και στο 2ο input. Μετά τα σύγκρινα.

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

Εκτός αν έχεις βρει τι πάει στραβά (ή αν σε έχουν καλύψει ήδη οι 3 λύσεις που σας έδωσα).

Νέα άσκηση με strings ε;

Λοιπόν, να τα πιάσουμε από την αρχή λέω, με απλά πράγματα... για να τα εμπεδώσουμε. Τι θα λέγατε να φτιάξετε τη δική μας έκδοση της στάνταρ συνάρτησης size_t strlen(const char *s) η οποία επιστρέφει το μήκος του ορίσματός της (χωρίς να μετράει τον μηδενικό χαρακτήρα στο τέλος; ).

Φτιάξτε λοιπόν μια συνάρτηση:
Κώδικας: Επιλογή όλων
size_t mystrlen(const char *s)
η οποία θα μιμείται την κανονική strlen().

Ο τύπος size_t ορίζεται στην stddef (και στην stdlib που περιλαμβάνει την stddef.... #include <stdlib.h>) και είναι o συνιστώμενος τύπος όταν αναφερόμαστε σε μεγέθη στη C. Αν σας μπερδεύει, χρησιμοποιήστε int.

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

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

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