Professional Documents
Culture Documents
Proceso
Entradas Salidas
Dato e información
La información es la colección de datos que tienen un significado para la persona, podría suceder que para
una persona algún suceso no sea informativo, pero para otra persona sí lo es, por lo tanto los conceptos
son difíciles de diferenciar, pero es válido tener la idea de ambos. Información = Datos + Significado
Compilación /
Interpretación
(Eliminación de errores de
Enteros Cadenas
Reales Matrices
Lógicos Clases
Carácter Archivos
Logico
Caracter
Entero
Real
Sexo puede tener solamente dos valores Masculino o Femenino, entonces podemos
representar con la letra ‘F’ para Femenino y ‘M’ para masculino, ese es el dominio de la
variable sexo, esta variable puede ser representada como un caracter.
La variable sueldo en una empresa varía desde 800 soles a 45000 soles, además puede
contener decimales, por lo tanto es un real o un double.
‘a’
True
Ejemplos
Capital de Canadá Pi
El año “ab”
El Sueldo Dirección
Fecha “1.234”
Temperatura Al
Identificadores
El sentido del uso de los identificadores de variables o constantes, es que el acceso directo a la
memoria por parte del programador, no sería amigable, por que las referencias a las posiciones
de memoria son números en hexadecimal, entonces para evitar ese tipo de referencia es que
mejor usamos identificadores que son definidos de manera descriptiva por el programador.
Un identificador es una palabra usada por el programador para nombrar una variable, método,
clase.
Las variables deben ser suficientemente descriptivas, los identificadores como n,v,x,y,z , los
cuales son válidos , pero hacen menos legible el programa. Variables como
numero_de_empleados, saldo_cuenta, numero_de_productos, basta con leerlas para saber
de qué se tratan, recuerda que no solo tú como propietario del programa leerás el código
fuente, lo harán después otros programadores, o tú mismo lo leerás después de un tiempo
y es bastante probable que no entiendas para que usaste las variables, sino las has
identificado de manera descriptiva.
Las variables de un determinado tipo solo pueden tomar valores de ese tipo.
Proceso de Abstracción
Abstracción
Objeto
Representación de la realidad, Física o Conceptual, con características y comportamiento, la
cual tiene un periodo de vida definido e identidad propia. Ejemplos
Conceptuales.- No puede ser captado por nuestros sentidos puede ser una idea,
proceso, etc
Características de un objeto, son los datos que describen, identifican a un objeto, a estos se
les conoce como atributos.
Comportamiento de un objeto
Son acciones que el objeto es capaz de realizar, servicios que el objeto brinda a otros
objetos.
Por ejemplo que comportamiento tienen Juan, Pedro, Lucía, ¿qué acciones realizan o
qué acciones se pueden realizar sobre ellos?
Clases (class)
Conjunto de objetos con características y comportamiento común.
Calculadora
marca
modelo
tipo
prendida
numero1
numero2
Segundo ahora vamos a asignarle los tipos de datos a cada una de las características definidas
Calculadora
Cadena marca;
Cadena modelo;
carácter tipo;
lógico prendida;
real numero1;
real numero2;
Los nombres que describen las características de este objeto se han creado tomando en
cuenta las reglas para formar identificadores y usando el lenguaje natural, propio del ser
humano.
Círculo
radio
Circulo
Real radio;
Haz el mismo ejercicio para los siguientes objetos Auto, Termómetro, Persona,
Cuentabancaria.
El lenguaje utilizado por el procesador se denomina lenguaje máquina. Se trata de datos tal
como llegan al procesador, que consisten en una serie de 0 y 1 ( datos binarios).
El lenguaje máquina, por lo tanto, no es comprensible para los seres humanos, razón por la
cual se han desarrollado lenguajes intermediarios comprensibles para el hombre. El código
escrito en este tipo de lenguaje se transforma en código máquina para que el procesador
pueda procesarlo.
El lenguaje natural es utilizado por los seres humanos para su comunicación, el lenguaje de
programación es mucho más rígido.
Permite mayor portabilidad, es decir que puede adaptarse fácilmente para ejecutarse en
diferentes tipos de equipos.
Las sentencias de programación suelen tener algún caracter que determina su final, por lo
general es un punto y coma (;) o un punto final (.), y algunas están separadas simplemente por
enters (retorno de carro). Esto depende del lenguaje de programación que se esté empleando.
Existen lenguajes que no necesitan un caracter que determine el final de una sentencia.
Una sentencia de programación tiene una sintaxis y una semántica. La sintaxis está
determinada por el lenguaje de programación y, si existe algún error, el compilador suele
detectarlo. También una sentencia tiene una semántica, si existe algún error de semántica, en
general, no puede ser descubierto por el compilador. Esto es porque la semántica está
asociada al "significado" o "función" de esa sentencia (o un grupo de sentencias), pero el
compilador no puede determinar qué quiere hacer el programador.
¿Qué es un programa?
Es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en una
computadora. Sin programas, estas máquinas no pueden funcionar correctamente.1 2 Al
conjunto general de programas, se lo denomina software y así, se refiere al equipamiento
lógico o soporte lógico de una computadora digital.
Java is a language used to write computer programs that was created by Sun Microsystems,
with development starting in 1991. The idea behind the language is that a program written
with Java can run on any platform – in other words, on any computer with any type of
operating system, on any computer device (cell phones, etc.), or on any type of server.
Entre noviembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus
tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java
Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software
libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java
aún no lo es).
El término Java fue acuñado en una cafetería frecuentada por algunos de los miembros del
equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que podría
tratarse de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim.
Otros abogan por el siguiente acrónimo, Just Another Vague Acronym ("sólo otro acrónimo
ambiguo más"). La hipótesis que más fuerza tiene es la que Java debe su nombre a un tipo de
café disponible en la cafetería cercana, de ahí que el icono de java sea una taza de cafe
caliente
Una Máquina virtual Java (en inglés Java Virtual Machine, JVM) es un programa nativo, es
decir, ejecutable en una plataforma específica, capaz de interpretar y ejecutar instrucciones
expresadas en un código binario especial (el Java bytecode), el cual es generado por el
compilador del lenguaje Java.
Cada tipo de dato en java reserva una cantidad de memoria y permite un rango o dominio de
valores
Haz el mismo ejercicio para los siguientes objetos Auto, Termómetro, Persona,
Cuentabancaria
Representación de los datos en memoria
Organización de la computadora
Cada tipo de tipo de dato ocupa o reserva un determinado espacio en la memoria RAM, bajo
una estructura determinada. La computadora de lo único que entiende es de 0s y 1s, para el
computador 5 en sistema decimal es igual 0101 en sistema binario.
A cada dígito 1 o 0 se le conoce como bit, los cuales representan ciertos rangos de voltaje, el 1
equivale a un voltaje más alto que el 0, el cual depende de la arquitectura de cada computador.
Podemos definir entonces 1Byte = 8 bits, 1Kb = 1024Bytes, 1 Mb = 1024Kb, 1Gb = 1024Mb,
1Tb = 1024 Gb, pueden ver en el sgte link las equivalencias que existen:
http://es.wikipedia.org/wiki/Exabyte
0 0 0 1 0 1 0 1
Con 3 bits podemos representar 000, 001, 010, 011, 100, 101, 110, 111 que equivalen
a (0, 1, 2, 3, 4, 5, 6, 7)
Números Enteros
Una variable entera (int) está formada por 4 bytes, es decir 32 bits. Estos 32 bits representan el
valor almacenado por esa variable en binario. Por ejemplo:
En general, una variable entera x está formada por 32 bits que denotaremos x31, x30, ... , x2,
x1 y x0. El valor numérico representado por la variable x está dado por el siguiente cálculo:
Si x31 es 1, el valor es negativo y se calcula construyendo una nueva palabra y, tal que:
yi= 1 si xi==0
0 si xi==1
valor(x) = - (valor(y) + 1)
Ejemplos:
valor(000...001001) = 1*2^3+1*2^0= 9
Una variable entera (int) siempre utiliza 32 bits, aún cuando el número sea pequeño. Por otra
parte, no es capaz de almacenar números demasiado grandes (en valor absoluto).
Ejercicios:
¿y el -35?
int 32 [-2^31,2^31-1]
short 16 [-2^15,2^15-1]
byte 8 [-2^7,2^7-1]
long 64 [-2^63,2^63-1]
El ordenador solo puede representar un subconjunto de los números reales (números en coma
flotante).
N<0 N>0
Desbordamient Agotamiento Desbordamient
o o
-∞ -N(max) N(max) +∞
Una variable real (double) está formada por 8 bytes, es decir el doble de un entero. En ella se
almacenan números reales en formato binario. Por ejemplo, el número:
1101.1010
Los primeros computadores almacenaban los números reales en una formato llamado punto
fijo, en donde se destinaba una cantidad fija de bits para la parte entera (por ejemplo 32 bits) y
el resto a la parte fraccionaria. Por lo tanto, el número anterior sería representado en 64 bits
como:
El signo: +
Mantisa: 10110000...
Exponente: 4
La mantisa es una secuencia de bits que siempre comienza en 1. El exponente indica en donde
colocar el punto que separa la parte entera de la fraccionaria. Un valor 0 indica que el punto se
coloca justo antes del primer bit. Un valor 4 indica que se coloca después del cuarto bit. Un
valor -3 indica que hay que imaginar que el número va precedido por 0.000 y luego viene la
mantisa.
el signo: -
mantisa: 110010000...
exponente: 7
Otros ejemplos:
En una variable de tipo double se destina 1 bit para el signo, 11 bits para el exponente y 52 bits
para la mantisa.
La desventaja es que los números se almacenan con una precisión limitada. Esto significa que
un número que requiera 100 bits de mantisa será aproximado a uno que solo ocupa 52,
introduciéndose entonces un error de representación.
El error que se comente se puede visualizar mejor en base 10. El error que comete es como
cuando el siguiente número:
1234567890123456789012345678901234567890
123456789012345*10^25
Es decir, solo se representan 15 dígitos de los 40 iniciales. El error absoluto que se comete es:
6789012345678901234567890
que parece enorme, pero lo que importa es el error relativo que es ~10^(-15) que es bajísimo
y para la mayoría de las aplicaciones numéricas es insignificante. Pero es un error que conviene
tener presente.
double 64 52 11 ~ [-10^300,10^300] ~ 15
float 32 24 7 ~ [-10^33,10^33] ~7
El rango de representación de los reales es casi ilimitado, pero los números se almacenan con
una precisión limitada (15 dígitos para una variable de tipo double). Esto hace que al realizar
multiplicaciones y divisiones, los valores que se obtienen poseen un error de precisión, que no
es relevante para la mayoría de las aplicaciones numéricas.
Tarea :
Muestre que el número 0.3 no es representable en forma exacta en una variable de tipo double.
Indicación:
La parte entera es el tercer bit, por lo que queda como 0.101... Quédese sólo con la parte
fraccional de 1.5.
La parte entera es el cuarto bit, por lo que queda como 0.1011... Quédese sólo con la parte
fraccional de 1.0.
Aplique este mismo método para 0.3 y deduzca la forma final del número en base 2.
Representación de textos
Estos símbolos se codifican usando n bits con lo cual puedo representar 2 n símbolos.
Operadores Lógicos
Operador unario (aplicado a un único operando). Cambia el valor de verdad de verdadero (V) a
falso (F) y viceversa.
p NOT p
V F
F V
Operador n-ario (aplicado a 2 o más operandos). Si todos los operandos son F devuelve F; si
hay alguno que sea V devuelve V.
p q p OR q
V V V
V F V
F V V
F F F
Operador n-ario . Si todos los operandos son V devuelve V; si hay alguno que sea F devuelve F.
p q p AND q
V V V
V F F
F V F
F F F
O-eXclusiva lógica (XOR):
Operador binario (aplicado a dos operandos). Devuelve V cuando ambos operandos son
distintos y F cuando son iguales.
p q p XOR q
V V F
V F V
F V V
F F F
Expresiones Aritméticas
Una expresión aritmética puede ser una variable, una constante o un conjunto operadores y
operandos. Los operadores actúan sobre los operandos para obtener un resultado.
Los paréntesis permiten agrupar operaciones permitiendo darle mayor precedencia o prioridad
de cálculo.
Expresiones Lógicas
Dado M=2 y N = 10
Para poder codificar las expresiones lógicas anteriores en Java usamos los siguientes
equivalentes:
Codificando en Java
Y &&
O ||
NO !
Definir una expresión lógica de tal forma que dado un número nos devuelva Verdadero si es
positivo o falso si es negativo.
(numero > 0)
Definir una expresión lógica de tal forma que dado un número nos devuelva verdadero si está
entre 1000 y 2000, falso en caso contrario.
Como estamos usando la conjunción basta que una de las condiciones falle para que el
resultado sea falso.
Métodos
Los métodos son servicios que el objeto es capaz de brindar a otros objetos, esto debido a que
los objetos interactúan unos con otros.
En el caso de la calculadora vamos a definir al inicio solo dos servicios o métodos que esta nos
puede proporcionar uno es el de la suma de dos números reales y el otro que nos diga si el
número que digitamos es positivo o no.
En el caso del círculo esta clase nos permite calcular el área dado un radio determinado
Fin Calculadora
retornar (3.1416*r^2); }
}
Fin
Fin
Cuando se define una clase lo que se está haciendo es un molde a partir del cual se van a crear
objetos, de acuerdo al contexto en el que nos encontremos.
Realizar este mismo ejercicio pero para Auto, Termómetro digital CuentaBancaria, Matrimonio,
Persona
byte puntaje_total ()
{
return (Partidos_ganados*3 + partidos_empatados*2 – partidos_perdidos);
}
Se tiene en una bodega una serie de productos, los cuales tienen como características el
nombre, precio de compra, precio de venta, las unidades vendidas, se necesita una clase que
permita calcular el monto total de venta y la utilidad obtenida por la venta.
1) Características del producto
Nombre
Precio_compra
Precio_venta
Unidades_vendidas
2) Diseñar los atributos de la clase
Producto
Inicio
Cadena Nombre;
Real precio_compra;
Real precio_venta;
Entero unidades_vendidas;
Fin
3) Diseñamos los servicios que proporciona la clase
Monto de venta Unidades_vendidas*precio_Venta
La utilidad Unidades_vendidas*(precio_venta-precio_compra)
4) Diseñamos los servicios como métodos
Real monto_venta()
Inicio
retornar (Unidades_vendidas*precio_Venta);
Fin
Real utilidad()
Inicio
Retornar (Unidades_vendidas*(precio_venta-precio_compra);
Fin
NOTA: se debe tomar en cuenta que ambos métodos pudieron ser atributos de la clase;
sin embargo; se deben evitar atributos calculados o derivados
5) Diseñamos la clase completa
Producto
Inicio
Cadena Nombre;
Real precio_compra;
Real precio_venta;
Entero unidades_vendidas;
Real monto_venta()
Inicio
retornar (Unidades_vendidas*precio_Venta);
Fin
Real utilidad()
Inicio
Retornar (Unidades_vendidas*(precio_venta-precio_compra);
Fin
Fin
6) Codificamos la clase
class Producto{
private String Nombre;
private float precio_compra;
private float precio_venta;
private int unidades_vendidas;
float monto_venta(){
return (Unidades_vendidas*precio_Venta);
}
float utilidad(){
return Unidades_vendidas*(precio_venta-precio_compra);
}
Problema
Diferencia entre un estado final y un estado inicial, un estado actual y un estado deseado.
Algoritmo
Secuencia de pasos o acciones finitas, ordenadas de manera lógica que nos permiten dar
solución a un determinado problema, sin hacer uso del computador.
(Del latín, dixit algorithmus y éste a su vez del matemático persa al-Jwarizmi) es una lista bien
definida, ordenada y finita de operaciones que permite hallar la solución a un problema
Orden Lógico
Tipos de Algoritmos
Se necesita hacer un pseudocódigo para poder realizar la suma de dos números en una
calculadora.
Instanciar una clase es crear objetos a partir de ella, como dijimos antes la clase es una especie
de molde, que determina la estructura de los objetos que agrupa. La instanciación coloca en
memoria al objeto creado.
Ejemplo
Calculadora
New
New
New
La clase calculadora se ha instanciado 3 veces, para dar vida a 3 calculadoras que mantienen la
misma estructura.
Entonces para crear una instancia de una clase en Java usamos la palabra reservada new y
escribimos la siguiente sentencia:
1era Forma
Clase Objeto; // declaramos el objeto
Objeto = new Clase(); // instanciamos el objeto
2da Forma
Lógicamente para poder prender una calculadora, esta debe existir, en el mundo real, esta
premisa es coherente, sin embargo para la computadora no lo es, si pretendemos representar
una calculadora en el computador, esta calculadora NO existe hasta que la instanciamos.
Para poder usar los atributos y métodos de un objeto primero debe ser instanciado
Los valores pueden ser asignados a los atributos de un objeto desde el mismo programa a lo
cual se le conoce como inicialización o desde un dispositivo externo, para propósitos del curso
usaremos el teclado como dispositivo para el ingreso de datos.
String marca;
String modelo;
char tipo;
boolean prendida;
float numero1;
float numero2;
float suma(){
return (numero1 + numero2);
Método constructor de
}
la clase Calculadora
boolean es_positivo(){
return (numero1>0);
}
} // fin de clase
Entonces si quiero asignarle el primer número a la calculadora que he creado, desde el mismo
programa hago lo siguiente:
Ahora debemos hacer que este pequeño programa se puede probar en la computadora para
ello debemos crear un PROGRAMA PRINCIPAL.
class Sumar {
Nombre del programa principal
public static void main (String [] args) {
}
Se envía un mensaje al objeto calculadora para que realice la
suma, este mensaje hace una llamada al método
}
Con lo cual tenemos al finalizar este ejercicio tendremos 2 archivos uno para guardar la clase
Calculadora.java y otro con la clase para el manejo del programa principal Sumar.java
En java asignar valores desde el teclado, utilizamos las siguientes instrucciones, creamos los
objetos para leer desde el teclado:
Pero tenemos un inconveniente los atributos a los cuales deseamos asignarle el valor ingresado
desde el teclado es de tipo entero numero1 y numero2, entonces para eso deberemos convertir
la cadena en tipo de dato entero, java proporciona una clase para realizar dicha tarea.
oCalculadora.numero1=Integer.parseInt(br.readLine());
oCalculadora.numero2=Integer.parseInt(br.readLine());
Con lo cual nuestro programa principal para sumar dos números ingresados desde el teclado,
quedaría como sigue:
class Sumar {
Diagrama de Flujo: Algoritmo hecho a manera de una representación gráfica de las acciones
que conforman un proceso. Estos diagramas utilizan una serie de símbolos con significados
especiales.
Proceso , asignación,cálculos,etc
Número2
Apagar la calculadora
Fin
Suma= Numero1 +
Numero2
Suma
Fin
Tenemos el siguiente método que habíamos definido para la clase calculadora, este método
solo hace uso del procesador.
float suma(){
return (numero1 + numero2);
}
float suma(){
float resultado; // declaramos o definimos una variable local , el tipo tiene debe ser el mismo
// tipo que devuelve el método para evitar la incompatibilidad
Si bien es cierto el agregar una variable más hace que el programa sea menos eficiente por qué
hago uso de la memoria, esta variable adicional nos permite un mayor control del cálculo
realizado, esta variable solo será visible en el método la cual se la ha definido, después de
ejecutado el método, la variable local desaparece de memoria.
por valor
por referencia
Un parámetro se pasa por valor cuando se copia su contenido y si es alterado su valor dentro
del procedimiento no se modifica el parámetro original. En cambio cuando un parámetro es
pasado por referencia, si se modifica su valor dentro del procedimiento, se ve modificada el
original.
Cuando necesitamos datos en un método y estos no están disponibles a partir de los atributos
directamente o una expresión basada en los atributos, entonces vamos a necesitar parámetros
para que el método pueda obtener datos que provienen del teclado o de otro método.
} // fin de clase
class Sumar {
float num1;
float num2;
class Sumar {
num1= Integer.parseInt(br.readLine());
num2= Integer.parseInt(br.readLine());
respuesta= oCalculadora.suma(num1,num2);
System.out.println(respuesta);
Es importante recordar que en java, los parametros de los tipos primitivos (int, long, etc.)
SIEMPRE se pasan por valor. Los objetos y arrays se pasan por referencia
Métodos constructores
Los métodos constructores son tipos especiales de una clase que nos permiten inicializar los
atributos de un objeto, en el mismo momento en que estamos instanciándolo.
Estos métodos Tienen la particularidad que se llaman igual que la clase y no retorna ningún tipo
de dato. Veamos algunos ejemplos
class Persona
{
String nombre;
String apellido_paterno;
String apellido_materno;
String direccion;
String telefono;
String dni;
String ruc;
String email;
String web;
char sexo;
String fecha_nacimiento;
boolean casada;
Persona (String pnombre, String ppaterno, String pmaterno, char psexo){ //sobrecarga de
//método constructor
nombre=pnombre;
apellido_paterno=ppaterno;
apellido_materno=pmaterno;
sexo=psexo;
}
String cual_es_tu_nombre(){
return nombre;
}
String cual_es_tu_apellidoPat(){
return apellido_paterno;
}
String cual_es_tu_apellidoMat(){
return apellido_materno;
}
String cual_es_tu_edad(){
Retornar edad;
}
Ya habíamos visto que cuando instanciábamos una clase para crear un objeto, se creaba la
estructura de la clase en la memoria.
También vimos que para poder acceder a un atributo de una clase, usábamos la forma general
objeto.atributo y para acceder a un método de la clase usábamos objeto.metodo(); a este tipo
de acceso se le conoce como acceso público; sin embargo; existe otra forma de acceso
conocido como privado el cual incorpora mayor seguridad a los datos de un objeto.
Como logramos configurar un acceso privado a los atributos de un objeto, pues es muy sencillo
usaremos la palabra reservada prívate delante de cada atributo. Por lo general los atributos
siempre serán privados y los métodos públicos, pero existen ciertos contextos en donde esto
deja de ser válido.
class Auto{
short Acelerar(){
short Frenar(){
short Prender(){
return 1;
short Apagar(){
return 0;
}
}
Entonces
Pues tendremos que definir un método público que permita asignarle un valor a dicho atributo
Marca=pMarca;
}
Este método debe añadirse a la clase que hemos definido previamente, entonces ahora cuando
queramos asignarle una marca a algún objeto instanciado, haremos lo siguiente:
oAuto.set_marca(“Toyota”);
Análogamente se deben crear métodos para cada atributo que permitan la asignación de
valores, a estos métodos se le conocen como métodos SET.
Ahora lo mismo sucedería si quiero recuperar el valor que está contenido en alguno de los
atributos, antes solo bastaba con poner la instrucción oAuto.Marca y podíamos recuperar cuál
es la marca del objeto oAuto, pero ahora que está como privado ya NO es posible, entonces es
necesario crear un método que me permita recuperar el valor de ese atributo.
String get_Marca() {
Return Marca;
Entonces si yo quisiera mostrar en pantalla la marca del objeto oAuto tendría que poner la
siguiente sentencia System.out.println(oAuto.get_Marca()); parar poder recuperar ese dato del
objeto.
class Auto{
private String Marca;
private String Modelo;
private byte numPuertas;
private int kilometraje;
private String placa;
private boolean descapotable;
private short velocidad;
short Acelerar(){
return (velocidad + 1);
}
short Frenar(){
return (velocidad – 1);
}
short Prender(){
return 1;
}
short Apagar(){
return 0;
}
// agregamos los 2 métodos definidos
void set_marca(String pMarca){
Marca=pMarca;
}
String get_Marca() {
Return Marca;
}
}
Suponga que tiene dos variables numéricas, denominadas A y B, que tienen valores diferentes,
y suponga que desea imprimir el valor de la mayor. Si A es mayor que B, debe imprimir el valor
de A; pero, por otro lado, si B es mayor que A, debe imprimirse el valor de B. La elección de
que alternativa tomar depende de la decisión de si la variable A es o no mayor que B. Esta
estructura se representa mediante el diagrama siguiente
Las estructuras selectivas se utilizan para tomar decisiones lógicas; de ahí que se suelan
denominar también estructuras de decisión o alternativas.
En las estructuras selectivas se evalúa una condición y en función del resultado de la misma se
realiza una opción u otra. Las condiciones se especifican usando expresiones lógicas. La
representación de una estructura selectiva se hace con palabras en pseudocódigo (if, else o
bien en español si, sino), con una figura geométrica en forma de rombo o bien con un triángulo
en el interior de una caja rectangular.
si <condición> entonces
<acción S1>
fin_si
<acción S1>
sino
<acción S2>
fin_si
Hacer el algoritmo para escribir un programa que permita que la calculadora reste dos
números y nos muestre por pantalla si la resta fue positiva o negativa
if (resta<0)
System.out.println(“Es positiva”);
else
System.out.println(“Es negativa”);
Hacer un algoritmo para un programa que calcule el pago que hacen un grupo de personas
para ver una película teniendo en cuenta que si el grupo es menor de 8 personas el pago es de
1.5 soles por persona y para grupos de 8 personas o más el pago es 0.5 soles por persona.
class Pelicula {
byte numero_personas;
float costo_pelicula(){
if (numero_personas<8)
return 1.5;
else
return 0.5;
Hacer un algoritmo para un programa que convierta un número mayor de 10000, dado en
segundos a horas minutos y segundos. Ejemplo 12015 segundos es equivalente a 3 horas, 20
minutos, 15 segundos
class Convertir_segundos {
private long numero;
prívate long horas;
long minutos;
long segundos;
void convierte(){ // este método no devuelve ningún valor , solo actualiza los valores de los
// atributos
Horas=Numero/3600;
Minutos=(Numero-Horas*3600)/60;
Segundos=Numero-Minutos*60;
}
}
class Principal {
public static void main(String [] args){
De los estudiantes que se matriculan en la UNAT-A, los ex soldados pagan 30 soles por curso
en el que se matriculen, mientras que los demás (regulares), pagan 50 soles por curso. Diseñe
el algoritmo para escribir un programa en el que el usuario introduce los datos del estudiante
(ex soldado o regular) y el número de cursos y las salidas sean la categoría del estudiante (ex
soldado o regular), número de cursos y los costos totales por los cursos a llevar.
Entradas
Carácter Tipo_de_estudiante
entero numero_cursos
Salidas
Entero pago
entero costo_total
Proceso
Pago=30;
Caso contrario
Pago=50;
Costo_total=pago*numero_cursos;
3) Diseñar la clase
class UNAT_principal {
public static void main(String [] args){
}
Selectivas Anidadas
En la ciudad de Chachapoyas, una agencia de seguros para automóviles asigna costos basados
en el sexo y la edad del conductor. Los varones menores de 25 años pagan los precios más
altos, 1000 soles. Los hombres de 25 años o más años pagan 700 soles. Las mujeres de menos
de 21 años pagan 800 soles, mientras que las mujeres de 21 años o más pagan 500 soles.
Escribir el algoritmo y el programa que imprima la edad del conductor, sexo, y el pago
correspondiente para los clientes de la aseguradora
Entradas
Carácter Sexo
entero edad
Salidas
Entero pago
Proceso
Si (sexo es hombre)
Si (edad < 25)
Pago =1000;
Sino
Pago=700;
Sino // si es mujer
Si (edad<21)
Pago=800;
Sino
Pago=500;
class Agencia_seguros_principal {
public static void main(String [] args){
oagencia.sexo=br.readLine().charAt(0);
oagencia.edad= Short.parseShort(br.readLine());
oagencia.calcula_pago();
System.out.println(oagencia.pago);
class Numero{
short num;
String mensaje;
void obtener_mensaje(){
if (numero>0) mensaje = “(“ + numero + “POSITIVO)”;
if (numero==0) mensaje= “(“ + numero + “CERO)”;
if (numero<0) mensaje=“(“ + numero + “NEGATIVO”;
}
class Numero_principal {
public static void main(String [] args){
System.out.println(“Ingresa el número”);
onum.num= Short.parseShort(br.readLine());
onum.obtener_mensaje();
System.out.println(onum.mensaje);
Hacer un algoritmo y un programa que devuelva el nombre del día de la semana siguiendo un
orden de correspondencia (1, 2, 3...7) para (lunes, martes, miércoles... domingo)
respectivamente.
3) Diseño de la clase
Dia_semana
Inicio
entero num_dia;
cadena nombre_dia;
vacio dame_nombre_dia()
Inicio
si num_dia es 1 entonces nombre_dia=”lunes”
si num_dia es 2 entonces nombre_dia=”martes”
si num_dia es 3 entonces nombre_dia=”miércoles”
si num_dia es 4 entonces nombre_dia=”jueves”
si num_dia es 5 entonces nombre_dia=”viernes”
si num_dia es 6 entonces nombre_dia=”sábado”
si num_dia es 7 entonces nombre_dia=”Domingo”
Fin
fin
4) Codificación de la clase
}
}
Entradas
carácter tipo_calculo
real base
real altura
real area
Salidas
Real valor
Proceso
4) Diseño de la clase
Triangulo
Inicio
carácter tipo_calculo
real base
real altura
real valor
vacio calcular_valor()
Inicio
Si (tipo_calculo es ‘a’) entonces
Inicio
area= base*altura/2
valor=area
Fin
si (tipo_calculo es ‘b’) entonces
Inicio
base = area*2/altura
valor=base;
Fin
si (tipo_calculo es ‘h’) entonces
Inicio
altura =area*2/base
valor=altura
fin
fin calcular_valor
fin Triangulo
Contador
Un contador es una variable cuyo valor se puede incrementar o decrementar. Por ejemplo
byte contador;
contador=3;
contador = contador +1; // contador ahora es 4
contador=15;
contador=contador-1; // contador ahora es 14
contador--;
contador-=1;
Acumuladores
Las variables acumuladoras tienen la misión de almacenar resultados
int sueldo;
int aumento;
Sueldo=1000;
Aumento=200;
Estructuras Repetitivas
Cuando se hace falsa, finaliza la repetición. En la lección anterior iniciamos con las estructuras
repetitivas. La estructura While (condición) { … } y la estructura do { … } while (condición), se
conocen como Iterativas. Se usan cuando NO se conoce con anticipación el número de veces
que se ejecutará la acción.
Las estructuras Mientras y Para/Desde suelen en ciertos casos, no realizar ninguna iteración en
el bucle, mientras que Repetir ejecutará el bucle al menos una vez.
Observa en el flujograma, que se necesita una variable contadora (un índice), para llevar la
cuenta de las veces que entramos al cuerpo del ciclo. También es importante notar que esta
variable se inicializa antes de entrar al cuerpo del ciclo y dentro del cuerpo se incrementa en
una cantidad constante, por lo general en uno.
Esta variable a la vez, nos sirve para compararla con el valor dado en la condición, cuando se
cumple la condición, se sale del ciclo.
Representación pseudocodificada:
Mientras <condición>
Acciones
Fin_mientras
En Java
While (condición){
EJEMPLO:
Calcular la suma de los cuadrados de los primeros 100 números enteros y escribir el resultado.
Solución.
Como recordarás, resolvimos este ejercicio en la lección anterior pero utilizando la estructura
Desde. Hoy lo haremos con la estructura Mientras. Que tendremos de diferente?
Acciones
Fin para
for (i=1;i<=N;i++){
EJEMPLO:
Calcular la suma de los cuadrados de los primeros 100 números enteros y escribir el resultado.
Solución.
Un cliente del banco de crédito, quiere sacar dinero del cajero automático, se sabe que no se
puede retirar más de S/. 1500. El cajero pedirá su clave, dni y el monto a retirar, para poder
realizar el retiro de dinero. El saldo con el que cuenta el cliente en su cuenta, se inicializará
dentro del programa. El cajero siempre pregunta Si desea realizar otra transacción o No. Si la
respuesta es N, terminará la transacción, si la respuesta es si continuará haciendo retiros. Si ya
no tiene saldo en su cuenta también terminará la transacción. Todo retiro disminuye el saldo
de su cuenta. Se pide hacer un programa en java, que simule el trabajo de un cajero
automático.
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.*;
try{
if (ocaj1.esClave(br.readLine())){
System.out.println("Ingrese la clave");
if (ocaj1.esDni(br.readLine()))
ocaj1.setMonto_transaccion(Float.parseFloat(br.readLine()));
else
System.out.println("DNI incorrecto");
else
System.out.println("Clave Incorrecta");
} catch(IOException ex){
Desarrollar un programa en java que al ingresar n notas de un curso y el peso de cada una
pueda calcular el promedio ponderado del alumno.
Nota(){
nota=0;
suma_nota=0;
peso=0;
promedio=0;
numero_de_notas=0;
void calcula_suma_nota(){
suma_nota+=nota*peso;
void calcula_promedio(){
promedio=suma_nota/numero_de_notas;
void incrementa_numero_notas(){
numero_de_notas++;
return nota;
this.nota = nota;
return suma_nota;
this.suma_nota = suma_nota;
return peso;
this.peso = peso;
}
public float getPromedio() {
return promedio;
this.promedio = promedio;
return numero_de_notas;
this.numero_de_notas = numero_de_notas;
Desarrollar un programa para leer una cantidad indeterminada de números y cuente cuántos
son positivos y cuántos negativos impares. Si se ingresa Cero el programa deberá terminar y
mostrar el reporte de negativos impares y positivos.
return (pnum>0);
return ((pnum%2==0?true:false));
}
Sesión 10 Ejercicios de Estructuras Repetitivas - Para
Suma=0;
Fin para
Mostrar suma;
Class Mostrar_impares{
if (i%2!=0) suma+=I;
}
class mostrar_impares_principal{
Hacer un programa que ingrese los sueldos de 234 trabajadores y calcules el promedio de
sueldo.
Promedio=0;
Constante max_trabajador;
Leer sueldo
Fin para
Promedio=total_sueldo/max_trabajador;
public class Trabajador {
void incrementar_total_sueldo(){
total_sueldo+=sueldo;
}
void setnombre(String pnombre){
nombre=pnombre;
}
void setsueldo(float psueldo){
sueldo=psueldo;
}
static float getsueldo(){
return total_sueldo;
}
static float sueldo_promedio(short num){
return total_sueldo/num;
}
}
import java.io.*;
public class Trabajador_Principal {
otrab.setnombre(br.readLine());
otrab.setsueldo(Float.parseFloat(br.readLine()));
otrab.incrementar_total_sueldo();
}
System.out.println("El sueldo promedio es : " + Trabajador.sueldo_promedio(numTrabajadores));
}catch(IOException ex){
}
}}
Ejercicios
Diseñar y codificar un programa que reciba como entrada 24 números reales que representen
las temperaturas del exterior en un periodo de 24 horas, el programa deberá mostrar la
temperatura promedio y la temperatura más alta y más baja del día.
Definición de Arreglo
Un arreglo se define como una colección finita, homogénea y ordenada de elementos.
Índice
0 1 11
13.4 0.3 -234.09
Elemento
Componente
Los arreglos tienen la característica que pueden almacenar a N elementos del mismo tipo y
además permite el acceso a cada uno de estos elementos. Así se distinguen 2 partes en los
arrelgos:
Los componentes
Los índices
Las posiciones determinadas por un índice, el cual es entero, comienzan desde cero de
izquierda a derecha.
El arreglo que se muestra arriba es de longitud 12, pero las posiciones van de 0 a 11.
Los componentes hacen referencia a los elementos que forman el arreglo; es decir; a los
valores que se almacenan en cada una de las casillas del mismo, los componentes son las
celdas que apuntan a los elementos.
Declaración de Arreglos en JAVA
Los arreglos en Java son dinámicos, pero no extensibles, lo cual significa que deben ser
creados con el tamaño que tendrán hasta el final de su vida.
Un arreglo se declara de la siguiente forma:
<tipo>[] <nombre>;
O sea, para declarar, por ejemplo, un arreglo de números enteros utilizaremos la
siguiente sentencia:
int[] arreglo_enteros;
Es importante notar que el arreglo aún no ha sido creado, sino meramente declarado.
Para crear el arreglo (reservar su memoria e inicializarlo) deberemos recurrir al
operador new:
Arreglo_enteros = new int[10];
Este comportamiento debe comprenderse de esta forma: en Java todo es un objeto, y los
objetos deben ser creados mediante el operador new. El caso de los arreglos no es
diferente, el tipo de datos del arreglo (int[] en este caso) es una clase y cada una de sus
instancias debe ser creada explícitamente, el tamaño puede pensarse como un parámetro
al constructor de la clase.
Una de las características que hacen de Java un entorno de programación seguro, y que
se relaciona con el manejo de los arreglos es que el lenguaje no permite la indexación de
arreglos fuera de rango, o sea, una asignación de este tipo generará una excepción:
ArrInt[25] = 1; // por que el índice 25 no existe , no se definió de esa manera
Otra forma de declararlos es la siguiente:
UNIDIMENSIONALES:
tipo nombre_array[]=new tipo[nº];
tipo nombre_array[]={valores};
Para asignar un valor determinado a una posición determinada del arreglo anterior, por ejemplo asignar
false al componente 17 del arreglo
Lista_booleanos[16]=false;
Int [] lista_enteros = new int [400];
float [] lista_temperaturas = {10, 20.3 , 11 , 15.6 , 12.34 ,19, 12, 12, 8.4, 12.6}
float tcenti,tfah;
tcenti=0.0f;
tfah=0.0f;
for (índice=0;índice<lista_temperaturas.legth;índice++)
System.out.println(lista_temperatura[indice]);
SESIÓN 12 ARREGLOS BIDIMENSIONALES
int[][] A = {{2,3,8},{9,5,4},{7,8,3},{4,6,8}}; // 4 x 3
int[][] B = {{1,4,7},{2,5,8}}; // 3 x 2
int n = 4, m = 3, l = 2;
int i,j,k,suma;
C[i][j]= suma;
{
System.out.print(C[i][j]+ " ");
Hasta ahora hemos visto arreglos unidimensionales y bidimensionales. Sin embargo, podemos
tener arreglos con las dimensiones que uno desee. Por ejemplo, podemos tener arreglos de 3,
4 o 5 dimensiones.
Por ejemplo:
Supongamos queremos tener una clase Alumno a la que podamos asignarle varios objetos de
tipo Curso.
Tal como definíamos arreglos para tipos simples en JAVA podemos hacer arreglos de objetos.
Por ejemplo, para crear un arreglo llamado cursos de 5 (referencias a) cursos debemos hacer:
Después de que creamos un arreglo de objetos y asignamos ciertos objetos a cada componente,
podemos usar los métodos/atributos de cada objeto tal como un objeto
cualquiera.
Dado que por ejemplo cursos[1] es un objeto de la clase Curso podemos hacer
cursos[1].Creditos();
para obtener los créditos del curso con índice 1.
class Alumno
{
String nombre;
private Curso[] cursos;
private int cantidadCursos;
private int maximaCantidadCursos;
public int CantidadTotalCreditos() que entrega la cantidad total de créditos del alumno.
public void ImprimeListaCursos() para imprimir una lista de toda la info de los cursos
asignados al alumno.