Συζητήσεις για το μάθημα και ανακοινώσεις

Ασκησεις 8,9

 
Picture of MICHAILIA PINELOPI GIAKOUMAKI
Ασκησεις 8,9
by MICHAILIA PINELOPI GIAKOUMAKI - Saturday, 14 October 2017, 1:53 PM
 

Καλησπερα,

Στις ασκησεις 8,9 δινεται υποδειξη να χρησιμοποιησουμε το floor. Και στις 2 ο tester βγαινει σωστος χωρις την εντολη αυτη. Γιατι πρεπει να την χρησιμοποιησουμε; Και πως την χρησιμοποιουμε στα συγκεκριμενα προγραμματα;

Picture of Μιχάλης Κολουντζάκης
Re: Ασκησεις 8,9
by Μιχάλης Κολουντζάκης - Saturday, 14 October 2017, 4:46 PM
 

Οι ασκήσεις που σας βάζω είναι για να τις κάνετε με αυτά που έχετε μάθει μέχρι τώρα στο μάθημα, όχι με αυτά που μπορεί να ξέρετε.

Για τις ασκήσεις 08 και 09 δεν πρέπει κατ' αρχήν να χρησιμοποιήσετε ανακύκλωση for, για την οποία δεν έχουμε ακόμη μάθει σχεδόν τίποτα. Οι ασκήσεις αυτές μπορούν να γίνουν με τη χρήση της math.floor χωρίς ανακύκλωση, ακόμη και χωρίς if. Ούτε μισή γραμμή δεν είναι αν το κάνετε όπως πρέπει.

Δε λέω ότι οι λύσεις που έχουν δοθεί με for loop είναι λάθος. Ό,τι παραπάνω ξέρετε για καλό σας είναι. Απλώς αναρωτηθείτε πώς γίνεται να γίνει με αυτά που ξέρετε.

Επίσης κάτι άλλο που παρατήρησα στην άσκηση 08 (και γι' αυτό έφτιαξα την 09) είναι ότι κάποιοι έδωσαν μια λύση της εξής μορφής:

if x>=0 and x<1:
 v=F[0]
if x>=1 and x<2:
 v=F[1]
...
if x>=8 and x<9:
 v=F[8]
if x>=9 and x<10:
 v=F[9]

Αυτό δουλεύει αλλά είναι μια πολύ άσχημη λύση. Ο λόγος είναι ότι το μέγεθος της λύσης (το πόσες γραμμές κώδικα δηλ. γράφει κανείς) είναι ανάλογο μιας παραμέτρου του προβλήματος, στην περίπτωσή μας του αριθμού 10. Μπορείτε να φανταστείτε μια τέτοια λύση αν στην εκφώνηση αντί για τον αριθμό 10 είχαμε τον αριθμό 1000; Θα ήταν μια λύση με 2000 γραμμές! Ενώ η σωστή λύση (που πολλοί έχουν βρει, αυτοί ή οι φίλοι τους) θα εξακολουθούσε να είναι μισή γραμμή. Στην άσκηση 09 λοιπόν είναι αδύνατο να δοθεί μια τέτοια λύση, γιατί το μήκος της λίστας είναι στα στοιχεία εισόδου του προβλήματος και αλλάζει κάθε φορά.