Вы находитесь на странице: 1из 56

Anlisis y Diseo

de Algoritmos

Silvia B. Gonzlez Brambila


Universidad Autnoma Metropolitana

Introduccin

Captulo 1
Actualmente, una persona no ha entendido algo hasta
despus de haberlo enseado a una computadora

Algoritmo

Un algoritmo es una secuencia no ambigua


de instrucciones para resolver un problema.

Tipos de datos
bsicos
(TDB)

Tipo de datos
elemental
entero

En
pseudocdigo
int

real

real

booleano

bool

caracter

char

Operaciones

Numricos

Operacin
suma
resta
multiplicaci
n
divisin
potenciacin
divisin
entera
mdulo

Smbolo
+
*

Prioridad
1
1
2

/
^
div

2
3
2

mod

Las prioridades se alteran con el uso de


parntesis. Cuando existen operadores con la
misma prioridad entonces se aplica la regla de
asociatividad de izquierda a derecha.

Booleanos

Operacin
AND
OR
NOT

Smbolo
&
|

Enunciado de
asignacin

Un enunciado en su forma ms simple permite que


una variable almacene un valor especifico ya sea
que se exprese explcitamente o a travs de una
operacin.
A esta operacin se le conoce como asignacin y se
expresa en pseudocdigo mediante el siguiente
smbolo:

Ejemplo: si se desea que una variable "a" contenga


el valor de 5, se expresa explcitamente como:
a5

Flujo de control

A menos que se especifique lo contrario la


ejecucin de un programa se realiza de manera
lineal, de tal forma que se inicia en la primera
sentencia y se procede a ejecutar la siguiente, y
as sucesivamente hasta que se encuentra la
ltima sentencia. Esta estructura de control se
conoce como secuenciacin.
Es posible alterar el flujo de control a travs de
otras estructuras de control, las cuales pueden
clasificarse en dos categoras: seleccin e
iteracin.

Seleccin

Las estructuras de seleccin a veces llamadas


condicionales permiten discriminar qu
sentencia se ejecutara despus. En
pseudocdigo se estudiarn las siguientes: sientonces-otro y el si-entonces. La decisin
entre qu sentencia ejecutar est basada en
una expresin booleana (aquella que al ser
evaluada produce un valor de verdadero o un
valor de falso).

Seleccin

Pseudocdigo
si c1
e1

otro
e2
si c2
e3

Ejemplo

/**
* Determina si una persona es joven (menor de 21 aos)
**/

clase SiempreJoven {
principal {
const int joven 21 //Declaracin de la constante joven
int edad
escribe Proporcione su edad
lee edad
si edad < joven
escribe La juventud es un tesoro divino, disfrtala
escribe La edad es un estado mental
}
}

Iteracin

Las estructuras iterativas o repetitivas


permiten que una sentencia se ejecute varias
veces dependiendo de una expresin
booleana. En pseudocdigo se consideran las
siguientes:
para
mientras
repite

Para

El para permite escribir una iteracin que se


realizar de acuerdo al valor inicial de una
variable y hasta que dicha variable alcance un
valor final.

para variable valorInicial hasta valorFinal,


incremento
e1

Ejemplo

/**
* Imprime los nmeros del 1 al 100
**/
clase Imprime1-100 {
principal {
para i 1 hasta 100, 1
escribe i
}
}

Debido a que
muchas veces
el incremento
es 1 se
obviara, es
decir no se
pondr.

Ejercicio

Imprimir los mltiplos de 5 entre un lmite


inferior y un lmite superior

Solucin

/**
* Imprime los nmeros mltiplos de 5 comprendidos entre un
* lmite inferior y un lmite superior
**/
clase ImprimeMultiplos5 {
principal {
int limInf, limSup
escribe Proporcione el lmite inferior y el lmite superior
lee limInf, limSup
para i limInf hasta limSup
si i mod 5 = 0 entonces
escribe i
}
}

Mientras

Se usa para repetir una instruccin durante


todo el tiempo en que una condicin particular
sea verdadera.
En pseudocdigo:
mientras c1
e1

Ejemplo

class EjemMientras {
principal {
int i 0
mientras (i < 10) {
escribe i
i++
}
}
}

Ejercicio:

Modificar la clase anterior


para que imprima los pares
entre 0 y 10 inclusive

Ejercicio

Escribir una clase para determinar cundo un


nmero dado es un primo

Solucin

clase DeterminaPrimo {
principal {
escribe "Dame un entero"
lee num
int i 2
mientras num mod i != 0
i++
escribe "El nmero " + num
si i = num
escribe "es un primo"
otro
escribe "no es un primo"
}
}

Repite

En pseudocdigo:
repite
e1
mientras c1

El enunciado do es similar al
while, excepto que la
condicin de terminacin es
al final del cuerpo del ciclo. El
ciclo do ejecuta las
sentencias dentro del cuerpo
hasta que la condicin es
falsa. El cuerpo de un ciclo
do al menos se ejecuta una
vez.

Ejemplo

class ejemRepite {
principal {
const int LIMITE 7; //constante entera
int cuenta 0
repite {
cuenta++;
escribe "Cuenta: " + cuenta
} mientras cuenta < LIMITE
}
}

Encabezado de un
mtodo

Incluye:

Modificadores (opcional: esttico)


Tipo de regreso
Nombre del mtodo
Lista de parmetros
Cuerpo del mtodo ({ enunciados }
esttico void instrucciones (int c) {
escribe Siga todas las instrucciones
escribe No ms de + c + veces
}

El enunciado return

El tipo de regreso especificado en el encabezado del


mtodo puede ser:

Un tipo de datos primitivo


El nombre de una clase
La palabra reservada void

Un mtodo que regresa un valor debe tener un


enunciado return.
Cuando se ejecuta return, el control regresa al
enunciado que llam al mtodo y el procesamiento
continua ah.
Forma: regresa valor
Debe ser consistente con el tipo de regreso del mtodo

Un mtodo sin return no regresa ningn valor, pero


puede tener un enunciado return
No es conveniente tener ms de un enunciado return

Parmetros

Un parmetro es un valor que se pasa al


mtodo cuando se invoca
La lista de parmetros en el encabezado
especifica el tipo, los valores y los nombres
que se pasan al mtodo
Siempre van entre parntesis
invocacin

ch obj.calc (25, cont, Hola);

char calc (int num1, int num2, String mensaje) {


.
declaracin regresa result
}

Arreglos
unidimensionales
y Cadenas

Definicin

Un arreglo se usa para agrupar, almacenar y


organizar datos de un mismo tipo,
preferentemente.
En un arreglo cada valor se almacena en una
posicin numerada especfica dentro del
arreglo. El nmero correspondiente a cada
posicin se conoce como ndice

Estructura

Normalmente el primer objeto del arreglo tiene el


ndice 0, aunque esto vara dependiendo del
lenguaje.

Declaracin

La declaracin de un arreglo en pseudocdigo que se


utilizar es:
tipo [ ] nombreArreglo
Un arreglo es un objeto por lo que para crear el espacio se
utiliza el operador nuevo:
nombreArreglo nuevo tipo [max]
donde tipo puede ser un tipo de datos primitivo o un
objeto, nombre es el nombre del arreglo y max es el
nmero de localidades del arreglo. Es una buena
costumbre que max sea declarado como una constante.
Tambin puede declararse de la siguiente forma:
tipo [] nombreArreglo nuevo tipo [max]

Operaciones

almacenamiento, una operacin de


almacenamiento inserta un valor en el arreglo en
una localidad especfica.
nomArreglo [i] valor
recuperacin, una operacin de recuperacin
regresa el valor almacenado en una localidad
especfica del arreglo
valor nomArreglo[i]
donde i es la posicin o ndice del arreglo, que puede
ser un entero o bien una expresin que al ser evaluada
regresa un entero

Ejemplo

const int MAX 10


int [] arregloEnteros nuevo int [MAX]
arregloEnteros [0] 1
arregloEnteros [1] 10
a5
arregloEnteros [a-2] arreglosEnteros [0] +
arregloEnteros [1]

Despus de realizar los enunciados


anteriores, arregloEnteros se vera
como:

Tamao de un arreglo

nmero de localidades, como dato


miembro pblico y constante de un
arreglo se puede accesar el nmero de
localidades:

int tamao nomArreglo.longitud

Ejemplo, arreglo de int

Leer una lista de nmeros, almacenarlos en un arreglo e imprimirlos en orden inverso


clase NumerosReves {
principal {
const int MAX 10 //Nmero mximo de posiciones del arreglo
//creacin del arreglo de reales
real [] nmeros nuevo real [MAX]
escribe El tamao del arreglo es: + numeros.longitud
para indice 0 hasta numeros.longitud 1 {
//se piden los datos
escribe Dame el nmero que se encuentra en + ndice
lee numeros [indice]
} //se escribe al revs el arreglo
escribe Los nmeros al revs son:
para indice numeros.longitud-1 hasta 0, -1
escribe numeros [indice]
}
}

Ejercicio

Calcular la suma de los elementos de un


arreglo

Solucin

int sumaElem () {
suma 0
para i 0 hasta info.longitud-1
suma suma + info[i]
regresa suma
}

Ejercicio

Determinar el elemento ms grande del


arreglo

Solucin

int maximo () {
//El mayor es el 1ro. hasta que se demuestre lo
contrario
max info [0]
para i 1 hasta info.longitud-1
si max < info[i] entonces
max info [i]
regresa max
}

Determinar la posicin del mayor

int posMaximo () {
//El mayor es el 1ro. hasta que se demuestre lo
contrario
posMax 0
para i 1 hasta info.longitud-1
si info [posMax] < info[i]
posMax i
regresa posMax
}

Ejercicio

Determinar el valor del elemento que est a la


mitad

Solucin

int valorEnmedio () {
regresa info [(info.longitud-1)/2]
}

Ejercicio

Promedio de los valores de un arreglo

Solucin

real promedio () {
regresa sumaElem ()/info.longitud
}

Qu es un
algoritmo?

Algorithmics is more than a branch of computer science. It


is the core of computer science, and, in all fairness, can be
said to be relevant to most of science, business, and
technology [Har92, p. 6].

Algoritmo

Un algoritmo es una secuencia no ambigua


de instrucciones para resolver un problema,
i.e., para obtener una salida requerida para
una entrada vlida en una cantidad de tiempo
finita.
Qu dice el diccionario?
Real academia espaola: http://www.rae.es/
Merriam-Webster:
http://www.m-w.com/dictionary

Perspectiva histrica

Mahammad ibn Musa al-Khwarizmi


matemtico del siglo 9
Hay muchas variantes para el nombre de AlKhorezmi al usar el alfabeto latino, tales como
al-Khwarizmi, Al-Khawarizmi, Al-Khawaritzmi o
al-Khowarizmi.
Cuando en una resta nada queda,
entonces escribe un pequeo
crculo para que ese lugar no
permanezca vaco (Al-Khorezmi
explicando el cero, Siglo IX).

Nocin de algoritmo

problema

algoritmo

entrada

computadora

salida

Solucin algoritmica

Ejemplo de un problema
computacional:
ordenamiento

Enunciado del problema:

Entrada: secuencia de n nmeros : <a1, a2, ...,


an>
Salida: reordenamiento de la secuencia de
entrada <a1, a2, ..., an> tal que para toda ai
aj , i < j
Ejemplo: la secuencia <5, 3, 2 , 8, 3>
Algoritmos:

Seleccin
Insercin
Merge Sort
Muchos otros

Ordenamiento por
seleccin

Entrada: arreglo a[0],,a[n-1]


Salida: arreglo a ordenado en forma
ascendente
Algoritmo:

para i 0 hasta n-1


intercambiar a[i] con el ms pequeo de a[i] ... a[n-1]

Mximo comn divisor


(mcd)

Definido como el entero ms grande que


divide a dos nmeros
Denotado como: mcd (m,n)
Euclides de
Alexandra (siglo 3
B.C. )

mcd

mcd (m,n) = mcd (n, m mod n) hasta que n =


0

mcd (60,24) = mcd (24,12) = mcd (12,


0) = 12

mcd

mcd (m,n) = mcd (n, m mod n) hasta que n = 0


int Euclides (int m, int n) {
mientras n != 0 {
r m mod n
mn
nr
}
regresa m
}

Se
detendr?

Verificacin de enteros
consecutivos

Basado en la definicin
El mcd no puede ser mayor que el menor de
los dos nmeros, t = mn {m, n}
mcd (60, 24) =
Se verifica con 24,
23, ..., 12

Ejercicio

Escribir el pseudocdigo del algoritmo para


encontrar el mcd a travs de la verificacin de
enteros consecutivos

El de la primaria

Ms costoso y lento
que encontrar el
algoritmo de
Euclides

Encontrar factores primos de m


Encontrar factores primos de n
Identificar todos los factores comunes (Si p es
un factor comn que ocurre pm y pn veces en
m y n, respectivamente, debe de repetirse min
{pm, pn} veces
Calcular el producto de todos los factores
comunes y regresarlo como el mcd
60 = 2 * 2 * 3 * 5
24 = 2 * 2 * 2 * 3
mcd (60, 24) = 2 * 2 * 3
= 12

Proceso de diseo y anlisis


de algoritmos

Entender el problema
Decidir: capacidades computacionales
Solucin aproximada vs. Exacta
Estructuras de datos
Tcnica de diseo de algoritmos

Diseo del algoritmo


Probar correctez
Anlisis del algoritmo
Codificacin

Puntos a resaltar

No ambigedad en cada paso


Rango de entradas especfico
Mismo algoritmo puede representarse
de distintas formas
Varios algoritmos para resolver el
mismo problema , basados en ideas
diferentes y que pueden tener distintas
velocidades

Estudiar algoritmos
desarrolla
capacidades
analticas

Las tcnicas de diseo de algoritmos pueden interpretarse


cmo tcnicas para resolver problemas.
Aunque hay lmites en el tipo de problemas, no se trataran
temas cmo ser rico, feliz, etc.

Вам также может понравиться