You are on page 1of 38

Figure:

Algoritmos

Copyright 2003 Pearson Education, Inc.

Slide 4-1

Conceptos bsicos.
Programacin:
1. Establecer una secuencia de acciones que:
puedan ser ejecutadas por el procesador
realicen una determinada tarea
2. Fases:
Resolucin del problema propuesto => determinacin de
un algoritmo.
Adaptacin del algoritmo al computador => codificar el
algoritmo en un lenguaje que el computador pueda
comprender.
Copyright 2003 Pearson Education, Inc.

Slide 4-2

Conceptos bsicos.
1. Accin: Etapa en la realizacin de un trabajo
2. Accin primitiva: Accin que el procesador puede ejecutar
sin necesidad de informacin adicional.
3. Algoritmo: Secuencia ordenada de acciones primitivas que
realizan un trabajo. Ejemplos:
Ir al trabajo
1.Levantarse
2.Darse una ducha
3.Vestirse
4.Desayunar
5.Tomar locomocin

Copyright 2003 Pearson Education, Inc.

Clculo de la media aritmtica de


dos nmeros con una calculadora
1.Pulsar la tecla AC
2.Teclear el primer nmero
3.Pulsar la tecla +
4.Teclear el segundo nmero
5.Pulsar la tecla +
6.Pulsar la tecla /
7.Teclear el nmero 2
8.Pulsar la tecla =
Slide 4-3

Confeccin de un pjaro a partir de un papel cuadrado

Copyright 2003 Pearson Education, Inc.

Slide 4-4

Confeccin de un pjaro a partir de un papel cuadrado

Copyright 2003 Pearson Education, Inc.

Slide 4-5

Primitivas Origami

Copyright 2003 Pearson Education, Inc.

Slide 4-6

Primitivas Origami

Copyright 2003 Pearson Education, Inc.

Slide 4-7

Conceptos bsicos.
Aspectos que se deben considerar a la hora de escribir un algoritmo:

Determinacin de las primitivas de las que partimos


Lenguaje simblico a utilizar para desarrollar el algoritmo
Representacin de los datos
Establecer datos de entrada
Establecer datos de salida
Establecer las relaciones entre los datos de entrada y los de salida

Condiciones que debe cumplir un algoritmo:

Ser finito: El algoritmo debe acabar tras un nmero finito de pasos


Estar bien definido: Todas las ejecuciones del algoritmo con los mismos datos de
entrada deben devolver los mismos datos de salida.

Diferencias entre un algoritmo y un programa:

Los algoritmos no son directamente interpretables por el computador => deben ser
traducidos a un lenguaje de programacin concreto.

Copyright 2003 Pearson Education, Inc.

Slide 4-8

Definition de algoritmo

Es un procedimiento computacional bien definido que


toma un conjunto de valores como entrada y produce
otro conjunto de valores como salida.

Copyright 2003 Pearson Education, Inc.

Slide 4-9

Representacin de algoritmos
Mtodos para representar un algoritmo:
Pseudolenguaje
Diagramas de flujo
Pseudolenguaje
Es un lenguaje especfico de descripcin de algoritmos
La traduccin de un algoritmo escrito en pseudolenguaje a un programa en un
lenguaje de programacin determinado es relativamente simple
Herramientas de un pseudolenguaje para representar un algoritmo
Conjunto de palabras clave que proporcionan:
las estructuras de control
declaraciones de variables
caractersticas de modularidad
Sintaxis libre de un lenguaje natural que describe las caractersticas del proceso
Elementos para la definicin y llamada a subprogramas
Copyright 2003 Pearson Education, Inc.

Slide 4-10

Metodologa de diseo

Un problema => muchos algoritmos para resolverlo


Cmo elegir el ms adecuado? Basndonos en las siguientes
caractersticas:
Legibilidad
Eficiencia
Portabilidad
Modularidad
Modificabilidad
Estructuracin

Copyright 2003 Pearson Education, Inc.

Slide 4-11

Metodologa de diseo
Programacin estructurada
Conjunto de tcnicas que aumentan la productividad de un programa,
reduciendo el tiempo para:
Escribir Depurar
Verificar Mantener
Utiliza un nmero limitado de estructuras de control que minimizan la
complejidad de los problemas
Teorema de BOHM-JACOPINI: cualquier programa, por complejo
que sea, puede escribirse utilizando slo tres estructuras de control:
Secuencial
Selectiva
Repetitiva
Copyright 2003 Pearson Education, Inc.

Slide 4-12

Secuencial

Actividad 1

Actividad 2

Actividad n

Copyright 2003 Pearson Education, Inc.

Slide 4-13

Seleccin

Simple:

Doble:

Condicin

actividad

no

condicin

Actividad 1

no
Actividad 2

Mltiple:
Condicin

s
Actividad 1

Copyright 2003 Pearson Education, Inc.

sino

Condicin

s
Actividad 2

Condicin

sino

s
Actividad n-1 Avtividad n

Slide 4-14

Repeticin
Test
condition

false

true

activity

Copyright 2003 Pearson Education, Inc.

Slide 4-15

Estratgia: Dividir para conquistar


Dividirelproblemaensubproblemas
Enlaresolucindeunproblemacomplejo,sedivideen
variossubproblemasyseguidamentesevuelvena
dividirlossubproblemasenotrosmassencillos,
hastaquepuedanimplementarseenelcomputador.

Copyright 2003 Pearson Education, Inc.

Slide 4-16

Ordenamiento
Entrada:
secuenciadennmeros<a1,a2,..,an>
Salida:
Unapermutacin<a'1,a'2,..,a'n>
reordenamientodelasecuencia,talque:
a'1<a'2<...<a'n
Ejemplo instancia:
Entrada:<5,3,1,6,0>
Salida:<0,1,3,5,6>
Copyright 2003 Pearson Education, Inc.

Slide 4-17

Ordenando una lista en forma alfabtica

Copyright 2003 Pearson Education, Inc.

Slide 4-18

Ordenando una lista en forma alfabtica (cont.)

Copyright 2003 Pearson Education, Inc.

Slide 4-19

Ordenando una lista en forma alfabtica (cont.)

Copyright 2003 Pearson Education, Inc.

Slide 4-20

Algoritmo de sort por insercin en pseudocdigo

Copyright 2003 Pearson Education, Inc.

Slide 4-21

Bsqueda
Entrada:
secuenciadennmeros<a1,a2,..,an>
Unnmerob
Salida:
unenteroi,talqueb==ai(igual)
0sib!=ai,parai=1,...,n
Ejemplo instancia:
Entrada:<5,6,9,12>y9
Salida:3
Copyright 2003 Pearson Education, Inc.

Slide 4-22

Bsqueda binaria en pseudocdigo

Copyright 2003 Pearson Education, Inc.

Slide 4-23

Buscando en una lista

Copyright 2003 Pearson Education, Inc.

Slide 4-24

Ordenamiento por insercin


situacin de peor caso
Insertion-Sort(A)
1 for i <- 2 to n do
2
temp <- A[i]
3
j <- i-1
4
while j>0 and A[j] > temp do
5
A[j+1] <- A[j]
6
j <- j-1
7
A[j+1] <- temp

Copyright 2003 Pearson Education, Inc.

Se ejecutan: (n-1)*(n)/2 veces

=> O(n2)

Slide 4-25

Grfico del anlisis del peor caso


ordenamiento por insercin O(n2)

Copyright 2003 Pearson Education, Inc.

Slide 4-26

Grfico del anlisis del peor caso


bqueda binaria O(log2 n)

Copyright 2003 Pearson Education, Inc.

Slide 4-27

Algoritmos
recursivos

Copyright 2003 Pearson Education, Inc.

Slide 4-28

Recursividad
Sonfuncionesquesellamanasmismas.
Requisitos:
Debenretornarunvalor.
Debentenerexpresionesenlasquesellamanasmismas:
cicloactivo.
Debenincluir,enunasentenciadeseleccin,unaopcinen
lacualterminenlaejecucinynosellamenasmismas:
casobase.
Sinoposeenunopcinquelespermitaterminarsu
ejecucin,seproducirnllamadashastaagotarlosrecursos
dememoriadelsistema.
Sisealcanzaelcasobaseenunallamadadelciclo
activo,entoncesseiniciaelciclopasivooderetorno.

29
Copyright 2003 Pearson Education, Inc.

Slide 4-29

Recursividad cdigo C

tipo_de_retorno nombre_funcion(tipo argumentos){


if ( caso_base ) return valor_base;
else {
................
return nombre_funcion(argumentos');
}
}

30
Copyright 2003 Pearson Education, Inc.

Slide 4-30

Recursividad (ejemplo)
Obtener el factorial de un nmero
Casos base:
- el factorial de cero es uno
- factorial de uno es uno
- factorial de un nmero negativo lo hacemos cero.
Ciclo activo:
- llamar a partir del nmero en forma descendente
hasta llegar al caso base.
31
Copyright 2003 Pearson Education, Inc.

Slide 4-31

Recursividad (Ejemplo cont.)


#include <stdio.h>
int factorial(int n){
if (n<0) return 0;
if (n==0) return 1;
else if (n==1) return 1;
else return n*factorial(n-1);
}
int main(){
int x,fac;
printf("Ingrese un nmero para calcularle el factorial = );
scanf("%d",&x);
fac=factorial(x);
printf("%d!=%d\n",x,fac);
return 0;
}

32
Copyright 2003 Pearson Education, Inc.

Slide 4-32

Simulacin: ciclo activo

main(){
int x = 3;
factorial(3){
factorial(3);
fac
= factorial(x);

if (3==0) return 1;
else if (3==1) return 1;
else return 3*factorial(3-1);
3*factorial(2);
factorial(2){
if (2==0) return 1;
else if (2==1) return 1;
else return 2*factorial(1);
2*factorial(2-1);
factorial(1){
if (1==0) return 1;
else if (1==1) return 1
1;

Caso Base alcanzado!!

33
Copyright 2003 Pearson Education, Inc.

Slide 4-33

Simulacin: ciclo pasivo

main(){
int x factoria
= 3;
factorial(3){
l(3);
fac =
if
(3==0)
factorial(x); return 1;

else if (3==1) return 1;


3*factorial(2
factorial(2){
else return 3*factorial(3-1);
);
if (2==0) return 1;
else if (2==1) return 1;
else return 2*factorial(2-1);
2*1

34
Copyright 2003 Pearson Education, Inc.

Slide 4-34

Simulacin: ciclo pasivo

main(){
int x factoria
= 3;
factorial(3){
l(3);
fac =
if
(3==0)
factorial(x); return 1;

else if (3==1) return 1;


3*factorial(2
factorial(2){
else return 3*factorial(3-1);
);
if (2==0) return 1;
else if (2==1) return 1;
else return 2;

35
Copyright 2003 Pearson Education, Inc.

Slide 4-35

Simulacin: ciclo pasivo

main(){
int x factoria
= 3;
factorial(3){
l(3);
fac =
if
(3==0)
factorial(x); return 1;

else if (3==1) return 1;


3*2
else return 3*factorial(3-1);

36
Copyright 2003 Pearson Education, Inc.

Slide 4-36

Simulacin: ciclo pasivo

main(){
int x factoria
= 3;
factorial(3){
l(3);
fac =
if
(3==0)
factorial(x); return 1;

else if (3==1) return 1;


else return 6;

37
Copyright 2003 Pearson Education, Inc.

Slide 4-37

Simulacin: ciclo pasivo

main(){
int x = 3;
6;
fac =
factorial(x);

38
Copyright 2003 Pearson Education, Inc.

Slide 4-38

You might also like