Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ 1375 1389 1413 - Γράφετε αρκετά καθαρά τον κώδικα, µπράβο! Έχετε δώσει καλά ονόµατα στις µεταβλητές και ορίζετε ως σταθερές τις τιµές ταχυτήτων των κυνηγών - Μετατρέπετε όλο το χρόνο σε λεπτά, όµως στον υπολογισµό των αποστάσεων που διανύουν πολλαπλασιάζετε ( km / hour * min ) ενώ θα έπρεπε να µετατρέψετε τα λεπτά σε ώρα ή έστω να υπολογίζατε την ταχύτητα ανά λεπτό. Άρα, υπολογίζετε λανθασµένες τιµές στις αποστάσεις. - Στον υπολογισµό της διαφοράς των αποστάσεων δεν λαµβάνετε υπόψην την αρχική απόσταση που δίνεται από το χρήστη (πρέπει να το προσθέσετε στην απόσταση που διανύει ο µπιπ-µπιπ) - Χρησιµοποιείτε δοµή if else στην επιλογή του κυνηγού, ενώ η switch είναι πιο κατάλληλη δοµή γι' αυτή την περίπτωση - Έχετε ξεχάσει να διαγράψετε τις printf που βάζετε για έλεγχο των τιµών, µε αποτέλεσµα η έξοδος του προγράµµατος να µην ακολουθεί τις οδηγίες της εκφώνησης - Δεν έχετε προσέξει καθόλου το φορµάρισµα της εξόδου. - Παραδόθηκε µόνο η 1η Ασκηση. - Έπρεπε να δηλώσεις της ταχύτητες ως σταθερές (const) - ΠΡΟΣΟΧΗ στη διαίρεση int/int. Κάνεις 2 φορές το ίδιο λάθος. Κ στη µετατροπή των µέτρων σε Km αλλά κ στον υπολογισµό του χρόνου. Πρέπει είτε να έχεις double/float µεταβλητή ή να κάνεις type casting. Αλλίως υπολογίζεται µόνο το ακέραιο µέρος της διαίρεσης. - Η µετάβλητη για την αρχ. αποστ. Έπρεπε να είναι double/float. - Ήταν προτιµότερη η χρήση switch-case αντί των if - Να έχεις καλύτερη στοίχιση κώδικα, σωστή µορφοποίηση εξόδου( %5c, %5.2lf } κ περισσότερα σχόλια. - Γράφετε αρκετά καθαρά τον κώδικα, µπράβο! Έχετε δώσει καλά ονόµατα στις µεταβλητές και ορίζετε ως σταθερές τις τιµές ταχυτήτων των κυνηγών - Μετατρέπετε όλο το χρόνο σε λεπτά, όµως στον υπολογισµό των αποστάσεων που διανύουν πολλαπλασιάζετε ( km / hour * min ) ενώ θα έπρεπε να µετατρέψετε τα λεπτά σε ώρα ή έστω να υπολογίζατε την ταχύτητα ανά λεπτό. Άρα, υπολογίζετε λανθασµένες τιµές στις αποστάσεις. - Στον υπολογισµό της διαφοράς των αποστάσεων δεν λαµβάνετε υπόψην την αρχική απόσταση που δίνεται από το χρήστη (πρέπει να το προσθέσετε στην απόσταση που διανύει ο µπιπ-µπιπ) - Χρησιµοποιείτε δοµή if else στην επιλογή του κυνηγού, ενώ η switch είναι πιο κατάλληλη δοµή γι' αυτή την περίπτωση - Έχετε ξεχάσει να διαγράψετε τις printf που βάζετε για έλεγχο των τιµών, µε αποτέλεσµα η έξοδος του προγράµµατος να µην ακολουθεί τις οδηγίες της εκφώνησης - Δεν έχετε προσέξει καθόλου το φορµάρισµα της εξόδου. Page 1
1414 1417 1418 1419 3α) Όπως σας είπαμε και στο μάθημα καλό είναι να βάζουμε κενό στο "%c" ανάμεσα στο και στο %, ώστε να μην διαβάζει τo enter αλλά τον χαρακτήρα που θέλουμε. Έχετε λάθος συνθήκη στην while σας, αφού έχετε αντί για &&. Δεν μπορούσατε να ολοκληρώσετε και τις άλλες περιπτώσεις; Ίδιο κώδικα είχαν. Ήταν πιο κατάλληλη η χρήση switch αντί για if -Πολύ καλή δουλειά! -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. - Δηλώνετε σε µία γραµµή 7 µεταβλητές τύπου int µε αποτέλεσµα να κάνετε τον κώδικά σας πιο δυσανάγνωστο. Δεν είναι λάθος αυτό που κάνατε, όµως αν έχετε πολλές µεταβλητές είναι επιθυµητό να τις γράφετε σε πιο πολλές σειρές, και ας είναι µεταβλητές ίδιου τύπου. - Σωστά δηλώνετε ως σταθερές το κόστος ανά ώρα για κάθε όχηµα, δεν χρειαζόταν να δηλώσετε ως σταθερές και να υπολογίσετε το κόστος ανά λεπτό, θα ήταν σωστό και αν το υπολογίζατε στις πράξεις σας, πιο κάτω. - Η ανάγνωση της ώρας από την scanf δεν γίνεται στη µορφή που σας ζητήθηκε. - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Στο τέλος δεν κάνετε µετατροπή το συνολικού χρόνου σε ώρες και λεπτά, αλλά το εκτυπώνετε µόνο σε λεπτά - Κάνετε σωστό φορµάρισµα στο τελικό κόστος. - Έχετε αρκετά καλογραµµένο κώδικα, ονοµάζετε καλά τις µεταβλητές σας, αλλά δεν βάζετε ως σταθερές τις τιµές κόστους ανά ώρα για κάθε όχηµα. - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Έχετε υπολογίσει πολύ σωστά το συνολικό χρόνο παραµονής στο πάρκινγκ. - Δεν έχετε προσέξει πολύ το φορµάρισµα της εξόδου, γιατί έχετε προσθέσει παραπάνω κενά και δεν συµπληρώνετε µε µηδενικά την ώρα, δεν χρειάζεται γενικώς να γράφετε παραπάνω απότι σας ζητείται - Γενικά πάντως, τα πήγατε πολύ καλά. Page 2
1420 1421 3α) Όπως σας είπαμε και στο μάθημα καλό είναι να βάζουμε κενό στο "%c" ανάμεσα στο και στο %, ώστε να μην διαβάζει τo enter αλλά τον χαρακτήρα που θέλουμε. Έχετε λάθος συνθήκη στην while σας, αφού έχετε αντί για &&. Δεν μπορούσατε να ολοκληρώσετε και τις άλλες περιπτώσεις; Ίδιο κώδικα είχαν. Ήταν πιο κατάλληλη η χρήση switch αντί για if -Πρέπει να χρησιµοποιείτε σταθερές για τις τιµές (τιµές ανα ώρα στην συγκεκριµένη περίπτωση), αφού δεν πρόκειται να αλλάξουν κατα την εκτέλεση -Πρέπει να "φορµάρετε" την έξοδο µε βάση τα ζητούµενα απο την εκφώνηση -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. -Ο αλγοριθµος που υλοποιήσατε για τον υπολογισµό του χρόνου παραµονής θα δούλευε σωστά αν µία ώρα είχε 100 λεπτά!! -Υπολογίζετε σωστά το κόστος αλλά ΤΥΧΑΙΑ! 1422 1423 - Κάνετε ακέραια διαίρεση σε σηµείο που δεν πρέπει και ως αποτέλεσµα χάνεται πληροφορία και βγαίνουν λάθος αποτελέσµατα. - Ήταν πιο κατάλληλη η χρήση switch αντί για if. - Λάθος τύποι: οι τιµές έπρεπε να είναι double, κι όχι int γιατί είναι δεκαδικοί αριθµοί - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές. - Λάθος φορµάρισµα εξόδου. - Παραδόθηκε µόνο η 1η Ασκηση - Ήταν προτιµότερη η χρήση της scanf από την getchar(). - ΠΡΟΣΟΧΗ στη διαίρεση int/int όταν διαρείτε τα λεπτά µε την τιµη 60. Πρέπει είτε να έχετε double/float µεταβλητή ή να κάνετε type casting. Αλλίως υπολογίζεται µόνο το ακέραιο µέρος της διαίρεσης. - Δεν µετατρέψατε την αρχ. απόσταση σε Km. - Ο έλεγχος για τις επιτρεπτές τιµές της ώρας δεν ήταν απαραίτητος αλλά ήταν κ λανθασµένος. - Ήταν προτιµότερη η χρήση switch-case αντί των if - Τα ονόµατα των σταθερών να γράφονται µε όλο κεφαλαία. - Δε χρειάζεται να αφήνετε κενή γραµµή για κάθε εντολή. Ο κώδικας γίνεται δυσανάγνωστος. - Να βελτιώσετε τη στοίχιση στις δοµές ελέγχου. - Δεν γράψατε αρκετά σχόλια Page 3
1424 1425 - Η συνθήκη στο αρχικό while είναι λάθος. Χρειάζεστε εξάσκηση στη χρήση τελεστών. - Όταν διαβάζετε χαρακτήρες µε scanf (και µόνο τότε) να βάζετε ένα κενό ανάµεσα στο " και στο % (και µόνο εκεί) - Τυπικά τα ονόµατα των σταθερών γράφονται µε όλο κεφαλαία, ενώ τα ονόµατα των µεταβλητών µε µικρά - Σοβαρό λάθος στη µετατροπή λεπτών σε ώρες! Δε δικαιολογούνται τέτοια λάθη απλής αριθµητικής! - Το πρόγραµµα δε συµµορφώνεται µε τις προδιαγραφές εισόδου. Δε διαβάζετε το : ανάµεσα στις ώρες και τα λεπτά. - Ήταν πιο κατάλληλη η χρήση switch αντί για if. Η δεύτερη άσκηση δεν κάνει compile. - Δύο πολύ βασικά λάθη σας είναι να µην κλείνετε τις παρενθέσεις τόσο της main, όσο και στις δοµές ελέγχου ( if-else όπου έχετε στο κώδικα ) και να µην βάζετε ; ( ελληνικό ερωτηµατικό ) στο τέλος των εντολών! - Δηλώνετε σε µια γραµµή 9 µεταβλητές τύπου int, δεν είναι λάθος, όµως δεν κάνετε το πρόγραµµα σας ευανάγνωστο και έχετε ξεχάσει να δηλώσετε την µεταβλητή pay που χρησιµοποιείτε παρακάτω -Στη συνθήκη της while λέτε ότι <όσο ο χαρακτήρας που εισάγει ο χρήστης είναι Μ ή C ή T, επανέλαβε το βρόχο>, αυτό είναι το ανάποδο απ' αυτό που έπρεπε να κάνετε - Σωστά δηλώνετε τη χρέωση ανά ώρα για το κάθε όχηµα ως σταθερές - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Στην εκτύπωση των αποτελεσµάτων δεν εκτυπώνετε καµία από τις τιµές που έπρεπε. Page 4
1426 ασκηση 1 - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές - Δε λαµβάνετε υπόψη την περίπτωση που το minutes2 είναι µικρότερο του minutes1 - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Για να εµφανιστούν µηδενικά µπροστά από έναν ακέραιο γράφουµε %0d. Διαβάστε το φυλλάδιο για printf/scanf που βρίσκεται στη σελίδα του εργαστηρίου. ασκηση 2 - χρησιµοποιειτε την number printf("number: %5d\n", number); χωρισ αρχικοποιηση. 1427 FAIL - Απουσία από το εργαστήριο 1428 Άσκηση 1: -Καλή δουλειά. Εκτυπώνονται σωστά αποτελέσµατα. -Τις τιµές ανά ώρα έπρεπε να τις δηλώσετε ως σταθερές. Το if-else στις γραµµές 53-57 θα µπορούσε να υλοποιηθεί µε switch-case. Ο έλεγχος του τύπου του αυτοκινήτου µπορεί να γίνει και πιο απλά. Η συνθήκη που έχετε στο εµφωλευµένο if µέσα στο while αποτελεί τη συνθήκη του while. Δηλαδή: do{printf("vehicle Type: "); scanf(" %c", &type); } while(type!='m' && type!='c'&& type!='t'); - Η αποτίµηση των πράξεων στο δεξί µέλος δε χρειάζεται να µπει σε παρενθέσεις. Σωστή µορφοποίηση αποτελεσµάτων αλλά τυπώνετε λάθος την ώρα παραµονής επειδή µπερδευτήκατε µε τις ίδιες σας τις µεταβλητές. Τα ονόµατά τους δεν είναι περιγραφικά και για τους υπολογισµούς που κάνετε έχετε δηλώσει πολλές µεταβλητές. χωρίς να χρειάζονται όλες αυτές. Προσπαθήστε να απλουστεύσετε λίγο τη λογική σας. Άσκηση 2: Ο αλγόριθµος σας δουλεύει αν και η λογική είναι πολύ πιο απλή. Και πάλι δηλώνετε πολλές µεταβλητές που στην ουσία είναι άχρηστες. Μέσα στο while υπολογίζετε το πλήθος των ψηφίων και κάνετε και τη διαίρεση του αριθµού µε το 10. Αν ενσωµατώνατε και τον υπολογισµό του % µέσα στο while θα γλιτώνατε 1) περιττές µεταβλητές, άσκοπες πράξεις και ο κώδικας θα ήτανε πιο απλός! Page 5
1429 1430 1431 - Πολύ καλογραµµένο κώδικα, δίνετε καλά ονόµατα στις µεταβλητές. - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Έπρεπε να δηλώσετε ως σταθερές το κόστος ανά ώρα για κάθε τύπου οχήµατος - Δεν έχετε προσέξει πολύ το φορµάρισµα της εξόδου, έπρεπε και στην ώρα που εκτυπώνεται να συµπληρώνει µε µηδενικά αν έχει µονοψήφια τιµή ( δηλαδή 9:4 -> 09:04 ) - Γενικά τα πήγατε πολύ καλά. 3α) - Η στοίχιση σας είναι ανεπίτρεπτη, μην ξαναστείλετε πρόγραμμα που να είναι όλα κολλημένα αριστερά ενώ είναι μέλη μιας συνάρτησης(main). - Ήταν πιο κατάλληλη η χρήση switch αντί για if - Η επανάληψη σας, αν και σωστή είναι απίστευτα πολύπλοκη για κάτι που λύνεται πολύ εύκολα(πολύ κακό αυτό).- Ορίστε μια απλή λύση: do { printf("hunter: \n"); scanf( "%c", &hunter); } while (hunter!= 'T' && hunter!= 'R' && hunter!= 'H'); ασκηση 1 - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Για την εκτύπωση double χρησιµοποιούµε lf και όχι f. Επίσης, το πλάτος έπρεπε να είναι 6.2 κι όχι 5.2 - Για να εµφανιστούν µηδενικά µπροστά από έναν ακέραιο γράφουµε %0d. Διαβάστε το φυλλάδιο για printf/scanf που βρίσκεται στη σελίδα του εργαστηρίου. - γενικα αρκετα σωστη ασκηση. ασκηση 2 δεν παραδοθηκε Page 6
1432 - Μάθετε να πακετάρετε και να στέλνετε τις ασκήσεις σας! - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές. - Λάθος στο scanf που διαβάζει χαρακτήρα. Διαβάστε το φυλλάδιο για printf/scanf που βρίσκεται στη σελίδα του εργαστηρίου - Δεν υπολογίζετε σωστά την περίπτωση που min_out < min_in - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Προσέξτε τη στοίχιση 1433 Άσκηση 1: -Καλή δουλειά. Εκτυπώνονται σωστά αποτελέσµατα. -Θα µπορούσατε να έχετε περισσότερα σχόλια στο πρόγραµµα. -Τις τιµές ανά ώρα έπρεπε να τις δηλώσετε ως σταθερές. Στο if-else στις γραµµές 22-31 παρατηρείστε ότι οι γραµµές 23-24 είναι ίδιες µε τις γραµµές 29-30 και συνεπώς θα µπορούσανε να βγούνε εκτός του ελέγχου if διότι εκτελούνται πάντα. -Τα ονόµατα σας στις µεταβλητές δεν είναι όλα πολύ περιγραφικά. Συγκεκριµένα, το hours και hours θα µπορούσε να είναι hourscome και hoursleft. Στον υπολογισµό του κόστους της βενζίνης, αντί για If-else θα µπορούσε να χρησιµοποιηθεί το switch case. Τέλος, στην εκτύπωση των αποτελεσµάτων για να τυπωθούν 0 στις 8εσεις της ώρας που δε χρησιµοποιούνται απαιτείται %02d και όχι %d. Άσκηση 2: Πολύ καλή δουλειά. Σωστός αλγόριθµος και εκτυπωµένα µηνύµατα. Γενικά: καλή στοίχιση κώδικα. Page 7
1434 1435 1436 1437 1438 - Η συνθήκη στο αρχικό while είναι λάθος. Χρειάζεστε εξάσκηση στη χρήση τελεστών. - Όταν διαβάζετε χαρακτήρες µε scanf (και µόνο τότε) να βάζετε ένα κενό ανάµεσα στο " και στο % (και µόνο εκεί) - Τυπικά τα ονόµατα των σταθερών γράφονται µε όλο κεφαλαία, ενώ τα ονόµατα των µεταβλητών µε µικρά - Σοβαρό λάθος στη µετατροπή λεπτών σε ώρες! Δε δικαιολογούνται τέτοια λάθη απλής αριθµητικής! - Το πρόγραµµα δε συµµορφώνεται µε τις προδιαγραφές εισόδου. Δε διαβάζετε το : ανάµεσα στις ώρες και τα λεπτά. - Ήταν πιο κατάλληλη η χρήση switch αντί για if. - Η δεύτερη άσκηση δεν κάνει compile. -Πολύ καλή δουλειά! -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. -Προσοχή όταν διαιρείται int/int το αποτέλεσµα είναι int!!! 3α) Αποφεύγετε να χρησιμοποιείτε κεφαλαία στις μεταβλητές σας κεφαλαία μόνο σε const. Διορθώστε τις ρυθμίσεις του kate σας ώστε να γίνεται σωστά η στοίχιση σας. Είναι δυσνόητος ο κώδικάς σας με την παρούσα στοίχιση. Δεν χρησιμοποιείτε την αρχική απόσταση ανάμεσα σε κυνηγό-θήραμα. Τι ακριβώς κάνετε εδώ: time=((double)hours*60+(double)minutes)/60; Μετατρέπετε τις ώρες σε λεπτά; Και τα λεπτά σε ώρες; Και μετά τα προσθέτετε μεταξύ τους; ΜΗΝ ΑΦΗΝΕΤΕ ΤΗ ΔΙΑΔΙΚΑΣΙΑ ΤΗΣ ΜΕΤΑΓΛΩΤΤΙΣΗΣ ΓΙΑ ΤΗΝ ΤΕΛΕΥΤΑΙΑ ΣΤΙΓΜΗ!!! Η σύνταξη της δήλωσης σταθερών ήταν τελείως λάθος! Να προσέχετε τους τελεστές : στις συνθήκες χρησιµοποιείτε = αντί γιατο σωστό == - Κάνετε ακέραια διαίρεση σε σηµείο που δεν πρέπει και ως αποτέλεσµα χάνεται πληροφορία και βγαίνουν λάθος αποτελέσµατα. - Ήταν πιο κατάλληλη η χρήση switch αντί για if. - Λάθος τύποι: οι τιµές έπρεπε να είναι double, κι όχι int γιατί είναι δεκαδικοί αριθµοί - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές. - Λάθος φορµάρισµα εξόδου. Page 8
1439 1440 1442 -Πρέπει να χρησιµοποιείτε σταθερές για τις τιµές (τιµές ανα ώρα στην συγκεκριµένη περίπτωση), αφού δεν πρόκειται να αλλάξουν κατα την εκτέλεση -Πρέπει να "φορµάρετε" την έξοδο µε βάση τα ζητούµενα απο την εκφώνηση -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. -Ο αλγοριθµος που υλοποιήσατε για τον υπολογισµό του χρόνου παραµονής θα δούλευε σωστά αν µία ώρα είχε 100 λεπτά!! -Υπολογίζετε σωστά το κόστος αλλά ΤΥΧΑΙΑ! - Δεν έχετε ονοµάσει σωστά το φάκελο που συµπεριλάβατε στο συµπιεσµένο αρχείο σας (υπήρχε ένας φάκελος lab3) και είχατε λάθος θέµα - Μετατρέπετε σε λεπτά το χρόνο άφιξης και το χρόνο αποχώρησης του οχήµατος, πολλαπλασιάζοντας την ώρα επί 100, ενώ πρέπει να το κάνετε επί 60 ( hour * 60 = min ), οπότε υπολογίζετε λάθος τιµές. - Έχετε σκεφτεί σωστό τρόπο για να υπολογίσετε ότι σας ζητείται. - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Δεν έχετε φορµάρει την έξοδο, ώστε να εκτυπώνει τα αποτελέσµατα µε σωστή µορφή (πχ τον χρόνο 9:30 να τον εκτυπώνει 09:30) - Δεν δηλώνετε ως σταθερές το κόστος ανά ώρα για κάθε τύπο οχήµατος - Έχετε γράψει τον κώδικα πάρα πολύ καθαρά, µπράβο! - Συµπεριλαµβάνετε και σχόλια. - Το πρόγραµµά σας δεν έκανε compile γιατί δεν ακολουθούσατε τις συµβάσεις µορφοποίησης κώδικα! Αν τις ακολουθούσατε, τότε θα είχατε βρει όλα τα λάθος άγκιστρα που είχατε βάλει. ΜΗΝ ΑΦΗΝΕΤΕ ΤΗ ΔΙΑΔΙΚΑΣΙΑ ΤΗΣ ΜΕΤΑΓΛΩΤΤΙΣΗΣ ΓΙΑ ΤΗΝ ΤΕΛΕΥΤΑΙΑ ΣΤΙΓΜΗ!!! Page 9
1443 1444 1445 1447 Άσκηση 1: Παρόλο που η µορφοποίηση σας είναι καλή, ο κώδικάς σας είναι αρκετά συµπαγής γραµµένος (δεν αφήνετε καθόλου κενές γραµµές για να οµαδοποιήσετε κάποιες εντολές). θα µπορούσατε να οµαδοποιήσετε τις εντολές ως εξής: δηλώσεις µεταβλητών, κενή γραµµή, είσοδος δεδοµένων από πληκτρολόγιο, κενή γραµµή, υπολογισµοί, κενή γραµµή, εκτύπωση µηνυµάτων. Οι τιµές της βενζίνης δεν έχουν δηλωθεί ως σταθερές. Αντί για το if else θα µπορούσατε να χρησιµοποιήσετε switch-case. Επίσης µέσα στα if-else οι 3 πρώτες γραµµές επαναλαµβάνονται και θα µπορούσαν να βγουν εκτός του if. Τέλος, στα µηνύµατα εκτύπωσης η µορφή δεν είναι η επιθυµητή. Πιο συγκεκριµένα, ο χαρακτήρας αλλαγής γραµµής είναι \n. Τυπώνετε το χρόνο χωρίς να τον έχετε µετατρέψει σε ώρες και λεπτά. Να θυµάστε να βάζετε σχόλια. - Οι ταχύτητες έπρεπε να είχαν δηλωθεί ως σταθερές - Το πρώτο γράµµα στα ονόµατα µεταβλητών τυπικά γράφεται µε µικρό, όχι κεφαλαίο. - Προσέξτε τη στοίχιση δεν είναι συνεπής - Όταν διαβάζετε ακεραίους µε scanf να µη βάζετε κενά ή \n στο format string. - Ήταν πιο κατάλληλη η χρήση switch αντί για if. - Στη τελική εκτύπωση του κυνηγού έπρεπε να είχατε %5c. - Τα printf για τον τύπο του κυνηγού και τη διαφορά απόστασης είναι ίδια και για τις δύο περιπτώσεις, οπότε έπρεπε να τα έχετε έξω από το if/else αντί να τα επαναλαµβάνετε και στο if και στο else. - Προσέξτε τη στοίχιση. Όταν βάλατε σε σχόλια τα επιπλέον do-while έπρεπε να είχατε στοιχίσει σωστά τις εντολές που έµειναν. - Ήταν προτιµότερη η χρήση switch αντί για if. - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές - Δε λαµβάνετε υπόψη την περίπτωση που το totalminutes είναι αρνητικό - Δε χρησιµοποιείτε τους σωστούς κωδικούς στο printf. Δείτε τη λύση. -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. Ο αλγόριθµος που χρησιµοποιήσατε θα µπορούσε να είναι πιο απλός, γιατί νοµίζω κάπου χαθήκατε... Page 10
1448 1449 1450 FAIL - Προσέξτε τη στοίχιση. Όταν βάλατε σε σχόλια τα επιπλέον do-while έπρεπε να είχατε στοιχίσει σωστά τις εντολές που έµειναν. - Ήταν προτιµότερη η χρήση switch αντί για if. - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές - Δε λαµβάνετε υπόψη την περίπτωση που το totalminutes είναι αρνητικό - Δε χρησιµοποιείτε τους σωστούς κωδικούς στο printf. Δείτε τη λύση. - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε τα µέτρα σε Km παρά τις ταχύτητες σε m/min. - Για να µετατρέψετε τα Km/h σε m/min πολλ/ουµε µε 16.66 κ όχι µε 0.06. - Η εκτύπωση του τύπου κυνηγού έπρεπε να γινει µε την printf("\nhunter %5c\n") - Δε µετατρέψατε την τελ. απόσταση σε Km όπως σας ζητείται. - Πολύ καλή χρήση σύντοµων σχολίων στον κώδικα. - Να έχετε καλύτερη στοίχιση, ιδιαίτερα στα if - switch. Να χρησιµοποιείται tabs και να αποφεύγεται µεγάλα µήκη γραµµών κώδικα. Αφήστε µερικές κενές γραµµές για να µην είναι τόσο πυκνός ο κώδικάς σας. Άσκηση 1: Ο κώδικας σας είναι πολύ πρόχειρα γραµµένος και άσχηµα µορφοποιηµένος. Καταρχήν δεν κάνει compile. Κώδικας που δεν κάνει compile, κανονικά δε βαθµολογείται. Επίσης δεν κάνατε τις ρυθµίσεις του Kate όπως φαίνονται στο αρχείο Lab1.pdf και αυτός είναι ένας επιπλέον λόγος που χαλάει η µορφοποίηση. Η σύνταξη των printf στο τέλος του κώδικα είναι εντελώς λάθος και εκεί οφείλονται τα errors και warnings που εκτυπώνονται. Παρόλα αυτά, τα λάθη σας είναι τα εξής: 1) το σύµβολο του διάφορο είναι!= και όχι =!. 2) Η διαφορά ώρας δεν υπολογίζεται σωστά (βάσει του κώδικα όπως τον γράψατε). Τα σχόλια που σας γράφουµε είναι για να τα διαβάζετε και να προσπαθείτε να βελτιώνεστε. Το θέµα της στοίχισης είχε σχολιαστεί και στο lab2 και δεν κάνατε κάτι για να το διορθώσετε. Page 11
1451 Μην ξεχνάς ποτέ το AEM σου. Άσκηση 1: -Έχετε κακή µορφοποίηση κώδικα. Δεν οµαδοποιείτε καλά τις εντολές. Τα ονόµατα των εντολών δεν είναι όλα περιγραφικά. Τι παριστάνει η µεταβλητή temp. (Δε φαίνεται κάτι από το όνοµά της.). Δεν έχετε δηλώσει το κόστος παραµονής για κάθε όχηµα ως σταθερές. Ο συνολικό κόστος δεν έπρεπε να δηλωθεί ως ακέραιος αλλά ως δεκαδικός. Στο αλγοριθµικό κοµµάτι οι υπολογισµοί σας είναι αρκετά λάθος. Εντοπίζετε ότι µπορεί τα λεπτά αναχώρησης να είναι µικρότερα σε τιµή αλλά δε τα χειρίζεστε σωστά και εκτυπώνετε τελικά αρνητική τιµή! Μία εναλλακτική υλοποίηση για αυτό το κοµµάτι είναι η εξής: if(startminute>finishminute) {finishminute = finishminute + 60; starthour = starthour + 1;} remainminute = finishminute - startminute; remainhour = finishhour - starthour; - Ο τρόπος υπολογισµού του κόστους παραµονής είναι εντελώς λάθος. Προσθέτετε ώρες και λεπτά (αυτά έχουν άλλες µονάδες). Στην ουσία θέλουµε λεπτά_παραµονής/60 για να δουλέψει µε τον τρόπο που το υλοποιήσατε. Τέλος το if-else στις γραµµές 31-45 θα µπορούσε να υλοποιηθεί καλύτερα µε switch case. Αλλά ο τρόπος που το υλοποιήσατε είναι επίσης λάθος. Δε χρειάζεται εµφώλευση της νέας περίπτωσης if. Κοιτάξτε την υλοποίηση του if else if- else! Τέλος στο mail που στείλατε βάλατε λάθος subject. 1452 FAIL - Δεν παραδόθηκε άσκηση Page 12
1453 ασκηση 1 - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Για την εκτύπωση double χρησιµοποιούµε lf και όχι f. Επίσης, το πλάτος έπρεπε να είναι 6.2 κι όχι 5.2 - Για να εµφανιστούν µηδενικά µπροστά από έναν ακέραιο γράφουµε %0d. Διαβάστε το φυλλάδιο για printf/scanf που βρίσκεται στη σελίδα του εργαστηρίου. - γενικα αρκετα σωστη ασκηση. 1454 1455 ασκηση 2 δεν παραδοθηκε - Πάρα πολύ καλά!! Μπράβο!! - Γράφετε πολύ καθαρά τον κώδικά σας, έχετε βάλει όσα σχόλια χρειάζονται, δίνετε καλά ονόµατα στις µεταβλητές και έχετε ορίσει ως σταθερές τις τιµές ταχυτήτων των κυνηγών. - Πολύ σωστά κάνετε χρήση της switch για την επιλοή του τύπου κυνηγού - Έχετε καλό φορµάρισµα της εξόδου, υπολογίζοντας το ακέραιο δεκαδικό πλήθος ψηφίων που πρέπει να εκτυπωθεί καθώς και το µέγεθος του char τύπου του κυνηγού - Το µόνο λάθος που έχετε κάνει, είναι στον υπολογισµό της διαφοράς της απόστασης όπου δεν λαµβάνετε υπόψην την αρχική απόσταση που έχουν µεταξύ τους ο κυνηγός και ο µπιπ-µπιπ. Έτσι, επειδή όλοι οι κυνηγοί τρέχουν µε µεγαλύτερη ταχύτητα απότι ο µπιπ-µπιπ, τον πιάνουν όση ώρα και να τους δώσετε να τρέξουν ( από 1 λεπτό.. κλπ ) - Στη δεύτερη άσκηση έχετε σωστό αλγόριθµο και υπολογίζετε πολύ σωστά το αποτέλεσµα ασκηση 1 - οι σταθερες θα επρεπε να ειναι δηλωµενες ως const - λαθος συνθηκη στο while η σωστη ειναι η εξης : while (type!= 'M'&& type!= 'C' && type!='t') ; - δυσνοητες µεταβλητες - αν ο χρηστης δωσει ακυρη τιµη στον τυπο του οχηµατος το money δεν αρχικοποιειται ποτε ενω πιο κατω χρησιµοποιειται - αντι για if else πιο σωστο ειναι το switch case για την επιλογη του οχηµατος. - λαθος µορφοποιηση στα printf ηθελε 6.2lf αντι για σκετο lf ασκηση 2 δεν παραδοθηκε τιποτα Page 13
1456 1457 1458 1459 -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. Ο αλγόριθµος που χρησιµοποιήσατε θα µπορούσε να είναι πιο απλός, γιατί νοµίζω κάπου χαθήκατε... - Έχετε αρκετά καλογραµµένο κώδικα, ονοµάζετε καλά τις µεταβλητές σας, αλλά δεν βάζετε ως σταθερές τις τιµές κόστους ανά ώρα για κάθε όχηµα. - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Έχετε υπολογίσει πολύ σωστά το συνολικό χρόνο παραµονής στο πάρκινγκ. - Δεν έχετε προσέξει πολύ το φορµάρισµα της εξόδου, γιατί έχετε προσθέσει παραπάνω κενά και δεν συµπληρώνετε µε µηδενικά την ώρα, δεν χρειάζεται γενικώς να γράφετε παραπάνω απότι σας ζητείται - Γενικά πάντως, τα πήγατε πολύ καλά. - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε τα µέτρα σε Km παρά τις ταχύτητες σε m/min. - Για να µετατρέψετε τα Km/h σε m/min πολλ/ουµε µε 16.66 κ όχι µε 0.06. - Η εκτύπωση του τύπου κυνηγού έπρεπε να γινει µε την printf("\nhunter %5c\n") - Δε µετατρέψατε την τελ. απόσταση σε Km όπως σας ζητείται. - Πολύ καλή χρήση σύντοµων σχολίων στον κώδικα. - Να έχετε καλύτερη στοίχιση, ιδιαίτερα στα if - switch. Να χρησιµοποιείται tabs και να αποφεύγεται µεγάλα µήκη γραµµών κώδικα. Αφήστε µερικές κενές γραµµές για να µην είναι τόσο πυκνός ο κώδικάς σας. ασκηση1 - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Για να εµφανιστούν µηδενικά µπροστά από έναν ακέραιο γράφουµε %0d. Διαβάστε το φυλλάδιο για printf/scanf που βρίσκεται στη σελίδα του εργαστηρίου. - δυσνοητα ονοµατα µεταβλητων - η ασκηση δεν τρεχει σωστα αφου χρησιµοποιειτε την µεταβλητη synmm χωρις να την αρχικοποιησετε πουθενα.. ασκηση2 δεν παραδοθηκε Page 14
1460 ασκηση 1 - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές - Δε λαµβάνετε υπόψη την περίπτωση που το minutes2 είναι µικρότερο του minutes1 - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Για να εµφανιστούν µηδενικά µπροστά από έναν ακέραιο γράφουµε %0d. Διαβάστε το φυλλάδιο για printf/scanf που βρίσκεται στη σελίδα του εργαστηρίου. 1461 1462 ασκηση 2 - χρησιµοποιειτε την number printf("number: %5d\n", number); χωρισ αρχικοποιηση. Στο αρχείο σας δώσατε το όνοµα του φακέλου αντί για lab3a.c. Η µορφοποίηση του κώδικα είναι αρκετά άσχηµη. Οι εντολές σας είναι αρκετά συµπαγής γραµµένος (δεν αφήνετε καθόλου κενές γραµµές για να οµαδοποιήσετε κάποιες εντολές). θα µπορούσατε να οµαδοποιήσετε τις εντολές ως εξής: δηλώσεις µεταβλητών, κενή γραµµή, είσοδος δεδοµένων από πληκτρολόγιο, κενή γραµµή, υπολογισµοί, κενή γραµµή, εκτύπωση µηνυµάτων. Δε βάζετε σχόλια. Οι µεταβλητές είναι αρκετά περιγραφικές. Κάνετε σωστό έλεγχο για το αν εισάγεται ο σωστός τύπος οχήµατος αλλά το µήνυµα Vehicle Type εκτυπώνεται 2 φορές. Αυτό οφείλεται στο γεγονός ότι η scanf χρειάζεται % c και όχι %c. Περαιτέρω εξηγήσεις στο σχετικό φροντιστήριο. Στο αλγοριθµικό κοµµάτι υπολογισµού του χρόνου παραµονής, έστω ο υπολογισµός µεταξύ 12:45 και 13:20. Προφανώς ο χρόνος είναι 00:35 λεπτά. Άρα if(startminute>finishminute) {finishminute = finishminute + 60; starthour = starthour + 1;} remainminute = finishminute - startminute; remainhour = finishhour - starthour;. Τέλος δεν έχετε δηλώσει τα κόστη παραµονής ως σταθερές. Χρησιμοποιείτε την αρχική απόσταση χωρίς να την μετατρέψετε σε χιλιόμετρα και την προσθέτετε με χιλιόμετρα. Δεν χρειαζόταν να κάνετε έλεγχο στις ώρες και στα λεπτά. Ήταν πιο κατάλληλη η χρήση switch αντί για if Page 15
1463 1464 1465 3α) Δεν έχετε δηλώσει const τις σταθερές του προβλήματος. Δεν χρειαζόταν να κάνετε έλεγχο στις ώρες και στα λεπτά. Ήταν πιο κατάλληλη η χρήση switch αντί για if 3β) Η άσκηση που παραδώσατε δεν επιλύει τίποτα από τα ζητούμενα. Δεν χρησιμοποιείτε καν την εντολή mod(%)που αποσπά ψηφία από έναν ακέραιο. - Πάρα πολύ καλά! Καθαρογραµµένος κώδικας, έχετε όσα σχόλια χρειάζεται, εξηγώντας σε βασικά σηµεία τι κάνετε - Δίνεται περιγραφικά ονόµατα στις µεταβλητές, έχετε ως σταθερές τις τιµές κόστους ανά ώρα για κάθε όχηµα - Υπολογίζετε πολύ σωστά το χρόνο παραµονής στο πάρκινγκ - Το µόνο που δεν προσέξατε ήταν στα µηνύµατα που εκτυπώνονται για να δώσει ο χρήστης τιµές, δεν έχετε ακολουθήσει επακριβώς τις οδηγίες της εκφώνησης. - Στην επιλογή του οχήµατος η χρήση της switch ήταν πιο κατάλληλη - Τέλος, στο φορµάρισµα, δεν έχετε βάλει να συµπληρώνεται µε µηδενικά αν η ώρα είναι µονοψήφιος αριθµός. - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε το χρόνο σε Hours παρά τις ταχύτητες σε Km/s. - Για να µετατρέψετε τα Km/h σε Km/s διαιρούµε µε 3600, δεν πολλ/ουµε. - Ο έλεγχος για τις επιτρεπτές τιµές της ώρας δεν ήταν απαραίτητος αλλά ήταν σωστός. - Υπολογισµοί που είναι ίδιοι για όλες τις περιπτώσεις είναι καλύτερα να γίνονται µια φορά έξω από όλα τα if - case παρά να τους γράφετε σε κάθε µια περίπτωση - Χρειάζονταν µερικά σχόλια παραπανω. - Να βελτιώσετε λίγο τη στοίχιση του κώδικά σας. Page 16
1466 1467 3α) -Αποφεύγετε να χρησιμοποιείτε κεφαλαία στις μεταβλητές σας - κεφαλαία μόνο σε const. -Διορθώστε τις ρυθμίσεις του kate σας ώστε να γίνεται σωστά η στοίχιση σας. Είναι δυσνόητος ο κώδικάς σας με την παρούσα στοίχιση. -Η συνθήκη στο while σας είναι λάθος, αντί για && έχετε & ( που κάνει κάτι διαφορετικό). - Ήταν πιο κατάλληλη η χρήση switch αντί για if -Δεν έχετε δηλώσει const τις σταθερές του προβλήματος. -Δεν έχετε υπολογίσει την αρχική απόσταση στην διαφορά. -Δεν βάλατε %5c βάλατε στο πρώτο printf. -Τέλος το return 0; είναι και αυτό μέλος της main δεν χρειάζεται να το κολλάτε αριστερά, μπορεί να έχει ένα tab μπροστά του όπως όλες οι άλλες εντολές της main. 3β) Δεν λύνεται αυτό που ζητάει η εκφώνηση, αλλά έχετε κάνει σωστά το ξεχώρισμα τον ψηφίων. Επίσης δεν έχει νόημα εφόσον χρησιμοποιείτε do-while να γράφετε μία επιπλέον φορά από πάνω τις printf, scanf. Χρησιμοποιείτε την αρχική απόσταση χωρίς να την μετατρέψετε σε χιλιόμετρα και την προσθέτετε με χιλιόμετρα. Ήταν πιο κατάλληλη η χρήση switch αντί για if Δεν χρειαζόταν να κάνετε έλεγχο στις ώρες και στα λεπτά. Page 17
1468 1469 1470 Άσκηση 1: -Καλή δουλειά. Εκτυπώνονται σωστά αποτελέσµατα. -Τις τιµές ανά ώρα έπρεπε να τις δηλώσετε ως σταθερές. Το if-else στις γραµµές 53-57 θα µπορούσε να υλοποιηθεί µε switch-case. Ο έλεγχος του τύπου του αυτοκινήτου µπορεί να γίνει και πιο απλά. Η συνθήκη που έχετε στο εµφωλευµένο if µέσα στο while αποτελεί τη συνθήκη του while. Δηλαδή: do{printf("vehicle Type: "); scanf(" %c", &type); } while(type!='m' && type!='c'&& type!='t'); - Η αποτίµηση των πράξεων στο δεξί µέλος δε χρειάζεται να µπει σε παρενθέσεις. Σωστή µορφοποίηση αποτελεσµάτων αλλά τυπώνετε λάθος την ώρα παραµονής επειδή µπερδευτήκατε µε τις ίδιες σας τις µεταβλητές. Τα ονόµατά τους δεν είναι περιγραφικά και για τους υπολογισµούς που κάνετε έχετε δηλώσει πολλές µεταβλητές. χωρίς να χρειάζονται όλες αυτές. Προσπαθήστε να απλουστεύσετε λίγο τη λογική σας. Άσκηση 2: Ο αλγόριθµος σας δουλεύει αν και η λογική είναι πολύ πιο απλή. Και πάλι δηλώνετε πολλές µεταβλητές που στην ουσία είναι άχρηστες. Μέσα στο while υπολογίζετε το πλήθος των ψηφίων και κάνετε και τη διαίρεση του αριθµού µε το 10. Αν ενσωµατώνατε και τον υπολογισµό του % µέσα στο while θα γλιτώνατε 1) περιττές µεταβλητές, άσκοπες πράξεις και ο κώδικας θα ήτανε πιο απλός! -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. -Πρέπει να χρησιµοποιείτε σταθερές για τις τιµές (τιµές ανα ώρα στην συγκεκριµένη περίπτωση), αφού δεν πρόκειται να αλλάξουν κατα την εκτέλεση -Να στέλνετε τα προγράµµατα ΑΚΡΙΒΩΣ συµφωνα µε τις οδηγίες 3α) Χρησιμοποιείτε κενό (" %d : %d") στην scanf για τον ακέραιο ενώ δεν χρειάζεται. Χρησιμοποιείτε την αρχική απόσταση χωρίς να την μετατρέψετε σε χιλιόμετρα και την προσθέτετε με χιλιόμετρα. Δεν βάλατε %5c βάλατε στο πρώτο printf. Στο printf %5.2lf έπρεπε να είχατε βάλει και όχι %4.2lf. 3β) Καλά την ξεκινήσατε την άσκηση, πρέπει να προσέξετε τον εκθέτη που δίνετε στην pow, άμα σκεφτείτε έναν τρόπο να δίνετε σωστή τιμή εκθέτη κάθε φορά θα δουλέψει. Page 18
1471 FAIL 1472 1473 1474 Στείλατε την άσκηση του προηγούµενου εργαστηρίου η οποία περιείχε και λάθη! Προσέξτε πολύ ποιες ασκήσεις στέλνετε. - Παραδόθηκε µόνο η 1η Ασκηση - Ήταν προτιµότερη η χρήση της scanf από την getchar(). - ΠΡΟΣΟΧΗ στη διαίρεση int/int όταν διαρείτε τα λεπτά µε την τιµη 60. Πρέπει είτε να έχετε double/float µεταβλητή ή να κάνετε type casting. Αλλίως υπολογίζεται µόνο το ακέραιο µέρος της διαίρεσης. - Δεν µετατρέψατε την αρχ. απόσταση σε Km. - Ο έλεγχος για τις επιτρεπτές τιµές της ώρας δεν ήταν απαραίτητος αλλά ήταν κ λανθασµένος. - Ήταν προτιµότερη η χρήση switch-case αντί των if - Τα ονόµατα των σταθερών να γράφονται µε όλο κεφαλαία. - Δε χρειάζεται να αφήνετε κενή γραµµή για κάθε εντολή. Ο κώδικας γίνεται δυσανάγνωστος. - Να βελτιώσετε τη στοίχιση στις δοµές ελέγχου. - Δεν γράψατε αρκετά σχόλια ασκηση 1 - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Για να εµφανιστούν µηδενικά µπροστά από έναν ακέραιο γράφουµε %0d. Διαβάστε το φυλλάδιο για printf/scanf που βρίσκεται στη σελίδα του εργαστηρίου. - επρεπε αντι για scanf("%d %d",&hour_enter, &min_enter); αυτο scanf("%d:%d",&hour_enter, &min_enter); - κατα τα αλλα σωστη ασκηση ασκηση 2 - δεν παραδοθηκε - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε τα µέτρα σε Km παρά τις ταχύτητες σε m/min. - Έπρεπε να δηλώσετε της ταχύτητες ως σταθερές (const) - Υπολογισµοί που είναι ίδιοι για όλες τις περιπτώσεις είναι καλύτερα να γίνονται µια φορά έξω από όλα τα if παρά να τους γράφετε σε κάθε µια περίπτωση - Ήταν προτιµότερη η χρήση switch-case - Στην εκτύπωση της απόστασης το πλάτος έπρεπε να είναι %5.2lf κι όχι %4.2lf - Κακή στοίχιση κ µορφή κώδικα. Οι µεταβλητές που χρησιµοποιούνται στο πρόγραµµα πρέπει να δηλώνονται όλες στην αρχή και όχι σε διάφορα σηµεία στο ενδιάµεσο του κώδικα. Να γράφετε σύντοµα κ επεξηγηµατικά σχόλια. - Το mail δεν περιείχε παραλήπτη στο πεδίο Cc Page 19
1475 1476 FAIL Στο αρχείο σας δώσατε το όνοµα του φακέλου αντί για lab3a.c. Η µορφοποίηση του κώδικα είναι αρκετά άσχηµη. Οι εντολές σας είναι αρκετά συµπαγής γραµµένος (δεν αφήνετε καθόλου κενές γραµµές για να οµαδοποιήσετε κάποιες εντολές). θα µπορούσατε να οµαδοποιήσετε τις εντολές ως εξής: δηλώσεις µεταβλητών, κενή γραµµή, είσοδος δεδοµένων από πληκτρολόγιο, κενή γραµµή, υπολογισµοί, κενή γραµµή, εκτύπωση µηνυµάτων. Δε βάζετε σχόλια. Οι µεταβλητές είναι αρκετά περιγραφικές. Κάνετε σωστό έλεγχο για το αν εισάγεται ο σωστός τύπος οχήµατος αλλά το µήνυµα Vehicle Type εκτυπώνεται 2 φορές. Αυτό οφείλεται στο γεγονός ότι η scanf χρειάζεται % c και όχι %c. Περαιτέρω εξηγήσεις στο σχετικό φροντιστήριο. Στο αλγοριθµικό κοµµάτι υπολογισµού του χρόνου παραµονής, έστω ο υπολογισµός µεταξύ 12:45 και 13:20. Προφανώς ο χρόνος είναι 00:35 λεπτά. Άρα if(startminute>finishminute) {finishminute = finishminute + 60; starthour = starthour + 1;} remainminute = finishminute - startminute; remainhour = finishhour - starthour;. Τέλος δεν έχετε δηλώσει τα κόστη παραµονής ως σταθερές. ασκηση 1 - λαθος συνθηκη στο while µε αποτελεσµα ατερµον βροχο επρεπε while(type!='m' && type!= 'C' && type!='t'); - λαθος εισαγωγη δεδοµενων εχετε παρει σε 4 ακεραιους τους χρονους ενω επρεπε scanf("%d:%d",&hour,&min); και στις 2 περιπτωσεις εισοδου του χρονου. - δεν περνετε ολες τισ περιπτωσεις για υπολογισµο του κοστους - λαθος υπολογισµος κοστους και στη µια περιπτωση που υπολογιζετε αφου price=hour_stayed_in_parking*0.50+minutes_stayed_in_parking*0.50; για µιαµιση ωρα αυτο βγαζει 31 ευρω!! - δεν δηλωσατε σταθερες. - το προγραµµα δεν τρεχει σωστα και απεχει αρκετα απο το να τρεξει σωστα. ασκηση 2 - κενη ασκηση 2 Page 20
1477 FAIL 1478 1479 1480 Άσκηση 1: Ο κώδικας σας είναι πολύ πρόχειρα γραµµένος και άσχηµα µορφοποιηµένος. Καταρχήν δεν κάνει compile. Κώδικας που δεν κάνει compile, κανονικά δε βαθµολογείται. Επίσης δεν κάνατε τις ρυθµίσεις του Kate όπως φαίνονται στο αρχείο Lab1.pdf και αυτός είναι ένας επιπλέον λόγος που χαλάει η µορφοποίηση. Η σύνταξη των printf στο τέλος του κώδικα είναι εντελώς λάθος και εκεί οφείλονται τα errors και warnings που εκτυπώνονται. Παρόλα αυτά, τα λάθη σας είναι τα εξής: 1) το σύµβολο του διάφορο είναι!= και όχι =!. 2) Η διαφορά ώρας δεν υπολογίζεται σωστά (βάσει του κώδικα όπως τον γράψατε). Τα σχόλια που σας γράφουµε είναι για να τα διαβάζετε και να προσπαθείτε να βελτιώνεστε. Το θέµα της στοίχισης είχε σχολιαστεί και στο lab2 και δεν κάνατε κάτι για να το διορθώσετε. Χρησιμοποιείτε την αρχική απόσταση χωρίς να την μετατρέψετε σε χιλιόμετρα και την προσθέτετε με χιλιόμετρα. Ήταν πιο κατάλληλη η χρήση switch αντί για if Αντί για τις τιμές που δίνετε στην result μέσα στο if θα έπρεπε να εκτυπώνετε το αντίστοιχο μήνυμα. Χρησιμοποιείτε την αρχική απόσταση χωρίς να την μετατρέψετε σε χιλιόμετρα και την προσθέτετε με χιλιόμετρα. Ήταν πιο κατάλληλη η χρήση switch αντί για if Αντί για τις τιμές που δίνετε στην result μέσα στο if θα έπρεπε να εκτυπώνετε το αντίστοιχο μήνυμα. - Τα ονόµατα των σταθερών γράφονται µε κεφαλαία. - Γιατί έχετε και δεύτερο scanf µετά το do-while? Αφού ήδη διαβάστηκε και ελέγχθηκε η µεταβλητή Hunter. - Το κενό ανάµεσα στο " και στο % πάει µόνο στην περίπτωση που διαβάζουµε χαρακτήρα. - Οι συνθήκες στα if σας είναι αρκετά µπερδεµένες, και η έλλειψη αγκίστρων έχει ως αποτέλεσµα λάθος έξοδο. Δείτε τη λύση για ένα πιο κοµψό (και τελικά πιο σωστό) τρόπο να το κάνετε. - Επίσης, ήταν καλύτερη η χρήση switch σε αυτή την περίπτωση. Page 21
1481 1483 1484 - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε τα µέτρα σε Km παρά τις ταχύτητες σε m/min. - Έπρεπε να δηλώσετε της ταχύτητες ως σταθερές (const) - Υπολογισµοί που είναι ίδιοι για όλες τις περιπτώσεις είναι καλύτερα να γίνονται µια φορά έξω από όλα τα if παρά να τους γράφετε σε κάθε µια περίπτωση - Ήταν προτιµότερη η χρήση switch-case - Στην εκτύπωση της απόστασης το πλάτος έπρεπε να είναι %5.2lf κι όχι %4.2lf - Κακή στοίχιση κ µορφή κώδικα. Οι µεταβλητές που χρησιµοποιούνται στο πρόγραµµα πρέπει να δηλώνονται όλες στην αρχή και όχι σε διάφορα σηµεία στο ενδιάµεσο του κώδικα. Να γράφετε σύντοµα κ επεξηγηµατικά σχόλια. - Το mail δεν περιείχε παραλήπτη στο πεδίο Cc 3α) Χρησιμοποιείτε κενό (" %d : %d") στην scanf για τον ακέραιο ενώ δεν χρειάζεται. Χρησιμοποιείτε την αρχική απόσταση χωρίς να την μετατρέψετε σε χιλιόμετρα και την προσθέτετε με χιλιόμετρα. Δεν βάλατε %5c βάλατε στο πρώτο printf. Στο printf %5.2lf έπρεπε να είχατε βάλει και όχι %4.2lf. 3β) Καλά την ξεκινήσατε την άσκηση, πρέπει να προσέξετε τον εκθέτη που δίνετε στην pow, άμα σκεφτείτε έναν τρόπο να δίνετε σωστή τιμή εκθέτη κάθε φορά θα δουλέψει. - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε τα µέτρα σε Km παρά τις ταχύτητες σε m/min. - Η απόσταση υπολογίζεται ως ταχυτ * χρόνος κ όχι ταχυτ / χρόνος - H σωστή έκφραση στη scanf για την ώρα είναι: %d : %d - Ήταν προτιµότερη η χρήση switch-case - Στην εκτύπωση της απόστασης το πλάτος έπρεπε να είναι %5.2lf κι όχι %f - Τα ονόµατα των σταθερών να γράφονται µε όλο κεφαλαία. - Πολύ καλή χρήση σύντοµων σχολίων στον κώδικα. - Να έχετε καλύτερη στοίχιση, ιδιαίτερα στα if. Να χρησιµοποιείται tabs και να αποφεύγεται µεγάλα µήκη γραµµών κώδικα.. Page 22
1485 1486 ασκηση 1 - Δε λαµβάνετε υπόψη την περίπτωση που το minutes2 είναι µικρότερο του minutes1 - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Για να εµφανιστούν µηδενικά µπροστά από έναν ακέραιο γράφουµε %0d. - Υπολογισµοί που είναι ίδιοι για όλες τις περιπτώσεις (πχ hours=hours2-hours1; ) είναι καλύτερα να γίνονται µια φορά έξω από όλα τα if παρά να τους γράφετε σε κάθε µια περίπτωση - λαθος υπολογισµος κοστους : pay = (Total_time * CAR) + (CAR * ((double)total_time)/60); στην περιπτωση που κατσει 60 λεπτα ενα αυτοκινητο µε βαση τον τυπο σας πληρωνει 1,02 και οχι 1 ευρω ασκηση 2 - πολλα συντακτικα λαθη ( κυριως ερωτηµατικα ) - δεν κανει compile - σε γενικα καλο δροµο η ασκηση αλλα ελλειπης. ασκηση 1 - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Για να εµφανιστούν µηδενικά µπροστά από έναν ακέραιο γράφουµε %0d. Διαβάστε το φυλλάδιο για printf/scanf που βρίσκεται στη σελίδα του εργαστηρίου. - λαθος συνθηκη στο while µε αποτελεσµα να µην δουλευει σωστα επρεπε while(type!='m' && type!= 'C' && type!='t'); - κατα τα αλλα σωστη ασκηση. ασκηση 2 Page 23
1487 1488 - Πάρα πολύ καλά! Καθαρογραµµένος κώδικας, έχετε όσα σχόλια χρειάζεται, εξηγώντας σε βασικά σηµεία τι κάνετε - Δίνεται περιγραφικά ονόµατα στις µεταβλητές, έχετε ως σταθερές τις τιµές κόστους ανά ώρα για κάθε όχηµα - Υπολογίζετε πολύ σωστά το χρόνο παραµονής στο πάρκινγκ - Το µόνο που δεν προσέξατε ήταν στα µηνύµατα που εκτυπώνονται για να δώσει ο χρήστης τιµές, δεν έχετε ακολουθήσει επακριβώς τις οδηγίες της εκφώνησης. - Στην επιλογή του οχήµατος η χρήση της switch ήταν πιο κατάλληλη - Τέλος, στο φορµάρισµα, δεν έχετε βάλει να συµπληρώνεται µε µηδενικά αν η ώρα είναι µονοψήφιος αριθµός. - Τα ονόµατα των σταθερών γράφονται µε κεφαλαία. - Γιατί έχετε και δεύτερο scanf µετά το do-while? Αφού ήδη διαβάστηκε και ελέγχθηκε η µεταβλητή Hunter. - Το κενό ανάµεσα στο " και στο % πάει µόνο στην περίπτωση που διαβάζουµε χαρακτήρα. - Οι συνθήκες στα if σας είναι αρκετά µπερδεµένες, και η έλλειψη αγκίστρων έχει ως αποτέλεσµα λάθος έξοδο. Δείτε τη λύση για ένα πιο κοµψό (και τελικά πιο σωστό) τρόπο να το κάνετε. - Επίσης, ήταν καλύτερη η χρήση switch σε αυτή την περίπτωση. Page 24
1489 1490 Γενικά: Βάλατε το συµπιεσµένο αρχείο και τα αρχεία που γράψατε µέσα στο συµπιεσµένο! Να θυµάστε να βάζετε σχόλια. Άσκηση 1: Ο κώδικάς σας είναι αρκετά συµπαγής γραµµένος (δεν αφήνετε καθόλου κενές γραµµές για να οµαδοποιήσετε κάποιες εντολές). θα µπορούσατε να οµαδοποιήσετε τις εντολές ως εξής: δηλώσεις µεταβλητών, κενή γραµµή, είσοδος δεδοµένων από πληκτρολόγιο, κενή γραµµή, υπολογισµοί, κενή γραµµή, εκτύπωση µηνυµάτων. Τα ονόµατά σας είναι περιγραφικά και έχετε δηλώσει και τις σταθερές όπου χρειαζότανε. Το if-else στον υπολογισµό του κόστους θα µπορούσε να υλοποιηθεί µε switchcase. Ο µορφοποίηση των αποτελεσµάτων στην έξοδο είναι σωστή. Ωστόσο δεν υπολογίζετε σωστά τα εξαγόµενα αποτελέσµατα. Αναλυτικότερα, έστω υπολογισµός µεταξύ 12:45 και 13:20. Προφανώς ο χρόνος είναι 00:35 λεπτά. Άρα if(startminute>finishminute) {finishminute = finishminute + 60; starthour = starthour + 1;} remainminute = finishminute - startminute; remainhour = finishhour - starthour; -Τέλος, 1h = 60sec. Άρα για να πάρουµε ένα κλάσµα της ώρας διαιρούµε µε το 60 και όχι µε το 100 όπως κάνατε στα τµήµατα υπολογισµού των χρηµάτων. Άσκηση 2: Δε χρειάζονται παρενθέσεις για την αποτίµηση των πράξεων στο δεξί µέλος. Ωραία υλοποίηση. 3α) - Δείτε στη λύση πως συνηθίζεται να συντάσεται το if/else. Ο τρόπος που το γράψατε δεν είναι λάθος, αλλά είναι δυσνόητος. - Προσθέτετε μέτρα με χιλιόμετρα!! ΠΡΟΣΟΧΗ! - Στο printf %5.2lf έπρεπε να είχατε βάλει και όχι %2.2lf. - Τέλος το return 0; είναι και αυτό μέλος της main δεν χρειάζεται να το κολλάτε αριστερά, πρέπει να έχει ένα tab μπροστά του όπως όλες οι άλλες εντολές της main. Page 25
1491 1492 1493 1494 FAIL 3α) -Καταρχήν παιδιά δεν ονομάζουμε με.c τους φακέλους, δεν χρειάζονται κάποια κατάληξη. - Επίσης, δεν έχετε ακολουθήσει σωστά τις οδηγίες αποστολής (δε φτιάξατε φάκελο με τα ονόματά σας) - Ήταν πιο κατάλληλη η χρήση switch αντί για if -Όπως σας είπαμε και στο μάθημα καλό είναι να βάζουμε κενό στο "%c" ανάμεσα στο και στο %, ώστε να μην διαβάζει τό enter. -Έχετε λάθος συνθήκη στην while σας, αφού έχετε αντί για &&. -Στην scanf δεν βάζουμε πόσα ψηφία να διαβάσει ("%2d:%2d") ήθελε χωρίς τα 2.-Προσθέτετε απόσταση που είναι σε χιλιόμετρα με απόσταση που είναι σε μέτρα, πώς να βγαίνουν λογικά νούμερα μετά στις εκτυπώσεις σας; -Επίσης ΑΠΟΣΤΑΣΗ= ΤΑΧΥΤΗΤΑ * ΧΡΟΝΟ και όχι / ΧΡΟΝΟ, ΕΛΕΟΣ! -Δεν ακολουθείτε το format εξόδου που ζητήθηκε, αφού ούτε result βάλατε να εμφανίζετε ούτε να εκτυπώνονται στην ίδια στήλη τα νούμερα, ούτε %5c βάλατε στο πρώτο printf.τέλος το return 0; είναι και αυτό μέλος της main δεν χρειάζεται να το κολλάτε αριστερά, μπορεί να έχει ένα tab μπροστά του όπως όλες οι άλλες εντολές της main. 3α) Εξηγήστε μας στο επόμενο εργαστήριο πως μετατρέπετε λεπτά σε ώρες με αυτήν την εντολή: x = (mins * 100)/60; Το = είναι για εκχώρηση τιμών σε μεταβλητές, όχι για να κάνεις συγκρίσεις, όπως κάνετε εσείς μέσα στα if. Ήταν πιο κατάλληλη η χρήση switch αντί για if Στην διαφορά που εκτυπώνετε δεν έχετε υπολογίσει την αρχική διαφορά. - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε το χρόνο σε Hours παρά τις ταχύτητες σε Km/s. - Για να µετατρέψετε τα Km/h σε Km/s διαιρούµε µε 3600, δεν πολλ/ουµε. - Ο έλεγχος για τις επιτρεπτές τιµές της ώρας δεν ήταν απαραίτητος αλλά ήταν σωστός. - Υπολογισµοί που είναι ίδιοι για όλες τις περιπτώσεις είναι καλύτερα να γίνονται µια φορά έξω από όλα τα if - case παρά να τους γράφετε σε κάθε µια περίπτωση - Χρειάζονταν µερικά σχόλια παραπανω. - Να βελτιώσετε λίγο τη στοίχιση του κώδικά σας. - Απουσία από το εγραστήριο. Page 26
1495 FAIL 1496 Ο φάκελος που στείλατε ήτανε κενός και δεν περιείχε κανένα αρχείο. Επίσης δε βάλατε τα ΑΕΜ σας. - Μάθετε να πακετάρετε και να στέλνετε τις ασκήσεις σας! - Τις τιµές ανά ώρα έπρεπε να τις είχατε δηλώσει ως σταθερές. - Λάθος στο scanf που διαβάζει χαρακτήρα. Διαβάστε το φυλλάδιο για printf/scanf που βρίσκεται στη σελίδα του εργαστηρίου - Δεν υπολογίζετε σωστά την περίπτωση που min_out < min_in - Ήταν πιο κατάλληλη η χρήση switch κι όχι if για την επιλογή τύπου οχήµατος - Προσέξτε τη στοίχιση 1497 Άσκηση 1: -Έχετε κακή µορφοποίηση κώδικα. Δεν οµαδοποιείτε καλά τις εντολές. Τα ονόµατα των εντολών δεν είναι όλα περιγραφικά. Τι παριστάνει η µεταβλητή temp. (Δε φαίνεται κάτι από το όνοµά της.). Δεν έχετε δηλώσει το κόστος παραµονής για κάθε όχηµα ως σταθερές. TΟ συνολικό κόστος δεν έπρεπε να δηλωθεί ως ακέραιος αλλά ως δεκαδικός. Στο αλγοριθµικό κοµµάτι οι υπολογισµοί σας είναι αρκετά λάθος. Εντοπίζετε ότι µπορεί τα λεπτά αναχώρησης να είναι µικρότερα σε τιµή αλλά δε τα χειρίζεστε σωστά και εκτυπώνετε τελικά αρνητική τιµή! Μία εναλλακτική υλοποίηση για αυτό το κοµµάτι είναι η εξής: if(startminute>finishminute) {finishminute = finishminute + 60; starthour = starthour + 1;} remainminute = finishminute - startminute; remainhour = finishhour - starthour; - Ο τρόπος υπολογισµού του κόστους παραµονής είναι εντελώς λάθος. Προσθέτετε ώρες και λεπτά (αυτά έχουν άλλες µονάδες). Στην ουσία θέλουµε λεπτά_παραµονής/60 για να δουλέψει µε τον τρόπο που το υλοποιήσατε. Τέλος το if-else στις γραµµές 31-45 θα µπορούσε να υλοποιηθεί καλύτερα µε switch case. Αλλά ο τρόπος που το υλοποιήσατε είναι επίσης λάθος. Δε χρειάζεται εµφώλευση της νέας περίπτωσης if. Κοιτάξτε την υλοποίηση του if else if- else! Τέλος στο mail που στείλατε βάλατε λάθος subject. Page 27
1498 1499 FAIL 1500 1501 -Πολύ καλή δουλειά! -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. Στείλατε την άσκηση του προηγούµενου εργαστηρίου η οποία περιείχε και λάθη! Προσέξτε πολύ ποιες ασκήσεις στέλνετε. - Είχατε λάθος τη συνθήκη ελέγχου στην while και γι' αυτό το πρόγραµµα σας έµπαινε σε ατέρµονο βρόχο - Έχετε ονοµάσει σωστά τις µεταβλητές, ορίζοντας ως σταθερές τις τιµές κόστους ανά ώρα για κάθε όχηµα, αλλά έχετε βάλει ως int την χρέωση, που θα έπρεπε να είναι float ή double, ενώ έχετε ως float το χρόνο που δεν θα πάρει ποτέ δεδαδική τιµή - Έχετε ξεχάσει printf εντολές µέσα στις εντολές επιλογής οχήµατος, όπου η switch ήταν πιο κατάλληλη. - Τέλος, δεν προσέξατε καθόλου τη στοίχιση στην εκτύπωση των αποτελεσµάτων 3α) Εξηγήστε μας στο επόμενο εργαστήριο πως μετατρέπετε λεπτά σε ώρες με αυτήν την εντολή: x = (mins * 100)/60; Το = είναι για εκχώρηση τιμών σε μεταβλητές, όχι για να κάνεις συγκρίσεις, όπως κάνετε εσείς μέσα στα if. Ήταν πιο κατάλληλη η χρήση switch αντί για if Στην διαφορά που εκτυπώνετε δεν έχετε υπολογίσει την αρχική διαφορά. Page 28
1502 1503 1504 1505 - Υπήρχε ένα περίσσιο } στο τέλος του κώδικα και έπρεπε να το σβήσω για να κάνει compile. Επίσης, έλειπε το return 0; - Αποφεύγετε να χρησιμοποιείτε κεφαλαία στις μεταβλητές σας. Κεφαλαία τυπικά πάνε στα ονόματα σταθερών. - Όπως σας είπαμε και στο μάθημα καλό είναι να βάζουμε κενό στο "%c" ανάμεσα στο και στο %, ώστε να μην διαβάζει το enter αλλά μόνο τον χαρακτήρα που θέλουμε. - Έχετε γράψει ένα while όπου ελέγχετε τις τιμές της μεταβλητής hunter, όμως την πρώτη φορά που θα γίνει ο έλεγχος τι τιμή θα έχει η hunter; Δεν την έχετε αρχικοποιήσει και περιέχει σκουπίδια. Έπρεπε να είχατε χρησιμοποιήσει do-while ή να έχετε διαβάσει την τιμή πριν το while. -Χρησιμοποιείτε μια δεύτερη while όπου επανελέγχετε την μεταβλητή hunter, ΟΥΔΕΝ σκοπό έχει αυτή η while στην άσκηση που σας ζητήθηκε, αφού απλώς ξανατρέχει ένα κοµµάτι κώδικα που δεν θα έπρεπε. - Δεν έχετε δηλώσει const τις σταθερές του προβλήματος. - Χρησιμοποιείτε κενά (" %d : %d ") στην scanf για τους ακέραιους ενώ δεν χρειάζεται. - Αντί να διαιρέσετε με 1000 για να βγάλετε χιλιόμετρα από τα μέτρα, πολλαπλασιάζεται με 1000. ΔΕΝ μπορεί να δουλέψει έτσι το πρόγραμμα σωστά. -Πολύ καλή δουλειά! -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. -Προσοχή όταν διαιρείται int/int το αποτέλεσµα είναι int!!! -Πολύ καλή δουλειά! -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. - Πολύ άσχηµη στοίχιση! Διαβάστε τις οδηγίες µορφοποίησης προγραµµάτων στη σελίδα του εργαστηρίου - Στην τελική εκτύπωση του κυνηγού έπρεπε να είχατε χρησιµοποιήσει %5c - Ήταν πιο κατάλληλη η χρήση switch αντί για if Page 29
1506 1507 FAIL 1508 1510 - Πολύ άσχηµη στοίχιση! Διαβάστε τις οδηγίες µορφοποίησης προγραµµάτων στη σελίδα του εργαστηρίου - Στην τελική εκτύπωση του κυνηγού έπρεπε να είχατε χρησιµοποιήσει %5c - Ήταν πιο κατάλληλη η χρήση switch αντί για if - Ο Φάκελος που παραδόθηκε ήταν ΚΕΝΟΣ. Να κάνετε πάντα επιβεβαίωση ότι στείλατε την άσκηση. - Λάθος ΑΜ. Αντί για 1507 είχε 1550 - Τις τιµές ανά ώρα έπρεπε να τις είχες δηλώσει ως σταθερές. - Να βάζεις πάντα σχόλια στα προγράµµατα. - Μπράβο για τη χρήση switch! - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε τα µέτρα σε Km παρά τις ταχύτητες σε m/min. - Η απόσταση υπολογίζεται ως ταχυτ * χρόνος κ όχι ταχυτ / χρόνος - H σωστή έκφραση στη scanf για την ώρα είναι: %d : %d - Ήταν προτιµότερη η χρήση switch-case - Στην εκτύπωση της απόστασης το πλάτος έπρεπε να είναι %5.2lf κι όχι %f - Τα ονόµατα των σταθερών να γράφονται µε όλο κεφαλαία. - Πολύ καλή χρήση σύντοµων σχολίων στον κώδικα. - Να έχετε καλύτερη στοίχιση, ιδιαίτερα στα if. Να χρησιµοποιείται tabs και να αποφεύγεται µεγάλα µήκη γραµµών κώδικα.. 1511 -Πρέπει να χρησιµοποιείτε καλύτερα ονόµατα µεταβλητών -Πρέπει να χρησιµοποιείτε σταθερές για τις τιµές (τιµές ανα ώρα στην συγκεκριµένη περίπτωση), αφού δεν πρόκειται να αλλάξουν κατα την εκτέλεση -Πρέπει να "φορµάρετε" την έξοδο µε βάση τα ζητούµενα απο την εκφώνηση -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Μεγάλη προσοχή στη στοίχιση του κώδικα! -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. Page 30
1512 1513 1514 -Θα µπορούσατε καλύτερα να χρησιµοποιήσετε την εντολή "switch - case" αντί για πολλαπλά "if,else-if,else" -Πρέπει να βάζετε σχόλια στα προγράµµατά σας. -Πρέπει να χρησιµοποιείτε σταθερές για τις τιµές (τιµές ανα ώρα στην συγκεκριµένη περίπτωση), αφού δεν πρόκειται να αλλάξουν κατα την εκτέλεση -Να στέλνετε τα προγράµµατα ΑΚΡΙΒΩΣ συµφωνα µε τις οδηγίες - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε τα µέτρα σε Km παρά τις ταχύτητες σε m/s. - Λάθος υπολογισµός της ταχύτητας σε m/s. Έπρεπε να πολ/ασετε µε (1000/3600) και όχι µε 3.6 - Δε λάβατε υπόψη την αρχική απόσταση. - Έπρεπε να δηλώσετε της ταχύτητες ως σταθερές (const) - Ο συν. χρόνος και η απόσταση του Roadrunner είναι ανεξάρτητα από τον τύπο του κυνηγού κ θα µπορούσαν να υπολογιστούν µία φορά εκτός του if κ οχι σε κάθε branch. - Ήταν προτιµότερη η χρήση switch-case - Στη σύγκριση των αποστάσεων παραλέιψατε τη συνθήκη == - Να έχετε καλύτερη στοίχιση κώδικα, µορφοποίηση εξόδου κ περισσότερα σχόλια. - Παραδόθηκε µόνο η 1η Ασκηση. - Ήταν προτιµότερο να µετατρέψετε τα µέτρα σε Km παρά τις ταχύτητες σε m/s. - Λάθος υπολογισµός της ταχύτητας σε m/s. Έπρεπε να πολ/ασετε µε (1000/3600) και όχι µε 3.6 - Δε λάβατε υπόψη την αρχική απόσταση. - Έπρεπε να δηλώσετε της ταχύτητες ως σταθερές (const) - Ο συν. χρόνος και η απόσταση του Roadrunner είναι ανεξάρτητα από τον τύπο του κυνηγού κ θα µπορούσαν να υπολογιστούν µία φορά εκτός του if κ οχι σε κάθε branch. - Ήταν προτιµότερη η χρήση switch-case - Στη σύγκριση των αποστάσεων παραλέιψατε τη συνθήκη == - Να έχετε καλύτερη στοίχιση κώδικα, µορφοποίηση εξόδου κ περισσότερα σχόλια. Page 31