Χεχεχε, thanks αλλά απέχω πάρα πολύ από το να αγγίζω καν τον βέλτιστο προγραμματιστή! Απλά ξέρω πολύ καλή C. Αν με βάλεις να γράψω κώδικα σε άλλη γλώσσα που δεν την ξέρω καλά, δεν θα μπορέσω να αντεπεξέλθω καλύτερα από ότι ο μέσος όρος.
Btw, αυτό που έχει ενδιαφέρον στον κώδικα που συζητάμε είναι η βελτιστοποίηση στην ταχύτητα εκτέλεσης του εκτελέσιμου αρχείου και όχι πόσες γραμμές είναι ο κώδικας. Για παράδειγμα, στη δική μου έκδοση του κώδικα, για να εκτελεστεί πιο γρήγορα το πρόγραμμα χρειάζεται να μπει μια έξτρα γραμμή και να αλλαχτεί η συνθήκη του if.
Δηλαδή το...
- Κώδικας: Επιλογή όλων
do {
printf("Enter number #%d: ", total+1);
scanf("%d", &num);
if ( ABS(num) > 9 && ABS(num) < 100 ) // 2-digit number
sum2 += num;
total++;
} while (num != 999);
μπορεί να γίνει έτσι...
- Κώδικας: Επιλογή όλων
int temp;
do {
printf("Enter number #%d: ", total+1);
scanf("%d", &num);
temp = ABS(num);
if ( temp > 9 && temp < 100 ) // 2-digit number
sum2 += num;
total++;
} while (num != 999);
Με κόστος την εκχώρηση στην έξτρα μεταβλητή temp γλιτώνουμε 1 παραπανίσια σύγκριση μέσα στο loop (αφού όπως όλα τα macros έτσι και το ABS() αντικαθιστά inline το όνομά του με το κομμάτι κώδικα που του αντιστοιχεί από το #define του).
Πριν δηλαδή, το if μέσα στο loop ισοδυναμούσε με το εξής:
- Κώδικας: Επιλογή όλων
if ( (nums > 0 ? nums : -nums) > 9 && (nums > 0 ? nums : -nums) < 100 ) // 2-digit number
δηλαδή 4 συγκρίσεις, με τις 2 μάλιστα από αυτές να έχουν και else παρακλάδι
Με την έξτρα μεταβλητή temp πετυχαίνουμε να κάνει 3 συγκρίσεις μέσα στο loop, και μάλιστα μόνο η 1 από αυτές να έχει και else παρακλάδι
