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

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

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

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

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

migf1 έγραψε:
stamatiou έγραψε:Οκ, τώρα κάτι άσχετο. Αν ήθελα να κάνω το περιεχόμενο ενός pointer ++ πως θα το έκανα αφού εσυ κανείς *cp++ και απευθύνεται στη διεύθυνση;

Θα έπρεπε να το κάνεις έτσι:
Κώδικας: Επιλογή όλων
(*cp)++

Βέβαια είναι πολύ πιο σπάνιο ως περίπτωση συγκριτικά με το *cp++ που το συναντάμε πολύ συχνά.

Οκ,thanks!
Παιδιά, μιας και είμαστε σε arrays πάμε να ασχοληθούμε με ταξινόμηση;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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

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

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

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

migf1 έγραψε:Βασικά γράφω τώρα ένα πρόγραμμα με arrays που κάνει: append, prepend και delete για να το ποστάρω ως δείγμα, για να αρχίσουμε να μιλάμε και για arrays :)
Σε καμιά ωρίτσα υπολογίζω να το έχω έτοιμο (γιατί είμαι και στη δουλειά).


Λοιπόν παιδιά, επειδή θεωρία πινάκων λίγο πολύ όλοι ξέρουμε (εννοώ σύνταξη, πως ξεκινάνε από τη θέση 0, κλπ), σκέφτηκα το εξής. Σας δίνω το παρακάτω πρόγραμμα, χρησιμοποιήστε στη main() τις συναρτήσεις που σας δίνω έτοιμες με διάφορες αρχικοποιήσεις του array για να δείτε πως όντως δουλεύουν, και κατόπιν να γράψετε δίπλα σε κάθε γραμμή του κώδικα (και των συναρτήσεων) σχόλια για το τι κάνει η κάθε γραμμή, καθώς και το τι επιστρέφει η κάθε συνάρτηση.

Πώς σας φαίνεται;

Για καλύτερη ανάγνωση, το ανεβάζω στο ideone.com: http://ideone.com/QKSD6 (βάλτε κι εσείς τις απαντήσεις σας εκεί ή στο codepad.org αν είναι)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

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

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

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

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

Ποιός μπορεί να μου εξηγήσει τι κάνει το const (γενικά) και πώς το χρησιμοποιούμε γιατί απο μόνος μου δε βλέπω να το θυμάμαι :oops:
Παράδειγμα
Κώδικας: Επιλογή όλων
size_t strlen(const char *s)
1 Γνώσεις Linux: Καθόλου ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-58-generic 32bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.2.0-57-generic, Microsoft Windows XP Professional
3 Intel Core2 Duo CPU E4600 2.40GHz ‖ RAM 2012 MiB ‖ ASUS INC. P5Q - � P5Q
4 nVidia G94 [GeForce 9600 GT] [10de:0622] {nvidia}
5 eth0: Qualcomm Atheros AR8121/AR8113/AR8114 Gigabit or Fast Ethernet [1969:1026] (rev b0) ⋮ wlan0: 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Άβαταρ μέλους
giannosfor
punkTUX
punkTUX
 
Δημοσιεύσεις: 297
Εγγραφή: 24 Απρ 2011, 20:24
Τοποθεσία: Ηράκλειο
Εκτύπωση

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

Δημοσίευσηαπό giannosfor » 12 Αύγ 2011, 20:44

migf1 έγραψε:
Λύση 1η (με χρήση των στάνταρ συναρτήσεων: strchr & strlen)
Spoiler: show
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <string.h>
// --------------------------------------------------------------
int isanagram( char *s, char *t )
{
int i;
for (i=0; s[i] != '\0' && strchr(t, s[i]) != NULL; i++)
;
return i == strlen(t) ? 1 : 0;

/*** ΕΝΑΛΛΑΚΤΙΚΟΣ ΚΩΔΙΚΑΣ ΜΕ ΔΕΙΚΤΕΣ
int i=0;
for (; *s && strchr(t, *s++); i++)
;
return i == strlen(t) ? 1 : 0;
***/
}
// --------------------------------------------------------------
int main( void )
{
char s1[] = "abcd", s2[] = "cdab"; // 1 TRUE
char s3[] = "helle", s4[] = "hollo"; // 0 FALSE
char s5[] = "z", s6[] = "zzz"; // 0 FALSE
char s7[] = "zzz", s8[] = "z"; // 0 FALSE
char s9[] = "z", s10[] = "z"; // 1 FALSE

printf("%d\n", isanagram(s1, s2) );
printf("%d\n", isanagram(s3, s4) );
printf("%d\n", isanagram(s5, s6) );
printf("%d\n", isanagram(s7, s8) );
printf("%d\n", isanagram(s9, s10) );

return 0;
}


Τι γίνεται σε περίπτωση που δώσουμε
Κώδικας: Επιλογή όλων
char s1[] = "abcddd", s2[] = "cccdab";
θα μας δώσει σωστό αλλά μάλλον δεν είναι.

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

Ατίπτσυεο ε;
1 Γνώσεις Linux: Καθόλου ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 12.04 precise 3.2.0-58-generic 32bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.2.0-57-generic, Microsoft Windows XP Professional
3 Intel Core2 Duo CPU E4600 2.40GHz ‖ RAM 2012 MiB ‖ ASUS INC. P5Q - � P5Q
4 nVidia G94 [GeForce 9600 GT] [10de:0622] {nvidia}
5 eth0: Qualcomm Atheros AR8121/AR8113/AR8114 Gigabit or Fast Ethernet [1969:1026] (rev b0) ⋮ wlan0: 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Άβαταρ μέλους
giannosfor
punkTUX
punkTUX
 
Δημοσιεύσεις: 297
Εγγραφή: 24 Απρ 2011, 20:24
Τοποθεσία: Ηράκλειο
Εκτύπωση

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

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

Έχεις δίκιο, βγάζει λάθος η 1η λύση... οπότε χρησιμοποιήστε την 2η ή την 3η (η 2η είναι η ταχύτερη όλων, και με διαφορά).

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

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

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

κΑΛΗΣΠΕΡΙζω την παρέα... δυστυχως λογω της επιμέλειας των οδηγων για τα δικτυα ( ε δεν μπορω να γραψω μπουρδες) + τα αγγλικα (δινω τον δεκεμβριο)+ την πτυχιακη σας εχω χασει εδω... ελπιζω να μην εχω μεινει πισω χθες καταφερα και ξεκλεψα λιγο χρονο και υλοποιησα ενα προγραμμα με πινακες και συναρτησεις στις οποιες υπολογιζεται το περιττο αθροισμα της διαταξης και στην αλλη συναρτηση το αρτιο... το εχω ανεβασει σε ενα free repository ποιος θελει να παρει ματι τον κωδικα???? :D ή μηπως να δωσω την εκφωνηση να ζεσταθείτε πριν καταπιαστείτε με τα ιερα τερατα - ασκησεις του migf1? loool
Γνώσεις ⇛ 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++

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

ρωταω επειδη βλεπω πως εχετε μπει σε μια σειρα και λυνετε συγκεκριμενες ασκησεις για αυτο.
Γνώσεις ⇛ 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++

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

Εγώ αυτό που δεν καταλαβαίνω στον κώδικα είναι ότι:
1. Στην arrisfull arrisempty ελέγχει εάν στην πρώτη το περιεχόμενο είναι 0 αλλά αν είναι 0 ο πρώτος χαρακτήρας αν είναι 0 δεν σημαίνει ότι είναι άδειος ο πίνακας και το ίδιο για την arrisfull.
2. Στη arrisempty ελέγχεις το χαρακτήρα πριν το lenght, στο lenght συμπεριλαμβάνεται το '\0' και αν όχι γιατί ελέγχεις το len-1;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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

cron