Professional Documents
Culture Documents
de datos
Objetivos
Aplicar
tcnicas de programacin en
C usando estructuras y recursividad
Implementar estructuras de datos
usando memoria esttica y dinmica
en C
Seleccionar estructuras de datos
para resolver problemas especficos
Seleccionar algoritmos de bsqueda
y ordenamiento para problemas
especficos
Contenido sinttico
1.
2.
3.
4.
5.
6.
7.
8.
Bibliografa
Aho
Forma de evaluacin
programas
(aproximadamente 6):
40%
3 exmenes:
60%
Eleccin de
representacin
Datos
+ operaciones
La computadoras almacenan y
manipulan datos
Definiciones
Un
TDA bsicos
Enteros
Las
y Reales
Operacin
Smbolo
suma
resta
multiplicaci
n
divisin
potenciacin
divisin
entera
mdulo
+
*
Priorida
d
1
1
2
/
^
div
2
3
2
Smbolo
&
|
Clases
Evolucin
de los TDA
clase Nombre {
principal {
enunciados
}
}
Comunicacin
Sin
Operaciones de entrada/salida
En
Ejercicio
Escribir
Solucin
/**
* Suma dos enteros proporcionados por el usuario, el resultado lo imprime en
pantalla
**/
clase Suma2Enteros {
principal {
int a, b, c
escribe De un valor entero
lee a
En algunas ocasiones se
escribe de otro valor entero
desea que la operacin de
lee b
ca+b
salida (escribe) concatene
escribe La suma de
cadenas con valores de
escribe a
variables. Conviene
escribe con
utilizar el operador de
escribe b
concatenacin (+).
escribe es
escribe c
}
}
Ms claro y compacto
/**
* Suma dos enteros proporcionados por el usuario, el resultado lo
* imprime en pantalla. Versin ms compacta que la clase anterior
**/
clase Suma2Enteros {
principal {
int a, b, c
escribe De un valor entero
lee a
escribe de otro valor entero
lee b
ca+b
escribe La suma de + a + con + b + es + c
}
}
Ejercicio
Calcular
el IVA de un producto
Solucin
/**
* Calcula el IVA de un producto. El usuario deber
* proporcionar el valor * del producto
**/
clase CalculaIVA {
principal {
real precio, iva
escribe Dame el valor del producto
lee precio
iva precio * 0.15
escribe El IVA de un producto de $ + precio + es + iva
}
}
Uso de constantes
En
Ejemplo
Si
ahora se desea calcular el IVA y el costo total del producto podramos escribir la siguiente clase:
/**
* Calcula el IVA y el costo total de un producto. El usuario deber
* proporcionar el valor del producto. Se utiliza una constante
**/
clase CalculaIVA {
principal {
const int costoIVA 0.15
real precio, iva, costo
escribe Dame el valor del producto
lee precio
iva precio * costoIVA
total precio + iva
escribe El IVA de un producto de $ + precio + es + iva
escribe y su costo total es de $ + total
}
}
Ejercicio
Suponga
Procesamie
nto
Salida
Planteamiento de solucin
Entradas
nmero de
ejes, peso
total en
toneladas
Procesamien
to
nmero de
ejes * $5.00 +
peso total en
toneladas *
$10.00
Salida
costo
Solucin
/**
* Calcula la cuota de peaje que deber pagar un camin con base
* a su peso
**/
clase Peaje {
principal {
const real costoEje 5.0
const real costoTonelada 10.0
int numEjes, numToneladas
escribe Proporcione el nmero de ejes del camin
lee numEjes
escribe Cuntas toneladas son?
lee numToneladas
costo numEjes * costoEje + numToneladas * costoTonelada
escribe El peaje del camin de: + numToneladas + y + numEjes +
es $ + costo
}
}
Algunas reglas
Los
Elementos de
programacin
Flujo de control
A
Seleccin
Las
Seleccin
Pseudocdigo
Java
si c1
if (c1 )
e1
otro
e2
si c2
e3
e1;
else
e2;
if (c1 )
e1;
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
Ejemplo
/**
* Imprime los nmeros del 1 al 100
**/
clase Imprime1-100 {
principal {
para i 1 hasta 100, 1
Debido a que
muchas veces
escribe i
el incremento
es 1 se
}
obviara, es
decir no se
}
pondr.
Ejercicio
Imprimir
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
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
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
En Java o C:
do {
enunciados
} while (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
}
}
Creacin de clases
clase
Establecer el concepto de estado de un
objeto
Describir el efecto de los modificadores de
visibilidad en los mtodos y datos
Explorar la estructura de la definicin de
un mtodo, incluyendo parmetros y
valores de regreso
Discutir la estructura y propsito de un
constructor
Recordando
Una
clase representa un
concepto general
Un objeto tiene un estado, que
define los valores de sus
atributos y comportamientos, que
estn definidos por las
operaciones asociadas.
Clase
Datos
miembro (Atributos)
Funciones o mtodos miembro
(Operaciones)
Ejemplos:
Estudiante
Rectngulo
Acuario
Vuelo
Empleado
tipoRegreso:
int, real, bool, char,
void, Clase
NombreClase
Datos Miembro
tipo nomDato1
tipo nomDato2
.
tipo nomDatoN
Funciones Miembro
tipoRegreso nomFun1
()
.
tipoRegreso nomFunN
Ejemplo
Genoma
int nmero
bool
identificado
principal
clase Genoma {
//datos miembro
int nmero
bool identificado
//Funcin miembro principal
principal {
//Creacin de una referencia a un genoma
Genoma g1
//Creacin de un objeto de tipo genoma
g1 nuevo Genoma ()
//asignacin de 5 al dato miembro nmero
//del objeto referenciado por g1
g1.nmero 5
// el genoma referenciado por g1 no ha sido
identificado
g1.identificado false
//Creacin de una referencia y de un objeto
tipo genoma
Genoma g224 nuevo Genoma ()
//Inicializacin del dato miembro nmero de
g224
g224.nmero 224
//Inicializacin del dato miembro identificado
de g224
g224.identificado verdadero
//Se escriben los datos miembros de la
referencia g1
escribe El genoma g1 tiene nmero:
+g1.nmero
Otro ejemplo
// Representa un dado con
// caras del 1 al 6
clase Dado {
// valor mximo de una
cara
const int MAX 6
// valor actual de la cara
int valorCara
// Constructor, inicializa el
//valor de la cara
public Dado(){
valorCara 1
}
Dado
Const int MAX 6
int valorCara
Dado ( )
int rueda ()
void ponValorCara
(int)
dameValorCara ()
String toString ( )
Dado (continuacin)
// Tira el dado y regresa el nuevo valor de la cara
public int rueda() {
valorCara (int)(aleatorio() * MAX) + 1
regresa valorCara
}
// Cambia el valor de la cara
public void ponValorCara (int valor) {
valorCara valor
}
// Regresa el valor de la cara
public int dameValorCara() {
regresa valorCara
}
// Regresa una cadena con el valor de la cara
public String toString(){
String result new String ()
result += valorCara; //Concatena la cadena vaca con el entero
regresa result
}
}
Datos miembro
Declarados
Cuando
Ejemplo
Un racional puede representarse
por su numerador y su
denominador. Por ejemplo:
R1 =
R2 =
Recordando + = 5/4
clase Racional {
//datos miembro
int numerador
int denominador
//Funcin principal
principal {
Racional r1 nuevo Racional () //Creacin de un
nuevo racional
//Inicializacin de los datos miembro de r1
r1.numerador 1
r1.denominador 2
//Creacin e inicializacin de los datos miembro de r2
Racional r2 nuevo Racional ()
r2.numerador 3; r2.denominador 4
//Creacin de un nuevo racional donde se almacena
r1+ r2
Racional r3 nuevo Racional ()
r3.numerador r1.numerador * r2.denominador
+
r2.numerador * r1.denominador
r3.denominador r1.denominador *
r2.denominador
Racional (continuacin)
//Se escribe el resultado de la suma
escribe La suma de
escribe r1.numerador + / +
r1.denominador
escribe +
escribe r2.numerador + / +
r2.denominador
escribe =
escribe r3.numerador + / +
r3.denominador
}
}
Encapsulacin
Los
Un
Encapsulacin (cont)
objeto
interface
Cliente
Mtodos
Datos
Los
En
publico
privado
Datos
Viola la
encapsulaci
n
Promueve la
encapsulaci
n
Mtodos
Ofrece
servicios a los
clientes
Suporta otros
mtodos
dentro de la
clase
Anatoma de un mtodo
Un
mtodo es un grupo de
enunciados
La declaracin de un mtodo
especifica el cdigo que se
ejecutar cuando el mtodo es
invocado
Todo mtodo es parte de una
clase
se llama a un mtodo, el
flujo de control se transfiere a
ese mtodo
Encabezado de un mtodo
Incluye:
Modificadores (opcional)
Tipo de regreso
Nombre del mtodo
Lista de parmetros
Cuerpo del mtodo ({ enunciados }
public
publicvoid
voidinstrucciones
instrucciones(int
(intc)
c){{
escribe
escribeSiga
Sigatodas
todaslas
lasinstrucciones
instrucciones
escribe
escribeNo
Noms
msde
de+
+cc+
+ veces
veces
}}
El enunciado return
El
Un
Un
Parmetros
Un
Datos locales
Una
Mtodos constructores
Una
Los
No
Ejemplo
clase Alumno {
//Datos miembro
Cad nombre
int matrcula
//Funciones miembro
//Constructora
Alumno (Cad n, int m) {
nombre n
matrcula m
}
void escribe () {
escribe Los datos son
escribe Nombre: +
nombre
escribe Matrcula: +
matrcula
}
principal {
Alumno a1 nuevo
Alumno (Sandra,
99887766)
a1.escribe ()
Alumno a2 nuevo
Alumno (Ivn,
00112233)
a2.escribe ()
}
}
Ejercicio Perro
Disee
Ejercicio Esfera
Disee
Arreglos unidimensionales
y Cadenas
Definicin
Un
Estructura
Normalmente
el primer objeto
del arreglo tiene el ndice 0,
aunque esto vara dependiendo
del lenguaje.
Declaracin
La
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
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
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]
}
}
Otro ejemplo
Considere
clase EjemplosArreglo {
const int MAXLOC 100
int [] info
EjemplosArreglo () {
info nuevo int [MAXLOC]
para i 0 hasta info.longitud-1 {
escribe Dame el valor en la posicin + i
A continuacin
lee info [i]
desarrollaremos
}
algunas funciones
}
miembro que podran
}
pertenecer a la clase
EjemplosArreglo
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
posMax 0
para i 1 hasta info.longitud-1
si info [posMax] < info[i]
posMax i
regresa posMax
}
Solucin
int valorEnmedio () {
regresa info [(info.longitud-1)/2]
}
Ordenamiento por
seleccin
El
Ejemplo
Considere
un orden ascendente y
el siguiente arreglo de nmeros.
Se
Note
Ntese
Ejercicio
Escribir
el algoritmo
Solucin
void ordenSeleccion () {
int min, temp
para ndice 0 hasta info.longitud 2 {
min ndice
para busca ndice+1 hasta info.longitud-1
si info[busca] < info [min] entonces
min busca
//se intercambian
temp info [min]
info [min] info [ndice]
info [ndice] temp
}
}
Cadenas
Clase
String
String ()
char charAt (int ndice)
Int comparteTo (String str)
String concat (String str)
Boolean equals (String str)
Boolean equalsIgnoreCase (String
str)
Int length ()
String substring (int offset, int
endIndex)
String toLowerCase ()
String toUpperCase ()
Ejercicio
Determinar
su un enunciado es
un palindrome
Arreglo de cadenas
Ejemplo
Ejemplo
1:
2:
String [] toppings
..
toppings new String [20]
..
Toppings [0] Queso
Toppings [1] Pepperoni
Toppings [2] Espinacas
Ejemplo
EjercicioClase CD
CD
- String ttulo
- String autor
- real precio
CD (String, String
real)
real damePrecio ( )
String escribe ( )
Discoteca
-CD [] arregloCD
- int numCD
Discoteca ( )
insertaCD (String, String,
real)
String escribe ( )
real costo ( )
principal ( )
Arreglos en dos
dimensiones
Introduccin
Un
Definicin
Para
Creacin de espacios
Como
Operaciones
Las
En
Ejemplos operaciones
Almacenamiento
1) matriz [2][3] 3
Recuperacin
int x matriz [4]
[4]
si tablero [2][2]
e1
2)
tablero
[3][1]
verdadero
3)
Mtodos estticos
Algunos
mtodos pueden
invocarse a travs del nombre de
la clase en la que fueron
definidos, sin necesidad de
instanciar un objeto.
Dentro
Ejercicio
Escribir
clase Matriz {
const int MAX 10
..
principal () {
int [][] m leeMatriz ()
Solucin
estatica int [][] leeMatriz () {
matriz nuevo int [MAX][MAX]
para i 0 hasta MAX-1
para j 0 hasta MAX-1 {
escribe Dame el elemento + i + , +
j
lee matriz[i][j]
}
regresa matriz
}
Ejercicio
Escribir
clase Matriz {
const int MAX 10
int [][] info
..
principal () {
Matriz m nueva Matriz ( )
m.leeMatriz ()
..
}
Solucin
public class Matriz {
const int MAX = 3
int [][] info;
Matriz () {
info nuevo int [MAX][MAX]
}
void leeMatriz () {
para int i 0, info.length-1
para int j 0, info.length-1{
escribe"Dame el valor el elemento: " + i +","+j
lee info [i][j]
}
}
principal {
Matriz m nuevo Matriz ()
m.leeMatriz ()
m.escribeMatriz()
}
}
Cuadrado mgico
Propiedades
suma
renglones
suma columnas
suma diagonal
suma antidiagonal
=
(n3+n) / 2