Pràctica 3 (enunciat + solució) (2013)

Pràctica Catalán
Universidad Universidad de Barcelona (UB)
Grado Física - 1º curso
Asignatura Informatica
Año del apunte 2013
Páginas 11
Fecha de subida 06/04/2016
Descargas 2
Subido por

Vista previa del texto

Practica 3 els Professors October 09, 2013 Part I Sessió Introductòria 3: Tipus de Dades i Variables 1 Objectiu L’objectiu de la pràctica és entendre com python guarda dades i aprendre a fer servir els diferents tipus de dades bàsics que proporciona.
2 Tipus de dades en python Python presenta els seguents tipus de dades: 1.
2.
3.
4.
Enters Reals Caràcters o Strings Booleans Les caracteristiques d’aquests tipus dades així com les variables que porten associades es descriuen a continuació.
3 Enters Valors numèrics que no tenen part decimal que poden ser positius, zero o negatius.
En funció de la mida els guardem en format int (32 bits, en principi) o long (64 bits, en principi). En python, la mida dels enters no està fixada com succeeix en altres programes. En C, C++ o Java, una variable definida com a int es troba limitada als valors: −231 <= variable <= 231 − 1 per tant si el valor de la variable és igual a: variable = 231 − 1 = 2.147.483.647 i sumem 1 el resultat que es té és: variable = −2.147.483.648 Aquest problema es diu overflow Afortunadament, en Python aquest problema no es dona, ja que és el propi Python qui assigna més espai de memòria si és necessari.
3.1 Exercici 1 In [8]: """ Definim la variable increment del tipus enter i li associem el valor 100""" increment = 100 # multipliquem increment per increment # i guardem el resultat en increment...
increment = increment * increment increment = increment * increment increment = increment * increment print increment type(increment) 10000000000000000 long Out [8]: Com veieu, l’operació es repeteix tres vegades, donant com a resulat un nombre prou gran: 10.000.000.000.000.000 1. Quants bits de memòria ocupa aquest nombre? Les variables numèriques disposen d’una funció associada (bit_lengt()) que dona el nombre de bits utilitzats per representar el seu contingut.
Per cridar-la, poseu el nom de la variable següit per un ’.’ i el nom de la funció: increment.bit_length() 2. Modifica la definició de la variable de la següent forma: increment = 100L. Que passa? 3. Torna a modificar la definició de la variable per tal de el programa treballi en format hexadecimal. Demaneu ajuda al professor si no recordeu com es feia aquest canvi.
4. Incrementa aquesta operació unes quantes vegades (tres o quatre vegades més per exemple) i mira com el valor augmenta significativament. Varia el tipus de variable? Proveu a fer-ho amb la calculadora de l’ordinador i expliqueu que passa.
Els enters en Python es guarden en dos tipus de dades: 1. int per espais de memòria més petits 2. long per espais de memòria grans En la propera pràctica treballareu detalladament els operadors. Aquí podem veure que una operació bàsica entre dades d’un mateix tipus, generarà una nova variable però del mateix tipus. Per exemple, si fem: a = 5 In [11]: b = 6 c = a/b print c type(c) 0 int Out [11]: Com veieu, el resultat de l’exemple anterior genera un enter ja que tant a com b estaven definits com enters. Modifica aquest exemple per tal de veure el tipus de dada de a i b.
4 Reals Els nombres reals són aquells que tenen part entera i part decimal.
Poden ser positius, negatius o zero.
El format en que es guarden segueix l’estandard IEEE 754. En aquest estàndard, tenim un bit associat al signe, una sèrie de bits associats a l’exponent i la resta forma la mantissa.
Així, per 32 bits el format del tipus de dada seria el següent: S Exp Franction 0 01011100 11111100011100001111111 1, 11111100011100001111111 ∗ 201011100 ∗ 2127 Aquesta representació està feta en 32 bits i s’anomena precissió simple. Python treballa en doble precissió: guarda els nombres reals en un tipus de dada de 64 bits. El format és el següent: (−1)s ∗ 1, M ∗ 2(E+1023) 4.1 Exercici 2 """ Fem un programa que operi amb valors reals. """ In [16]: a = 198674.340 b = 0.000001 c = a*b # multipliquem d = a+b # sumem e = b/a # dividim f = a-b # restem g = a**b # elevem print c print d print e 0.19867434 198674.340001 1.0000121995 1. Acaba d’imprimir els valors dels operands en l’exemple anterior per tal de veure com operar nombres reals.
2. A partir d’aquest exemple, i donada l’expressió: 4x2 + 3x − 10 = y Calcula numèricament els valor de x per y = 0 Recorda que per poder calcular l’arrel quadrada heu de cridar la funcio sqrt de la llibreria math.
5 Booleans Les variables booleanes són aquelles que només poden prendre dos valors: 1. True 2. False Aquests valors s’operan amb operacions lògiques: 1. AND -> a and b 2. OR -> a or b 3. NOT -> a not b 5.1 Exercici 3 """Exemple amb booleans...""" In [2]: a = True b = False print type(a) c = a and b print "el valor de a AND B es ", c <type ’bool’> el valor de a AND B es False Jugueu amb els valors de a, b i amb el tipus d’operació per tal de crear les diferents taules de veritat pels diferents operadors.
a b and or False False False False False True False True ...
...
...
...
6 Cadenes Una variable del tipus cadena o string ens permet guardar qualsevol tipus de dada: números, caràcters, combinacions de caràcters, etc. . . en forma de seqüències de lletres. Exemples de strings: ’hola que tal’ "hola que tal" ’3’ "4" ’%3 C2@’ Assignació a una variable: unString = ’hola’ Existeixen una sèrie de caràcters especials que ens permeten també un cert control en els strings. Per exemple: • \t introdueix una tabulació • \n introdueix un salt de línia • \\ per posar el signe ” 6.1 Exercici 4 print ’introduim un salt de línia \n a continuacio’ a = "hola" In [21]: b = " mon" print a+b c = 4.0 d = 3.0 print "Quant val c/d? \n" print c/d introduim un salt de línia a continuacio Proveu el codi que hi ha en l’exemple anterior. Quina diferència hi ha entre fer servir la cometa simple i la doble? 7 Complexes Python és un dels pocs llenguatges de programació que permet operar sense cridar a cap llibreria específica amb nombres complexes. Igual que en la resta de casos, la definició i l’assignació és senzilla i intuitiva: a = 3+4j b = 5+3j Podem fer servir les operacions que hem treballat en els nombres reals.
7.1 Exercici 5 Feu un programa que calculi, a partir de un determinat nombre complex expressat en representació cartesiana, el seu mòdul i fase.
Disposeu de la llibreria cmath on trobareu les diferents funcions per poder calcular amb un nombre complex: http://docs.python.org/2.7/library/cmath.html 8 Canvis de tipus de dades Python ens permet canviar el tipus de dada del contingut que tenim assignat a una determinada variable. A aquest canvi se li diu en l’argot de la programació fer un cast Si volem canviar de enters a reals fariem el següent cast: a = 3 b = float(a) Veiem el següent exemple: """tal i com està aquest codi, ens generarà un error, ja que la funció raw_input() sempre In []: ens torna un string. Haurem de fer un canvi en el tipus de dades, fent el que s’anomena un cast.
Si volem que a sigui un valor real haurem de fer el següent: a = float(raw_input()) Proveu el codi actual i amb el canvi recomanat""" a = raw_input("introduir un valor real") #calculem el quadrat b = a**2 print b 8.1 Perills de fer un cast Errors que es poden donar: 1. Fer un cast on el valor no pugui ser passat al tipus de variable que volem. Exemple: a = ’hola’ b = float(a) 2. Fer un cast de un tipus de dada més complexa a una més simple: Implicarà perdua de precissió. Exemple: a = 2.4567545 b = int(a) #veiem el segon cas...
In [22]: a = 2.4567545 b = int(a) print b 2 Com veieu, la part decimal es perd totalment en aquest cas.
8.2 Exercici 6 Modifiqueu el programa anterior, on es demanava calcular les arrels d’una equació de segon grau, per que demani a l’usuari els coeficients de l’equació, és a dir. Si tenim: ax2 + bx + c = y El programa ens demanarà entrar les dades a, b i c per tal de calcular el valor de x quan y és igual a 0 Haureu de fer servir cast i introduir els comentaris necessaris per que el programa sigui fàcilment interpretable.
9 Exercici a entregar Entregueu un Notebook amb tots els exercicis realitzats, explicant detalladament què heu fet en cada cas, responent a les qüestions detalladament.
Pujeu el fitxer al Campus Virtual un cop acabada la pràctica.
...