Διάλεξη 17ης Οκτωβρίου 2016

Ασκήσεις στην είσοδο δεδομένων και στις ανακυκλώσεις

Πρόβλημα 1: Γράψτε ένα πρόγραμμα το οποίο ζητάει από το χρήστη το όνομα και την ηλικία του, μετατρέπει την ηλικία του σε ημέρες και τυπώνει ένα κατάλληλο μήνυμα, π.χ. John, you are 11344 days old.


name = input('Your name: ')
age  = int(input(Your age: ')
print(name + ', you are', age*365, 'days old')

Πρόβλημα 2: Γράψτε ένα πρόγραμμα το οποίο ζητάει μια γωνία $\theta$ στο διάστημα $(0, \pi/2)$ και τυπώνει τους τριγωνομετρικούς αριθμούς $\sin\theta, \cos\theta$ και $\tan\theta$.


import math
while 1:
    theta = float(input('Enter angle [in radians]: '))
    if 0 < theta < math.pi/2: break

print('theta =', theta)
print('sin(' + str(theta) + ') = ', math.sin(theta))
print('cos(' + str(theta) + ') = ', math.cos(theta))
print('tan(' + str(theta) + ') = ', math.tan(theta))

Πρόβλημα 3: Γράψτε εντολές οι οποίες ζητούν από το χρήστη να δώσει ένα γράμμα και ελέγχουν αν είναι φωνήεν ή σύμφωνο, τυπώνοντας ταυτόχρονα και ένα κατάλληλο μήνυμα. Δεν χρειάζεται να ελέγξετε αν ο χαρακτήρας που έδωσε ο χρήστης είναι όντως γράμμα.


c = input('Enter a letter: ')
if c in 'aeiouAEIOU':
    print('It\'s a vowel!')
else:
    print('It\'s a consonant')

Πρόβλημα 4: Γράψτε ένα πρόγραμμα το οποίο διαβάζει τις συντεταγμένες ενός σημείου στο επίπεδο και τυπώνει την απόστασή του από την αρχή των αξόνων.


import math
x = float(input('Enter x-coordinate: '))
y = float(input('Enter y-coordinate: '))
print('Distance from the origin =', math.sqrt(x*x + y*y))

Πρόβλημα 5: Γράψτε ένα πρόγραμμα που βρίσκει και τυπώνει τον αριθμό των φωνηέντων σε μια ακολουθία χαρακτήρων.


s = input('Enter string: ')
k = 0
for c in s:
    if c in 'aeiouAEIOU':
        k += 1
print('Number of vowels =', k)

Πρόβλημα 6: Γράψτε ένα πρόγραμμα το οποίο μετράει τον αριθμό των ψηφίων ενός φυσικού αριθμού.


while 1:
    n = int(input('Enter a positive integer: '))
    if n >= 0: break

k = 0
while n != 0:
    n //= 10
    k += 1
print('The number of digits of', n, 'is', k)

Πρόβλημα 7: Γράψτε ένα πρόγραμμα το οποίο τυπώνει τον πίνακα της προπαίδειας στην εξής μορφή:

\begin{equation*} \begin{matrix} 1 & 2 & 3 & \ldots & 9\\ 2 & 4 & 6 & \ldots & 18\\ & & & \ldots & \\ 9 & 18 & 27 & \ldots & 81 \end{matrix} \end{equation*}

for i in range(1,10):
    for j in range(1,10):
        print(i*j, end=' ')
    print()

Πρόβλημα 8: Γράψτε ένα πρόγραμμα το οποίο με δεδομένο ένα φυσικό αριθμό $n$ υπολογίζει και τυπώνει το άθροισμα $1 + 2 + \cdots + n$. Κάντε το ίδιο για το άθροισμα των τετραγώνων των πρώτων $n$ φυσικών αριθμών. Ελέγξτε τα αποτελέσματά σας χρησιμοποιώντας γνωστούς τύπους για τα συγκεκριμένα αθροίσματα.


n = int(input('Enter a natural number: '))
summ = 0
for i in range(1,n+1):
    summ += i
print('1 + ... +', n, '=', summ)

Πρόβλημα 9: Γράψτε ένα πρόγραμμα το οποίο ζητάει ένα θετικό ακέραιο $n$ και υπολογίζει τον $n$-στό όρο της ακολουθίας Fibonacci. Υπενθυμίζουμε ότι οι όροι της ακολουθίας Fibonacci ορίζονται ως εξής: $F_0 = 0, F_1 = 1$ και $F_n = F_{n-1} + F_{n-2}$ για $n\ge 2$.


n = int(input('Enter a natural number: '))
if n == 0:
    print('The 0th term is', 0)
elif n == 1:
    print('The 1st term is', 1)
else:
    x = 0; y = 1
    for i in range(2, n+1):
       z = x + y
       x = y
       y = z
    print('The ' + str(n) + '-th term is', z)

Πρόβλημα 10: Μια Πυθαγόρεια τριάδα είναι ένα σύνολο τριών φυσικών αριθμών $a \lt b \lt c$ τέτοιων ώστε $a^2 + b^2 = c^2$. Για παράδειγμα, το σύνολο $\{3, 4, 5\}$ είναι μια Πυθαγόρεια τριάδα γιατί $3^2 + 4^2 = 9 + 16 = 25 = 5^2$. Υπάρχει ακριβώς μία Πυθαγόρεια τριάδα $\{a, b, c\}$ για την οποία ισχύει επιπλέον ότι $a + b + c = 1000$. Γράψτε ένα πρόγραμμα Python για να την βρείτε.


for a in range(1, 1001):
    for b in range(a+1, 1001):
        c = 1000 - a - b
        if a**2 + b**2 == c**2:
            print(a, b, c)

Πρόβλημα 11: Δεδομένου ενός φυσικού αριθμού $k$ φτιάχνω την ακολουθία $(a_n)$, $n\ge 0$ με τον εξής τρόπο: \begin{equation*} a_n = \begin{cases} k & n = 0\\ a_{n-1}/2 & \text{ αν } a_{n-1} \text { άρτιος } \\ 3a_{n-1} + 1 & \text{ διαφορετικά } \end{cases} \end{equation*} Έτσι, αν ξεκινήσουμε με τον αριθμό 13 παράγουμε την ακολουθία $13 \to 40 \to 20 \to 10 \to 5 \to 16 \to 8 \to 4 \to 2 \to 1$. Αν φτάσουμε στον αριθμό 1 δεν χρειάζεται να συνεχίσουμε γιατί οι όροι που ακολουθούν είναι κατά σειρά $4, 2, 1, 4, 2, 1,\ldots$. Γράψτε ένα πρόγραμμα σε Python το οποίο δεδομένου του φυσικού αριθμού $k$ υπολογίζει και τυπώνει τους όρους της παραπάνω ακολουθίας.


k = int(input('Enter a natural number: ')
while k != 1:
    print(k, end = ' ')
    if k%2:
        k = 3*k+1
    else:
        k //= 2
prіnt()