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

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

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

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

Δημοσίευσηαπό migf1 » 08 Σεπ 2011, 16:27

stamatiou έγραψε:
Οκ, έκανα μια μικρή διόρθωση:
Spoiler: show
Κώδικας: Επιλογή όλων
char *s_copy( char *dst, const char *src )
{
if(!(dst) || !(src)) return NULL;
char *save = dst;
while ( (*dst++=*src++) )
;
return save;
}

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

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

Δημοσίευσηαπό stamatiou » 08 Σεπ 2011, 16:44

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

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

Δημοσίευσηαπό migf1 » 08 Σεπ 2011, 16:45

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

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

Δημοσίευσηαπό Star_Light » 08 Σεπ 2011, 18:15

Οταν ομως εγω δηλωσα το i στον προηγουμενο κωδικα που μου ειπες οτι δεν εβαλα σωστα ονοματα μεταβλητων κτλπ
και το αρχικοποιησα με την διευθυνση του πινακα... δεν τον ειχα κανει calloc αυτον τον δεικτη... αρα πως ημουν σιγουρος
οτι ειχε δεσμευσει οντως θέσεις για τα 10 στοιχεια του πινακα μου ας πουμε.... μηπως υπάρχει εδω κανα λάθος που δεν το πηρα πρεφα? θυμασαι που σου λεω????
Γνώσεις ⇛ 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, 18:19

Star_Light έγραψε:Οταν ομως εγω δηλωσα το i στον προηγουμενο κωδικα που μου ειπες οτι δεν εβαλα σωστα ονοματα μεταβλητων κτλπ
και το αρχικοποιησα με την διευθυνση του πινακα... δεν τον ειχα κανει calloc αυτον τον δεικτη... αρα πως ημουν σιγουρος
οτι ειχε δεσμευσει οντως θέσεις για τα 10 στοιχεια του πινακα μου ας πουμε.... μηπως υπάρχει εδω κανα λάθος που δεν το πηρα πρεφα? θυμασαι που σου λεω????

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

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

Δημοσίευσηαπό Star_Light » 08 Σεπ 2011, 18:25

για εδω λεω...



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

#include<stdio.h>
#define INVALID -1
#define N 10

int main(void)
{
int x[N]={1,2,3,4,5,6,7,8,9,-1};
int *i;
i=x;

while(*i!=-1)
{
if(i==NULL)
printf("End");
else if(*i%2==0)
{
printf("\n ... ");
printf("\n%d",*i);
}
else if(*i%2==1)
{
printf("\n ... ");
printf("\n %d", *i);
}
i++;
}


return 0;
}



αν σε κουρασει επειδη πρεπει να φυγω τωρα αστον και μολις θα ερθω του βαζω σχολια.... και αντιπροσωπευτικα ονοματα μεταβλητων... αλλιως οκ.
Βεβαια η απορια μου μπορει να λυνεται και απο το γεγονος οτι εφοσον χρησιμοποιω πινακες εδω και οχι strings η εκχωρηση και η απελευθερωση γινεται αυτοματα οπως εχουμε πει.
Γνώσεις ⇛ 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, 18:47

Λοιπόν, ο i (που καλύτερα να τον μετονομάσεις σε p) είναι δηλωμένος σαν απλός δείκτης τον οποίον τον βάζεις να δείχνει στον πίνακά σου. Με το που κάνεις αυτή την ανάθεση ο i δείχνει σε έγκυρα περιεχόμενα μνήμης (δηλωμένα μέσω του x, που καλύτερα να το μετονομάσεις σε table).

Δες και τι εννοώ όταν μιλάω για λιτό, αραιωμένο κι ευανάγνωστο κώδικα...
Κώδικας: Επιλογή όλων

#include <stdio.h>

#define EMPTY_ELEMENT -1
#define MAX_ELEMENTS 10

// ----------------------------------------------
int main( void )
{
int table[ MAX_ELEMENTS ] = {1,2,3,4,5,6,7,8,9, EMPTY_ELEMENT};
int *p = table;

if ( !p ) {
puts("*** nothing to do, p is NULL");
return 0;
}

while ( *p != EMPTY_ELEMENT )
{
if ( *p % 2 == 0 ) // εξήγησε γιατί εξετάζεις για υπόλοιπο ίσο με 0 εδώ
printf("\n ...\n %d", *p);

else if ( *p % 2 == 1 ) // εξήγησε γιατί εξετάζεις για υπόλοιπο ίσο με 1 εδώ
printf("\n ...\n %d", *p);

p++;
}

return 0;
}

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

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

Δημοσίευσηαπό stamatiou » 08 Σεπ 2011, 21:04

Εγώ εννούσα για τον κώδικα που έλεγες πριν, τον μισό προχωρημένο και το άλλο μισό στο επίπεδό μας (μάλλον χαμηλό :lol: )....
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 08 Σεπ 2011, 21:10

stamatiou έγραψε:Εγώ εννούσα για τον κώδικα που έλεγες πριν, τον μισό προχωρημένο και το άλλο μισό στο επίπεδό μας (μάλλον χαμηλό :lol: )....

:lol:
Ωραία, οπότε τι εννοείς βγάζει το ίδιο νούμερο... αυτό υποτίθεται πως πρέπει να κάνει. Να δείχνει α) τη διεύθυνση του p, β) τη διεύθυνση στην οποία δείχνει ο p και γ) το περιεχόμενο της διεύθυνσης στην οποία δείχνει ο p. Την 1η φορά το κάνει με εύκολο αλλά μη συμβατό τρόπο και την 2η με προχωρημένο αλλά συμβατό τρόπο.

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

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

Δημοσίευσηαπό stamatiou » 08 Σεπ 2011, 21:25

migf1 έγραψε:
stamatiou έγραψε:Εγώ εννούσα για τον κώδικα που έλεγες πριν, τον μισό προχωρημένο και το άλλο μισό στο επίπεδό μας (μάλλον χαμηλό :lol: )....

:lol:
Ωραία, οπότε τι εννοείς βγάζει το ίδιο νούμερο... αυτό υποτίθεται πως πρέπει να κάνει. Να δείχνει α) τη διεύθυνση του p, β) τη διεύθυνση στην οποία δείχνει ο p και γ) το περιεχόμενο της διεύθυνσης στην οποία δείχνει ο p. Την 1η φορά το κάνει με εύκολο αλλά μη συμβατό τρόπο και την 2η με προχωρημένο αλλά συμβατό τρόπο.

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

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

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

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