Ασκήσεις

Προηγούμενες

Επόμενες

Συναρτήσεις - Συνέχεια

Ασκήσεις κατανόησης

Άσκηση.

Γράψτε μία συνάρτηση print_rect η οποία θα τυπώνει ένα ορθογώνιο με αστεράκια (*). Στη συνέχεια γράψτε μία δεύτερη συνάρτηση print_square η οποία θα τυπώνει ένα τετράγωνο κάνοντας χρήση της print_rect.


def print_rect(a, b):
    for i in range(a):
        print('*' * b)

def print_square(a):
    print_rect(a, a)


print_rect(4, 8) # τυπώνει ορθογώνιο πλευρών 4,8
print_square(5) # τυπώνει τετράγωνο πλευράς 5

Ασκήσεις εργαστηρίου

Άσκηση.

Γράψτε μια συνάρτηση sumSq που να δέχεται ως όρισμα μία λίστα ακεραίων L και να υπολογίζει το άθροισμα x12 + x22 + ... xn2. Γράψτε δύο ακόμα συναρτήσεις οι οποίες να δέχονται ως όρισμα έναν αριθμό n και η μία θα υπολογίζει το άθροισμα 12 + 32 + ... n2 (περιττοί όροι μικρότεροι ή ίσοι του n), ενώ η άλλη θα υπολογίζει το άθροισμα 22 + 42 + ... n2 (άρτιοι όροι μικρότεροι ίσοι του n).
[Υπόδειξη: Φτιάξτε κατάλληλες λίστες με τους άρτιους είτε τους περιττούς όρους και καλέστε τη συνάρτηση της προηγούμενης άσκησης.]

Άσκηση.

Γράψτε ένα πρόγραμμα το οποίο θα μπορεί να υπολογίζει το άθροισμα όλων των στοιχείων μία λίστας η οποία περιέχει αριθμούς. Το πρόγραμμα θα πρέπει να μπορεί να διαχειρίζεται περιπτώσεις στις οποίες η λίστα περιέχει λίστες (οι οποίες έχουν στοιχεία αριθμούς).
[Υπόδειξη. Γράψτε μία συνάρτηση sumL η οποία θα υπολογίζει το άθροισμα των στοιχείων μίας λίστας αριθμών και καλέστε επαναληπτικά την συνάρτηση αυτή.]

Άσκηση.

(Γωνία μεταξύ διανυσμάτων) Γράψτε συνάρτηση angleVectors η οποία θα δέχεται τις συνιστώσες δύο διανυσμάτων και θα επιστρέφει τη γωνία μεταξύ τους. [Υπόδειξη. Η συνάρτηση acos του πακέτου math δίνει το αντίστοφο συνημίτονο.]

Άσκηση.

Έστω f η συνάρτηση f(x)=x  sin(x). Γράψτε τη συνάρτηση fsign η οποία να επιστρέφει μια ακολουθία χαρακτήρων αποτελούμενη από τους χαρακτήρες '+' και '-' ανάλογα αν η τιμή της συνάρτησης f είναι θετική ή όχι στα μέσα των διαστημάτων $[0,1], [1,2],\ldots,[99,100]$. Για παράδειγμα, αν η συνάρτηση είναι παντού θετική θα πρέπει να επιστρέψει μια ακολουθία χαρακτήρων αποτελούμενη από 100 χαρακτήρες, όλους ίσους με τον '+'.

Άσκηση.

Όλοι οι αριθμοί τηλεφώνου στην Ελλάδα έχουν δέκα ψηφία. Κωδικοποιούμε τον κάθε αριθμό τηλεφώνου ως εξής: αντιστοιχούμε σε κάθε αριθμό την ακολουθία χαρακτήρων που προκύπτει αν αντικαταστήσουμε κάθε ψηφίο με το αντίστοιχο γράμμα του αλφάβητου, με το μηδέν να αντιστοιχεί στο γράμμα 'x'. Γράψτε τη συνάρτηση telephone η οποία με όρισμα μία κωδικοποίηση (ακολουθία χαρακτήρων) ενός τηλεφωνικού αριθμού επιστρέφει τον αριθμό τηλεφώνου, ως ακέραιο.

Άλλες ασκήσεις

Άσκηση.

Σωμάτιο κινείται κατά άξονα x και επιβραδύνεται από δύναμη τριβής με επιτάχυνση $a = -\kappa\, v^2,\; \kappa > 0$. Αν η αρχική του θέση είναι x(t=0)=0 και η αρχική ταχύτητα $v(t=0)=v_0$, τότε η ταχύτητά και η θέση του ως συναρτήσεις του χρόνου είναι \[ v(t) = \frac{v_0}{\kappa v_0 t + 1},\qquad x(t) = \frac{1}{\kappa} \ln (\kappa v_0 t + 1). \] Γράψτε συναρτήσεις οι οποίες θα υπολογίζουν τα x,v για διαδοχικούς χρόνους t. Κατασκευάστε τρεις λίστες οι οποίες θα περιέχουν αντίστοιχα τα t, x, v. Τυπώστε στην οθόνη τα t, x, v. Επίσης, βρείτε έναν τρόπο για να παρατηρήσετε ότι η θέση και ταχύτητα συνδέονται με τη σχέση $v(x) = v_0\, e^{-\kappa x}$.

Άσκηση.

Ένα σώμα εκτοξεύεται προς τα επάνω με αρχική ταχύτητα v_0=10 m/sec. Γράψτε συνάρτηση η οποία θα δίνει τη θέση του σώματος y σε μία χρονική στιγμή t. Τυπώστε τη θέση του σώματος σε διαδοχικές χρονικές στιγμές και προσπαθήστε να εντοπίσετε (κατά προσέγγιση) σε πόσο χρόνο το σώμα θα επιστρέψει στο σημείο από το οποίο ξεκίνησε. (Σχεδιάστε τη θέση του σώματος σαν συνάρτηση του χρόνου x(t).)

Άσκηση.

Έστω f η συνάρτηση f(x)=x  cos(x). Γράψτε τη συνάρτηση fmax με όρισμα δύο πραγματικούς αριθμούς a < b και ένα φυσικό αριθμό n > 1 η οποία να επιστρέφει το μέγιστο της συνάρτησης f σε n σημεία ομοιόμορφα κατανεμημένα στο διάστημα [a, b]. Για παράδειγμα, αν a = 1, b = 3 και n = 5 η συνάρτηση πρέπει να επιστρέφει τη μέγιστη από τις τιμές της f στα σημεία 1, 1.5, 2, 2.5, 3.

Άσκηση.

Γράψτε μια συνάρτηση με το όνομα whatVowels και όρισμα την ακολουθία χαρακτήρων s η οποία να επιστρέφει, ως ακολουθία χαρακτήρων εκείνα τα φωνήεντα που περιέχονται στην s. Για παράδειγμα, αν το όρισμα είναι 'program' θα πρέπει να επιστρέψει 'oa' ενώ αν είναι 'try' να επιστρέφει '' και αν το όρισμα είναι 'potato' να επιστρέφει 'οαο'.

Άσκηση.

Γράψτε μια συνάρτηση με το όνομα wordScore και όρισμα την ακολουθία χαρακτήρων s η οποία να επιστρέφει έναν ακέραιο αριθμό ως εξής: κάθε φωνήεν βαθμολογείται με 2 βαθμούς, κάθε ένα από τα γράμματα, m, r, y με 3 βαθμούς, ενώ όλοι οι υπόλοιποι χαρακτήρες συνεισφέρουν 1 βαθμό. Γράψτε ένα πρόγραμμα το οποίο χρησιμοποιεί τη συνάρτηση που γράψατε και παράγει αποτέλεσμα.

Άσκηση.

Γράψτε μία συνάρτηση με το όνομα maxSin η οποία θα δέχεται δύο πραγματικούς αριθμούς και θα επιστρέφει εκείνον για τον οποίο το ημίτονό του είναι μεγαλύτερο. Γράψτε ένα πρόγραμμα το οποίο χρησιμοποιεί τη συνάρτηση που γράψατε και παράγει αποτέλεσμα.

Άσκηση.

Γράψτε μια συνάρτηση με το όνομα squares και ορίσματα δύο πραγματικούς αριθμούς 0 < a < b. Οι αριθμοί αυτοί είναι τα μήκη των πλευρών δύο τετραγώνων με την πάνω αριστερή κορυφή τους στα σημεία (a, a) και (b, b). Η συνάρτηση θα πρέπει να επιστρέφει το εμβαδό της τομής των τετραγώνων εάν αυτά τέμνονται, διαφορετικά, τον αριθμό 0.

Άσκηση.

Γράψτε ένα πρόγραμμα το οποίο θα υπολογίζει το άθροισμα \( \sum_{k=0}^n x^k \) όπου \( x \) είναι πραγματικός και \( n \) ακέραιος. Ο υπολογισμός θα πρέπει να γίνεται μέσα σε μία συνάρτηση με το όνομα gsum. Το πρόγραμμα θα πρέπει να μπορεί να διαχειρισθεί όλες τις περιπτώσεις ακεραίων \( n \): θα τυπώνει το παραπάνω αποτέλεσμα για \( n>0 \) και τον αριθμό \( 0 \) για \( n \leq 0 \). Οι μεταβλητές x,n πρέπει να γίνονται γνωστές στη συνάρτηση μέσω ορισμάτων.

Άσκηση.

Γράψτε μια συνάρτηση με το όνομα circles και ορίσματα τέσσερις πραγματικούς αριθμούς a, b, c, d. Υποθέτουμε ότι στα σημεία (a, b) και (c, d) βρίσκονται δύο κύκλοι ακτίνας 1. Η συνάρτηση circles θα πρέπει να επιστρέφει 'YES' αν οι δύο κύκλοι τέμνονται ή εφάπτονται, 'NO' διαφορετικά.

Άσκηση.

(Αντίστροφη μονότονης συνάρτησης) Γράψτε ένα πρόγραμμα με το οποίο να μπορείτε να τυπώνετε (αυθαίρετα) διαδοχικά ζεύγη τιμών $x, y=f^{-1}(x)$ για την αντίστροφη μίας μονότονης συνάρτησης $f(y)$. Κάνετε το παραπάνω για τις συναρτήσεις (α) $f(y)=\ln(y)$ (χρησιμοποιώντας την ενσωματωμένη συνάρτηση math.log) και (β) $f(y) = y^3 + y^2$.
Ακολούθως, βελτιώστε το πρόγραμμά σας έτσι ώστε να μπορείτε να επιλέγετε (προσεγγιστικά) τιμή για το $x$ και να τυπώνετε το ζεύγος $x, y$.

Άσκηση.

(Ακρότατα φραγμένης συνάρτησης) Γράψτε ένα πρόγραμμα το οποίο θα υπολογίζει τις τιμές μίας φραγμένης συνάρτησης $f(x): [a,b] \to \mathbb{R}$ σε διαδοχικά σημεία (τα οποία θα ισαπέχουν κατά, π.χ., $\delta=0.1$) και θα τυπώνει τη μέγιστη και την ελάχιστη τιμή που θα βρίσκει.
Ακολούθως, μετατρέψτε το πρόγραμμά μας έτσι ώστε η μέγιστη και ελάχιστη τιμή να υπολογίζονται μέσα σε μία ξεχωριστή συνάρτηση (η οποία θα καλείται από ένα μικρό κύριο πρόγραμμα). [Υπόδειξη: εφαρμόστε τα παραπάνω στο διάστημα ορισμού $[-1:1]$ για τις συναρτήσεις (α) $f(x)=x^3 - x^2 + 1$ και (β) $f(x)=e^{2x}$.]

Άσκηση.

(Θεώρημα μέσης τιμής) Έστω μία συνεχής $f(x): [a,b] \to \mathbb{R}$. Ορίζουμε τη μέση κλίση της ως $(f(b)-f(a))/(b-a)$. Βρείτε (προσεγγιστικά) ένα σημείο $c \in [a,b]$ για το οποίο η παράγωγός της είναι $f'(c) = (f(b)-f(a))/(b-a)$. [Υπόδειξη: εφαρμόστε τα παραπάνω στο διάστημα ορισμού $[-1:1]$ για τις συναρτήσεις (α) $f(x)=x^3 - x^2 + 1$ και (β) $f(x)=e^{2x}$.]