slanted W3C logo

La programación de computadores

Algunos fundamentos

http://rosellimailhe.net/Talks/Tools/Slidy2/squeakFest-2012.html

Diego F. Roselli Mailhe, <[email protected]>

SqueakFest — Montevideo, mayo de 2012

Oprima la barra espaciadora para pasar al siguiente slide

Qué es Programación

http://es.wikipedia.org/wiki/Programación

Programas y algoritmos

Programación e Ingeniería del Software

Técnicas de programación

Programación estructurada

Notación gráfica del diseño: el Diagrama de Flujo

Diagrama de Flujo: los símbolos

Secuencia

Selección

Iteración

Cómo funciona

Hablando de lenguajes de programación: el Pseudocódigo

http://es.wikipedia.org/wiki/Pseudocódigo

Pseudocódigo

Nuestro pseudocódigo: el RPL

La secuencia en RPL

Ejemplo:


	MOSTRAR("¡Hola!")

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:

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

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

http://es.wikipedia.org/wiki/Variable_(programación)

Más conceptos: los tipos de datos

http://es.wikipedia.org/wiki/Variable_(programación)

Si hay variables, tiene que haber constantes

Por ejemplo:

El valor de π = 3,14159265358979323846

En RPL:

CONSTANTES: PI ← 3,14159265358979323846

áreaCirc ← 2 * PI * radio

Y también hay literales

Ejemplo:


Literales numéricos: 123, 987, 1, 0

Literales alfanuméricos: "Montevideo", 'SqueakFest', "2", '007', '11600 Montevideo'

Operadores aritméticos en RPL

Otros:

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)
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...

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)

http://es.wikipedia.org/wiki/Bash

Generador de tablas en Bash

#!/bin/bash
# *
# * Programa generador de tablas de multiplicar
# * vie may 18 15:45:12 UYT 2012
# * Diego Roselli <[email protected]>
# *
# * Nombre  : tablas.bash
# * Ejecutar: bash tablas.bash
# *

# "clear" limpia la pantalla
clear

# Un echo sin nada, lo cual produce un renglón en blanco para separar
echo 
echo TABLA DE MULTIPLICAR
echo 

# Preguntemos cuál es la tabla que se producirá
echo -n "Se generará la tabla del: "
read Fact
echo 

# ¿En qué número empezamos?
echo -n "Comenzando en el número: "
read Com

# ¿Y hasta dónde llegamos?
echo -n "Y terminando en el número: "
read Lim

# Ya tenemos los datos. Manos a la obra...
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 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 #
 4 # Generador de tablas de multiplicar
 5 # vie may 18 16:14:36 UYT 2012
 6 # Diego Roselli <[email protected]>
 7 
 8 print
 9 print "TABLA DE MULTIPLICAR"
10 print
11 
12 # Preguntemos cuál es la tabla que se producirá
13 fact = input("Se generará la tabla del: ")
14 print
15 
16 # ¿En qué número empezamos?
17 com = input("Comenzando en el número: ")
18 
19 # ¿Y hasta dónde llegamos?
20 lim = input("Y terminando en el número: ")
21 
22 # Ya tenemos los datos. Manos a la obra...
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


http://es.wikipedia.org/wiki/Criba_de_Eratóstenes

La criba de Eratóstenes en Python

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# Contribución por David Alessandro Falconi Concordia.
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

#!/bin/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:

#!/bin/bash

# Guess a number between 1 and 100
 MIN=1
 MAX=100

# Calculate a random number between MIN and MAX, inclusive
  RANGE=$[(MAX-MIN) + 1]
  TARGET=$[(RANDOM % RANGE) + MIN]

# Decreasing this number greatly increases difficulty
    TRIES=10
    while [[ $TRIES -gt 0 ]]
    do
        # Prompt the user and read their response
        echo -n "Guess a number from $MIN-$MAX ($TRIES tries left): "
        read ANSWER

        # Too low?
        if [[ $ANSWER -lt $TARGET ]]
        then
            echo "Too low. Try again."

        # Too high?
        elif [[ $ANSWER -gt $TARGET ]]
        then
            echo "Too high. Try again."

        # Just right!
        else
            echo "Congratulations!"
            exit
        fi

        # Decrement the number of tries left
        TRIES=$[TRIES-1]
    done

    # Ran out of tries...
    echo "Sorry, the correct answer was $TARGET."

... y en Python

#!/usr/bin/python
# -*- coding: UTF-8 -*-
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

Esta presentación fue hecha con base en: