Qué es Programación
- La programación es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales.
- El propósito de la programación es crear programas que exhiban un comportamiento deseado.
- El proceso de escribir código requiere frecuentemente conocimientos en varias áreas distintas,
además del dominio del lenguaje a utilizar, algoritmos especializados y lógica formal.
- Programar no involucra necesariamente otras tareas tales como el análisis y diseño de la aplicación
pero sí el diseño del código.
- Para crear un programa, y que la computadora interprete y ejecute las instrucciones escritas en él,
debe usarse un lenguaje de programación.
El código fuente es escrito en ese lenguaje.
- En los lenguajes de programación de alto nivel se distinguen diversos elementos entre los
que se incluyen el léxico propio del lenguaje, las reglas sintácticas y semánticas.
http://es.wikipedia.org/wiki/Programación
Programas y algoritmos
-
Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones
que han de seguirse para resolver un problema. Un programa normalmente implementa
uno o más algoritmos.
-
Un algoritmo puede expresarse de distintas maneras: en forma gráfica,
como un diagrama de flujo, en forma de código de
un lenguaje de programación, en lenguaje natural, etc.
-
Los programas suelen subdividirse en partes menores, llamadas módulos,
de modo que la complejidad algorítmica de cada una de las partes sea menor que la del
programa completo. Esto ayuda al desarrollo del programa. Es una práctica muy utilizada
y se conoce como refinamientos sucesivos.
Programación e Ingeniería del Software
-
Existe una tendencia a identificar el proceso de creación de un programa informático con la programación,
que es cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando
se trata de grandes proyectos.
-
La ingeniería del software se centra en los pasos de planificación y diseño del programa,
mientras que antiguamente la realización de un programa consistía
casi únicamente en escribir el código, bajo sólo el conocimiento de los requisitos y con
una modesta fase de análisis y diseño.
-
Un programa es una pieza de ingeniería de software.
Técnicas de programación
- Programación estructurada
- Programación modular
- Programación orientada a objetos
- Programación declarativa
Programación estructurada
- La programación estructurada es una técnica para escribir programas.
- Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración.
- Las construcciones estructuradas se propusieron para restringir el diseño
procedimental del software a un número reducido de operaciones predecibles.
- La utilización de construcciones estructuradas reduce la complejidad del programa
y, por lo tanto, mejora la capacidad de comprender, comprobar y mantener.
Notación gráfica del diseño: el Diagrama de Flujo
- «Una imagen vale más que mil palabras», pero es importante saber qué imagen y qué mil palabras
(Pressman 2002 p. 274)Pressman, Roger S.; (2002) Ingeniería del Software. Un enfoque práctico.; 5a. ed., McGraw-Hill..
- Es incuestionable que herramientas gráficas, tales como diagramas de flujo o
diagramas de cajas, proporcionan formas gráficas excelentes que representan datos
procedimentales fácilmente.
- Un diagrama de flujo es una imagen bastante sencilla. Existen tres símbolos:
- Una caja indica un paso del proceso.
- Un rombo representa una condición lógica.
- Las flechas indican el flujo del control.
Diagrama de Flujo: los símbolos
Secuencia
- La construcción secuencial o secuencia implementa los pasos del proceso esenciales para la
especificación de cualquier algoritmo.
Selección
- La construción condicional, estructura alternativa o selección
proporciona las funciones para procesos seleccionados a partir de una condición lógica.
Iteración
- La iteración o estructura repetitiva, proporciona los bucles o ciclos.
Cómo funciona
- Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles.
- Si bien los lenguajes de programación tienen un mayor repertorio de estructuras de control,
estas pueden ser construidas mediante las tres básicas mencionadas.
- En cualquier caso, las estructuras de control pueden anidarse. Eso significa:
- Dentro de una estructura repetitiva hay una o más secuencias, como resulta evidente.
- Lo mismo ocurre dentro de una estructura alternativa.
- Las estructuras pueden anidarse: una repetitiva dentro de otra, una alternativa dentro de una repetitiva, etc.
Hablando de lenguajes de programación: el Pseudocódigo
-
En ciencias de la computación y análisis numérico, se denomina pseudocódigo
a una descripción de un algoritmo informático de programación de alto nivel, compacto
e informal, que utiliza las convenciones estructurales de un lenguaje de programación
verdadero, pero que está diseñado para la lectura humana en lugar de la lectura en
máquina, y con independencia de cualquier otro lenguaje de programación.
-
Normalmente,
el pseudocódigo omite detalles que no son esenciales para la comprensión humana del
algoritmo, tales como declaraciones de variables.
-
Se utiliza pseudocódigo pues este es más fácil de entender para las personas que el
código de lenguaje de programación convencional, ya que es una descripción eficiente
y con un entorno independiente de los principios fundamentales de un algoritmo.
-
Se utiliza comúnmente en libros de texto y publicaciones científicas que documentan
algoritmos, y también en la planificación del desarrollo de programas informáticos,
para esbozar la estructura del programa antes de realizar la codificación efectivamente.
http://es.wikipedia.org/wiki/Pseudocódigo
Pseudocódigo
- Un programador que tiene que aplicar un algoritmo específico,
generalmente comienza con una
descripción en pseudocódigo, luego "traduce" esa descripción
al lenguaje de programación que se usará en la implementación y lo modifica para que
interactúe correctamente con el resto del programa.
-
Los programadores también pueden iniciar un proyecto describiendo
la forma del código en pseudocódigo en el papel, antes de escribirlo
en su lenguaje de programación, como ocurre en la estructuración de
un enfoque descendente o top-down.
Nuestro pseudocódigo: el RPL
La secuencia en RPL
- Es la estructura de control más elemental.
- La secuencia es una serie de instrucciones consecutivas.
- Para definirla recursivamente: es una instrucción o es una instrucción seguida de una secuencia.
Ejemplo:
MOSTRAR("¡Hola!")
- Significa que debe mostrarse "¡Hola!" en la interfaz de salida. Esa interfaz será, normalmente, la pantalla de nuestro PC.
La alternativa en RPL
SI (<condición>)
ENTONCES
secuencia en caso condición = V
SI NO
secuencia en caso condición = F
FIN SI
Ejemplo:
SI ( largo ES IGUAL ancho )
ENTONCES
MOSTRAR("La figura es un cuadrado")
SI NO
MOSTRAR("La figura es un rectángulo")
FIN SI
La repetitiva en RPL
Según se ha visto, existen dos tipos de estructura repetitiva:
- Una en la que puede que la secuencia no se ejecute nunca. Dicho de otro modo: la secuencia se ejecuta de cero a ene veces,
porque la condición se revisa al inicio del ciclo. Esta se llama «hacer mientras» (do while).
- La otra, en la que la condición se evalúa al final del ciclo. Así que la secuencia interna se ejecuta, al menos, una vez.
A esta se le llama «repetir hasta» (repeat until).
Estructura de tipo «hacer mientras»
MIENTRAS (<condición>) HACER
secuencia...
FIN MIENTRAS
Ejemplo:
VARIABLES: num, prod
num ← 0
MIENTRAS (num ES MENOR 10)
num ← num + 1
prod ← 2 * num
MOSTRAR( "2 x ", num, " = ", prod)
FIN MIENTRAS
Estructura de tipo «repetir hasta»
REPETIR
secuencia...
HASTA (<condición>)
Ejemplo:
VARIABLES: num, prod
num ← 0
REPETIR
num ← num + 1
prod ← 2 * num
MOSTRAR( "2 x ", num, " = ", prod)
HASTA (num ES IGUAL 10)
Algunos comentarios sobre RPL
- Las palabras que son propias del lenguaje, llamadas palabras reservadas, se denotan con MAYÚSCULAS.
Ejemplo:
- MOSTRAR
- ES IGUAL
- MIENTRAS ... HACER
- Las palabras definidas por el programador, se denotan con minúsculas.
Ejemplo:
- Nótese el sangrado. La silueta del texto es importante.
Comentemos el último ejemplo
VARIABLES: num, prod |
Declaración de variables |
num ← 0 |
Sentencia de asignación: significa que la variable num recibe el valor cero |
REPETIR |
Comienzo del ciclo |
num ← num + 1 |
num se incrementa en uno |
prod ← 2 * num |
El asterisco representa el producto. prod recibe el resultado de dos por num |
MOSTRAR( "2 x ", num, " = ", prod) |
Se muestra algo como "2 x 7 = 14" |
HASTA (num ES IGUAL 10) |
Fin del ciclo |
Esto producirá algo así:
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20
Algunos conceptos: las variables
-
Las variables son espacios reservados en la memoria que,
como su nombre indica, pueden cambiar de contenido a lo largo de la ejecución
de un programa.
-
Una variable corresponde a un área reservada en la memoria principal
del computador pudiendo ser de longitud:
-
Fija: cuando el tamaño de la misma no variará a lo largo de la ejecución
del programa. Todas las variables en general, sean del tipo que sean, tienen longitud fija.
Existen algunas excepciones, como las colecciones de otras variables (arrays)
o las cadenas de caracteres.
-
Variable: cuando el tamaño de la misma puede variar a lo largo de la ejecución. Típicamente colecciones de datos.
http://es.wikipedia.org/wiki/Variable_(programación)
Más conceptos: los tipos de datos
- Debido a que las variables contienen o apuntan a valores de tipos determinados,
las operaciones sobre las mismas y el dominio de sus propios valores están determinados
por el tipo de datos en cuestión. Algunos tipos de datos usados:
- Tipo de dato lógico.
- Tipo de dato entero.
- Tipo de dato de coma flotante (real, con decimales).
- Tipo de dato carácter.
- Tipo de dato cadena de caracteres.
http://es.wikipedia.org/wiki/Variable_(programación)
Si hay variables, tiene que haber constantes
- Una constante es un valor que no puede ser alterado durante la ejecución de un programa.
- Una constante corresponde a una longitud fija de un área reservada en la memoria principal
del computador, donde el programa almacena valores fijos.
Por ejemplo:
El valor de π = 3,14159265358979323846
- Por convención, el nombre de las constantes suele escribirse en mayúsculas en la mayoría de los lenguajes.
En RPL:
CONSTANTES: PI ← 3,14159265358979323846
áreaCirc ← 2 * PI * radio
Y también hay literales
- Números, letras, o conjuntos de unos y otras que se toman tal cual aparecen escritos en el programa.
- No tienen ningún nombre simbólico y deben ir entre comillas o apóstrofos, excepto los literales numéricos.
Ejemplo:
Literales numéricos: 123, 987, 1, 0
Literales alfanuméricos: "Montevideo", 'SqueakFest', "2", '007', '11600 Montevideo'
Operadores aritméticos en RPL
- + para sumar.
- - para restar.
- * para multiplicar.
- / para dividir.
Otros:
- ** o ^ para potencia.
- √ para raíz cuadrada.
Ejemplo:
VARIABLES: a, b, c, x1, x2
x1 ← (-b + √( b ^ 2 - (4 * a * c))) / ( 2 * a )
x2 ← (-b - √( b ^ 2 - (4 * a * c))) / ( 2 * a )
Con lo que sabemos, mejoremos el programa
Hagamos la tabla del 17
CONSTANTES: FACTOR ← 17
VARIABLES: num, prod
num ← 0
REPETIR
num ← num + 1
prod ← FACTOR * num
MOSTRAR( FACTOR, " x ", num, " = ", prod)
HASTA (num ES IGUAL 10)
- Si queremos hacer la tabla del 23, todo lo que tenemos que hacer es
modificar el valor de la constante FACTOR, sin tocar para nada el
resto de nuestro programa.
CONSTANTES: FACTOR ← 23
VARIABLES: num, prod
num ← 0
REPETIR
num ← num + 1
prod ← FACTOR * num
MOSTRAR( FACTOR, " x ", num, " = ", prod)
HASTA (num ES IGUAL 10)
Mejoramos, pero se puede dar otro paso...
- Si queremos que el usuario de nuestro programa decida qué tabla quiere,
sería mucho pedirle que tuviera el conocimiento suficiente como para modificar
nuestro programa.
- Es mejor utilizar algún recurso de comunicación con el usuario, que nos
permita preguntarle qué tabla, sin necesidad de provocarle un trastorno.
- Surge entonces una nueva instrucción o sentencia: OBTENER.
- OBTENER significa que alguien debe ingresar por una interfaz de entrada, un valor determinado.
Esa interfaz será, normalmente, el teclado de nuestro PC.
VARIABLES: factor, num, prod
OBTENER(factor)
num ← 0
REPETIR
num ← num + 1
prod ← factor * num
MOSTRAR( factor, " x ", num, " = ", prod)
HASTA (num ES IGUAL 10)
Bourne Again Shell (Bash)
- Bash (Bourne again shell) es un programa cuya función consiste en interpretar órdenes.
- Está basado en la shell de Unix y fue escrito para el proyecto GNU.
- Es el intérprete de comandos predefinido en la mayoría de las distribuciones de Linux.
- Su nombre es un acrónimo de Bourne-Again Shell (otro shell Bourne),
haciendo un juego de palabras —born-again significa renacimiento— sobre
el Bourne shell (sh), que fue uno de los primeros intérpretes importantes de Unix.
http://es.wikipedia.org/wiki/Bash
Generador de tablas en Bash
clear
echo
echo TABLA DE MULTIPLICAR
echo
echo -n "Se generará la tabla del: "
read Fact
echo
echo -n "Comenzando en el número: "
read Com
echo -n "Y terminando en el número: "
read Lim
numero=$Com
until [ $numero -gt $Lim ]
do
((prod = numero * Fact))
echo "$Fact x $numero = $prod"
((numero = numero + 1))
done
Generador de tablas en Python
1
2
3
4
5
6
7
8 print
9 print "TABLA DE MULTIPLICAR"
10 print
11
12
13 fact = input("Se generará la tabla del: ")
14 print
15
16
17 com = input("Comenzando en el número: ")
18
19
20 lim = input("Y terminando en el número: ")
21
22
23 numero = com
24 while numero <= lim:
25 prod = numero * fact
26 print fact, "x", numero, "=", prod
27 numero = numero + 1
La criba de Eratóstenes
- La criba de Eratóstenes es un algoritmo que permite hallar todos los números primos menores
que un número natural dado N.
- Se forma una tabla con todos los números naturales comprendidos entre 2 y N y se van tachando
los números que no son primos de la siguiente manera: cuando se encuentra un número entero que
no ha sido tachado, ese número es declarado primo, y se procede a tachar todos sus múltiplos.
- El proceso termina cuando el cuadrado del mayor número confirmado como primo es mayor que N.
http://es.wikipedia.org/wiki/Criba_de_Eratóstenes
La criba de Eratóstenes en Python
nums=[]
prims=[]
num = input(">>> ")
for i in range (2, num+1) :
nums.append(i)
while nums != []:
n=nums[0]
prims.append(n)
n=(float(n))
for j in nums:
if ((j % n ) == 0.0):
nums.remove(j)
print prims
http://es.wikipedia.org/wiki/Criba_de_Eratóstenes
La criba de Eratóstenes en Bash
UPPER_LIMIT=$1
let SPLIT=UPPER_LIMIT/2
Primes=( '' $(seq $UPPER_LIMIT) )
i=1
until (( ( i += 1 ) > SPLIT ))
do
if [[ -n $Primes[i] ]]; then
t=$i
until (( ( t += i ) > UPPER_LIMIT ))
do
Primes[t]=
done
fi
done
echo ${Primes[*]}
exit 0
http://es.wikipedia.org/wiki/Criba_de_Eratóstenes
Un jueguito sencillo: ¡Adivine el número!
En Bash:
MIN=1
MAX=100
RANGE=$[(MAX-MIN) + 1]
TARGET=$[(RANDOM % RANGE) + MIN]
TRIES=10
while [[ $TRIES -gt 0 ]]
do
echo -n "Guess a number from $MIN-$MAX ($TRIES tries left): "
read ANSWER
if [[ $ANSWER -lt $TARGET ]]
then
echo "Too low. Try again."
elif [[ $ANSWER -gt $TARGET ]]
then
echo "Too high. Try again."
else
echo "Congratulations!"
exit
fi
TRIES=$[TRIES-1]
done
echo "Sorry, the correct answer was $TARGET."
... y en Python
while True:
import random
number = random.randint(1,100)
tries = 0
guess = 0
print " "
print "¡Encuentre el número!"
print "Es un número entre 1 y 100. Tiene 10 intentos."
while guess != number and tries < 10:
guess = input("Haga un intento: ")
if guess > number:
print "Se fue de mambo. El número que busca es menor."
elif guess < number:
print "Se quedó corto. El número que busca es mayor."
tries = tries + 1
if guess == number:
print "¡Muy bien! Era el ", number
else:
print "¡Perdió! El número que buscaba era el ", number
answer = raw_input ("¿Jugamos de nuevo?: ")
if answer.strip() in "n N no No NO".split():
break
Bibliografía
Pressman Roger S.; (2002) Ingeniería del Software. Un enfoque práctico.; 5a. ed., McGraw-Hill
Agradecimientos
- A Mariana
- A Federico Wagner
- A Alejandra por su apoyo
- A todos ustedes, que están acá quién sabe por qué
- A Dave Raggett y al W3C por Slidy, herramienta usada para esta presentación
Esta presentación fue hecha con base en: