Προγραμματισμός 1 Σύντομο Quiz 25/9/9 Ενδεικτικές λύσεις και στατιστικά Ερώτηση 1: Γράψτε παρακάτω συνάρτηση η οποία δέχεται ως παραμέτρους ένα string και ένα χαρακτήρα και επιστρέφει τον αριθμό των εμφανίσεων του χαρακτήρα στο string. Η συνάρτηση θα πρέπει να λειτουργεί υποχρεωτικά με αναδρομικό τρόπο. Δεν επιτρέπεται να χρησιμοποιήσετε παραπάνω ορίσματα στη συνάρτηση. Δεν επιτρέπεται να χρησιμοποιήσετε καθολικές μεταβλητές. int count_chars (char *str, char lookfor) { int found; if (*str == '\') return(); found = (*str == lookfor); str++; return(found + count_chars(str, lookfor)); Σχόλια: Η άσκηση είχε διδαχθεί αυτούσια στο προηγούμενο ακριβώς μάθημα. Δεν υπήρχε στις διαφάνειες αλλά είχε γραφτεί στον πίνακα. Μετά από ένα μικρό γκάλοπ, τη σημείωσαν 4 (ολογράφως τέσσερις) φοιτητές. Ερώτηση 2: Τι θα τυπώσει ο παρακάτω κώδικας; Απαντήστε στον παράπλευρο χώρο. int i, j; for (i =, j = x81; i < 1; i++, j++) { printf( i = x%x j = x%x\n, i, j); i = i << 2; j = j >> 2; i = x j = x81 i = x1 j = xe1 i = x5 j = xf81 Σχόλια: Σχετική ύλη: διάλεξη 4 + παραδείγματά της Στην ολίσθηση δεξιά, το με τι συμπληρώνονται οι κενές θέσεις εξαρτάται από το αν ο αριθμός είναι προσημασμένος ή απρόσημος. Αν είναι απρόσημος, οι κενές θέσεις συμπληρώνονται με. Αν είναι προσημασμένος, οι κενές θέσεις συμπληρώνονται με ότι ήταν το πιο σημαντικό bit. Στην περίπτωσή μας, συμπληρώνονται με 1. Θα περίμενε κανείς ότι θα καταφέρνατε (τουλάχιστον) να κάνετε σωστά τους υπολογισμούς του i, οι οποίοι δεν έχουν κάτι το πονηρό.
Συνηθισμένα λάθη: Να γίνεται το i++ ή j++ πριν εκτελεστούν οι εντολές του block του for. Να θεωρείτε ότι το for τρέχει για 1 επαναλήψεις. Να γίνεται η ολίσθηση κατά δεκαεξαδικά ψηφία αντί κατά bits. Έτσι π.χ. με αυτή τη λογική το x1 << 2 γινόταν x1 αντί του σωστού x4. Ερώτηση 3: Λύστε την άσκηση της ερώτησης 1 με επαναληπτικό τρόπο (όχι αναδρομικά). Δώστε και τη main που θα χρησιμοποιήσετε, η οποία θα περιλαμβάνει και την κλήση της συνάρτησης. #include <stdio.h> int count_chars (char *str, char lookfor) { int count = ; while (*str!= '\') { if (*str == lookfor) { count++; str++; return(count); int main(int argc, char *argv[]) { char my_str[] = "The rain in Spain"; char lookfor_char = ' '; int count; count = count_chars(my_str, lookfor_char); printf("character %c found %d times\n", lookfor_char, count); return(); Συνηθισμένα λάθη (από που να ξεκινήσει κανείς...): / και /n αντί για \ και \n. Το λάθος ήταν τόσο συχνό που προς στιγμήν προβληματίστηκα για το ποιο είναι το σωστό και έψαξα στο βιβλίο. = αντί για == σε τελεστές σύγκρισης Αύξηση τιμής μεταβλητής η οποία δεν έχει αρχικοποιηθεί σε κάτι Να γίνεται το str++ μόνο μέσα στο if και όχι σε κάθε περίπτωση Να μην μπαίνουν οι τύποι στις τυπικές παραμέτρους των συναρτήσεων όταν δηλώνεται η συνάρτηση Να μπαίνουν τύποι μπροστά από τις πραγματικές παραμέτρους των συναρτήσεων όταν καλείται η συνάρτηση Να είναι δηλωμένη η συνάρτηση μέσα στο block εντολών της main
Να μην αποθηκεύεται πουθενά / να μην αξιοποιείται κάπως το αποτέλεσμα της συνάρτησης. Να δηλώνονται μεταβλητές ως pointers και να ανατίθενται τιμές εκεί που δείχνουν χωρίς να δεσμευθεί μνήμη (!!!???!!!) Σχόλιο: ΟΛΑ μα όλα τα παραπάνω λάθη τα κάνετε και στα εργαστήρια και σας έχουν επισημανθεί ΠΑΡΑΠΑΝΩ ΑΠΟ ΜΙΑ ΦΟΡΕΣ στα προσωπικά σχόλια που παίρνετε για την ποιότητα των εργασιών που υποβάλετε. ΒΑΘΜΟΛΟΓΙΑ ΚΑΙ ΣΤΑΤΙΣΤΙΚΑ Εγγεγραμμένοι στο μάθημα: 376 Σημείωση 1: Ο πραγματικός αριθμός είναι μεγαλύτερος, γιατί δεν συμπεριλαμβάνονται μετεγγραφές Παρόντες τη μέρα του quiz: 141 Ποσοστό παρόντων (επί του συνόλου των εγγεγραμμένων): 37,5 % Σημείωση 2: Το πραγματικό ποσοστό είναι μικρότερο (δείτε σημείωση 1) Παρόντες 1ετείς: 71 Παρόντες μεγαλύτερων ετών: 7 Δεν είχαν στυλό: 17 Σημείωση 3: Ο πραγματικός αριθμός είναι μεγαλύτερος, γιατί στον αριθμό περιλαμβάνονται μόνο όσοι δεν είχαν στυλό και δεν κατάφεραν να βρουν δανεικό από τους γύρω τους Ποσοστό που δεν είχαν στυλό (επί των παρόντων): 12,6 % Σημείωση 4: Το πραγματικό ποσοστό είναι μεγαλύτερο (δείτε σημείωση 3) Τουριστική θέση (δεν είχαν στυλό ή ο συνολικός βαθμός ήταν < 1): 52 Σημείωση 5: Ο πραγματικός αριθμός είναι μεγαλύτερος (δείτε σημείωση 3) Ποσοστό τουριστικής θέσης (επί των παρόντων): 36,88 % Σημείωση 6: Το πραγματικό ποσοστό είναι μεγαλύτερο (δείτε σημείωση 3) Μέσοι όροι βαθμών και τυπικές αποκλίσεις Σημείωση 7: Σε όλα τα νούμερα και τα διαγράμματα από αυτό το σημείο και κάτω ΔΕΝ συμπεριλαμβάνονται όσοι δεν είχαν στυλό. Σημείωση 8: Όλοι οι βαθμοί είναι με άριστα το 1 (και βάση το 5) Μέσος όρος (Τυπική απόκλιση) Άσκηση 1 Άσκηση 2 Άσκηση 3 Σύνολο Σύνολο 13,78 (26,4) 2,99 (8,43) 51,73 (35,9) 22,83 (17,3) 1 ετείς 12,16 (26,37) 2,99 (7,74) 51,49 (33,86) 22,21 (16,2) > ετείς 15,58 (26,54) 3 (9,21) 52 (36,71) 23,53 (18,74) Φοιτητές με βαθμό >=5: 12 Ποσοστό: 9,68 % 1ετείς με βαθμό >=5: 4 Ποσοστό (επί 1ετών): 5,97% >ετείς με βαθμό >=5: 8 Ποσοστό (επί μεγαλοετών): 13,33 %
Κατανομή βαθμολογίας (ανά άσκηση και στο σύνολο) 9 8 7 6 5 4 3 1 Άσκηση 1 1 Άσκηση 2 1 8 6 4 3 Άσκηση 3 25 15 1 5
4 Μέσος Όρος 35 3 25 15 1 5 ΣΧΟΛΙΑΣΜΟΣ Περιττεύει...