2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2:...

53
Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 1 Programación Modular y Estructurada TEMA 2: 1

Transcript of 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2:...

Page 1: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 1

Programacioacuten

Modular y

Estructurada

TEMA 2

1

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 2

IacuteNDICE

21 Introduccioacuten(2-5)

22 Principios de la Programacioacuten Estructurada(67)

23 Pasos para la construccioacuten de un programa Modular(8-15)

24 Aacutembito de las variables (Globales y Locales)(16-21)

25 Creacioacuten de subprogramas (22-52)

251 Paso de paraacutemetros por valor y por referencia(2425)

252 Definicioacuten de funcioacuten (26-40)

253 Definicioacuten de Procedimientos (41-52)

Tema 2 Fundamentos de Programacioacuten

2

Final de estos

apartados

EJEMPLOS

ILUSTRATIVOS

TRABAJO

PERSONAL

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 3

Tema 3 Fundamentos de Programacioacuten

Hasta ahora nosotros hemos aprendido a invocar funciones predefinidas (absroundhellip)

Otras funciones las hemos utilizado importaacutendolas de algunos moacutedulos (moacutedulo mathsin loghellip)

En este capiacutetulo se explicaraacuten todos los elementos necesarios para crearlas

Programacioacuten modular Disentildeo de programas mediante la descomposicioacuten del

problema en moacutedulos sencillos e independientes

Programacioacuten estructurada Programacioacuten de cada uno de estos moacutedulos de forma

estructurada Unioacuten de moacutedulos para la resolucioacuten del problema global

3

Tema 2 Fundamentos de Programacioacuten

21 Introduccioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 4

Tema 3 Fundamentos de Programacioacuten

Recordemos el principal objetivo de la asignatura

ldquoAprender a programar seguacuten este paradigma =gtEscribir programas

que funcionen correctamente y sean claros legibles y faacutecilmente actualizables y depurablesrdquo

21 Introduccioacuten

4

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 5

Tema 3 Fundamentos de Programacioacuten

Evitar determinados malos haacutebitos de programacioacuten que llevan a problemas como

Coacutedigo demasiado largo enrevesado y poco claro ilegible en la mayoriacutea de los casos

no solo para otros programadores tambieacuten para el autor del mismo

Dificultades en la correccioacuten de errores siendo generalmente difiacutecil la localizacioacuten de los

mismos Las modificaciones o actualizaciones son costosas por lo que generalmente se

recurre a parches que contribuyen a su vez a un empeoramiento en la loacutegica inicial del

programa

A estos inconvenientes se suele antildeadir una documentacioacuten escasa e incompleta y no

siempre actualizada

5

Tema 2 Fundamentos de Programacioacuten

21 Introduccioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 6

Tema 3 Fundamentos de Programacioacuten

Programacioacuten Estructurada

Principios

Abstraccioacuten

No se disentildea la solucioacuten de un problema pensando en una maacutequina y lenguaje concreto

Teorema de la Estructura (Bohn y Jacopini)

Todo diagrama o programa propio cualquiera que sea el trabajo que tenga que realizar se

puede implementar utilizando las tres estructuras de control baacutesicas que son la secuencial

alternativa o selectiva y repetitiva o iterativa

La importancia de este teorema radica en que estas tres estructuras tienen un uacutenico punto

de entrada y un uacutenico punto de salida =gt Todo lo que se construya con estas tres estructuras

tendraacute tambieacuten un uacutenico inicio y un uacutenico final

Disentildeo descendente (Top-down)

Resolver el problema original apoyaacutendonos en una serie de subtareas o moacutedulos

622 Principios de la Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 7

Tema 3 Fundamentos de Programacioacuten

Observacioacuten la instruccioacuten ldquoir ardquo (goto)

Esta instruccioacuten fue la base de lenguajes como BASIC o FORTRAN y muchos otros pero

desde la aparicioacuten de la programacioacuten estructurada esta instruccioacuten esta proscrita puesto

que va contra los principios de la misma

Esta instruccioacuten permite saltar desde cualquier punto del programa a cualquier otro y por

tanto va contra el principio enunciado en el Teorema de la estructura

Esta instruccioacuten nos impide hacer una descomposicioacuten del problema puesto que si desde

cualquier lugar podemos ir a cualquier otro es imposible ir separando el programa en aacutereas

claras todo estaraacute mezclado con todo Nuestro objetivo es trabajar de forma

estructurada

Norma importantiacutesima se llega al fin del programa por un soacutelo camino de la misma forma

que se sale de un bucle por una uacutenica viacutea

En programacioacuten estructurada esta totalmente prohibido el uso de la instruccioacuten goto

7

221 Instruccioacuten goto

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 8

Tema 3 Fundamentos de Programacioacuten

Programacioacuten modular

Divisioacuten del problema a resolver en varios subproblemas maacutes sencillos con entidad y sentido

propios

Buacutesqueda de la abstraccioacuten =gt no importa como se hace sino que hace cada uno de los

moacutedulos

Para cada uno de estos subproblemas o moacutedulos se construye un algoritmo que los resuelve

Terminada esta fase se componen todos los moacutedulos para obtener un algoritmo global que

resuelva el problema Esto se conoce como la teacutecnica Divide y venceraacutes

Existen dos formas de realizar el disentildeo modular

Disentildeo descendente (Top Down) Resolver el problema original apoyaacutendonos en una

serie de subtareas o moacutedulos que se suponen ya resueltos y obtener la solucioacuten del

problema posponiendo la solucioacuten de dichas subtareas

Disentildeo ascendente (Bottom Up) Se comienza por resolver las subtareas maacutes pequentildeas

que contiene el problema original para posteriormente unirlas obteniendo la solucioacuten

del problema

8

23 Pasos para la construccioacuten de un programa modular

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 9

Tema 3 Fundamentos de Programacioacuten

Algoritmo para el calculo del aacuterea de un cilindro

leer radio y altura

Calcular aacuterea circunferencia ()

calcular longitud circunferencia

Calcular aacuterea rectaacutengulo ()

Calcular aacuterea cilindro

() aacuterea circunferencia = p radio radio

Longitud = 2 p radio

() aacuterea rectaacutengulo = longitud altura

aacuterea cilindro= 2 aacuterea circunferencia + aacuterea rectaacutengulo

9

231 Ejemplo 1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 2: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 2

IacuteNDICE

21 Introduccioacuten(2-5)

22 Principios de la Programacioacuten Estructurada(67)

23 Pasos para la construccioacuten de un programa Modular(8-15)

24 Aacutembito de las variables (Globales y Locales)(16-21)

25 Creacioacuten de subprogramas (22-52)

251 Paso de paraacutemetros por valor y por referencia(2425)

252 Definicioacuten de funcioacuten (26-40)

253 Definicioacuten de Procedimientos (41-52)

Tema 2 Fundamentos de Programacioacuten

2

Final de estos

apartados

EJEMPLOS

ILUSTRATIVOS

TRABAJO

PERSONAL

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 3

Tema 3 Fundamentos de Programacioacuten

Hasta ahora nosotros hemos aprendido a invocar funciones predefinidas (absroundhellip)

Otras funciones las hemos utilizado importaacutendolas de algunos moacutedulos (moacutedulo mathsin loghellip)

En este capiacutetulo se explicaraacuten todos los elementos necesarios para crearlas

Programacioacuten modular Disentildeo de programas mediante la descomposicioacuten del

problema en moacutedulos sencillos e independientes

Programacioacuten estructurada Programacioacuten de cada uno de estos moacutedulos de forma

estructurada Unioacuten de moacutedulos para la resolucioacuten del problema global

3

Tema 2 Fundamentos de Programacioacuten

21 Introduccioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 4

Tema 3 Fundamentos de Programacioacuten

Recordemos el principal objetivo de la asignatura

ldquoAprender a programar seguacuten este paradigma =gtEscribir programas

que funcionen correctamente y sean claros legibles y faacutecilmente actualizables y depurablesrdquo

21 Introduccioacuten

4

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 5

Tema 3 Fundamentos de Programacioacuten

Evitar determinados malos haacutebitos de programacioacuten que llevan a problemas como

Coacutedigo demasiado largo enrevesado y poco claro ilegible en la mayoriacutea de los casos

no solo para otros programadores tambieacuten para el autor del mismo

Dificultades en la correccioacuten de errores siendo generalmente difiacutecil la localizacioacuten de los

mismos Las modificaciones o actualizaciones son costosas por lo que generalmente se

recurre a parches que contribuyen a su vez a un empeoramiento en la loacutegica inicial del

programa

A estos inconvenientes se suele antildeadir una documentacioacuten escasa e incompleta y no

siempre actualizada

5

Tema 2 Fundamentos de Programacioacuten

21 Introduccioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 6

Tema 3 Fundamentos de Programacioacuten

Programacioacuten Estructurada

Principios

Abstraccioacuten

No se disentildea la solucioacuten de un problema pensando en una maacutequina y lenguaje concreto

Teorema de la Estructura (Bohn y Jacopini)

Todo diagrama o programa propio cualquiera que sea el trabajo que tenga que realizar se

puede implementar utilizando las tres estructuras de control baacutesicas que son la secuencial

alternativa o selectiva y repetitiva o iterativa

La importancia de este teorema radica en que estas tres estructuras tienen un uacutenico punto

de entrada y un uacutenico punto de salida =gt Todo lo que se construya con estas tres estructuras

tendraacute tambieacuten un uacutenico inicio y un uacutenico final

Disentildeo descendente (Top-down)

Resolver el problema original apoyaacutendonos en una serie de subtareas o moacutedulos

622 Principios de la Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 7

Tema 3 Fundamentos de Programacioacuten

Observacioacuten la instruccioacuten ldquoir ardquo (goto)

Esta instruccioacuten fue la base de lenguajes como BASIC o FORTRAN y muchos otros pero

desde la aparicioacuten de la programacioacuten estructurada esta instruccioacuten esta proscrita puesto

que va contra los principios de la misma

Esta instruccioacuten permite saltar desde cualquier punto del programa a cualquier otro y por

tanto va contra el principio enunciado en el Teorema de la estructura

Esta instruccioacuten nos impide hacer una descomposicioacuten del problema puesto que si desde

cualquier lugar podemos ir a cualquier otro es imposible ir separando el programa en aacutereas

claras todo estaraacute mezclado con todo Nuestro objetivo es trabajar de forma

estructurada

Norma importantiacutesima se llega al fin del programa por un soacutelo camino de la misma forma

que se sale de un bucle por una uacutenica viacutea

En programacioacuten estructurada esta totalmente prohibido el uso de la instruccioacuten goto

7

221 Instruccioacuten goto

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 8

Tema 3 Fundamentos de Programacioacuten

Programacioacuten modular

Divisioacuten del problema a resolver en varios subproblemas maacutes sencillos con entidad y sentido

propios

Buacutesqueda de la abstraccioacuten =gt no importa como se hace sino que hace cada uno de los

moacutedulos

Para cada uno de estos subproblemas o moacutedulos se construye un algoritmo que los resuelve

Terminada esta fase se componen todos los moacutedulos para obtener un algoritmo global que

resuelva el problema Esto se conoce como la teacutecnica Divide y venceraacutes

Existen dos formas de realizar el disentildeo modular

Disentildeo descendente (Top Down) Resolver el problema original apoyaacutendonos en una

serie de subtareas o moacutedulos que se suponen ya resueltos y obtener la solucioacuten del

problema posponiendo la solucioacuten de dichas subtareas

Disentildeo ascendente (Bottom Up) Se comienza por resolver las subtareas maacutes pequentildeas

que contiene el problema original para posteriormente unirlas obteniendo la solucioacuten

del problema

8

23 Pasos para la construccioacuten de un programa modular

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 9

Tema 3 Fundamentos de Programacioacuten

Algoritmo para el calculo del aacuterea de un cilindro

leer radio y altura

Calcular aacuterea circunferencia ()

calcular longitud circunferencia

Calcular aacuterea rectaacutengulo ()

Calcular aacuterea cilindro

() aacuterea circunferencia = p radio radio

Longitud = 2 p radio

() aacuterea rectaacutengulo = longitud altura

aacuterea cilindro= 2 aacuterea circunferencia + aacuterea rectaacutengulo

9

231 Ejemplo 1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 3: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 3

Tema 3 Fundamentos de Programacioacuten

Hasta ahora nosotros hemos aprendido a invocar funciones predefinidas (absroundhellip)

Otras funciones las hemos utilizado importaacutendolas de algunos moacutedulos (moacutedulo mathsin loghellip)

En este capiacutetulo se explicaraacuten todos los elementos necesarios para crearlas

Programacioacuten modular Disentildeo de programas mediante la descomposicioacuten del

problema en moacutedulos sencillos e independientes

Programacioacuten estructurada Programacioacuten de cada uno de estos moacutedulos de forma

estructurada Unioacuten de moacutedulos para la resolucioacuten del problema global

3

Tema 2 Fundamentos de Programacioacuten

21 Introduccioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 4

Tema 3 Fundamentos de Programacioacuten

Recordemos el principal objetivo de la asignatura

ldquoAprender a programar seguacuten este paradigma =gtEscribir programas

que funcionen correctamente y sean claros legibles y faacutecilmente actualizables y depurablesrdquo

21 Introduccioacuten

4

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 5

Tema 3 Fundamentos de Programacioacuten

Evitar determinados malos haacutebitos de programacioacuten que llevan a problemas como

Coacutedigo demasiado largo enrevesado y poco claro ilegible en la mayoriacutea de los casos

no solo para otros programadores tambieacuten para el autor del mismo

Dificultades en la correccioacuten de errores siendo generalmente difiacutecil la localizacioacuten de los

mismos Las modificaciones o actualizaciones son costosas por lo que generalmente se

recurre a parches que contribuyen a su vez a un empeoramiento en la loacutegica inicial del

programa

A estos inconvenientes se suele antildeadir una documentacioacuten escasa e incompleta y no

siempre actualizada

5

Tema 2 Fundamentos de Programacioacuten

21 Introduccioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 6

Tema 3 Fundamentos de Programacioacuten

Programacioacuten Estructurada

Principios

Abstraccioacuten

No se disentildea la solucioacuten de un problema pensando en una maacutequina y lenguaje concreto

Teorema de la Estructura (Bohn y Jacopini)

Todo diagrama o programa propio cualquiera que sea el trabajo que tenga que realizar se

puede implementar utilizando las tres estructuras de control baacutesicas que son la secuencial

alternativa o selectiva y repetitiva o iterativa

La importancia de este teorema radica en que estas tres estructuras tienen un uacutenico punto

de entrada y un uacutenico punto de salida =gt Todo lo que se construya con estas tres estructuras

tendraacute tambieacuten un uacutenico inicio y un uacutenico final

Disentildeo descendente (Top-down)

Resolver el problema original apoyaacutendonos en una serie de subtareas o moacutedulos

622 Principios de la Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 7

Tema 3 Fundamentos de Programacioacuten

Observacioacuten la instruccioacuten ldquoir ardquo (goto)

Esta instruccioacuten fue la base de lenguajes como BASIC o FORTRAN y muchos otros pero

desde la aparicioacuten de la programacioacuten estructurada esta instruccioacuten esta proscrita puesto

que va contra los principios de la misma

Esta instruccioacuten permite saltar desde cualquier punto del programa a cualquier otro y por

tanto va contra el principio enunciado en el Teorema de la estructura

Esta instruccioacuten nos impide hacer una descomposicioacuten del problema puesto que si desde

cualquier lugar podemos ir a cualquier otro es imposible ir separando el programa en aacutereas

claras todo estaraacute mezclado con todo Nuestro objetivo es trabajar de forma

estructurada

Norma importantiacutesima se llega al fin del programa por un soacutelo camino de la misma forma

que se sale de un bucle por una uacutenica viacutea

En programacioacuten estructurada esta totalmente prohibido el uso de la instruccioacuten goto

7

221 Instruccioacuten goto

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 8

Tema 3 Fundamentos de Programacioacuten

Programacioacuten modular

Divisioacuten del problema a resolver en varios subproblemas maacutes sencillos con entidad y sentido

propios

Buacutesqueda de la abstraccioacuten =gt no importa como se hace sino que hace cada uno de los

moacutedulos

Para cada uno de estos subproblemas o moacutedulos se construye un algoritmo que los resuelve

Terminada esta fase se componen todos los moacutedulos para obtener un algoritmo global que

resuelva el problema Esto se conoce como la teacutecnica Divide y venceraacutes

Existen dos formas de realizar el disentildeo modular

Disentildeo descendente (Top Down) Resolver el problema original apoyaacutendonos en una

serie de subtareas o moacutedulos que se suponen ya resueltos y obtener la solucioacuten del

problema posponiendo la solucioacuten de dichas subtareas

Disentildeo ascendente (Bottom Up) Se comienza por resolver las subtareas maacutes pequentildeas

que contiene el problema original para posteriormente unirlas obteniendo la solucioacuten

del problema

8

23 Pasos para la construccioacuten de un programa modular

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 9

Tema 3 Fundamentos de Programacioacuten

Algoritmo para el calculo del aacuterea de un cilindro

leer radio y altura

Calcular aacuterea circunferencia ()

calcular longitud circunferencia

Calcular aacuterea rectaacutengulo ()

Calcular aacuterea cilindro

() aacuterea circunferencia = p radio radio

Longitud = 2 p radio

() aacuterea rectaacutengulo = longitud altura

aacuterea cilindro= 2 aacuterea circunferencia + aacuterea rectaacutengulo

9

231 Ejemplo 1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 4: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 4

Tema 3 Fundamentos de Programacioacuten

Recordemos el principal objetivo de la asignatura

ldquoAprender a programar seguacuten este paradigma =gtEscribir programas

que funcionen correctamente y sean claros legibles y faacutecilmente actualizables y depurablesrdquo

21 Introduccioacuten

4

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 5

Tema 3 Fundamentos de Programacioacuten

Evitar determinados malos haacutebitos de programacioacuten que llevan a problemas como

Coacutedigo demasiado largo enrevesado y poco claro ilegible en la mayoriacutea de los casos

no solo para otros programadores tambieacuten para el autor del mismo

Dificultades en la correccioacuten de errores siendo generalmente difiacutecil la localizacioacuten de los

mismos Las modificaciones o actualizaciones son costosas por lo que generalmente se

recurre a parches que contribuyen a su vez a un empeoramiento en la loacutegica inicial del

programa

A estos inconvenientes se suele antildeadir una documentacioacuten escasa e incompleta y no

siempre actualizada

5

Tema 2 Fundamentos de Programacioacuten

21 Introduccioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 6

Tema 3 Fundamentos de Programacioacuten

Programacioacuten Estructurada

Principios

Abstraccioacuten

No se disentildea la solucioacuten de un problema pensando en una maacutequina y lenguaje concreto

Teorema de la Estructura (Bohn y Jacopini)

Todo diagrama o programa propio cualquiera que sea el trabajo que tenga que realizar se

puede implementar utilizando las tres estructuras de control baacutesicas que son la secuencial

alternativa o selectiva y repetitiva o iterativa

La importancia de este teorema radica en que estas tres estructuras tienen un uacutenico punto

de entrada y un uacutenico punto de salida =gt Todo lo que se construya con estas tres estructuras

tendraacute tambieacuten un uacutenico inicio y un uacutenico final

Disentildeo descendente (Top-down)

Resolver el problema original apoyaacutendonos en una serie de subtareas o moacutedulos

622 Principios de la Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 7

Tema 3 Fundamentos de Programacioacuten

Observacioacuten la instruccioacuten ldquoir ardquo (goto)

Esta instruccioacuten fue la base de lenguajes como BASIC o FORTRAN y muchos otros pero

desde la aparicioacuten de la programacioacuten estructurada esta instruccioacuten esta proscrita puesto

que va contra los principios de la misma

Esta instruccioacuten permite saltar desde cualquier punto del programa a cualquier otro y por

tanto va contra el principio enunciado en el Teorema de la estructura

Esta instruccioacuten nos impide hacer una descomposicioacuten del problema puesto que si desde

cualquier lugar podemos ir a cualquier otro es imposible ir separando el programa en aacutereas

claras todo estaraacute mezclado con todo Nuestro objetivo es trabajar de forma

estructurada

Norma importantiacutesima se llega al fin del programa por un soacutelo camino de la misma forma

que se sale de un bucle por una uacutenica viacutea

En programacioacuten estructurada esta totalmente prohibido el uso de la instruccioacuten goto

7

221 Instruccioacuten goto

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 8

Tema 3 Fundamentos de Programacioacuten

Programacioacuten modular

Divisioacuten del problema a resolver en varios subproblemas maacutes sencillos con entidad y sentido

propios

Buacutesqueda de la abstraccioacuten =gt no importa como se hace sino que hace cada uno de los

moacutedulos

Para cada uno de estos subproblemas o moacutedulos se construye un algoritmo que los resuelve

Terminada esta fase se componen todos los moacutedulos para obtener un algoritmo global que

resuelva el problema Esto se conoce como la teacutecnica Divide y venceraacutes

Existen dos formas de realizar el disentildeo modular

Disentildeo descendente (Top Down) Resolver el problema original apoyaacutendonos en una

serie de subtareas o moacutedulos que se suponen ya resueltos y obtener la solucioacuten del

problema posponiendo la solucioacuten de dichas subtareas

Disentildeo ascendente (Bottom Up) Se comienza por resolver las subtareas maacutes pequentildeas

que contiene el problema original para posteriormente unirlas obteniendo la solucioacuten

del problema

8

23 Pasos para la construccioacuten de un programa modular

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 9

Tema 3 Fundamentos de Programacioacuten

Algoritmo para el calculo del aacuterea de un cilindro

leer radio y altura

Calcular aacuterea circunferencia ()

calcular longitud circunferencia

Calcular aacuterea rectaacutengulo ()

Calcular aacuterea cilindro

() aacuterea circunferencia = p radio radio

Longitud = 2 p radio

() aacuterea rectaacutengulo = longitud altura

aacuterea cilindro= 2 aacuterea circunferencia + aacuterea rectaacutengulo

9

231 Ejemplo 1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 5: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 5

Tema 3 Fundamentos de Programacioacuten

Evitar determinados malos haacutebitos de programacioacuten que llevan a problemas como

Coacutedigo demasiado largo enrevesado y poco claro ilegible en la mayoriacutea de los casos

no solo para otros programadores tambieacuten para el autor del mismo

Dificultades en la correccioacuten de errores siendo generalmente difiacutecil la localizacioacuten de los

mismos Las modificaciones o actualizaciones son costosas por lo que generalmente se

recurre a parches que contribuyen a su vez a un empeoramiento en la loacutegica inicial del

programa

A estos inconvenientes se suele antildeadir una documentacioacuten escasa e incompleta y no

siempre actualizada

5

Tema 2 Fundamentos de Programacioacuten

21 Introduccioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 6

Tema 3 Fundamentos de Programacioacuten

Programacioacuten Estructurada

Principios

Abstraccioacuten

No se disentildea la solucioacuten de un problema pensando en una maacutequina y lenguaje concreto

Teorema de la Estructura (Bohn y Jacopini)

Todo diagrama o programa propio cualquiera que sea el trabajo que tenga que realizar se

puede implementar utilizando las tres estructuras de control baacutesicas que son la secuencial

alternativa o selectiva y repetitiva o iterativa

La importancia de este teorema radica en que estas tres estructuras tienen un uacutenico punto

de entrada y un uacutenico punto de salida =gt Todo lo que se construya con estas tres estructuras

tendraacute tambieacuten un uacutenico inicio y un uacutenico final

Disentildeo descendente (Top-down)

Resolver el problema original apoyaacutendonos en una serie de subtareas o moacutedulos

622 Principios de la Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 7

Tema 3 Fundamentos de Programacioacuten

Observacioacuten la instruccioacuten ldquoir ardquo (goto)

Esta instruccioacuten fue la base de lenguajes como BASIC o FORTRAN y muchos otros pero

desde la aparicioacuten de la programacioacuten estructurada esta instruccioacuten esta proscrita puesto

que va contra los principios de la misma

Esta instruccioacuten permite saltar desde cualquier punto del programa a cualquier otro y por

tanto va contra el principio enunciado en el Teorema de la estructura

Esta instruccioacuten nos impide hacer una descomposicioacuten del problema puesto que si desde

cualquier lugar podemos ir a cualquier otro es imposible ir separando el programa en aacutereas

claras todo estaraacute mezclado con todo Nuestro objetivo es trabajar de forma

estructurada

Norma importantiacutesima se llega al fin del programa por un soacutelo camino de la misma forma

que se sale de un bucle por una uacutenica viacutea

En programacioacuten estructurada esta totalmente prohibido el uso de la instruccioacuten goto

7

221 Instruccioacuten goto

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 8

Tema 3 Fundamentos de Programacioacuten

Programacioacuten modular

Divisioacuten del problema a resolver en varios subproblemas maacutes sencillos con entidad y sentido

propios

Buacutesqueda de la abstraccioacuten =gt no importa como se hace sino que hace cada uno de los

moacutedulos

Para cada uno de estos subproblemas o moacutedulos se construye un algoritmo que los resuelve

Terminada esta fase se componen todos los moacutedulos para obtener un algoritmo global que

resuelva el problema Esto se conoce como la teacutecnica Divide y venceraacutes

Existen dos formas de realizar el disentildeo modular

Disentildeo descendente (Top Down) Resolver el problema original apoyaacutendonos en una

serie de subtareas o moacutedulos que se suponen ya resueltos y obtener la solucioacuten del

problema posponiendo la solucioacuten de dichas subtareas

Disentildeo ascendente (Bottom Up) Se comienza por resolver las subtareas maacutes pequentildeas

que contiene el problema original para posteriormente unirlas obteniendo la solucioacuten

del problema

8

23 Pasos para la construccioacuten de un programa modular

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 9

Tema 3 Fundamentos de Programacioacuten

Algoritmo para el calculo del aacuterea de un cilindro

leer radio y altura

Calcular aacuterea circunferencia ()

calcular longitud circunferencia

Calcular aacuterea rectaacutengulo ()

Calcular aacuterea cilindro

() aacuterea circunferencia = p radio radio

Longitud = 2 p radio

() aacuterea rectaacutengulo = longitud altura

aacuterea cilindro= 2 aacuterea circunferencia + aacuterea rectaacutengulo

9

231 Ejemplo 1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 6: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 6

Tema 3 Fundamentos de Programacioacuten

Programacioacuten Estructurada

Principios

Abstraccioacuten

No se disentildea la solucioacuten de un problema pensando en una maacutequina y lenguaje concreto

Teorema de la Estructura (Bohn y Jacopini)

Todo diagrama o programa propio cualquiera que sea el trabajo que tenga que realizar se

puede implementar utilizando las tres estructuras de control baacutesicas que son la secuencial

alternativa o selectiva y repetitiva o iterativa

La importancia de este teorema radica en que estas tres estructuras tienen un uacutenico punto

de entrada y un uacutenico punto de salida =gt Todo lo que se construya con estas tres estructuras

tendraacute tambieacuten un uacutenico inicio y un uacutenico final

Disentildeo descendente (Top-down)

Resolver el problema original apoyaacutendonos en una serie de subtareas o moacutedulos

622 Principios de la Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 7

Tema 3 Fundamentos de Programacioacuten

Observacioacuten la instruccioacuten ldquoir ardquo (goto)

Esta instruccioacuten fue la base de lenguajes como BASIC o FORTRAN y muchos otros pero

desde la aparicioacuten de la programacioacuten estructurada esta instruccioacuten esta proscrita puesto

que va contra los principios de la misma

Esta instruccioacuten permite saltar desde cualquier punto del programa a cualquier otro y por

tanto va contra el principio enunciado en el Teorema de la estructura

Esta instruccioacuten nos impide hacer una descomposicioacuten del problema puesto que si desde

cualquier lugar podemos ir a cualquier otro es imposible ir separando el programa en aacutereas

claras todo estaraacute mezclado con todo Nuestro objetivo es trabajar de forma

estructurada

Norma importantiacutesima se llega al fin del programa por un soacutelo camino de la misma forma

que se sale de un bucle por una uacutenica viacutea

En programacioacuten estructurada esta totalmente prohibido el uso de la instruccioacuten goto

7

221 Instruccioacuten goto

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 8

Tema 3 Fundamentos de Programacioacuten

Programacioacuten modular

Divisioacuten del problema a resolver en varios subproblemas maacutes sencillos con entidad y sentido

propios

Buacutesqueda de la abstraccioacuten =gt no importa como se hace sino que hace cada uno de los

moacutedulos

Para cada uno de estos subproblemas o moacutedulos se construye un algoritmo que los resuelve

Terminada esta fase se componen todos los moacutedulos para obtener un algoritmo global que

resuelva el problema Esto se conoce como la teacutecnica Divide y venceraacutes

Existen dos formas de realizar el disentildeo modular

Disentildeo descendente (Top Down) Resolver el problema original apoyaacutendonos en una

serie de subtareas o moacutedulos que se suponen ya resueltos y obtener la solucioacuten del

problema posponiendo la solucioacuten de dichas subtareas

Disentildeo ascendente (Bottom Up) Se comienza por resolver las subtareas maacutes pequentildeas

que contiene el problema original para posteriormente unirlas obteniendo la solucioacuten

del problema

8

23 Pasos para la construccioacuten de un programa modular

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 9

Tema 3 Fundamentos de Programacioacuten

Algoritmo para el calculo del aacuterea de un cilindro

leer radio y altura

Calcular aacuterea circunferencia ()

calcular longitud circunferencia

Calcular aacuterea rectaacutengulo ()

Calcular aacuterea cilindro

() aacuterea circunferencia = p radio radio

Longitud = 2 p radio

() aacuterea rectaacutengulo = longitud altura

aacuterea cilindro= 2 aacuterea circunferencia + aacuterea rectaacutengulo

9

231 Ejemplo 1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 7: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 7

Tema 3 Fundamentos de Programacioacuten

Observacioacuten la instruccioacuten ldquoir ardquo (goto)

Esta instruccioacuten fue la base de lenguajes como BASIC o FORTRAN y muchos otros pero

desde la aparicioacuten de la programacioacuten estructurada esta instruccioacuten esta proscrita puesto

que va contra los principios de la misma

Esta instruccioacuten permite saltar desde cualquier punto del programa a cualquier otro y por

tanto va contra el principio enunciado en el Teorema de la estructura

Esta instruccioacuten nos impide hacer una descomposicioacuten del problema puesto que si desde

cualquier lugar podemos ir a cualquier otro es imposible ir separando el programa en aacutereas

claras todo estaraacute mezclado con todo Nuestro objetivo es trabajar de forma

estructurada

Norma importantiacutesima se llega al fin del programa por un soacutelo camino de la misma forma

que se sale de un bucle por una uacutenica viacutea

En programacioacuten estructurada esta totalmente prohibido el uso de la instruccioacuten goto

7

221 Instruccioacuten goto

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 8

Tema 3 Fundamentos de Programacioacuten

Programacioacuten modular

Divisioacuten del problema a resolver en varios subproblemas maacutes sencillos con entidad y sentido

propios

Buacutesqueda de la abstraccioacuten =gt no importa como se hace sino que hace cada uno de los

moacutedulos

Para cada uno de estos subproblemas o moacutedulos se construye un algoritmo que los resuelve

Terminada esta fase se componen todos los moacutedulos para obtener un algoritmo global que

resuelva el problema Esto se conoce como la teacutecnica Divide y venceraacutes

Existen dos formas de realizar el disentildeo modular

Disentildeo descendente (Top Down) Resolver el problema original apoyaacutendonos en una

serie de subtareas o moacutedulos que se suponen ya resueltos y obtener la solucioacuten del

problema posponiendo la solucioacuten de dichas subtareas

Disentildeo ascendente (Bottom Up) Se comienza por resolver las subtareas maacutes pequentildeas

que contiene el problema original para posteriormente unirlas obteniendo la solucioacuten

del problema

8

23 Pasos para la construccioacuten de un programa modular

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 9

Tema 3 Fundamentos de Programacioacuten

Algoritmo para el calculo del aacuterea de un cilindro

leer radio y altura

Calcular aacuterea circunferencia ()

calcular longitud circunferencia

Calcular aacuterea rectaacutengulo ()

Calcular aacuterea cilindro

() aacuterea circunferencia = p radio radio

Longitud = 2 p radio

() aacuterea rectaacutengulo = longitud altura

aacuterea cilindro= 2 aacuterea circunferencia + aacuterea rectaacutengulo

9

231 Ejemplo 1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 8: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 8

Tema 3 Fundamentos de Programacioacuten

Programacioacuten modular

Divisioacuten del problema a resolver en varios subproblemas maacutes sencillos con entidad y sentido

propios

Buacutesqueda de la abstraccioacuten =gt no importa como se hace sino que hace cada uno de los

moacutedulos

Para cada uno de estos subproblemas o moacutedulos se construye un algoritmo que los resuelve

Terminada esta fase se componen todos los moacutedulos para obtener un algoritmo global que

resuelva el problema Esto se conoce como la teacutecnica Divide y venceraacutes

Existen dos formas de realizar el disentildeo modular

Disentildeo descendente (Top Down) Resolver el problema original apoyaacutendonos en una

serie de subtareas o moacutedulos que se suponen ya resueltos y obtener la solucioacuten del

problema posponiendo la solucioacuten de dichas subtareas

Disentildeo ascendente (Bottom Up) Se comienza por resolver las subtareas maacutes pequentildeas

que contiene el problema original para posteriormente unirlas obteniendo la solucioacuten

del problema

8

23 Pasos para la construccioacuten de un programa modular

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 9

Tema 3 Fundamentos de Programacioacuten

Algoritmo para el calculo del aacuterea de un cilindro

leer radio y altura

Calcular aacuterea circunferencia ()

calcular longitud circunferencia

Calcular aacuterea rectaacutengulo ()

Calcular aacuterea cilindro

() aacuterea circunferencia = p radio radio

Longitud = 2 p radio

() aacuterea rectaacutengulo = longitud altura

aacuterea cilindro= 2 aacuterea circunferencia + aacuterea rectaacutengulo

9

231 Ejemplo 1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 9: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 9

Tema 3 Fundamentos de Programacioacuten

Algoritmo para el calculo del aacuterea de un cilindro

leer radio y altura

Calcular aacuterea circunferencia ()

calcular longitud circunferencia

Calcular aacuterea rectaacutengulo ()

Calcular aacuterea cilindro

() aacuterea circunferencia = p radio radio

Longitud = 2 p radio

() aacuterea rectaacutengulo = longitud altura

aacuterea cilindro= 2 aacuterea circunferencia + aacuterea rectaacutengulo

9

231 Ejemplo 1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 10: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 10

Tema 3 Fundamentos de Programacioacuten

Disentildeo del organigrama modular donde se muestran los diferentes moacutedulos en los que se divide el

problema inicial y la comunicacioacuten entre ellos

Disentildeo del modulo principal que realiza la distribucioacuten del trabajo entre los diferentes submoacutedulos

Incluye baacutesicamente las llamadas a los diferentes submoacutedulos y algunas operaciones de

caraacutecter general

Cuando se llama a un moacutedulo el moacutedulo que llama cede el control al submoacutedulo llamado y

este le devuelve el control en el punto inmediatamente siguiente al de la llamada una vez

completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS

INSTRUCCIONES (incluyendo las llamadas a otros moacutedulos si las hay)

Los moacutedulos se pueden llamar tantas veces como sea necesario es decir es posible realizar el

mismo proceso sobre diferentes datos tantas veces como se precise sin repetir coacutedigo

10

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 11: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 11

Tema 3 Fundamentos de Programacioacuten

Prog Principal

Moacutedulo 1 Moacutedulo 2 Moacutedulo 3

Moacutedulo 4 Moacutedulo 5 Moacutedulo 6 Moacutedulo 7

Moacutedulo 8

11

232 Organigramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 12: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 12

Tema 3 Fundamentos de Programacioacuten

Calcular el aacuterea de un cilindro

Calcular el aacuterea de un ciacuterculo

de radio r (S)

Calcular el aacuterea de la pieza

frontal de altura h

Calcular la longitud de una

circunferencia de radio r (L)

Calcular el aacuterea de un rectaacutengulo de

altura h y base L (F)

Leer radio (r) y altura (h) Sumar 2S y F

S = p r2

L = 2 p r F = L S

12

233 Organigrama Ejemplo1

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 13: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 13

Tema 3 Fundamentos de Programacioacuten

Establecer la comunicacioacuten entre los moacutedulos Queacute informacioacuten necesitan queacute informacioacuten

devuelven y quieacuten y a quieacuten se la proporcionan Los moacutedulos deben cumplir las siguientes

caracteriacutesticas

Maacutexima cohesioacuten es decir las salidas de un moacutedulo deben ser compatibles con las entradas de

otros moacutedulos

Miacutenimo acoplamiento es decir la cantidad de informacioacuten que recibe un moacutedulo de otro

moacutedulo debe ser la miacutenima

El resultado de un moacutedulo debe ser funcioacuten directa de sus entradas y no depender de ninguacuten

estado interno

Los moacutedulos seraacuten como cajas negras que recibe un unos valores de entrada y devuelven un

unos valores de

salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y

entradas)

Moacutedulo 1 Moacutedulo 2 E1 S1 E2 S2

IF 1 IF 2

Programa E1 S2

13

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 14: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 14

Tema 3 Fundamentos de Programacioacuten

Describir en detalle cada moacutedulo baacutesico como paso previo a su implementacioacuten

En el caso de que el proceso que realiza un moacutedulo sea a su vez una tarea compleja

puede ser necesario volver a dividirlo en otros submoacutedulos con ideacutentica filosofiacutea (disentildeo

descendente)

Unioacuten de los subprogramas construidos para obtener la solucioacuten del problema (disentildeo

ascendente)

Esta teacutecnica aporta dos caracteriacutesticas importantes

Reutilizacioacuten de coacutedigo

Abstraccioacuten

La programacioacuten modular se implementa utilizando moacutedulos que toman diferentes nombres

seguacuten los lenguajes funciones en C y C++ subrutinas en BASIC y FORTRAN funciones y

procedimientos en PASCAL secciones en COBOL

14

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 15: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 15

Tema 3 Fundamentos de Programacioacuten

En programacioacuten Estructurada normalmente se trabaja con dos tipos de moacutedulos

Funciones y Procedimientos

En este curso se aprenderaacute a implementar Funciones y Procedimientos en Python (En python

existen dos tipos de funciones dependiendo de su salida una de ellas simularaacute el concepto

que veremos de funcioacuten y la otra el concepto de procedimiento )

15

234 Comunicacioacuten entre moacutedulos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 16: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 16

Tema 3 Fundamentos de Programacioacuten

Aacutembito de las variables

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su

aacutembito (Es decir el aacutembito es la parte del algoritmo en el que se define una variable =gt parte

en la que la variable es accesible El mismo concepto para las constantes)

Las variables en programacioacuten estructurada pueden ser globales o locales

Una variable global generalmente se declara para el programa o algoritmo completo es

decir en el modulo principal Su valor estaacute disponible tanto en el cuerpo del programa

principal como en el de cualquiera de los subprogramas declarados

Una variable local es la que estaacute declarada y definida dentro de un subprograma y es

distinta de las posibles variables con el mismo nombre definidas en otros moacutedulos que no

esteacuten anidados en su interior puesto que se refieren a posiciones diferentes de memoria Su

valor soacutelo estaacute disponible mientras se ejecuta el subprograma

El programa principal no tiene conocimiento alguno de las variables locales de sus

procedimientos y funciones Estas variables hacen a los moacutedulos totalmente

independientes

1624 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 17: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 17

Tema 3 Fundamentos de Programacioacuten

Diagrama

Vbles definidas

en

Accesibles desde

A A B C D E F G

B B C

C C

D D E F G

E E F G

F F

G G

A

B C

D E

F

G

1724 Aacutembito de las variables

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 18: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 18

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables locales

INICIO Modulo 1

leer (x) Suponer lectura 3

y x100

escribir (x y) Salida 3 300

Fin Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y) Suponer lectura 10 20

Llamada a Moacutedulo 1

z x + y

Escribir (x y z) Salida 102030

Fin Moacutedulo Principal

18241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 19: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 19

Moacutedulo Principal

VARIABLE x y z entero Declaracioacuten de variables globales

Modulo 1

VARIABLE x y entero Declaracioacuten de variables localesINICIO Modulo 1

leer (x y ) Suponer lectura 32

z x + y

escribir (z) Salida 5

FIN Moacutedulo 1

Inicio Moacutedulo Principal

Leer (x y z) Suponer lectura 123

Llamada a Moacutedulo 1

Llamada a Moacutedulo 2

Escribir (x y z) Salida 125 se ha modificado z en Modulo 1

Fin Moacutedulo Principal

La uacutenica variable global

modificada ha sido z

(en Moacutedulo 1)

19241 Ejemplos

Modulo 2

VARIABLE x z entero Declaracioacuten de variables locales

INICIO Modulo 2

leer (x z) Suponer lectura 1020

z x + z

escribir (x y z) Salida 10 2 30

FIN Moacutedulo 2

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 20: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 20

Moacutedulo Principal

VARIABLE xyz entero variables globales

Modulo 1

VARIABLE xy entero datoreal variables locales

INICIO

leer (xy) Suponer lectura 32

z x+y

escribir ( xy z) salida 32 5

dato= 1095

escribir (dato) salida 1095

Fin Moacutedulo 1

Modulo 2

VARIABLE xz entero variables locales

INICIO

leer (xz) Suponer lectura 1020

z x+z

escribir (x y z) salida 10 2 30

Fin Moacutedulo 2

Inicio Moacutedulo Principal

Leer (xyz) Suponer lectura 123

Llamada a Moacutedulo 1

Escribir (xyz) salida 12 5

Escribir (dato) salida ERROR variable desconocida

Llamada a Moacutedulo 2

Escribir (xyz) Salida 125 modificado z en Modulo 1

Fin Moacutedulo Principal

20241 Ejemplos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 21: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 21

Tema 3 Fundamentos de Programacioacuten

21242 Variables globales y locales en Python

Los conceptos explicados son exactamente igual en Python

Recordemos en Python las variables no se declaran Se crean justo en el momento en el que

reciben por asignacioacuten un valor por primera vez y a partir de ese momento ya pueden formar

parte de una expresioacuten

Variables globales residen fuera de toda funcioacuten son visibles en todo el programa

Variables locales Son creadas dentro de las funciones y solo son visibles dentro de las mismas

En python existen ademaacutes Variables no locales Si a una variable no se le asigna valor en una

funcioacuten Python la considera libre y busca su valor en los niveles superiores de esa funcioacuten

empezando por el inmediatamente superior y continuando hasta el programa principal Si a la

variable se le asigna valor en alguacuten nivel intermedio la variable se considera no local y si se le

asigna en el programa principal la variable se considera global

Las variables locales al contrario que las globales tienen una vida efiacutemera Solo existen durante el

momento en el que es llamada la funcioacuten En el momento en el que esta concluye desaparecen

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 22: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 22

Tema 3 Fundamentos de Programacioacuten

Los tipos de subprogramas que estudiaremos

Las funciones devuelven un soacutelo valor

Los procedimientos devuelven cero uno o varios valores en caso de que devuelva cero

valores devuelve un dato a la unidad de programa

Paraacutemetros Un argumento o paraacutemetro es el medio a partir del cual podemos

expandir el aacutembito de variables locales de subprogramas hacia otros

subprogramas y ademaacutes quienes nos permiten establecer comunicaciones entre

las diferentes partes de un programa

25 Creacioacuten de subprogramas22

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 23: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 23

Tema 3 Fundamentos de Programacioacuten

La comunicacioacuten de un moacutedulo con el resto de partes del programa se debe realizar a

traveacutes de los valores de su interfaz Cualquier otra comunicacioacuten entre el moacutedulo y el resto

del programa se denomina efectos laterales considerados como una mala teacutecnica de

programacioacuten que dificulta el entendimiento de los programas

Los moacutedulos se escriben generalmente antes que el programa principal (en el bloque

declarativo) y constan de las mismas partes que un programa es decir seccioacuten de

declaraciones y cuerpo del moacutedulo

La interfaz de un moacutedulo estaacute formada por una lista de paraacutemetros denominados

paraacutemetros formales

La llamada a un moacutedulo se realiza mediante los paraacutemetros actuales

Cuando el moacutedulo es llamado se realiza una correspondencia entre los paraacutemetros formales

y los paraacutemetros actuales que son utilizados en lugar de los paraacutemetros formales

permitiendo asiacute el intercambio de informacioacuten Es lo que se conoce como paso de

paraacutemetros

2325 Creacioacuten de subprogramas

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 24: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 24

Tema 3 Fundamentos de Programacioacuten

Paso por valor

Los paraacutemetros se tratan como variables locales y los valores iniciales se proporcionan

copiando los valores de los correspondientes paraacutemetros actuales

Los cambios que se produzcan por efecto del subprograma no producen cambios en los

valores originales es decir no se devuelven valores de retorno al punto de llamada

Por tanto este paso puede ser una constante variable o expresioacuten

El paso por valor se corresponde con paraacutemetros de entrada Y se especificara

anteponiendo la palabra reservada E al paraacutemetro correspondiente en la lista de

paraacutemetros formales

24251 Paso de paraacutemetros por valor y por referencia

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 25: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 25

Tema 3 Fundamentos de Programacioacuten

Paso por referencia

El moacutedulo que llama pasa al moacutedulo llamado la direccioacuten del paraacutemetro actual de

forma que la variable que actuacutea como paraacutemetro formal es compartida por ambos

moacutedulos siendo visibles las modificaciones que se realicen en el moacutedulo llamado se

devuelven por tanto valores de retorno al punto de llamada

Por tanto no podemos usar constantes ni expresiones solo variables

El paso por referencia se corresponde con paraacutemetros de entrada salida o simplemente

de salida La notacioacuten que utilizaremos para los paraacutemetros de salida es S y para los de

entrada salida ES

25

Tema 2 Fundamentos de Programacioacuten

251 Paso de paraacutemetros por valor y por referencia

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 26: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 26

Tema 3 Fundamentos de Programacioacuten

Funciones

Una funcioacuten es un moacutedulo que recibe uno o varios datos de entrada y devuelve un uacutenico valor

Las funciones siempre devuelven un valor al programa que las invocoacute

La sintaxis de una funcioacuten consta por un lado de la definicioacuten o declaracioacuten de la funcioacuten y

por otro de la llamada a la funcioacuten

Sintaxis en pseudocoacutedigo de la Declaracioacuten o Definicioacuten de una funcioacuten

Funcion identFuncion (lista de paraacutemetros formales) tipo_dato

declaraciones

Inicio

cuerpo de la funcioacuten

identFuncion valor imprescindible para que la funcioacuten devuelva un valor

Fin

26252 Definicioacuten de Funcioacuten

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 27: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 27

Tema 3 Fundamentos de Programacioacuten

Funciones

Sintaxis de la llamada a una funcioacuten

identVble identFuncioacuten (lista de paraacutemetros actuales)

oacute bien la llamada se utiliza dentro de una expresioacuten

La variable debe ser del mismo tipo que el valor de la salida de la funcioacuten

27

Tema 2 Fundamentos de Programacioacuten

252 Definicioacuten de Funcioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 28: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 28

Tema 3 Fundamentos de Programacioacuten

La lista de paraacutemetros formales es la informacioacuten que se le tiene que pasar a la funcioacuten debeindicar el tipo de datos que se trasfiere Estos paraacutemetros dentro de la funcioacuten se utilizan como sifueran variables locales definidas en la funcioacuten

Para cada paraacutemetro hay que poner su nombre (identificador) y tipo de dato Sintaxis(ident_F1 tipo1 ident_F2 tipo2)

La lista de paraacutemetros actuales estaacute formada por un conjunto de identificadores correspondientesa variables constantes expresiones o literales separados por comas definidas en el modulo quellama del mismo tipo especificado en la lista de paraacutemetros formales y coincidiendo en nuacutemero yorden con los paraacutemetros formales Sintaxis

(ident_A1 ident_ A2hellip ident_AN)

El nombre de la funcioacuten lo da el usuario y tiene que ser significativo

En las variables locales se declaran las variables que solo se necesita usar dentro de la funcioacuten

Entre las acciones existiraacute necesariamente una del tipo retorno ltvalorgt Esta sentencia pondraacute fin ala ejecucioacuten de la funcioacuten y devolveraacute el valor de la funcioacuten asociado al nombre o identificadorde la funcioacuten que seraacute del mismo tipo que el indicado al declarar la funcioacuten en la parte final de lacabecera

No se permiten funciones que no devuelvan nada

282521 Caracteriacutesticas de las Funciones

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 29: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 29

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es o no un diacutegito

Funcion es_digito(carcaraacutecter)booleano

Inicio

es_digito(cargt=rsquo0rsquo) y (carlt=rsquo9rsquo)

Fin

inicio modulo principal

helliphelliphelliphelliphellip

si es_digito(car)

escribir ( el caraacutecter es un diacutegito)

sino

escribir( el caracter no es un digitorsquo)

fin

292522 Ejemplos Funciones pseudocoacutedigo

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 30: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 30

Tema 3 Fundamentos de Programacioacuten

En Python las subrutinas reciben el nombre de funciones

Las funciones se pueden definir en cualquier punto de un programa aunque siempre antes de ser

utilizadas NOSOTROS LAS IMPLEMENTAREMOS EN EL BLOQUE DECLARATIVO

La primera liacutenea de la definicioacuten de una funcioacuten contiene la palabra reservada def

El nombre de la funcioacuten (la guiacutea de estilo de Python recomienda escribir todos los caracteres

en minuacutesculas separando las palabras por guiones bajos)

Pareacutentesis (que pueden incluir los argumentos de la funcioacuten como se explica maacutes adelante)

Las instrucciones que forman la funcioacuten se escriben con sangriacutea con respecto a la primera

liacutenea

Por comodidad se puede indicar el final de la funcioacuten con la palabra reservada return (maacutes

adelante se explica el uso de esta palabra reservada) aunque no es obligatorio

Ver ejemplo en apartado 2524

302523 Definicioacuten de Funcioacuten en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 31: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 31

Tema 3 Fundamentos de Programacioacuten

Disentildear una funcioacuten booleana o loacutegica que comprueba si un caraacutecter dado es

o no un diacutegito

algoritmo para ver si un caraacutecter es un diacutegito

def es_digito(car)

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

return (cargt=0) and (carlt=9)

Cuerpo del programa

n = input( Introduce el caraacutecter a comprobar )

if es_digito(n) Llamada a la funcioacuten en el cuerpo principal

print( el caraacutecter es un diacutegito)

else

print( el caracter no es un digito)

31

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 32: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 32

Tema 3 Fundamentos de Programacioacuten

En los ejemplos anteriores hemos documentado la funcioacuten mediante docstring

``` (str)-gtbool

Esta funcioacuten dado un caraacutecter me dice si es un diacutegitorsquorsquorsquo

Este comentario sirve para documentar cualquier funcioacuten podremos acceder a eacutel en la Shell

mediante la funcioacuten help(nombre de la funcioacuten) ejemplo

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

Es importante crear esta informacioacuten para todas las funciones que implementemos

posteriormente visualizar lo que hace la funcioacuten en la shell ejemplo

gtgtgt help(es_digito)

iexcliexcliexclEsta es una costumbre muy recomendable

32

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 33: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 33

Tema 3 Fundamentos de Programacioacuten

Ejemplo Disentildear una funcioacuten que calcule x3

Programa eleva un nuacutemero al cubo

def Eleva_cubo(x)

resultado= 1

for i in range(14)

resultado = resultado x

return resultado

cuerpo del programa

base = int(input( Dime la base ))

potencia = Eleva_cubo(base)

print( El nuacutemero base elevado al cubo es potencia)

33

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 34: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 34

Tema 3 Fundamentos de Programacioacuten

Ejemplo

Disentildear una funcioacuten que compruebe si un nuacutemero es par

algoritmo para comprobar si un nuacutemero es par

def es_par(n)

return n2 == 0

MISMA FUNCIOacuteN PROGRAMADA POR NOVATOS

def es_par()

n = int(input(lsquo Dame un nuacutemero lsquo))

return n2 == 0

este coacutedigo esta mal demuestra falta de soltura esta funcioacuten solicita un numero entero

Si piden una funcioacuten que recibe uno o maacutes datos se sobreentiende que los datos debes

suministrarlos como argumentos en las llamadas

34

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 35: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 35

Tema 3 Fundamentos de Programacioacuten

def es_perfecto (n) 1 cabecera incluye nombre y paraacutemetros

2 docstring es un comentario que siempre antildeadiremos indicando los paraacutemetros de entrada y salida y un resumen de lo

que hace el moacutedulo y a veces tambieacuten por aclarar podemos antildeadir casos de uso

lsquorsquorsquo (n)-gtbool Esta funcioacuten dado un nuacutemero evaluacutea si es un nuacutemero perfecto es un entero que es igual a la suma de los

divisores propios menores que eacutel mismorsquorsquorsquo

3 Cuerpo de la funcioacuten

sumatorio = 0

for i in range (1n)

if n i == 0

sumatorio += i

return sumatorio == n

35

Tema 2 Fundamentos de Programacioacuten

2524 Ejemplos Funciones en Python

Resumen Partes de una Funcioacuten con Python

3 Cuerpo del programa

m = int(input(Dame dato))

a = es_perfecto(m)

if a

print (es perfecto)

else

print(no es perfecto)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 36: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 36

Tema 3 Fundamentos de Programacioacuten

gtgtgt import builtins estas dos instrucciones muestran todas las funciones de python

gtgtgt dir(builtins)[ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeErrorBufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionErrorConnectionRefusedError ConnectionResetError DeprecationWarning EOFError EllipsisEnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointErrorFutureWarning GeneratorExit IOError ImportError ImportWarning IndentationError IndexErrorInterruptedError IsADirectoryError KeyError KeyboardInterrupt LookupError MemoryErrorNameError None NotADirectoryError NotImplemented NotImplementedError OSErrorOverflowError PendingDeprecationWarning PermissionError ProcessLookupError ReferenceErrorResourceWarning RuntimeError RuntimeWarning StopIteration SyntaxError SyntaxWarningSystemError SystemExit TabError TimeoutError True TypeError UnboundLocalErrorUnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateErrorUnicodeWarning UserWarning ValueError Warning WindowsError ZeroDivisionError__build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package____spec__ abs all any ascii bin bool bytearray bytes callable chr classmethodcompile complex copyright credits delattr dict dir divmod enumerate eval exec exitfilter float format frozenset getattr globals hasattr hash help hex id input intisinstance issubclass iter len license list locals map max memoryview min nextobject oct open ord pow print property quit range repr reversed round set setattrslice sorted staticmethod str sum super tuple type vars zip]

362525 Llamada a Funciones predefinidas en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 37: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 37

Tema 3 Fundamentos de Programacioacuten

gtgtgt help(nombre de una funcioacuten )Ayuda para funciones

gtgtgt help(abs)

Help on built-in function abs in module builtins

abs()

abs(number) -gt number

Return the absolute value of the argument

gtgtgt n=abs(-2) Ejemplos

gtgtgt n

2

372525 Llamada a Funciones en Python

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 38: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 38

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

38

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 39: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 39

Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos con Python empleando la sentencias maacutes adecuada

1 Suma de 2 nuacutemeros

2 Calculo de la longitud de una circunferencia

3 Calculo del cuadrado de un nuacutemero

4 Dada la edad de una persona ver si alguien es mayor de edad

Tema1 Fundamentos de Programacioacuten

39

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 40: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 40

Tema 3 Fundamentos de Programacioacuten

Procedimientos

Un procedimiento es un subprograma que recibe cero o maacutes valores de entrada y puede devolver cero o maacutes valores de

salida

En los procedimientos tanto la entrada como la salida de informacioacuten se realizan a traveacutes de Los paraacutemetros

De nuevo es necesario distinguir entre la sintaxis de la declaracioacuten o definicioacuten de un

procedimiento y la sintaxis de la llamada al mismo

La sintaxis de la declaracioacuten o definicioacuten de un procedimiento es

Procedimiento identProcedimiento (lista de paraacutemetros formales)

Declaraciones

Inicio

Cuerpo

Fin

Sintaxis de la llamada a un procedimiento

identProcedimiento (lista de paraacutemetros actuales)

40253 Definicioacuten de Procedimientos

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 41: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 41

Tema 3 Fundamentos de Programacioacuten

Procedimientos

En los procedimientos la lista de paraacutemetros formales debe indicar el tipo de datos que se

trasfiere y el tipo de paso de paraacutemetro Sintaxis

([E o ES o S] ident_P1 tipo1 [E o ES o S] ident_P2 tipo2)

La lista de paraacutemetros actuales seraacuten variables definidas en el modulo que llama del mismo tipo

especificado en la lista de paraacutemetros formales y en el mismo orden

(ident_A1 ident_ A2hellip ident_AN)

Los paraacutemetros actuales deben coincidir en tipo nuacutemero y orden con los paraacutemetros Formales

41

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 42: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 42

Tema 3 Fundamentos de Programacioacuten

Diferencias entre funciones y procedimientos

Una funcioacuten devuelve un uacutenico valor y un procedimiento puede devolver 01 o N

Ninguno de los resultados devueltos por el procedimiento se asocian a su nombre como

ocurriacutea con la funcioacuten

Mientras que la llamada a una funcioacuten forma siempre parte de una expresioacuten la llamada a

un procedimiento es una instruccioacuten que por siacute sola no necesita instrucciones

Esta llamada consiste en el nombre del procedimiento y va entre pareacutentesis van los

paraacutemetros que se le pasan

42

Tema 2 Fundamentos de Programacioacuten

253 Definicioacuten de Procedimientos

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 43: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 43

Tema 3 Fundamentos de Programacioacuten

No todas las funciones devuelven un valor Una funcioacuten que no devuelve un valor se

denomina procedimiento

iquestPara queacute sirve una funcioacuten que no devuelve nada

Mostrar mensajes o resultados por pantalla No te equivoques mostrar algo por pantalla no

es devolver nada Mostrar un mensaje por pantalla es un efecto secundario

Veaacutemoslo con un ejemplo Vamos a implementar ahora un programa que solicita al usuario

un nuacutemero y muestra por pantalla todos los nuacutemeros perfectos entre 1 y dicho nuacutemero

En Python no existe el paso de paraacutemetro por valor y por referencia en realidad los valores

mutables se comportan como paso por referencia y los inmutables como paso por valor

httpslibroswebeslibropythoncapitulo_4definiendo_funcioneshtml

43

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 44: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 44

Tema 3 Fundamentos de Programacioacuten

Sintaxis

def mi_funcion(param1 param2)

print (param1)

print (param2)

Es decir la palabra clave def seguida del nombre de la funcioacuten y entre pareacutentesis los argumentos

separados por comas A continuacioacuten en otra liacutenea indentado y despueacutes de los dos puntos

tendriacuteamos las liacuteneas de coacutedigo que conforman el coacutedigo a ejecutar por la funcioacuten

Tambieacuten podemos encontrarnos con una cadena de texto como primera liacutenea del cuerpo de la

funcioacuten Estas cadenas se conocen con el nombre de docstring (cadena de documentacioacuten

sirven para documentar la funcioacuten)

def mi_funcioacuten(param1 param2)

Esta funcioacuten imprime los dos valores pasados como parametrosldquo

print (param1)

print (param2)

44

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 45: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 45

Tema 3 Fundamentos de Programacioacuten

Funcioacuten tabla perfecto utiliza funcioacuten anterior Observar la llamada en el cuerpo del programa

def es_perfecto (n)

sumatorio = 0

for i in range (1 n)

if n i == 0

sumatorio += i

return sumatorio == n

def tabla_perfectos(m) Muestra todos los nuacutemeros perfectos entre 1 y m

for i in range(1m+1)

if es_perfecto(i)

print(i es un nuacutemero perfecto)

cuerpo de programa

n = int(input( Tabla de nuacutemeros perfecto de 1 a ))

tabla_perfectos(n)

45

Tema 2 Fundamentos de Programacioacuten

2531 Definicioacuten de Procedimientos en Python

gtgtgt

Tabla de nuacutemeros perfecto de 1 a 100

6 es un nuacutemero perfecto

28 es un nuacutemero perfecto

gtgtgt

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 46: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 46

Algoritmo EjercicioA

Variable

ac entero

Procedimiento pa (E b entero)

Variable

c entero

inicio

c b+5

b 2

fin

Inicio

c 3

a 2

pa (a)

Escribir (c a) Salida 3 2

fin

Implementacioacuten coacutedigo Python

def pa(b)

c = b+5

b = 2

c = 3

a = 2

pa (a)

print (c a) Salida 3 2

a se esta utilizando como variable global

paso de paraacutemetro a por valor la variable c

Aparece en cuerpo principal y se vuelve a llamar en funcioacuten (var global)como no se dice nada se volveria a definir y seriacutea tambieacuten una variable local del procedimiento

462532 Ejemplos de Procedimientos Python (Parametros por valor)

Tema 2 Fundamentos de Programacioacuten

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 47: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 47

Algoritmo ejercicioB

Variable

a c entero

Procedimiento pb (E b entero)

Inicio

a 4

b 5

fin

Inicio

c3

a 2

pb(c)

Escribir (ca) salida 3 4

Fin

a se esta utilizando como variable global

47

Implementacioacuten coacutedigo Python

def pb (b)

global a En programacioacuten Estruc Prohibido toma valor del cuerpo principal

a = 4

b = 5

Cuerpo Principal

c = 3

a = 2

pb(c)

print(ca)

salida 3 4 La variable a se ha modificado en el procedimiento pb Prohibido en Programacioacuten Estructurada

Tema 2 Fundamentos de Programacioacuten

2532 Ejemplos de Procedimientos Python (Uso variables globales)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 48: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 48

Tema 3 Fundamentos de Programacioacuten

Algoritmo ejercicioC

Variable a b entero

Procedimiento pc (E i entero ES j entero)

Inicio

i i+10

j j+10

Escribir(i j) salida 12 13

Fin

Inicio

a 2

b 3

pc(ab)

Escribir (a b) salida 2 13

Fin

48

Tema 2 Fundamentos de Programacioacuten

Implementacioacuten coacutedigo Python

def pc (ib)

i = i+10

b= b+10

print(i b)

return b

salida funcion 12 13

a = 2

b = 3

b = pc(ab)

print (a b)

salida 2 13 Parametro b por referencia se modifica valor variable global

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 49: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 49

Pi= 31416

def Calculos ( r)

a = 2 Pi r

l = Pi r r

return al

def respuesta()

while True

resp = input(iquestQuieres salir (SN))

if respupper()== S or respupper()==N

return resp

break

Cuerpo principal

print(iquestDesea calcular el aacuterea y longitud de una circunferencia)

resp = respuesta()

while respupper() == N

radio = int(input( Dime el radio))

area long = Calculos (radio)

print(area long)

resp = respuesta()

area y long simularian el paso de paraacutemetro por referencia cuando las

variables son solo de salida

radio paso de paraacutemetro por valor

49

Tema 2 Fundamentos de Programacioacuten

Programa que calcula el aacuterea y la longitud de una Circunferencia

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 50: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 50

def es_par (x)

return es_par == ((x 2) == 0)

def modulo( t b)

a = 0

while t == 1

a = a + 1

t = 2

b = b + a

return b

Cuerpo Principal

x = 10

k = 1

while True

if es_par(x)

x = modulo(kx)

else

k = k+1

if k gt 2

break

print (x k)

50

Tema 2 Fundamentos de Programacioacuten

2533 Ejemplos de Procedimientos Python (Parametros por valor y por

referencia)

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 51: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 51

Tema 3 Fundamentos de Programacioacuten

Paraacutemetros por valor

Aparecen en cabecera de procedimiento y no salen en return

Paraacutemetros por referencia

1 Salida-gt Han de salir mediante instruccioacuten return del procedimiento y ser asignados a

una variable

2 ES -gtAparecen en cabecera de procedimiento y han de salir mediante instruccioacuten

return del procedimiento y ser asignados a una variable

51

Tema 2 Fundamentos de Programacioacuten

2534 Resumen para simular paraacutemetros por valor y referencias con Python

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 52: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 52

TRABAJO PERSONAL

Tema1 Fundamentos de Programacioacuten

52

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten

Page 53: 2 Programación Modular y Estructurada€¦ · Fundamentos de la Programación 08/10/2015 Tema2: Fundamentos de la Programación 5 Tema 3: Fundamentos de Programación Evitar determinados

Fundamentos de la Programacioacuten 08102015

Tema2 Fundamentos de la Programacioacuten 53

262 Trabajo personal

Lectura recomendada

Cap 6 Libro Introduccioacuten Programacioacuten Python (Andreacutes Marzal)

Laboratorio Tema 2

Resolver ejemplos

Implementar los ejercicios del tema 1 parte 3 bucles modularizaacutendolos

53

Tema 2 Fundamentos de Programacioacuten