http://localhost:8000/home/admin/149/print http://localhost:8000/home/admin/149/print print S6 Practica1 IMD-I. Software Práctica de laboratorio 1. Introducción a SAGE Comandos básicos. Ejecutar el comando siguiente, pinchando en la ventana de comando y luego en "evaluate". 1+2+3+10 Como guardar su trabajo Para guardar las modificaciones realizadas en la hoja de Sage en la cuál estamos trabajando, pinchamos en el botón "Save" arriba a la derecha (hacerlo). Digamos que quieres guardar este trabajo, para continuarlo más tarde en otro ordenador. Vamos a guardarlo en un espacio personal del sitio de enseñanza virtual: en el menú "File" arriba a la izquierda, pincha en "Save worksheet to a file...", y elija la ubicación y el nombre del fichero a guardar. (por ejemplo "practica1".) Luego, guarda "practica1" en tu espacio personal del sitio de enseñanza virtual de grupo de IMD (https://ev2.us.es/webct/ - Mis herramientas -- Mis archivos -- obtener archivos). La extensión ".sws" significa "Sage WorkSheet". (No es para puntuar la práctica, esta primera práctica no se evalua. Es para aprender a guardar su trabajo en algún sitio). Ahora, queremos también guardar una copia pdf de esta hoja de Sage. En una misma ventana de comando, podemos escribir varios comandos, pero solamente el ultimo resultado se imprimará en la pantalla. (Ejecutar los comandos que siguen). 1+2+3+4 1+2+3+4+5 1+2+3+4+5+6 Pincha en "print" arriba al centro. Una copia html de la hoja de Sage aparece en una nueva ventana del navegador. En el menú "Archivo" del navegador elija "Imprimir" En la ventana que aparece, elija la opción: PDF-Guardar como PDF. Luego suba este fichero pdf al espacio en enseñanza virtual. Pero podemos forzar la impresión de los resultados anteriores con "print". (Ejecutar los comandos que siguen). Bucles print 1+2+3+4 print 1+2+3+4+5 print 1+2+3+4+5+6 Ahora queremos guardar los resultados de los cálculos anteriores en variables S4, S5, S6. Lo hacemos de la manera siguiente (ejecutar los comandos). S4=1+2+3+4 S5=1+2+3+4+5 S6=1+2+3+4+5+6 Podemos ahora utilizar estas variables (ejecutar los comandos). print S4,S5 ¿ Qué resultado dan los comandos siguientes ? (adivinar y luego comprobar ejecutandolos). S0=0 S1=S0+1 S2=S1+2 S3=S2+3 S4=S3+4 S5=S4+5 S6=S5+6 S7=S6+7 print S1,S2,S3,S4,S5,S6,S7 ¿ Y los comándos siguientes ? http://localhost:8000/home/admin/149/print S=0 print S=S+1 print S=S+2 print S=S+3 print S=S+4 print S=S+5 print S=S+6 print S=S+7 print print http://localhost:8000/home/admin/149/print S=S+i print S print "Fin." S S S Listas S En la ventana de comando que sigue definimos dos listas, llamadas S y L (ejecutar). S S=[1..7] L=[3.141592,"a",63,"b",2011,"Sevilla"] S S Comprobemos sus valores (ejecutar) S "Fin." print S print L En la ventana de comando anterior hemos ejecutado varias veces un bloque de instrucciones: Podemos acceder a los elementos de una lista L con L[i]. S=S+i print L[1] print L[2] print S donde i tomaba sucesivamente los valores 1; 2; 3; : : : ; 7. Es más cómodo hacer esto con un bucle. ¿ Qué vale L[3] ? S=0 comentario. print S for i in [1..7]: 7. # detrás de la almohadilla es un # el ordenador no lo lee. # i toma sucesivamente los valores del 1 al # bloque que sigue S=S+i indentación print S derecha). print "Fin." del "for". Para cada valor de i se ejecuta el # el bloque esta marcado por una # (= desplazamiento del texto más a la ¿ Qué valen L[-1] y L[-2] ? # esta instrucción esta fuera del bloque Ejercicio: al ejecutar estos comandos, ¿ que resultado dará ? (adivinar y luego comprobar, ejecutando los comandos). S=0 print S for i in [1..7]: ¿ Cuál es el indice del primer elemento de L ? Cambia el valor de L[3], dandole el valor !58. Escribiendo: http://localhost:8000/home/admin/149/print L. (L seguido de un punto) y luego utilizando la tecla de tabulación, aparece la lista de los métodos que pueden aplicarse a L. Utilizar uno de estos metodos para poner el numero 101 al final de la lista L (en inglés se diría: "Append 101 to L"). http://localhost:8000/home/admin/149/print Ejercicio: copiar y pegar la definición de la función Sumas en la ventana de comandos aquí debajo. Cambiar el nombre en "Grafica_Sumas" y modificar la definición para que, en vez de devolver la suma final, devuleva la lista de todas las sumas 0,1,1+2,1+2+3, ..., 1+2+3+...+N. ¿ Existe la lista vacía ? Utilizar esta función para representar gráficamente la sucesión de sumas 0,1,1+2,1+2+3, 1+2+3+...+1000 Ejercicio: modificar el bucle siguiente para poner la lista de todos los resultados sucesivos (0,1,1+2, 1+2+3, 1+2+3+4, ..., 1+2+3+...+20 ) en una lista T. S=0 for i in [1..20]: S=S+i Condicionales "if ... then ... else ..." significa "si...entonces...sino...". ¿ Que crees que va a imprimir el bloque de comandos siguiente ? Comprobalo. La instrucción siguiente creará una representación gráfica de la sucesión de les términos de T. list_plot(T) N=100 if N > 0 and N < 100: print "pequeño" else: print "grande" Funciones El bloque de comandos que sigue es la definición de una función, llamada "sumas", que calcula las suma de los N primeros enteros. Después de haber definido la función, podremos utilzarla, dando un valor al parametro N . Observa los dos niveles de indentaciones: uno marca el bloque de comandos que hacen parte de la definición de la función, el otro marca el bloque de comandos del bucle for. Pinchar en evaluate para que el ordenador lea la definición de la función. def Sumas(N): S=0 for i in [1..N]: S=S+i return S Luego utilizamos la función para calcular Sumas(100), Sumas(200) print Sumas(100) print Sumas(200) ¿ Y aquí ? N=10 if not(N==0) and 1/N <0.12345: print "pequeño" ¿ Qué pasa aqui ? ¿ Por qué no hay mensaje de error, a pesar de la división por cero ? N=0 if not(N==0) and 1/N <0.12345: print "pequeño" Ejercicios Ejercicio (Tables de verdad): En el ejemplo siguiente construimos la tabla de verdad para la formula (p y no q) o (q y no p). http://localhost:8000/home/admin/149/print print " p q t" for p in [True,False]: for q in [True,False]: t=(p and not q) or (q and not p) print p,q,t Construir, de manera parecida, la tabla de verdad para: (p o no q) y (q o no r) y (r o no p) Ejercicio (3n+1): empezamos con un numero n, digamos n=111, y a cada paso calculamos un nuevo valor de n con las reglas: si n es par lo dividimos por dos si n es impar lo multiplicamos por tres y añadimos uno Utilizando un bucle (for) y un condicional (if), calcular los 50 primeros resultados obtenido en este proceso, empezando con n = 111. para comprobar si un numero es par, podemos utilizar is_even, por ejemplo: is_even(51) da como resultado "False").