Diferència entre revisions de la pàgina «ASIX-M3-UF1-A2»
(→Esquema de cerca) |
(→Bucle for) |
||
(Hi ha 11 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 82: | Línia 82: | ||
print("Inici ") # S'executa una vegada | print("Inici ") # S'executa una vegada | ||
for i in range(3): | for i in range(3): | ||
− | print( | + | print(i , end="") # S'executa tres vegades: la variable i pren els valors 0 1 i 2 |
print() # S'executa una vegada: salt de línia | print() # S'executa una vegada: salt de línia | ||
print("Final") # S'executa una vegada | print("Final") # S'executa una vegada | ||
Línia 98: | Línia 98: | ||
print("Inici ") # S'executa una vegada | print("Inici ") # S'executa una vegada | ||
for i in range(1,4): | for i in range(1,4): | ||
− | print( | + | print(i , end="") # S'executa tres vegades: la variable i pren els valors 1 2 i 3 |
print() # S'executa una vegada: salt de línia | print() # S'executa una vegada: salt de línia | ||
print("Final") # S'executa una vegada | print("Final") # S'executa una vegada | ||
Línia 114: | Línia 114: | ||
print("Inici ") # S'executa una vegada | print("Inici ") # S'executa una vegada | ||
for i in range(1,10,2): | for i in range(1,10,2): | ||
− | print( | + | print(i , end="") # S'executa cinc vegades: la variable i pren els valors 1 3 5 7 9 |
print() # S'executa una vegada: salt de línia | print() # S'executa una vegada: salt de línia | ||
print("Final") # S'executa una vegada | print("Final") # S'executa una vegada | ||
Línia 130: | Línia 130: | ||
print("Inici ") # S'executa una vegada | print("Inici ") # S'executa una vegada | ||
for i in range(9,0,-2): | for i in range(9,0,-2): | ||
− | print( | + | print(i , end="") # S'executa cinc vegades: la variable i pren els valors 9 7 5 3 1 |
print() # S'executa una vegada: salt de línia | print() # S'executa una vegada: salt de línia | ||
print("Final") # S'executa una vegada | print("Final") # S'executa una vegada | ||
Línia 239: | Línia 239: | ||
numero = int(input("Introdueix un número entre 1 i 10: ")) | numero = int(input("Introdueix un número entre 1 i 10: ")) | ||
comptador =1 | comptador =1 | ||
− | while comptador < | + | while comptador < 5 and numero != 10: |
numero = int(input("Introdueix un altre número entre 1 i 10: ")) | numero = int(input("Introdueix un altre número entre 1 i 10: ")) | ||
comptador += 1 | comptador += 1 | ||
Línia 274: | Línia 274: | ||
==Esquemes de tractament seqüencial== | ==Esquemes de tractament seqüencial== | ||
− | + | ===Esquema de recorregut=== | |
L'esquema de recorregut s'aplica a un problema si: | L'esquema de recorregut s'aplica a un problema si: | ||
Línia 300: | Línia 300: | ||
L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat, escrigui per pantalla, els seus divisors (sense comptar el 1 i el propi número). Si el número fos primer, el programa no escriuria res per pantalla. | L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat, escrigui per pantalla, els seus divisors (sense comptar el 1 i el propi número). Si el número fos primer, el programa no escriuria res per pantalla. | ||
− | <source lang=" | + | <source lang="python"> |
− | + | print("Divisors d'un enter positiu") | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | # Accedir al primer element | |
+ | i = 2 | ||
− | + | # Inicialitzar tractament | |
− | + | num = int(input("Introdueix un número: ")) | |
− | + | print("Divisors : ") | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | # Mentre no últim element | |
− | + | while (i < num): | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | === | + | # Tractar element |
+ | if (num % i == 0): | ||
+ | print(i, end=" ") | ||
− | + | # Obtenir següent element | |
+ | i += 1 | ||
+ | </source> | ||
− | : | + | '''Exemple 2: Sumar les xifres d’un número''' |
− | |||
− | + | L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat, escrigui per pantalla un altre número enter corresponent a la suma de les xifres del número llegit. | |
− | < | + | <source lang="python"> |
− | + | print("Suma les xifres d'un número") | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | # Accedir al primer element | |
+ | n = int(input("Introdueix un número : ")) | ||
+ | d = n % 10; | ||
− | + | # Inicialitzar tractament | |
− | + | suma = 0; | |
− | |||
− | |||
− | + | # Mentre no ultim element | |
− | + | while n != 0: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | # Tractar element | |
+ | suma = suma + d | ||
− | + | # Obtenir següent element | |
− | + | n = n // 10 | |
− | + | d = n % 10 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | n = n / 10 | ||
− | d = n % 10 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | # Tractament_final | |
− | + | print("La suma de les xifres és: %d" %suma) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> | </source> | ||
Línia 512: | Línia 366: | ||
Veurem a continuació alguns exemples en els quals s’ha aplicat l’esquema de cerca per a escriure el programa. És un bon exercici intentar identificar quina és la seqüència que s’està tractant en cada programa i com s’han refinat les accions genèriques de l’esquema de recorregut en cada cas concret | Veurem a continuació alguns exemples en els quals s’ha aplicat l’esquema de cerca per a escriure el programa. És un bon exercici intentar identificar quina és la seqüència que s’està tractant en cada programa i com s’han refinat les accions genèriques de l’esquema de recorregut en cada cas concret | ||
− | '''Exemple | + | '''Exemple 3: Números de Fibonacci''' |
Dissenyar un programa que determini si entre els 1000 primers números de Fibonacci hi ha algun que acabi en 9. En cas de que el número existeixi, escriurem el primer que trobem per pantalla, en cas contrari escriurem el número –1. Els números de Fibonacci estan definits de la següent forma: | Dissenyar un programa que determini si entre els 1000 primers números de Fibonacci hi ha algun que acabi en 9. En cas de que el número existeixi, escriurem el primer que trobem per pantalla, en cas contrari escriurem el número –1. Els números de Fibonacci estan definits de la següent forma: | ||
Línia 519: | Línia 373: | ||
:fib2 = 1 | :fib2 = 1 | ||
:fibn = fibn-1 + fibn-2 per a n > 2 | :fibn = fibn-1 + fibn-2 per a n > 2 | ||
− | <source lang=" | + | <source lang="python"> |
− | + | print("Número de Fibonacci acabat en 9") | |
− | + | ||
− | + | # Accedir al primer element | |
− | + | act = 0; | |
− | + | sig = 1; | |
− | + | ||
− | + | # Inicialitzar tractament | |
− | + | i = 1; | |
− | act = sig | + | |
− | + | # Mentre no últim element i no element trobat fer | |
− | i = i + 1 | + | while i <= 1000 and act % 10 != 9 : |
− | + | ||
− | + | # Obtenir element següent | |
− | + | act, sig = sig, act + sig | |
− | + | i = i + 1 | |
− | + | ||
− | + | # Tractament final | |
− | + | if act % 10 == 9 : | |
− | + | print(act) | |
+ | else : | ||
+ | print(-1) | ||
</source> | </source> | ||
− | '''Exemple | + | '''Exemple 4: Apareix la lletra ‘a’ ?''' |
Dissenyar un programa per a detectar si en una frase llegida per teclat i acabada en punt existeix o no alguna lletra ‘a’ | Dissenyar un programa per a detectar si en una frase llegida per teclat i acabada en punt existeix o no alguna lletra ‘a’ | ||
− | <source lang=" | + | <source lang="python"> |
− | + | print("Apareix 'a' en la frase") | |
− | + | ||
− | + | # Inicialitzar tractament | |
− | + | frase = input("Introdueix una frase acabada en un '.' : ") | |
− | + | ||
− | + | # Accedir al primer element | |
− | + | pos = 0 | |
− | + | caracter = frase[pos] | |
− | + | ||
− | + | # Mentre no últim element i no element trobat fer | |
− | + | while caracter != '.' and caracter != 'a': | |
− | + | ||
− | + | # Obtenir element següent | |
− | + | pos += 1 | |
− | + | caracter = frase[pos] | |
+ | |||
+ | # Tractament final | ||
+ | if caracter == 'a': | ||
+ | print("Sí apareix") | ||
+ | else: | ||
+ | print("No apareix") | ||
</source> | </source> |
Revisió de 16:36, 10 nov 2021
Contingut
Condicional if
- Permet decidir si en funció d’una condició cal o no executar una o un conjunt d’instruccions.
if condició:
instrucció(ns)
- La condició te dues respostes possibles: Certa o Falsa. Si és certa s’executarà el procediment i sinó no
- s’executarà i la execució continuarà amb les sentencies que hi hagi a continuació del bloc if.
Exemple:
# Programa per la Sentència if
edat = int(input("Edat:"))
if edat >= 18 :
print("Ets major d'edat")
if edat < 18 :
print("Ets menor d'edat")
Condicionals else i elif
# Programa per la Sentències else i elif
edat = int(input("Edat: "))
if edat >= 18 :
print("Ets major d'edat")
else: # S'executa si la condició de l'if és falsa
print("Ets menor d'edat")
# Si necessitem comprovar un altre valor de l'edat podem utilitzar elif
edat = int(input("Edat: "))
if edat >= 18 :
print("Ets major d'edat")
elif edat >= 16: # es comprova només si la condició de l'if és falsa
print("Ets adolescent menor d'edat")
else: # S'executa només si la condició de l'elif és falsa
print("Ets menor d'edat")
- Es poden posar tants elif com necessitem
Bucle for
Un bucle for es una estructua de control que repeteix (iteració) un número de vegades determinat un bloc d'instruccions (cos del bucle).
Sintaxi
for variable in element iterable (range, llista, cadena, etc.):
cos del bucle
- No cal definir prèviament la variable. És més, quan no participa en el cos del bucle es pot substituir per un '-'.
Abans que res, entenguem el funcionament de la funció range().
- genera automáticament una seqüencia seguint una progressió aritmètica.
- Es pot utilitzar amb un, dos o tres paràmetres.
- range(4) ==> 0 1 2 3 (sempre comença per defecte en el 0)
- range(1, 5) ==> 1 2 3 4 (podem indicar el rang de valors a considerar)
- range(1, 10, 2) ==> 1 3 5 7 9 (podem indicar l'increment entre elements de la seqüencia)
- range(9, 0, -2) ==> 9 7 5 3 1 (podem generar una seqüencia descendent)
Bucle for amb la funció range()
- amb un paràmetre
print("Inici ") # S'executa una vegada
for i in range(3):
print(i , end="") # S'executa tres vegades: la variable i pren els valors 0 1 i 2
print() # S'executa una vegada: salt de línia
print("Final") # S'executa una vegada
Inci 0 1 2 Final
- amb dos paràmetre: definim el rang
print("Inici ") # S'executa una vegada
for i in range(1,4):
print(i , end="") # S'executa tres vegades: la variable i pren els valors 1 2 i 3
print() # S'executa una vegada: salt de línia
print("Final") # S'executa una vegada
Inci 1 2 3 Final
- amb 3 paràmetres: definim el rang i l'increment
print("Inici ") # S'executa una vegada
for i in range(1,10,2):
print(i , end="") # S'executa cinc vegades: la variable i pren els valors 1 3 5 7 9
print() # S'executa una vegada: salt de línia
print("Final") # S'executa una vegada
Inci 1 3 5 7 9 Final
- amb 3 paràmetres: recorregut invers
print("Inici ") # S'executa una vegada
for i in range(9,0,-2):
print(i , end="") # S'executa cinc vegades: la variable i pren els valors 9 7 5 3 1
print() # S'executa una vegada: salt de línia
print("Final") # S'executa una vegada
Inci 9 7 5 3 1 Final
Bucles for niuats
- Parlem de bucles niuats quan un bucle es troba dins dels cos d'un altre bucle.
- S'anomenen respectivament bucle intern i extern.
- Bucles independents: El bucle intern s'executa sempre el mateix número de vegades (no depèn de la variable del bucle intern)
for i in range(1,4):
print("i: %d" %i, end =" ==> ")
for j in range(3):
print("j: %d" %j, end = " ")
print('')
i: 1 ==> j: 0 j: 1 j: 2 i: 2 ==> j: 0 j: 1 j: 2 i: 3 ==> j: 0 j: 1 j: 2
- Bucles dependents: El número de vegades que s'executa el bucle intern depèn del valor de variable del bucle extern
for i in range(1,4):
print("i: %d" %i, end =" ==> ")
for j in range(i):
print("j: %d" %j, end = " ")
print('')
i: 1 ==> j: 0 i: 2 ==> j: 0 j: 1 i: 3 ==> j: 0 j: 1 j: 2
Enllaços
Bucle while
En un bucle while s'executen les instruccions del seu cos mentre la condició sigui certa (True).
Sintaxi
while condicio:
cos del bucle
- La variable o variables de la condició s'anomenen variables de control.
- Les variables de control s'han d'iniciar abans del bucle while i s'han d'actualitzar dins del bucle.
- Es pot utilitzar en tots els casos que s'utilitza un for, però no a l'inrevés.
- Bucle while amb una condició
num = 1
while num <= 3:
print(num, end=" ")
num += 1
print("Final")
1 2 3 Final
- Bucle while: simulació del llançament d'un dau de sis cares fins que surti un 6 (No es pot fer amb un for)
from random import randint
dau = randint(1,6)
while dau != 6:
print(dau, end=" ")
dau = randint(1,6)
print(dau)
1 3 4 5 3 2 6
- Bucle while amb dues condicions: entrada de un màxim de 5 números o fins que introdueixin el número 10
numero = int(input("Introdueix un número entre 1 i 10: "))
comptador =1
while comptador < 5 and numero != 10:
numero = int(input("Introdueix un altre número entre 1 i 10: "))
comptador += 1
if numero = 10:
print("Ha indroduït un 10")
else:
print("No ha indroduït un 10")
Introdueix un número entre 1 i 10: 5 Introdueix un altre número entre 1 i 10: 7 Introdueix un altre número entre 1 i 10: 4 Introdueix un altre número entre 1 i 10: 8 Introdueix un altre número entre 1 i 10: 9 No ha indroduït un 10
Introdueix un número entre 1 i 10: 5 Introdueix un altre número entre 1 i 10: 7 Introdueix un altre número entre 1 i 10: 10 Ha indroduït un 10
- Compte!: Si dins dels bucle no es modifica la condició del while crearem bucles infinits.
i = 1
while i <= 10:
print(i, end=" ")
Esquemes de tractament seqüencial
Esquema de recorregut
L'esquema de recorregut s'aplica a un problema si:
- • Tracta dades amb estructura seqüencial
- • Per resoldre el problema cal «visitar» totes les dades
L'esquema té aquest aspecte:
accedir al primer element inicialitzar tractament Mentre no últim element fer tractar element obtenir següent element fmentre
Noteu que això no és un algorisme sinó un esquema amb instruccions comprensibles.
Veurem a continuació alguns exemples en els quals s’ha aplicat l’esquema de recorregut per a escriure el programa. És un bon exercici intentar identificar quina és la seqüència que s’està tractant en cada programa i com s’han refinat les accions genèriques de l’esquema de recorregut en cada cas concret.
Exemple 1: Divisors d’un número
L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat, escrigui per pantalla, els seus divisors (sense comptar el 1 i el propi número). Si el número fos primer, el programa no escriuria res per pantalla.
print("Divisors d'un enter positiu")
# Accedir al primer element
i = 2
# Inicialitzar tractament
num = int(input("Introdueix un número: "))
print("Divisors : ")
# Mentre no últim element
while (i < num):
# Tractar element
if (num % i == 0):
print(i, end=" ")
# Obtenir següent element
i += 1
Exemple 2: Sumar les xifres d’un número
L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat, escrigui per pantalla un altre número enter corresponent a la suma de les xifres del número llegit.
print("Suma les xifres d'un número")
# Accedir al primer element
n = int(input("Introdueix un número : "))
d = n % 10;
# Inicialitzar tractament
suma = 0;
# Mentre no ultim element
while n != 0:
# Tractar element
suma = suma + d
# Obtenir següent element
n = n // 10
d = n % 10
# Tractament_final
print("La suma de les xifres és: %d" %suma)
Esquema de cerca
Fonamentalment l’esquema de cerca ens permetrà resoldre problemes en què busquem un element concret dins d’una seqüència. A diferència de l’esquema de recorregut, en que es visiten i tracten tots els elements de la seqüència, l’esquema de cerca :
- només recorre la seqüència fins a trobar l’element desitjat
La forma genèrica de l’esquema de cerca és la següent:
accedir al primer element inicialitzar tractament Mentre no últim element i no element trobat fer obtenir següent element fmentre tractament final
Veurem a continuació alguns exemples en els quals s’ha aplicat l’esquema de cerca per a escriure el programa. És un bon exercici intentar identificar quina és la seqüència que s’està tractant en cada programa i com s’han refinat les accions genèriques de l’esquema de recorregut en cada cas concret
Exemple 3: Números de Fibonacci
Dissenyar un programa que determini si entre els 1000 primers números de Fibonacci hi ha algun que acabi en 9. En cas de que el número existeixi, escriurem el primer que trobem per pantalla, en cas contrari escriurem el número –1. Els números de Fibonacci estan definits de la següent forma:
- fib1= 0
- fib2 = 1
- fibn = fibn-1 + fibn-2 per a n > 2
print("Número de Fibonacci acabat en 9")
# Accedir al primer element
act = 0;
sig = 1;
# Inicialitzar tractament
i = 1;
# Mentre no últim element i no element trobat fer
while i <= 1000 and act % 10 != 9 :
# Obtenir element següent
act, sig = sig, act + sig
i = i + 1
# Tractament final
if act % 10 == 9 :
print(act)
else :
print(-1)
Exemple 4: Apareix la lletra ‘a’ ?
Dissenyar un programa per a detectar si en una frase llegida per teclat i acabada en punt existeix o no alguna lletra ‘a’
print("Apareix 'a' en la frase")
# Inicialitzar tractament
frase = input("Introdueix una frase acabada en un '.' : ")
# Accedir al primer element
pos = 0
caracter = frase[pos]
# Mentre no últim element i no element trobat fer
while caracter != '.' and caracter != 'a':
# Obtenir element següent
pos += 1
caracter = frase[pos]
# Tractament final
if caracter == 'a':
print("Sí apareix")
else:
print("No apareix")