3.1 Estructuras de Control

Referencia: Van Rossum 4 p19, Rodriguez 3.4 p26, Downey 5.5

Estructura Básica

Toda solución a un problema (algoritmo) puede ser planteado usando una estructura básica ordenada, compuesta por Inicio, ingreso, procedimiento, salida y fin, semejante a lo descrito en la figura.

Diagrama de Flujo Básico
Diagrama de Flujo Básico

Las estructuras se usan como una forma lógica y ordenada de plantear un algoritmo, para que sea legible por otras personas, sea modular como las piezas de un lego. Permite reutilizar bloques en otros algoritmos para evitar escribirlos nuevamente.



Bloque de Inicio

Permite dar las indicaciones iniciales para la solución de un problema, tales como la referencias o comentarios (#), e importar las herramientas necesarias (import), definir sus propias herramientas (funciones), etc.

comentarios o referencias:

# 1ra Eval. II Termino 2014
# Tema 1

Librerías para cálculo numérico, por ejemplo: Numpy

import numpy as np
c = np.sqrt((a**2)+(b**2))

Librerías para uso de aleatorios: random

import random as rnd
dado = int(rnd.random.random()*6)+1

Librerías para uso de vectores y Matrices: Numpy

import numpy as np
tabla= np.zeros(5,dtype=int)
tabla= np.zeros(shape=(3,5), dtype=float)

entre otras.


Bloque de Ingreso

Donde se pide o ingresa los datos necesarios para resolver el problema, es decir se obtienen los valores de variables, etc.

Ejemplo: Pedir un número entero por teclado

a = int(input('pregunta: '))

Ejemplo: ingresar un número real por teclado

a = float(input('pregunta: '))

Bloque de Procedimiento

Donde se resuelve el problema con los datos ingresados. Aquí es donde más se usan las estructuras de control de operaciones, se desarrolla por bloques.

En cada bloque, la tabulación indica dependencia del bloque.

Condicionales

Permite seleccionar una operación como resultado de una condición establecida.

condicional

if (Condicion):
    Verdadero
else:
    Falso

Ejemplo:

if (a>b):
    a = a+3
else:
    b = b-2

Lazo Repetir: Mientras Repita

permite repetir un bloque de operaciones controlado por una condición.

mientrasrepita

while (condicion):
    operaciones

Ejemplo:

while (a<100):
    a = a+5

Lazo: Repita-Hasta

Se lee como «hasta» que se cumpla el bloque.

Repitahasta

while not(condicion):
   operaciones

Ejemplo:

while not(a<100):
     a = a+5

Bloque de Salida

Presenta los resultados encontrados al desarrollar la solución al problema.

Ejemplo: para mostrar una variable o un mensaje

print('Resultado: ')
print(variable)
print('mensaje:', respuesta)

En las siguiente secciones se dan más detalles, junto al desarrollo de los ejercicios.

2.5 Manejo de texto, cadenas de caracteres

Referencia: Van Rossum 3.1.2 p11, Rodriguez 5.6.1 p59, Downey 2.9

El manejo de texto en computadoras, se conoce con el nombre técnico de «cadenas de caracteres».

Una letra del alfabeto, un número, un signo de puntuación, en general: todos los símbolos que están disponibles en el teclado del computador son un dibujo a ser presentado o usado en una pantalla, impresora, etc.

Cada dibujo se numera para su identificación y cada dibujo se lo conoce como «caracter» o en idioma inglés «character».

La tabla «caracteres y su número de identificación estandarizado se concoce como Tabla de códigos ASCII (American Standard Code for Information Interchange).

Par visualizar el concepto, por ejemplo se obtiene el código ASCII de un caracter:

>>ord('a')
97

El proceso contrario para obtener el caracter de un código ASCII es:

>>chr(97)
'a'

Los símbolos o caracteres se agrupan para formar palabras, frases, párrafos, por lo que internamente se convierten en vectores numéricos de los dibujos o símbolos. A esta agrupación se la conoce como «cadenas» o «strings».

La agrupación de caracteres se conoce como «concatenar». En Python se usa el símbolo «+» para denotar concatenación.

Ejemplo:

>>> a = 'Hola'
>>> b = '¿que tal?'
>>> c =  a+b
>>> c
'Hola¿que tal?'

La operación c = a+b debe leerse como: c almacena a concatenado con b. Diferenciando la acción de las operaciones matemáticas de igualdad y suma.

2.4 Algoritmo – Secuencia de Fibonacci

Referencia: Van Rossum 3.2 p16, Rodriguez 6.10.1 p176, Downey 18.4

El misterio de las matemáticas. Video NOVA

Observar desde el minuto 3:50 hasta 6:40

  1. Describa la secuencia de Fibonacci en un párrafo.
  2. ¿Puede programar la secuencia de Fibonacci? usando operaciones básicas
  3. Describa las operaciones en Python y compruebe sus resultados.

2.3 Contadores y Acumuladores

Referencia: Rodriguez 3.3.1 p24, Van Rossum 9.3.3 p73,  Downey 22.9

Asignación de valores

En algoritmos se usan las expresiones de asignación para denotar la intención de resolver operaciones y cuyo resultado se almacena en una variable simple, por lo que se expresan de la forma:

c ← a + b
d ← x2 + y2

Debe observar que las asignaciones no son expresiones de igualdad, como las usadas en matemáticas, por lo que su símbolo corresponde a una flecha que apunta el sentido donde se almacena el resultado.


Contadores

Al visitar el departamento de servicio al cliente en una empresa, los clientes deben tomar un ticket para obtener un turno. Existe un letrero electrónico que indica el número del cliente que se está atendiendo, cuando éste número cambia incrementándose en 1 para anunciar el siguiente turno a ser atendido.

Con el ejemplo, se observan notar ciertas características de contadores:

  • Siempre tienen un valor inicial
  • Su valor nuevo es el resultado del valor anterior más una constante.

Al inicio del día, el contador debe ser inicializado, de preferencia con 0, cuando un puesto de atención está listo para atención, el contador se incrementa en uno, suena una alerta, y se procede a atender al primer turno.

Las características descritas para forma algorítmica se escriben como:

contador ← 0
contador ← contador + 1

La expresión del literal b se puede leer como: «valor nuevo” de acumulador se le asigna el «valor anterior» de acumulador sumado al valor de 1″

Desde luego que los contadores puede sumarse un valor diferente a 1, pero siempre será un valor constante; también pueden tener cambios de forma ascendente, o disminuir desde un valor inicial.

Un contador decreciente se encuentra en un cronometro, por ejemplo del microondas, en el que el valor inicial son los segundos que permanecerá encendido. El contador de tiempo disminuye en uno cada segundo y al llegar a 0 se apaga el microondas.

Ejemplo en Python:

>>> contador = 0
>>> contador = contador + 1
>>> contador
1

Acumuladores

Una versión ampliada de contadores es la llamada acumuladores, tienen las mismas características que un contador excepto el valor de incremento que es un valor variable.

Una cuenta de ahorros puede representarse en un algoritmo mediante un acumulador, pues el ahorrista no siempre podrá ahorrar una cantidad fija en la cuenta, un día deposita 10, otro día deposita 30, otro deposita 5.

Con el ejemplo de ahorro, se puede determinar que en el acumulador no siempre se añade un valor positivo, pues cuando se hace un retiro, se puede interpretar como que el valor añadido es negativo.

Las características descritas para forma algorítmica se escriben como:

acumulador ← 0
acumulador ← acumulador + X

La expresión del literal b se para una cuenta puede leer como: «saldo nuevo” de acumulador es el «saldo anterior» de acumulador considerando el deposito (+x) o retiro (-x).

Recordar que:

El concepto de asignar se usado en algoritmos “=” carece de sentido matemático.

Si tomamos como ejemplo el acumulador, si se expresa como una igualdad, se interpretaría como:

acumulador = acumulador + X
acumulador - acumulador = X
0 = X

Cuando en el algoritmo se quiere expresar en realidad es una asignación, por lo que se utiliza el símbolo “←”

acumulador ← acumulador + X

Esta aclaración permite formalizar la diferencia de comparación de igualdad “=” usada dentro de los condicionales.

Ejemplo en Python:

>>> acumulador = 0
>>> acumulador = acumulador + 4.5
>>> acumulador
4.5
>>> acumulador = acumulador - 1.3
>>> acumulador
3.2

2.2 Operaciones básicas

Referencia: Rodriguez 5.6.3 p59, Van Rossum 10.6 p85,  Downey 2.6

Algunas operaciones numéricas básicas para usar en los primeros ejercicios.

Cociente ó división entera

>>> a = 5
>>> b = 2
>>> c = a//b    
>>> c
2

Cinco manzanas para dos envases de desayunos

Residuo

>>> a = 5
>>> b = 2
>>> c = a%b
>>> c
1

Exponente a^b

>>> c = a**b
>>> c    
25

Raiz cuadrada \sqrt{a^2 + b^2}

>>> import math
>>> c = math.sqrt((a**2) + (b**2))
>>> c
5.385164807134504

Operaciones Lógicas

Operación Python
y p and q
o p or q

Suponga que p es verdadero y q es falso

>>> p = 1
>>> q = 0
>>> p and q
0
>>> p or q
1

Aleatorio entero

>>> import random as rnd
>>> dado = int(rnd.random()*6) +1
>>> dado
4

1.4 Directorio de trabajo

Para el curso, en cada ejercicio se desarrolla un algoritmo que se guarda en un archivo.py de Python, localizado en un «directorio de trabajo» conocido también como ruta de trabajo.

Para conocer la ubicación del directorio se usa la librería os , que se «carga» al inicio de la sesión con:

>>> import os

El directorio de trabajo se consulta con la instrucción:

>>> os.getcwd()
'C:\\Python34'


para cambiar directorio de trabajo se usa la instrucción para un directorio de ejemplo:

>>> os.chdir('d:\\proyectos\python')
>>> os.getcwd()
'd:\\proyectos\\python'

Como buena práctica, disponga de un directorio de trabajo para todas las actividades del curso. Así podrá almacenar y clasificar los algoritmos en subdirectorios por unidad, tarea, lección, taller, etc.

Los archivos realizados en clases serán de utilidad para consultas posteriores sobre temas ya resueltos.


Cambiar directorio de trabajo predeterminado

Debe buscar en el directorio de Winpython/Settings, el archivo winpython.ini

Edite el archivo con el el block de notas, para quitar el # de la línea WINPYWORKDIR :

[debug]
state = disabled
[environment]
#HOME = %HOMEDRIVE%%HOMEPATH%\Documents\WinPython%WINPYVER%
#JUPYTER_DATA_DIR = %HOME%
#WINPYWORKDIR = %HOMEDRIVE%%HOMEPATH%\Documents\WinPython%WINPYVER%\Notebooks

WINPYWORKDIR = D:\CCPG1001Ejemplos

Reinicie WinPython y observará que el directorio predeterminado de trabajo ha cambiado, use abrir o guardar para ver el directorio que abre directamente en su PC.

Recuerde realizar el ajuste cuando la versión que tiene es «portable» y a lleva en un USBdrive.
Por lo que es mejor realizar una nueva instalación en la computadora donde lo va a usar.
Realice una copia al disco duro del instalador para que el proceso sea más rápido que usando uns memoria USB.

1.3 Algoritmos, reglas modernas

Algoritmos, las reglas secretas de la vida moderna. BBC

Luego de observar los 5 primeros minutos.

  1. Escriba un parrafo que describa su concepto de algoritmo.
  2. Realice una lista de 5 algoritmos que conozca y que no se describan en el video.
  3. ¿Como ayudan los algoritmos en las actividades diarias?
    Puede usar la lista del item anterior.
  4. ¿Existe relación entre los algoritmos y las matemáticas? Justifique su respuesta
  5. ¿Moderno vs algoritmos? Describa la relación.

1.1 Introducción al curso

“El curso presenta a los estudiantes estrategias para resolver problemas comunes en diversas profesiones por medio del diseño e implementación de soluciones basadas en el uso de un lenguaje de programación. Cubre los principios básicos para que el estudiante pueda leer y escribir programas; haciendo énfasis en el diseño y análisis de algoritmos.” (Syllabus)

Syllabus

Se presentan varias fuentes de material de estudio, como Evaluaciones anteriores, propuestas de solución, libros digitales, etc

Bibliografía

Para el desarrollo del curso, es conveniente disponer de algunos lineamientos generales:

Políticas del curso

Reglamento de Evaluaciones

Material de Revisión autónoma

  • Videos tutoriales para la Sesión01

Material de clases

  • Algoritmos. Conceptos y Propiedades
  • Entorno Python. Revisar seccion descarga