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

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

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

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

Δημοσίευσηαπό Star_Light » 16 Μαρ 2012, 07:20

Άκυρο !!!! fix it !!!

http://ideone.com/UCuQI

:)

Βεβαια ακομη δεν βρηκα λύση οταν στην αρχη έχεις καποια μηδενικά πχ σε εισοδους 001 ή -001 που το βγάζει 1 digit (αγνοώντας τα μηδενικά) κατι που για μενα δεν ειναι σωστο... αλλα τελοςπαντων... ισως να μην ασχοληθω αλλο με αυτην.... μιας και ηδη η άσκηση του King αρχικα δεν ζητουσε καν επέκταση για αρνητικους παρα μονο θετικους (δεν το διευκρινιζει μεν αλλα δεν το ζηταει κιολας) .

Το βάζω στο repository γιατι τα tags z_code δεν δειχνουν την "οδοντωση" :lol: :lol: και θα με χέσετε παλι !!!!

Εκανα και περιεργο υπνο αποψε... 1 ωρα κοιμομουν σηκωνομουν μετα παλι τα ιδια... ενιγουει.
Γνώσεις ⇛ 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 » 16 Μαρ 2012, 15:06

Star_Light έγραψε:
...
Το βάζω στο repository γιατι τα tags z_code δεν δειχνουν την "οδοντωση" :lol: :lol: και θα με χέσετε παλι !!!!
...

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

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

Δημοσίευσηαπό migf1 » 16 Μαρ 2012, 15:18

Παρεμπιπτόντως, ακόμα και στους κώδικες κάνεις τα εύκολα δύσκολα ρε συ :(

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
int main( void )
{
int num;

printf( "Give a 3-digit number: " );
scanf("%d", &num);

if ( num < -999 || num > 999 )
puts( "*** error: out of range!" );

else if ( num > -10 && num < 10 )
puts( "1 digit" );

else if ( num > -100 && num < 100 )
puts( "2 digits" );

else
puts( "3 digits" );

return 0;
}

Κι αν θες γενική υλοποίηση, ανεξάρτητη από εύρος...

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
int main( void )
{
int num, count = 1;

printf( "Give a number: " );
scanf("%d", &num);

while ( 0 != (num = num/10) )
count++;

printf( "%d digit(s)\n", count );

return 0;
}

Και με έλεγχο & απόρριψη άκυρης εισόδου (0 digits, όταν π.χ. σου δώσει γράμματα)...

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdbool.h>

int main( void )
{
int num, count = 1;
bool isvalid;

printf( "Give a number: " );
isvalid = ( 1 == scanf("%d", &num) );

while ( 0 != (num = num/10) )
count++;

printf( "%d digit(s)\n", isvalid ? count : 0 );

return 0;
}

EDIT: Συνέπτυξα τα 3 ποστς σε 1.
Τελευταία επεξεργασία από migf1 και 16 Μαρ 2012, 15:55, έχει επεξεργασθεί 1 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 16 Μαρ 2012, 16:52

Εχω πολυπλοκη σκεψη ωρες ωρες :/

Η οδοντωση ειναι λάθος οντως.... τις παρενθενσεις εννοουσα.

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
int main( void )
{
int num;

printf( "Give a number: " );
scanf("%d", &num);

if ( num < -999 || num > 999 )
printf( "*** error: out of range!" );

else if ( num > -10 && num < 10 )
printf( "The number %d has 1 digit " , num );

else if ( num > -100 && num < 100 )
printf( "The number %d has 2 digits " , num );

else
printf( "The number %d has 3 digits " , num );

return 0;
}


: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

Δημοσίευσηαπό Star_Light » 16 Μαρ 2012, 18:26

btw και μεσα στις εκφράσεις της if υπήρχαν περιττοί ελεγχοι.

αυτο που εκανα μπορει να χαρακτηρισθει κάκιστη χρηση της if? :D
ΠΑΝΤΩς δουλεψα υπερβολικα μαζι της κατι που οντως δεν χρειαζεται
γιατι βαραινει αχρειαστα τον κωδικα οπως εχεις πολυ σωστα επισημανει πανω απο 100 φορες.
:lol: :lol: :lol:
Γνώσεις ⇛ 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 » 16 Μαρ 2012, 22:35

Star_Light έγραψε:
...
αυτο που εκανα μπορει να χαρακτηρισθει κάκιστη χρηση της if? :D
...

Η γενικότερη προσέγγισή σου μπορεί να χαρακτηριστεί ως κάκιστη, κάτι που έχει αποδειχτεί εκ του (μη) αποτελέσματος, άπειρες φορές σε αυτό το νήμα. Έχω προσπαθήσει άπειρες φορές, με όλους τους δυνατούς τρόπους και σε όλα τα επίπεδα να σου υποδείξω τις σωστές κατευθύνσεις που θα σε βοηθήσουν να μάθεις προγραμματισμό. Δυστυχώς την συντριπτική πλειοψηφία την έχεις αγνοήσει, συνεχίζοντας στο ίδιο αδιέξοδο μοτίβο που ακολουθείς από τότε που σε γνώρισα στο φόρουμ.

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

Προσωπικά το θεωρώ αδύνατον κάποιος να ΜΗΝ μπορέσει να πάρει γερές βάσεις ακολουθώντας τα υπέροχο βιβλίο του King! Πιστεύοντας ακράδαντα πως μόνο το μυαλό δεν σου λείπει, η εναλλακτική είναι πως σου λείπει η θέληση, η μεθοδικότητα και κυρίως η απλότητα, τόσο στην σκέψη όσο και στην προσέγγιση. Σου λείπει επίσης η θέληση να γράφεις κώδικα. Η προσωπική μου άποψη (που φυσικά μπορεί να είναι λανθασμένη) είναι πως προτιμάς να γράφεις σε φόρουμς και chat-rooms παρά να γράφεις κώδικα (και φυσικά να διαβάζεις).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 16 Μαρ 2012, 23:05

migf1 έγραψε: ........


Nα εισαι καλα φιλε migf1. Ευχαριστω για τις μέχρι τωρα επισημάνσεις σου.
Γνώσεις ⇛ 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

Δημοσίευσηαπό Ilias95 » 17 Μαρ 2012, 01:23

Μια μικρή βοήθεια.
Έχω καταλάβει τα βασικά σχετικά με pointers και pointer arithmetic αλλά δεν μπορώ να καταλάβω ακόμα πως δουλεύει το παρακάτω.

Ο ακόλουθος κώδικας μηδενίζει το 2ο στοιχείο κάθε σειράς μιας multidimensional array:
Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>

#define NUM_ROWS 3
#define NUM_COLS 3

int main( void )
{
int a[NUM_ROWS][NUM_COLS] = {{1, 2, 3}, {4, 5, 6}, {7, 12, 14}};
int (*p)[NUM_COLS], i = 1, *x;

for (p = &a[0]; p < &a[NUM_ROWS]; p++)
(*p)[i] = 0;

// print array
for (x = a[0]; x <= &a[NUM_ROWS-1][NUM_COLS-1]; x++)
printf("%d ", *x);

return 0;
}

Δεν μπορώ να καταλάβω τι ακριβώς σημαίνει το:
Κώδικας: Επιλογή όλων
int (*p)[NUM_COLS];

Και σε τι επηρεάζει αφού μετά ο pointer δείχνει αλλού:
Κώδικας: Επιλογή όλων
p = &a[0]


Γενικώς μια μικρή επεξήγηση στο πως δουλεύει ο παραπάνω κώδικας θα βοηθούσε.
(Πρόσθεσα και εκτύπωση της array για να είναι ορατό το αποτέλεσμα)
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 17 Μαρ 2012, 10:27

Ilias95 έγραψε:
...
Δεν μπορώ να καταλάβω τι ακριβώς σημαίνει το:
Κώδικας: Επιλογή όλων
int (*p)[NUM_COLS];

...
Γενικώς μια μικρή επεξήγηση στο πως δουλεύει ο παραπάνω κώδικας θα βοηθούσε.
(Πρόσθεσα και εκτύπωση της array για να είναι ορατό το αποτέλεσμα)

Καλημέρα,

Το p σε αυτή την περίπτωση είναι πίνακας από δείκτες ακεραίων (array of integer pointers). Δηλαδή το κάθε στοιχείο του p είναι: (int *). Επί της ουσίας το κάθε στοιχείο του p έχει τη δυναμική να δείχνει σε έναν πίνακα από int, που στο συγκεκριμένο παράδειγμα (με το loop) είναι μια σειρά (γραμμή) του a.

Αν θεωρήσουμε τις σειρές του a ως υπο-πίνακες, τότε με το loop βάζεις τον p να τους δείχνει έναν προς έναν (3 είναι όλοι κι όλοι) και να μηδενίζει το 2ο στοιχείο τους (το I). Πρέπει όμως νομίζω να το ορίσεις με NUM_ROWS αντί για NUM_COLS...

Μορφοποιημένος Κώδικας: Επιλογή όλων
int (*p)[NUM_ROWS];

ΥΓ. Επίσης, στο print-loop, πρέπει να είναι: for ( x = &a[0]; ...
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 17 Μαρ 2012, 11:36

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

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

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

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