Δημιουργία λέξεων(συνδιασμοί) απο έναν αριθμό  Το θέμα επιλύθηκε

...ασύγχρονα μαθήματα γλώσσας C

Re: Προγραμματισμός C - Ασκηση

Δημοσίευσηαπό migf1 » 12 Νοέμ 2011, 16:55

andreask16 έγραψε:Σας ευχαριστώ πολύ παιδιά! Φίλε migf1 ο κώδικας είναι πολύ απλός και στα πρότυπα του δικού μου! Απλώς δεν χρειάζεται αρχικοποίηση με 0. Το δοκίμασα και λειτουργεί σωστά.

Κάτι που ξέχασα πριν, μέχρι να συνηθίσεις τη λογική των && και || (αλλά όχι απαραίτητα μόνο τότε) ένας τρόπος να απλοποιήσεις τη χρήση τους μέσα στον κώδικα είναι να ορίσεις για την πολύπλοκη συνθήκη ένα macro preprocessor directive με κατανοητό όνομα και να χρησιμοποιείς εκείνο αντί για την συνθήκη αυτή κάθε αυτή.

Για παράδειγμα, στο παραπάνω κώδικα το macro θα μπορούσε να γραφτεί κάπως έτσι:

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

#define VALID(num) ( (num) >= 100000 && (num) <= 999999 )


Οπότε ο κώδικας σου θα γινόταν...

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

#include <stdio.h>
#define VALID(num) ( (num) >= 100000 && (num) <= 999999 )

int main( void )
{
long int digs = 0;

do {

printf("Enter a positive 6-digit integer: ");
scanf("%ld", &digs);

} while ( !VALID(digs) );

return 0;
}

που κάνει πολύ πιο ευανάγνωστο τον βρόγχο, αφού αν το διαβάσεις φωναχτά πάει κάπως έτσι: "do (whatever you have to do) while NOT valid digs"... "κανε (ότι έχεις να κάνεις) όσο ο digs ΔΕΝ είναι έγκυρος" ;)

To σκέτο ! στη C σημαίνει NOT (το έχετε μάθει υποθέτω αφού κάνετε συνθήκες).

Ή θα μπορούσες το macro να το κάνεις πιο γενικό, ώστε να του περνάς εσύ τα όρια του εύρους που θες, μαζί με τον αριθμό, π.χ...

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

#include <stdio.h>
#define INRANGE(num, lo, hi) ( (num) >= (lo) && (num) <= (hi) )

int main( void )
{
long int digs = 0;

do {

printf("Enter a positive 6-digit integer: ");
scanf("%ld", &digs);

} while ( !INRANGE(digs, 100000, 999999) );

return 0;
}


"do (whatever you have to do) while digs is NOT in the range 100000 - 999999" ... "κάνε (ότι έχεις να κάνεις) όσο ο digs ΔΕΝ είναι στο εύρος 10000 - 999999"

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

Προηγούμενη

Επιστροφή στο Μαθήματα C