Δημοσιεύτηκε: 19 Ιουν 2011, 20:16
Ωραίο είναι, αλλά υπάρχουν προβλήματάκια.
Με πρώτο το κρασάρισμα στη διαίρεση δεκαδικών μικρότερων του 1 και μεγαλύτερων του 0 (σου έχω δώσει τη λύση σε προηγούμενο post).
Μετά, όσο χρησιμοποιείς την scanf() για να διαβάζεις το input, δυστυχώς πάντα θα έχεις πρόβλημα στην είσοδο και το πρόγραμμα δεν θα αποπνέει αέρα σοβαρής δουλειάς (π.χ. η διαχείριση του πρόωρου ENTER στην είσοδο, ή το θέμα με το line-buffer και τα απομεινάρια). Για να το ξεπεράσεις ο τρόπος είναι αυτός που επίσης σου έχω αναλύσει σε προηγούμενο post.
Τα σωστά προγράμματα πρέπει να ανταπεξέρχονται είτε με απόρριψη και απαίτηση επανάληψης της εισόδου, είτε με εσωτερική διόρθωση, σε περιπτώσεις λανθασμένης εισόδου από τον χρήστη, ακόμα κι αν είναι κακόβουλος.
Κατόπιν, τον κώδικα τον έκανες... unreadable
Το καθάρισμα που έκανες, αφαιρώντας στοίχιση, σχόλια, κλπ δεν κάνει απολύτως καμία διαφορά στην ταχύτητα εκτέλεσης του προγράμματος.
Και τέλος, η σήμανση των πράξεων που χρησιμοποιείς ονομάζεται Polish Notation (ή prefix notation) κι έχει νόημα να τη χρησιμοποιείς μονάχα όταν έχεις πολλούς όρους και διάφορες πράξεις, όλα σε μια γραμμή και θέλεις να αναγνωρίσεις την προτεραιότητα των πράξεων, έχει δεν έχεις παρενθέσεις, πριν ξεκινήσεις να τις υπολογίσεις.
Τόσο το Polish Notation, όσο και το Reverse Polish Notation ή αλλιώς postfix notation (που είναι και πιο συνηθισμένο) υλοποιούνται με χρήση μιας ή δυο στοιβών (stacks).
Η σωστή διαδικασία λοιπόν είναι να διαβάζεις όλες τις πράξεις σε infix notation (αυτό που χρησιμοποιεί ο άνθρωπος δηλαδή) να το μετατρέπεις εσωτερικά είτε σε prefix είτε σε postfix notation (ώστε να μη χρειάζονται παρενθέσεις για τις προτεραιότητες των πράξεων) και να κάνεις κατόπιν τις πράξεις.
Με πρώτο το κρασάρισμα στη διαίρεση δεκαδικών μικρότερων του 1 και μεγαλύτερων του 0 (σου έχω δώσει τη λύση σε προηγούμενο post).
Μετά, όσο χρησιμοποιείς την scanf() για να διαβάζεις το input, δυστυχώς πάντα θα έχεις πρόβλημα στην είσοδο και το πρόγραμμα δεν θα αποπνέει αέρα σοβαρής δουλειάς (π.χ. η διαχείριση του πρόωρου ENTER στην είσοδο, ή το θέμα με το line-buffer και τα απομεινάρια). Για να το ξεπεράσεις ο τρόπος είναι αυτός που επίσης σου έχω αναλύσει σε προηγούμενο post.
Τα σωστά προγράμματα πρέπει να ανταπεξέρχονται είτε με απόρριψη και απαίτηση επανάληψης της εισόδου, είτε με εσωτερική διόρθωση, σε περιπτώσεις λανθασμένης εισόδου από τον χρήστη, ακόμα κι αν είναι κακόβουλος.
Κατόπιν, τον κώδικα τον έκανες... unreadable

Και τέλος, η σήμανση των πράξεων που χρησιμοποιείς ονομάζεται Polish Notation (ή prefix notation) κι έχει νόημα να τη χρησιμοποιείς μονάχα όταν έχεις πολλούς όρους και διάφορες πράξεις, όλα σε μια γραμμή και θέλεις να αναγνωρίσεις την προτεραιότητα των πράξεων, έχει δεν έχεις παρενθέσεις, πριν ξεκινήσεις να τις υπολογίσεις.
Τόσο το Polish Notation, όσο και το Reverse Polish Notation ή αλλιώς postfix notation (που είναι και πιο συνηθισμένο) υλοποιούνται με χρήση μιας ή δυο στοιβών (stacks).
Η σωστή διαδικασία λοιπόν είναι να διαβάζεις όλες τις πράξεις σε infix notation (αυτό που χρησιμοποιεί ο άνθρωπος δηλαδή) να το μετατρέπεις εσωτερικά είτε σε prefix είτε σε postfix notation (ώστε να μη χρειάζονται παρενθέσεις για τις προτεραιότητες των πράξεων) και να κάνεις κατόπιν τις πράξεις.
UnKnown96 έγραψε:Έτοιμη και η V5!!!
Λοιπόν, σε αυτή την έκδοση έκανα:
1) ΠΟΛΎ ΚΑΘΑΡΙΣΜΑ (από 150 γραμμές περίπου, έπεσα στις 60!!!)
2) Το πρόγραμμα γράφτηκε από την αρχή με βάση το πρώτο αλλά με ένα νέο τρόπο να γίνονται οι πράξεις. ( Αυτό που έλεγε ο migf1 στο 2ο post της προηγούμενης σελίδας... περίπου....)
Ελπίζω να σας αρέσει!