Está en la página 1de 13

ENTRENAMIENTO 1

CURSO DE ALGORITMOS ORIENTADOS A OBJETOS

PARTE A

1. Elabore un objeto que represente un computador.

Computador nuevo
 Velocidad procesador
 Color computador
 Tamaño
 Capacidad
 prender
 mostrar
2. Observe su
 escribir mano
 ejecutar
derecha, y defina todos
 apagar
los posibles objetos que
pueden encontrarse en ella.

Objeto: mano derecha


Datos o características
 Numero de dedos
 Color de la mano
 Tamaño
 Fuerza
Rutinas o acciones
 Abrir mano
 Mover mano
 Mover dedos
 Sujetar algo
 Hacer puño
 Mover puño
 Cerrar mano
Relaciones con otros objetos
 Puede ser de una persona
 Puede ser de un robot
 Es parecida a la mano izquierda
 Se puede relacionar con el pie
3. Represente a través de un objeto carro, mostrando todas sus características como sus
funciones.

Clase carro
Atributos
 Vel_max
 Color
 No_chasis
 No_puertas
 No_llantas
métodos
 Acelerar()
4. Imagine que se le ha  Frenar() designado la
tarea de diseñar un sistema  Mover_cambio() de reservas
de líneas aéreas que se  Girar_derecha encarga de
gestionar los vuelos de una  Girar_izquierda línea local.
Indique los objetos que piensa que
serían necesarias para diseñar el sistema.
Vuelo Aeropuerto Aerolínea Avión Asiento

-Numero -Nombre -Nombre -Compañía -Fila


-Ciudad -Tipo -Letra
-País -N° pasajeros

Reserva Pago Tarjeta Pasajero Tarifa

-Clave -Tipo -Nombre -Nombre -Clase


-Costo -Fecha -Numero -Dirección -Precio
total -Cantidad -Tipo -Ciudad -Impuestos
-Fecha -Teléfono
-E-mail
PRACTICA

1. Genere una solución que permita leer dos números y deducir si


están en orden creciente o decreciente.
El algoritmo de Dijkstra determina la ruta más corta desde un nodo origen hacia los demás
nodos para ello es requerido como entrada un grafo cuyas aristas posean pesos. Algunas
consideraciones:

 Si los pesos de mis aristas son de valor 1, entonces bastará con usar el algoritmo
de BFS.
 Si los pesos de mis aristas son negativos no puedo usar el algoritmo de Dijkstra,
para pesos negativos tenemos otro algoritmo llamado Algoritmo de Bellmand-
Ford.

Como trabaja

 Primero marcamos todos los vértices como no utilizados. El algoritmo parte de un


vértice origen que será ingresado, a partir de ese vértice evaluaremos sus
adyacentes, como Dijkstra usa una técnica greedy – La técnica greedy utiliza el
principio de que para que un camino sea óptimo, todos los caminos que contiene
también deben ser óptimos- entre todos los vértices adyacentes, buscamos el que
esté más cerca de nuestro punto origen, lo tomamos como punto intermedio y
vemos si podemos llegar más rápido a través de este vértice a los demás. Después
escogemos al siguiente más cercano (con las distancias ya actualizadas) y
repetimos el proceso. Esto lo hacemos hasta que el vértice no utilizado más
cercano sea nuestro destino. Al proceso de actualizar las distancias tomando como
punto intermedio al nuevo vértice se le conoce como relajación (relaxation).

Dijkstra es muy similar a BFS, usaba una Cola para el recorrido para el caso de
Dijkstra usaremos una Cola de Prioridad o Heap, este Heap debe tener la
propiedad de Min-Heap es decir cada vez que extraiga un elemento del Heap me
debe devolver el de menor valor, en nuestro caso dicho valor será el peso
acumulado en los nodos.

Tanto java como C++ cuentan con una cola de prioridad ambos implementan un
Binary Heap, aunque con un Fibonacci Heap la complejidad de Dijkstra se reduce
haciéndolo más eficiente, pero en un concurso más vale usar la librería que
intentar programar una nueva estructura como un Fibonacci Heap, claro que
particularmente uno puede investigar y programarlo para saber cómo funciona
internamente.

PSEUDOCODIGO

Considerar distancia [ i ] como la distancia más corta del vértice origen ingresado
al vértice i.

1 método Dijkstra(Grafo, origen):


2 creamos una cola de prioridad Q
3 agregamos origen a la cola de prioridad Q
4 mientras Q no este vacío:
5 sacamos un elemento de la cola Q llamado u
6 si u ya fue visitado continuo sacando elementos de
Q
7 marcamos como visitado u
8 para cada vértice v adyacente a u en el Grafo:
9 sea w el peso entre vértices ( u , v )
10 si v no ah sido visitado:
11 Relajacion( u , v , w )

1 método Relajacion( actual , adyacente , peso ):


2 si distancia[ actual ] + peso < distancia[ adyacente ]
3 distancia[ adyacente ] = distancia[ actual ] + peso
4 agregamos adyacente a la cola de prioridad Q

PARTE B

1. Defina la diferencia entre variable y constante.

Variables Constantes

Espacio en memoria Espacio en memoria


que almacena un valor que almacena un valor
que puede cambiar. que no cambiara.

El valor que almacena El valor que almacena


correponde a un tipo corresponde a un tipo
basico de dato. basico de dato.+

Los valores se le asignan


Su valor se asigna con =
con = cada vez que se
cuando se declara.
quieran cambiar.

Se utiliza la palabra
reservada final de su
declaracion para indicar
que una constante.

2. TIPOS DE DATOS
Son la representación simbológica de un atributo de una entidad, los datos expresan
características de las entidades sobre las que opera el algoritmo; representan hechos,
observaciones, cantidades o sucesos y pueden tomar la forma de números, letras o caracteres
especiales.

Un tipo de dato define el conjunto de valores que es posible crear y manipular, y las
operaciones que con ellos se puede llevar acabo.

CLASIFICACION DE LOS TIPOS DE DATOS PRINCIPALES

3. clasifique los tipos de operadores y determine la precedencia que existe entre ellos.

Los operadores especifican el tipo de cálculo que se quiere desarrollar en los elementos
de una expresión. Los operadores se pueden clasificar en las siguientes categorías:

 Aritméticos
 Relacionales
 Lógicos
 Alfanuméricos
 Asociativos

OPERADORES • Son utilizados para realizar calculos matematicos: Suma, resta, multiplicacion, division, residuo, potencias
• Primero se resuelven las expresiones que se encuentran entre parentesis
ARITMETICOS • las subexpresiones entre parentesisi se evaluan de adentro hacia fuera

OPERADORES • se puede comparar dos operandos utilizando operadores relacionales. El resultado es un valor de verdad ya
sea cierto o falso.
RELACIONALES • igual =, mayor que >, menor que<, mayor o igual>=, menor o igual=.

OPERADORES LOGICOS • Los operadores logicos son usados para combinar el resultado de expresiones conteniendo operadores
relacionales
O BOOLEANOS • Existen tres tipos de operadores logicos: AND, OR, NOT.

Los paréntesis nos indican un orden para realizar las operaciones. Pero no siempre nos darán
los paréntesis, por eso se creó una jerarquía de operadores.
La jerarquía varia de lenguaje a lenguaje, antes de empezar a codificar en algún lenguaje
primero se debe revisar la jerarquía que corresponda a ese lenguaje.

Operador Nivel de prioridad


( ) Mayor
Signo
Potencia
Producto y división ( *, / )
Div ( \ ), Mod
Suma y resta ( +, - )
Concatenación
Relacionales
Negación
And Menor
Or

4. ¿Qué tipo de datos se usarían para declarar variables que representan los valores
siguientes?
 Edad de un niño:

Variables

Edad Entero

Si Edad > = 0 y edad <= 10 entonces escribir “niño”

Si Edad > = 11 y edad <= 18 entonces escribir “adolescente”

Si Edad > = 19 y edad <= 25 entonces escribir “joven”

 Las medidas de un edificio

Variables: p = perímetro (longitud total del aresta), entero

A= El área de un lado, decimal

Q=Área (superficie) , decimal

V=Volumen, decimal

U_2= Diagonal (diagonal/pared), decimal

U_3= Diagonal cubo(espacial/cuerpo), decimal

 El nombre de una persona

Nombre y apellidos

Variables: nombre (char), apellido_1(char), apellido_2(char)

 La letra de su apartamento
Variables: cedula(entero), torre(char), piso(entero)

PARTE C

Se requiere elaborar un programa para controlar el inventario de los equipos del área de
fabricación de componentes.

 valores variables: componentes para fabricación, unidades fabricadas, precio,


empleados, proveedores.
 valores constantes: código componente, cedula empleado, cedula proveedor.
 Declaración de la variable:
Tipo de dato
carácter: nombre de los empleados y proveedores componentes.
numérico: el valor del componente, unidades fabricadas,
lógico: autorizaciones empleados y proveedores, condiciones de fabricación.
identificador variable: personal, registro de entrada, cantidad de componentes
y cantidad de proveedores.
identificador constante: nombres y apellidos de los empleados y proveedores,
nombre de los componentes.

Hacer un programa que escriba el porcentaje descontado en una compra, introduciendo por
teclado el precio de la tarifa y el precio pagado.

 valores variables: tarifa, precio, descuento, precio descuento.


 valores constantes: ninguno.
 Declaración de la variable:
Tipo de dato
carácter: ninguno
numérico: tarifa, precio, descuento, precio descuento.
lógico: Ninguno
identificador variable: tarifa, precio, dto, pd.
identificador constante: N/A.

Imprimir el costo de una llamada telefónica, capturando la duración de la llamada en minutos


y conociendo lo siguiente: Toda llamada que dure tres minutos o menos tiene un costo de $5.
Cada minuto adicional cuesta $3.

 valores variables: costo, minutos.


 valores constantes: valor minuto adicional, valor de 0 a 3 minutos
 Declaración de la variable:
Tipo de dato
carácter: ninguno
numérico: costo, minutos.
lógico: menor o igual a 3 min valor = 5$ y mayor a 3 min 3 $ el adicional
identificador variable: costo, minutos.
identificador constante: n/a

Crear un programa que presente un menú de opciones y permita al usuario seleccionar una.
Posteriormente deberá imprimir la opción que seleccionó el usuario. (El contenido del menú
ustedes lo pueden definir, así como el número de opciones.) Ejemplo: ¿Cuál es su color
favorito? 1. Rojo 2. Azul 3. Amarillo 4. Verde 5. Rosa 6. Anaranjado Respuesta 4: “Usted eligió
el Verde”.

 valores variables: opción


 valores constantes: color
 Declaración de la variable:
Tipo de dato
carácter: colores.
numérico: opción
lógico: según la elección del usuario mostrará el color si no repetirá el menú de
opciones
identificador variable: opc.
identificador constante: color

PRACTICA

1. Genere una solución que permita leer dos números y deducir si están en orden
creciente o decreciente.

variables: A y B
inicio
leer a, b
sí a < b entonces
Escribir “orden creciente”
Si_no
Escribir “orden decreciente”
Fin_si
fin
2. Una persona deposita hoy al Banco cierta cantidad de dinero, donde le reconocen un
interés del 2% mensual, capitalizado mensualmente. ¿Cuál será el saldo al cabo de 5
años?
Algoritmo intereses
Escribir "ingrese el valor a consignar"
Leer valor_presente
interes<-0.02
meses<-60
valor_futuro<-valor_presente*(1+interes)^meses
Escribir "valor consignado", valor_presente, "valor futuro en 5 años", valor_futuro
FinAlgoritmo
3. Diseñe una solución en donde teniendo en cuenta que los empleados de la fábrica
UNIBELL trabajan en dos turnos: diurno y nocturno, se pueda calcular el salario diario
de acuerdo con los siguientes puntos:
 La tarifa de las horas diurnas es de 12000 pesos.
 La tarifa de las horas nocturnas es de 20000 pesos.
 En caso de ser domingo, la tarifa se incrementará en 5000 pesos el turno diurno y 7500
pesos en el turno nocturno

SubProceso sueldo <- jornal ( n_horas, turno, tipo_dia )


si (turno="diurno" y tipo_dia="laborable") Entonces
sueldo<-n_horas*12000
Sino
si (turno="diurno" y tipo_dia="festivo") Entonces
sueldo<-n_horas*(12000+5000)
FinSi
FinSi
si (turno="nocturno" y tipo_dia="laborable") Entonces
sueldo<-n_horas*20000
Sino
si (turno="nocturno" y tipo_dia="festivo") Entonces
sueldo<-n_horas*(20000+7500)
FinSi
FinSi
FinSubProceso
Proceso nomina
Escribir "Introduce el nombre del trabajador"
Leer trabajador
Escribir "Introduce el numero de horas"
Leer n_horas
Escribir "Introduce en turno: diurno o nocturno"
Leer turno
Escribir "Introduce el dia"
Leer dia
Segun dia Hacer
"lunes":
tipo_dia<-"laborable"
"martes":
tipo_dia<-"laborable"
"miercoles":
tipo_dia<-"laborable"
"jueves":
tipo_dia<-"laborable"
"viernes":
tipo_dia<-"laborable"
"sabado":
tipo_dia<-"festivo"
"domingo":
tipo_dia<-"festivo"
FinSegun
sueldo<-jornal(n_horas, turno, tipo_dia)
Escribir "El trabajador " trabajador " cobra " sueldo " pesos"
FinProceso
4. Escribir un programa que solicite al usuario dos números. Si el primero introducido es
mayor que el segundo número, el programa debe imprimir el mensaje “el primer
número es mayor”, en caso contrario el programa debe imprimir el mensaje “el primer
número es el más pequeño”. Considerar el caso en que ambos números sean iguales e
imprimir el mensaje correspondiente.

Proceso Numeros
Escribir "ingrese el primer numero"
Leer numero1
Escribir "ingrese el segundo numero"
leer numero2
Si numero1=numero2 Entonces
Escribir " los dos numeros son iguales "
Fin Si
Si numero1>numero2 Entonces
escribir " El primer numero es mayor "
SiNo
Escribir " El primer numero es el mas pequeño"
Fin Si
FinProceso

5. Sentencias IF
a) Si un ángulo es igual a 90 grados, imprimir el mensaje “El ángulo es un ángulo
recto” sino imprimir el mensaje “El ángulo no es un ángulo recto”.
if n = 90:
print "el ángulo es un ángulo recto"
else:
print "el ángulo no es un ángulo recto"