You are on page 1of 75

MANUAL DE FUNDAMENTOS DE PROGRAMACIÓN

Enfoque Orientado a Objetos


Elaborado por Ing. Alejandro Valdivia Barboza
Docente Investigador USAT 2010-I
CAPI MODELAMIENTO DE OBJETOS

Proceso

Entradas Salidas

El proceso implica transformación, cambio a través de una serie de acciones ordenadas de


manera lógica, que persiguen un objetivo, el cual se expresa mediante las salidas.

Imaginemos una calculadora, en la cual necesitamos realizar una multiplicación de dos


números:

3 X 4 = 12 Para realizar esta operación se necesitó presionar los botones 3


,4 y X, es decir necesitamos ingresar a la calculadora los dos
números y la operación que necesitamos realizar, a estos
valores le denominamos entradas y la salida será entonces el
cálculo de esta operación, que nos da como resultado 12.

El proceso es sumas 3 veces 4 o sumar 4 veces 3.

Dato e información

Dato: Valor sin significado para la persona

Información: son los datos que significan algo para la persona

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

Proceso de desarrollo de un programa

Análisis del Diseño del Programa Codificación del programa


(Algoritmo) (utilizamos un IDE, en este
problema caso NETBEANS, código

Compilación /
Interpretación
(Eliminación de errores de

Generación de Ejecutable Pruebas del programa


(.class , .exe) (Eliminación de Errores de
Lógica, Ejecución)
Tipos de datos, variables, constantes

Los tipos de datos tienen la finalidad de reservar una determinada cantidad de


memoria, cada tipo de dato reserva una cantidad que no necesariamente es la misma,
con esto se busca el uso eficiente de memoria; es decir; usar la menor cantidad de
memoria posible, dependiendo del contexto en el cual se estén representando los
datos.

Simples (Sin estructura) Compuestos (derivados de los simples)

Enteros Cadenas
Reales Matrices
Lógicos Clases
Carácter Archivos

A continuación se muestra un gráfico de barras, en el cual podemos ver de manera


intuitiva el espacio ocupado por estos tipos de datos

Logico

Caracter

Entero

Real

Variables Una variable es un símbolo que representa un elemento no especificado de


un conjunto dado. Dicho conjunto es llamado conjunto universal de la variable, universo
o dominio de la variable, y cada elemento del conjunto es un valor de la variable. Sea x
una variable cuyo universo es el conjunto {1,3,5,7,9,11,13}; entonces x puede tener
cualquiera de esos valores: 1,3,5,7,9,11,13. En otras palabras x puede reemplazarse
por cualquier entero positivo impar menor que 14. Por esta razón, a menudo se dice
que una variable es un reemplazo de cualquier elemento de su universo.

Constantes Es un valor de tipo permanente, que no puede modificarse, al menos no


dentro del contexto o situación para el cual está previsto. Suele relacionarse y usarse
en combinación con las variables, que sí admiten modificación en sus valores.

Dominio de los datos

Es el conjunto de valores que puede tener una variable en un determinado contexto.

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.

Generalmente el dominio es considerado como rango que tiene un inicio y fin.


La memoria se llena de datos
3 ‘Juan’

‘a’

True

Ejemplos

La primera letra de ‘USAT’ Número de Teléfono

Nombre de una calle Monto Total de una factura

Número de Hermanos Número de Clientes de una empresa

Capital de Canadá Pi

El año “ab”

La Estatura de una persona Nombre de mi mejor amigo

El Sueldo Dirección

Fecha “1.234”

Temperatura Al

Definir qué tipo de dato es cada una de las variables

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.

Reglas para crear identificadores

No debe ser palabra reservada del lenguaje de programación


Que respete la siguiente gramática:
 Inicie con $, _ ó letra; donde mayúsculas son diferentes de minúsculas.
 Seguido de cero o más: letras ó dígitos ó $ ó under-scores.
 No puede incluir el carácter espacio en blanco

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

El programador tiene la capacidad y la responsabilidad de diseñar y crear objetos en el


computador, a este proceso se le conoce como abstracción; es decir; representar la
realidad, en un programa de computadora.

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

Físicos.- Puede ser captado por nuestros sentidos


“Juan”, “Pedro”, “Lucía”
“Perro”, “Gato”, ”Vaca”
“sal”, “pimienta”, “comino”
“Chery QQ”, “Nissan 4x4”, “Toyota Yaris”
“Recibo Luz 00001”, “Recibo Luz 00001”, “Recibo Luz 00001”, “Recibo Luz
00001”
“Sporting Cristal” , “U”,”Boys”
“Ace”,”Ariel”, etc
“Tristeza” , “Alegria”, “Ira”
“fx-5800P”, “fx-3650P”, “fx-3950P”

Conceptuales.- No puede ser captado por nuestros sentidos puede ser una idea,
proceso, etc

“Cuenta banco 001-223456-5656”, “Cuenta banco 001-223456-5645”, “Cuenta


banco 001-223456-5678”
”Domingo” ,“Lunes” , “Martes”, “Miércoles”,…
“01-11-2009” , “02-02-2008”

Características de un objeto, son los datos que describen, identifican a un objeto, a estos se
les conoce como atributos.

Por ejemplo que características tienen Juan, Pedro , Lucía.

Nombre, edad, sexo, peso, talla, dirección, teléfono fijo

Características de perro , gato, Vaca

Nombre, edad, sexo, peso, talla,

Características de una “Cuenta banco 001-223456-5656”, “Cuenta banco 001-223456-


5645”, “Cuenta banco 001-223456-5678”

Numero de cuenta, saldo, moneda

Características de un ”Domingo” ,“Lunes” , “Martes”, “Miércoles”,…

Nombre, inicio de semana, laborable

Características de una “01-11-2009”, “02-02-2008”

Dia, mes , año, festivo

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?

Nacer, Dormir, comer, trabajar, estudiar, jugar, morir, razonar, dar su


nombre,

Comportamiento de perro, gato, Vaca


Nacer, Dormir, comer, morir, jugar

Comportamiento de una “Cuenta banco 001-223456-5656”, “Cuenta banco 001-


223456-5645”, “Cuenta banco 001-223456-5678”

Crear, retirar, depositar, obtener saldo, Cerrar

El cliente del banco actúa sobre su cuenta

Clases (class)
Conjunto de objetos con características y comportamiento común.

“Juan” “Perro” “sal”

“Pedro” “Gato” “pimienta”

“Lucìa” “Vaca” “comino”

Persona Animal Condimento

¿Qué características comunes encuentras en estas 3 calculadoras?

Vamos a hacer el ejercicio de modelamiento de estas calculadoras, reduciendo la complejidad


de la calculadora que conocemos, estas calculadoras solo permiten hacer operaciones con dos
números a la vez.

Primero definimos la clase Calculadora y las características que la definen

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.

¿Qué es un Lenguajes de Programación?


Lenguaje artificial que puede ser usado para controlar el comportamiento de una máquina,
especialmente una computadora. Estos se componen de un conjunto de reglas sintácticas y
semánticas que permiten expresar instrucciones que luego serán interpretadas.

Es un lenguaje diseñado para describir el conjunto de acciones consecutivas que un equipo


debe ejecutar. Por lo tanto, un lenguaje de programación es un modo práctico para que los
seres humanos puedan dar instrucciones a un equipo

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.

Por lo tanto, un lenguaje de programación tiene varias ventajas:

Es mucho más fácil de comprender que un lenguaje máquina:

Permite mayor portabilidad, es decir que puede adaptarse fácilmente para ejecutarse en
diferentes tipos de equipos.

Existen los lenguajes compilados, interpretados y los intermedios.

¿Qué es una sentencia?


una sentencia es una línea de código en algún lenguaje de programación. Un programa está
constituido por múltiples sentencias de programación, lo que es llamado código fuente.

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.

En algunos lenguajes de programación las sentencias están numeradas, de esta manera, si


existe algún error de sintaxis (o alguna advertencia), el compilador entrega un mensaje con el
número de sentencia donde fue encontrado.

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.

A CADA instrucción o sentencia le corresponde UNA acción de procesador.

¿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.

Transformación del archivo fuente al archivo al archivo ejecutable


¿Qué es JAVA?

Lenguaje de Programación Orientado a Objetos.

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.

JAVA= Just Another Vague Acronym?

Las aplicaciones Java están típicamente compiladas en un bytecode, aunque la compilación en


código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es
normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución
directa por hardware del bytecode por un procesador Java también es posible.

La implementación original y de referencia del compilador, la máquina virtual y las bibliotecas


de clases de Java fueron desarrollados por Sun Microsystems en 1995. Desde entonces, Sun ha
controlado las especificaciones, el desarrollo y evolución del lenguaje a través del Java
Community Process, si bien otros han desarrollado también implementaciones alternativas de
estas tecnologías de Sun, algunas incluso bajo licencias de software libre.

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

Java Virtual Machine

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.

Archivo Archivo bytecode Java Virtual


Fuente .java .class Machine

Codificar los Tipos de Datos en Java

Tipo de Dato en lenguaje natural Tipo Dato Java


Entero byte, short,int,long
Real float, double
Cadena String
Lógico boolean
Carácter char

Cada tipo de dato en java reserva una cantidad de memoria y permite un rango o dominio de
valores

byte 1 byte o 8 bits -128 a 127


short 2 bytes o 16 bits -32768 a 32767
int 4 bytes o 32 bits -2147483648 a -2147483647
Long 8 bytes o 64 bits -9223372036854775808 a -9223372036854775807
float 4 bytes o 32 bits 1 bit signo, 8 exponente, 24 mantisa. 1.4x10-45 1.4x1038
double 8 bytes o 64 bits 1 bit signo , 11 exponente, 52 mantisa
boolean 1 bit true o false
char 2 bytes o 16 bits Caracteres Unicode

Diseño y codificación de los atributos de un objeto

Calculadora class Calculadora {


Cadena marca; private String marca;
Cadena modelo; private String modelo;
carácter tipo; private char tipo;
lógico prendida; private boolean prendida;
private float numero1;
real numero1;
private float numero2;
real numero2; }

Circulo class Circulo{


Real radio; private float radio;
}

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

Podemos representar los bits como celdas por ejemplo:

1Byte en la memoria RAM del computador

0 0 0 1 0 1 0 1

Este byte representa al número 21 en decimal

Con 1 bit podemos representar 0 y 1

Con 2 bits podemos representar 00, 01, 10, 11 (0,1, 2, 3)

Con 3 bits podemos representar 000, 001, 010, 011, 100, 101, 110, 111 que equivalen
a (0, 1, 2, 3, 4, 5, 6, 7)

Con N bits entonces podemos generar 2 N posibles valores

Si queremos representar X valores diferentes, necesitaremos N bits, donde N es el mayor


entero, mayor o igual que log 2 X

Números Enteros

Si tenemos 32 bits podemos representar 2 32 posibles combinaciones de de 0s y 1s lo cual nos


permite generar hasta 4294967296 valores (0  4294967295).
Ahora qué es lo que pasa con los números negativos y el cero, el computador será capaz de
representar – 2147483648 hasta 2147483647

No podemos representar más números si yo realizo la siguiente operación 2147483647 + 1


obtendré como resultado – 2147483648.

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:

El valor representado por esta variable es:

1*2^2 + 0*2^1 + 1*2^0

En donde x^y se usa acá como una abreviación de x elevado a y.

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 0, el valor es positivo y se calcula como:

x31*2^31 + x30*2^30 + ... + x2*2^2 +x1*2^1+ x0*2^0

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)

Se dice que y es el complemento de x.

Ejemplos:

valor(000...001001) = 1*2^3+1*2^0= 9

valor(111...111010) = - (valor(000...000101)+1) = - (5+1) = -6

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).

Valores máximos y mínimos

Máximo= valor(011...111111)= 2^31-1

Mínimo= valor(100...000000)= -2^31

Por lo tanto, con un int se pueden almacenar números de 9 dígitos aproximadamente.

Ejercicios:

¿Qué número representa el siguiente número en binario 000...00101011?


¿y el 111...101001?

¿Cómo se representa en el computador el número 23?

¿y el -35?

tipo número rango de bits representado

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]

Números Reales (En notación Científica)


(+/-)Mantisa x 2exponente

El ordenador solo puede representar un subconjunto de los números reales (números en coma
flotante).

Las operaciones aritméticas en coma flotante están sujetas a errores de redondeo:

N<0 N>0
Desbordamient Agotamiento Desbordamient
o o

-∞ -N(max) N(max) +∞

Estándar IEEE 754

Precisión Sencilla (bit de signo + 8 bits exponente + 32 bits mantisa)

Precisión Doble (bit de signo + 11bits exponente + 32bits mantisa)

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

Representa en decimal al número:

2^3 + 2^2 + 2^0 + 2^(-1) + 2^(-3) = 8+4+1+0.5+0.125

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:

00000000 00000000 00000000 00001101 . 10100000 00000000 00000000 00000000


En esta representación, el punto que separa la parte entera de la parte fraccionaria, siempre se
ubica en una posición fija y de ahí el nombre de esta representación.

El problema de esta representación es que el rango de valores representables es el mismo de


los números enteros. Se necesitaba un mecanismo que aumentara el rango de números
representables. La forma de hacerlo fue destinar una parte de los bits a indicar la posición del
punto. Y este formato paso a llamarse punto flotante.

Representación en punto flotante

Un número real se almacena en una variable especificando 3 componentes: el signo (+ o -), la


mantisa y el exponente. Por ejemplo, el número 11 se representa 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.

¿Qué número es el siguiente?

el signo: -

mantisa: 110010000...

exponente: 7

Solución: -1100100.00... , que es -(4+32+64)= -100

Otros ejemplos:

signo mantisa exponente en binario en decimal

+ 1000... 100 1 seguido 2^99 de 99 ceros

+ 1010... 0 0.1010 0.5+0.125 (0.625)

+ 1000... -3 0.0001 2^(-4) (0.0625)

En una variable de tipo double se destina 1 bit para el signo, 11 bits para el exponente y 52 bits
para la mantisa.

Valores máximos y mínimos

Máximo en valor absoluto: 2^1023

Valor más pequeño: 2^(-1024)

La ventaja de esta representación es que se alcanza un rango de representación mucho más


grande de lo que sería posible con 64 bits.
Precisión y error de representación

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

se aproxima al siguiente valor:

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.

Observación: además del tipo double existe el tipo float

tipo tamaño mantisaexponente rango precisión

en bits en bits en bits representado en dígitos

double 64 52 11 ~ [-10^300,10^300] ~ 15

float 32 24 7 ~ [-10^33,10^33] ~7

Conceptos esenciales de este capítulo que Ud. debe comprender:

El rango de representación de los enteros es limitado. Si el resultado de una operación


aritmética (como la multiplicación) excede el rango de representación se producirá un error en
la magnitud del valor almacenado. Lamentablemente, Java no alerta cuando se comete este
tipo de errores.

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:

Para obtener la representación de un número en el rango [0,1[ como 0.6875 proceda de la


siguiente forma:

0.6875 multiplicado por 2 da: 1.375.


La parte entera es el primer bit del número en base 2. El número será entonces 0.1... Quédese
sólo con la parte fraccional de 1.375.

0.375 multiplicado por 2 da: 0.75.

La parte entera es el segundo bit, por lo que queda como 0.10...

0.375 multiplicado por 2 da: 1.5.

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.

0.5 multiplicado por 2 da: 1.

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.

El número que queda es 0, por lo que 0.6875 en base 2 es 0.1011.

Aplique este mismo método para 0.3 y deduzca la forma final del número en base 2.

Representación de textos

Se escoge un conjunto de símbolos alfabéticos, numéricos y especiales (separadores y signos


de puntuación), gráficos y de control (por ejemplo, retorno de carro).

Estos símbolos se codifican usando n bits con lo cual puedo representar 2 n símbolos.

Ejemplos de códigos normalizados

ASCII (American Standard Code For Information Interchange)

ANSI X 3.4-1968, 7 bits (128 símbolos)

ISO 8859-1 = Latin 1, 8 bits (256 símbolos)


SESIÓN 2 EXPRESIONES ARITMÉTICO LÓGICAS Y MÉTODOS
Operadores Aritméticos Operadores Relacionales
Suma + 3+4 Mayor que >
Resta - 12.56 -56.09 Menor que <
Multiplicación * 3 * 10.45 Mayor o igual que >=
División / 10 /2 Menor o igual que <=
Potencia ^ 3^4 Diferente !=
Resto %(mod) 35%3 igual ==

Operadores Lógicos

NO lógico (NOT) o negación:

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

O lógica (OR) o disyunción:

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

Y lógica (AND) o conjunción:

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.

Expresar los siguientes ejercicios como una expresión aritmética

Calcular la suma de dos números reales

Suma=numero1+numero2 suma es una variable de tipo real a la cual se le


asigna el resultado de la suma de ambos
números.

Calcular al área del círculo

AreaCirculo = 3.14.16*r^2 3.14.16 y 2 son constantes literales, r es una


variable real que identifica el radio del círculo y
areacirculo es una variable real.

Se pueden expresar las expresiones anteriores en lenguaje natural de la sgte manera:

Expresiones Lógicas

Dado M=2 y N = 10

Entonces (M<N) y (N<2*M)


V y F
F

El resultado de la expresión lógica es Falso

Entonces ((M-N) != 10) O (2*N>4*M)


V O V
V

Para poder codificar las expresiones lógicas anteriores en Java usamos los siguientes
equivalentes:

Codificando en Java

Y &&

O ||

NO !

&: devuelve verdadero si ambos operandos son true, evaluándolos ambos.

| : devuelve verdadero uno de los operandos es true, evaluándolos ambos.

Entonces la primera expresión lógica era:

(M<N) y (N<2*M) en java esto sería (M<N) && (N<2*M)

((M-N) != 10) O (2*N>4*M) en java esto sería ((M-N) != 10) || (2*N>4*M)

Es casi idéntico salvo por los operadores lógicos

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)

Cuando numero tiene valor 10, entonces (numero > 0) es verdadero.


Cuando numero tiene valor -3, entonces (numero > 0) es falso.

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.

(Numero >= 1000) y (Numero<=2000)


si Numero=1200 (1200 >= 1000) es V y (1200<=2000) es V, por lo tanto V y V
resulta V.

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.

Esta interacción o comunicación entre objetos se realiza mediante mensajes


Cliente de Mensaje 2

Cada mensaje pide la ejecución de un servicio de un objeto.

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.

real suma() float suma(){


Inicio
return (numero1 + numero2);
retornar (numero1 + numero2);
}
Fin

lógico es_positivo() boolean es_positivo(){


Inicio
retornar (numero>0); return (numero>0);
Fin
}
Lógico dentro_rango() boolean dentro_rango(){
Inicio
Retornar ((Numero >= 1000) y (Numero<=2000)); return ((Numero >= 1000) && (Numero<=2000));
Fin }

En el caso del círculo esta clase nos permite calcular el área dado un radio determinado

real areaCirculo() float areaCirculo(){


Inicio
return (3.1416*r*r);
retornar (3.1416*r^2);
}
Fin

Vamos a diseñar y codificar a toda la calculadora

Modelo en lenguaje Natural En lenguaje de programación Java


Calculadora class Calculadora { //inicio
Inicio
Cadena marca; private String marca;
Cadena modelo; private String modelo;
carácter tipo; private char tipo;
lógico prendida; private boolean prendida;
private float numero1;
real numero1;
private float numero2;
real numero2;
float suma(){
real suma()
Inicio return (numero1 + numero2);

retornar (numero1 + numero2); }

Fin boolean es_positivo(){

lógico es_positivo() return (numero1>0);


Inicio
retornar (numero1>0); }
Fin } // fin de clase

Fin Calculadora

Circulo class Circulo{


Inicio private float radio;
Real radio;
float areaCirculo(){
real areaCirculo()
Inicio return (3.1416*r*r);

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

SESIÓN 3 EXPRESIONES ARITMÉTICO LÓGICAS Y MÉTODOS


En el campeonato descentralizado se quiere modelar una clase que permita manejar a todos los
equipos de futbol y el puntaje total obtenido, cada equipo tiene un nombre, partidos
empatados, partidos perdidos, partidos ganados, cada partido ganado es 3 puntos, cada partido
empatado es 2 puntos y por cada partido perdido se le disminuye un punto.

1) Características del Equipo


Nombre
partidos_jugados
partidos_perdidos
partidos_empatados

2) Diseñamos los atributos de la clase


Equipo
Inicio
Cadena Nombre;
entero partidos_ganados;
entero partidos_empatados;
entero partidos_perdidos;
Fin

3) Diseñamos los servicios que proporciona la clase


Puntaje_total = Partidos_ganados*3 + partidos_empatados*2 – partidos_perdidos

4) Diseñamos los servicios como métodos


Entero puntaje_total ()
Inicio
retornar (Partidos_ganados*3 + partidos_empatados*2 – partidos_perdidos);
Fin

5) Diseñamos la clase completa


Equipo
Inicio
Cadena Nombre;
entero partidos_ganados;
entero partidos_empatados;
entero partidos_perdidos;
Entero puntaje_total ()
Inicio
retornar (Partidos_ganados*3 + partidos_empatados*2 – partidos_perdidos);
Fin
Fin
6) Codificar la clase en Java
class Equipo {
private String nombre;
private byte partidos_ganados;
private byte partidos_empatados;
private byte partidos_perdidos;

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);
}

SESION 4 ESTRUCTURAS ALGORITMICAS SECUENCIALES

Problema

Diferencia entre un estado final y un estado inicial, un estado actual y un estado deseado.

Ejemplo “Clasificación al mundial de futbol”

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

Simple, preciso, claro

Definido -> confiable

Orden Lógico

Tener Inicio y Fin, es decir; ser finitos

Eficiente (Uso justo de memoria y tiempo de procesador)

Eficaz (Debe funcionar correctamente)

Tipos de Algoritmos

Pseudocódigo: Este tipo de algoritmo se expresa en lenguaje natural, inicialmente de manera


informal, para luego expresarlo siguiendo ciertas reglas estándar.

El pseudocódigo describe un algoritmo utilizando una mezcla de frases en lenguaje


común, instrucciones de programación y palabras clave que definen las estructuras
básicas. Su objetivo es permitir que el programador se centre en los aspectos lógicos de la
solución a un problema.

No siendo el pseudocódigo un lenguaje formal, varían de un programador a otro, es decir, no


hay una estructura semántica ni arquitectura estándar. Es una herramienta ágil para el
estudio y diseño de aplicaciones

Se necesita hacer un pseudocódigo para poder realizar la suma de dos números en una
calculadora.

Inicio suma números


prender la calculadora
ingresar primer numero
ingresar segundo número
Realizar calculo
Mostrar resultado
Apagar la calculadora
Fin

Entonces la calculadora funciona igual al computador, tiene dispositivos que permiten la


entrada de datos y además dispositivos que permiten la salida de datos.

En la computadora el ingreso de datos se puede dar a través de los siguientes dispositivos:

El teclado, Mouse, scanner, CD, DVD, Memory, DiscoDuro

Los dispositivos de salida de datos son:

Pantalla, impresora, CD, DVD, Memory, DiscoDuro


Entonces lo que tenemos que hacer es diseñar y codificar un programa que permita realizar la
suma de dos números. Para esto debemos aprender tenemos lo siguiente:

Instanciación de una clase

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:

La instanciación se puede hacer de 2 maneras

1era Forma
Clase Objeto; // declaramos el objeto
Objeto = new Clase(); // instanciamos el objeto

2da Forma

Clase Objeto = new Clase(); // declaración e instanciación en la misma sentencia

Siguiente la 2da forma podemos declarar e instanciar un objeto calculadora

Calculadora oCalculadora = new Calculadora();

Si quisiéramos crear otras calculadoras entonces haríamos lo sgte:

Calculadora oCalculadora1 = new Calculadora();

Calculadora oCalculadora2 = new Calculadora();


Es decir creamos 3 calculadoras a partir de un mismo molde, en este caso la clase calculadora.
Tomar en cuenta que los 3 objetos han sido identificados de manera diferente, colocándoles un
número al final, si no los identificamos de manera diferente, estaríamos trabajando sobre el
mismo objeto a pesar de haber instanciado 3 veces.

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

¿Cómo asignamos valores a los atributos de una clase?

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.

Primero tenemos la clase Calculadora que ya la habíamos modelado

class Calculadora { //inicio

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

Luego instanciamos un primer objeto calculadora

Calculadora oCalculadora = new Calculadora();

Entonces si quiero asignarle el primer número a la calculadora que he creado, desde el mismo
programa hago lo siguiente:

oCalculadora.numero1=3; // asigno el número 3 al atributo numero1

oCalculadora.numero1=10; // asigno el número 3 al atributo numero2

A este primer paso se le conoce como INICIALIZACIÓN

La asignación es de derecha a izquierda, puedo asignar constantes literales ya sean números,


caracteres, valores lógicos o cadenas y también puedo asignar expresiones aritméticas o
lógicas.
Retomando el algoritmo inicial, empezamos a codificar

Inicio suma números


prender la calculadora Calculadora oCalculadora = new Calculadora();
ingresar primer número oCalculadora.numero1=3;
ingresar segundo número oCalculadora.numero1=10;
Realizar calculo System.out.println(oCalculadora.suma());
Mostrar resultado
Apagar la calculadora
Fin

Ahora debemos hacer que este pequeño programa se puede probar en la computadora para
ello debemos crear un PROGRAMA PRINCIPAL.

En java podemos crear el programa principal de la siguiente manera:

class Sumar {
Nombre del programa principal
public static void main (String [] args) {

Calculadora oCalculadora = new Calculadora();


oCalculadora.numero1=3; Método main que permite definir el inicio
oCalculadora.numero1=10; y final del programa principal
System.out.println(oCalculadora.suma());

}
Se envía un mensaje al objeto calculadora para que realice la
suma, este mensaje hace una llamada al método
}

Con esto hemos realizado un algoritmo secuencial y lo hemos codificado en Java

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 la asignación se valores o expresiones se debe tener en cuenta que debe ser


entre variables o atributos del mismo tipo de dato, no puedo asignar un valor
numérico a un atributo o variable de tipo cadena por ejemplo

¿Cómo haría para inicializar los valores desde el teclado?

En java asignar valores desde el teclado, utilizamos las siguientes instrucciones, creamos los
objetos para leer desde el teclado:

InputStreamReader isr = new InputStreamReader (System.in);


BufferedReader br = new BufferedReader (isr);

Luego leemos la línea ingresada

br.readLine(), esta instrucción siempre lee en forma de cadena.

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());

el Integer.parseInt(), permite convertir una cadena en un entero.

Con lo cual nuestro programa principal para sumar dos números ingresados desde el teclado,
quedaría como sigue:

class Sumar {

public static void main (String [] args) {

Calculadora oCalculadora = new Calculadora();


InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader (isr);
oCalculadora.numero1= Integer.parseInt(br.readLine());
oCalculadora.numero1= Integer.parseInt(br.readLine());
System.out.println(oCalculadora.suma());

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.

Inicio y Fin del Diagrama de Flujo

Lectura de datos desde el teclado

Proceso , asignación,cálculos,etc

Decisión , decidimos si ejecutamos un bloque


de acciones o no

Mostrar datos en pantalla

Conector para continuar en la misma página

Conector para continuar en la siguiente


página.

Nuestro algoritmo inicial hecho a manera de pseudocódigo, lo podemos expresar a manera de


pseudocódigo

Inicio suma números Inicio


prender la calculadora
ingresar primer número
ingresar segundo número
Numero1
Realizar calculo
Mostrar resultado

Número2
Apagar la calculadora
Fin

Suma= Numero1 +
Numero2

Suma

Fin

Sesión 5 ESTRUCTURAS ALGORITMICAS SECUENCIALES

Variables Locales vs Atributos

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);
}

Para declarar una variable local se usa la siguiente sintaxis:

Tipo de dato Identificador de variable;

Si queremos inicializarla en la misma sentencia de declaración

Tipo de dato Identificador de variable = valor;

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

resultado=(numero1 + numero2); // asignamos la suma de dos números a la variable


return resultado; // retornamos el valor de la variable

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.

Parámetros en los métodos

Un parámetro (o argumento) es una variable que es recibida por una función, procedimiento o


subrutina, método. Quien recibe el o los parámetros los utiliza para alterar su comportamiento
o sus resultados al ejecutarse.

En forma general, existen dos formas de pasar un parámetro a un procedimiento o función:

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.

¿En qué casos se necesita usar parámetros?

Si NO tenemos las variables disponibles como atributos del objeto

Si NO se pueden obtener como un cálculo de los atributos


Si los valores se pueden obtener ingresando datos del teclado o de otros
método.

Si es necesario darle mayor flexibilidad al método que estamos


programando.

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.

Por ejemplo vamos a redefinir nuestra clase calculadora como sigue:

class Calculadora { //inicio


Hemos quitado los atributos numero1 y
String marca; numero2, entonces ahora si queremos sumar
String modelo; dos números tendremos que pasarlos como
char tipo; parámetros al método suma porque no los
boolean prendida; tenemos disponibles como atributos.

float suma(float numero1, float numero2){


return (numero1 + numero2);
}

boolean es_positivo(float numero){


return (numero>0);
}

} // fin de clase

Para el caso de inicializar valores dentro del programa

class Sumar {

public static void main (String [] args) {

float num1;
float num2;

Calculadora oCalculadora = new Calculadora();


num1=3; // inicializamos las variables locales
num2=10;
System.out.println(oCalculadora.suma(num1,num2));

Para el caso de ingresar los valores desde el teclado

class Sumar {

public static void main (String [] args) {


float num1;
float num2;
float respuesta;

InputStreamReader isr = new InputStreamReader (System.in);


BufferedReader br = new BufferedReader (isr);
Calculadora oCalculadora = new Calculadora();

num1= Integer.parseInt(br.readLine());
num2= Integer.parseInt(br.readLine());
respuesta= oCalculadora.suma(num1,num2);

System.out.println(respuesta);

El uso de parámetros genera más flexibilidad

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(){// método constructor


nombre=””;
apellido_paterno=””;
apellido_materno=””;
dirección=””;
teléfono=””;
dni=””;
ruc=””;
email=””;
web=””;
sexo=’H’;
fecha_nacimiento=””;
casada=false;
}

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;
}

Entonces ahora cuando instanciamos un objeto persona se ejecutará el primer constructor.


Persona oPersona = new Persona(); // este constructor inicializa los valores en blanco

Persona oPersona = new persona (“Juan”,”Perez”,”Gonzales”,’H’); // instanciamos y le damos

// valores a los atributos considerados.

Persona oPersona = new persona (“Caroll”,”Hernández”,”Obando”,’M’);


Dibujamos la siguiente tabla para representar a la memoria

Acceso público y privado a los atributos

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.

Ahora usaremos la clase Auto

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;

}
}

Bueno para poder usar un objeto Auto tenemos que instanciarlo

Entonces

Auto oAuto = new Auto();

Si yo quisiera asignarle un valor al atributo marca y hago lo siguiente: oAuto.marca=”Toyota”;


esto es incorrecto por que el acceso a ese atributo ha sido definido como privado.

¿Entonces, Cómo hacemos para asignarle un valor a ese atributo privado?

Pues tendremos que definir un método público que permita asignarle un valor a dicho atributo

Por ejemplo: Este método no devuelve ningún valor por lo tanto


devuelve vacío o para lo cual java usa la palabra
reservada void

void set_marca(String pMarca){

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.

Entonces agregando los dos métodos el Set y Get en la clase

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;
}
}

Sesión 6 Estructuras Selectivas

La unidad aritmética y lógica es uno de los componentes más importantes de una


computadora típica. El propósito de la unidad aritmética es el manejo de las operaciones
aritméticas; la porción lógica da a la computadora la capacidad de tomar decisiones. Esto
forma la base de la construcción si-entonces-de lo contrario (if-else), la que permitirá la
selección de acciones alternativas.
Una decisión se especifica en una expresión lógica de la misma forma en que una operación de
cálculo se especifica en una expresión numérica.

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

Alternativa doble (si-entonces-sino/if-then-else)

La estructura anterior es muy limitada y normalmente se necesitará una estructura que


permita elegir entre dos opciones o alternativas posibles en función del cumplimiento o no de
una determinada condición.

Si la condición C es verdadera, se ejecuta la acción S1, y si es falsa, se ejecuta la acción S2.


si <condición>entonces

<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

Inicio Calculadora ocalc = new Calculadora();


prender la calculadora; float numero1;
leer numero1; float numero2;
leer numero2; InputStreamReader isr = new InputStreamReader (System.in);
restar los números; BufferedReader br = new BufferedReader (isr);
Si (la resta es menor que cero) numero1=Integer.parseInt(br.readline());
Mostrar “Es positiva”; numero2= Integer.parseInt(br.readline());
Sino resta= ocalc.restar(numero1,numero2);
Mostrar “Es negativa”; if (resta<0)
Fin System.out.println(“Es positiva”);
else
System.out.println(“Es negativa”);
class Restar_numeros {

public static void main(String [] args){

Calculadora ocalc = new Calculadora();


float numero1;
float numero2;
float resta;

InputStreamReader isr = new InputStreamReader (System.in);


BufferedReader br = new BufferedReader (isr);
numero1=Integer.parseInt(br.readline());
numero2= Integer.parseInt(br.readline());
resta= ocalc.restar(numero1,numero2);

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

1) Definir la clase: Convertir_segundos


2) Análisis del problema
Entradas
Numero – la entrada dede ser inicializada ya sea por teclado o dentro
del programa
Salida
Horas
Minutos
Segundos
Proceso
Horas=Numero/3600
Minutos=(Numero-Horas*3600)/60
Segundos=Numero-Minutos*60

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){

Convertir_segundos ocv = new Convertir_segundos();


InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader (isr);
ocv.numero= Long.parseLong(br.readline());
ocv.convierte();
System.out.println(“El número : ” + ocv.numero + “ Equivale a ” + ocv.horas + “, Horas” +
ocv.minutos + “ Minutos , ” + ocv.segundos + “ Segundos ”);
}
}

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.

1) Definimos la clase UNAT


2) Análisis del problema

Entradas

Carácter Tipo_de_estudiante
entero numero_cursos

Salidas
Entero pago
entero costo_total

Proceso

Si tipo_de_estudiante es ex soldado entonces

Pago=30;

Caso contrario

Pago=50;

Costo_total=pago*numero_cursos;

3) Diseñar la clase

UNAT Class UNAT {


Inicio
carácter tipo_de_estudiante;
char tipo_de_estudiante;
entero numero_cursos; byte numero_cursos;
entero pago; byte pago;
entero calcula_costo()
Inicio
Si tipo_de_estudiante es ex soldado entonces int calcula_costo(){
Pago=30; if (tipo_de_estudiante==’E’)
Caso contrario pago=30;
Pago=50;
else
Retornar(pago*numero_cursos);
Fin
pago=50;
Fin return (pago*numero_cursos);
}

class UNAT_principal {
public static void main(String [] args){

UNAT ounat = new UNAT();


InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader (isr);
ounat.tipo_de_estudiante=br.readLine().charAt(0);// leemos un caracter
ounat.calcula_pago();
System.out.println(ounat. calcula_costo());

}
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

1) Definimos la clase: Agencia_seguros


2) Análisis del problema

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;

3) Diseñar y codificar clase

Agencia_seguros class Agencia_seguros{


Inicio char sexo;
Carácter sexo; short edad;
entero edad; short pago;
entero pago;
vacío calcula_pago () void calcula_pago (){
Inicio if (sexo==’H’)
Si (sexo es hombre) if (edad<25)
Si (edad < 25) pago=1000;
Pago =1000; else
Sino pago=700;
Pago=700; else
Sino // si es mujer if (edad<21)
Si (edad<21) pago=800;
Pago=800; else
Sino pago=500;
Pago=500; }
fin
Fin }

class Agencia_seguros_principal {
public static void main(String [] args){

Agencia_seguros oagencia = new Agencia_seguros();


InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader (isr);

oagencia.sexo=br.readLine().charAt(0);
oagencia.edad= Short.parseShort(br.readLine());
oagencia.calcula_pago();
System.out.println(oagencia.pago);

Sesión 7 Selectivas Múltiples


Escribir el algoritmo y programa que solicita se le ingrese un número. Si el número es positivo
debe escribirse el número y junto a el positivo (15 POSITIVO). Si el número es cero (0 CERO); Si
es negativo debe escribirse el número y junto a el negativo (-5 NEGATIVO).

1) Definimos la clase: Numero


2) Análisis del problema
Entradas
Entero num
Salidas
Cadena Mensaje
Proceso
Si numero es mayor que cero entonces mostrar “(“ + numero + “POSITIVO)”
Si numero es cero entonces mostrar “(“ + numero + “CERO)”
Si numero es menor que cero entonces mostrar “(“ + numero + “NEGATIVO”
3) Diseñar la clase
Numero
Inicio
entero numero;
cadena mensaje;
vacio obtener_mensaje()
Inicio
Si numero es mayor que cero entonces mensaje = “(“ + numero + “POSITIVO)”
Si numero es cero entonces mensaje= “(“ + numero + “CERO)”
Si numero es menor que cero entonces mensaje=“(“ + numero + “NEGATIVO”
Fin
Fin

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){

Numero onum = new Numero();

InputStreamReader isr = new InputStreamReader (System.in);


BufferedReader br = new BufferedReader (isr);

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.

1) Definición de clase: Dia_semana


2) Análisis del problema
Entrada
entero num_dia
Salida
cadena nombre_dia
Proceso
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”

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

class Dia_semana{ class Dia_semana _principal {


byte num_dia; public static void main(String [] args){
String nombre_dia;
void dame_nombre_dia(){ Dia_semana odia = new Dia_semana();
if (num_dia== 1) nombre_dia=”Lunes”; InputStreamReader isr = new InputStreamReader (System.in);
if (num_dia==2) nombre_dia= “Martes”; BufferedReader br = new BufferedReader (isr);
if (num_dia== 3) nombre_dia=”Lunes”; odia.num_dia=Byte.parseByte(br.readLine());
if (num_dia==4) nombre_dia= “Martes”; odia.dame_nombre_dia();
if (num_dia== 5) nombre_dia=”Lunes”; System.out.println(“El nombre del día es :” + odia.nombre_dia);
if (num_dia==6) nombre_dia= “Martes”;
if (num_dia==7) nombre_dia= “Martes”; }
}
}
}
class Dia_semana{
byte num_dia;
String nombre_dia;
void dame_nombre_dia(){
switch (num_dia) {
case 1: nombre_dia=”Lunes”;break;
case 2: nombre_dia= “Martes”;break;
case 3: nombre_dia=”Lunes”;break;
case 4: nombre_dia= “Martes”;break;
case 5: nombre_dia=”Lunes”;break;
case 6: nombre_dia= “Martes”;break;
case 7: nombre_dia= “Martes”;break;
default: nombre_dia=”No existe”;
}

}
}

Hacer el algoritmo y programa que calcule:

- El valor del área de un triángulo, dada la base y la altura.

- El valor de la base de un triángulo dada la altura y el área.

- El valor de la altura de un triángulo dada la base y el área.

1) Definimos la clase: Triangulo

2) Análisis del problema:

Entradas
carácter tipo_calculo
real base
real altura
real area
Salidas

Real valor

Proceso

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

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

5) Codificar clase y programa principal

class Triangulo{ class Triangulo_principal{


char tipo_calculo; public static void main(String [] args){
float base;
float altura; }
float area; }
float valor;
void calcular_valor(){
switch (tipo_calculo){
case ‘a’:
{area=base*altura/2;valor=area;break;}
case ‘b’:
{ base = area*2/altura ;valor=base;break;}
case ‘h’:
{ altura =area*2/base ;valor=altura;break;}
}
}
}

Sesión 8 Estructuras Algorítmicas Repetitivas

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

También puede expresarse de la sgte manera:


contador++;
contador+=1;

contador--;
contador-=1;

Acumuladores
Las variables acumuladoras tienen la misión de almacenar resultados

int sueldo;
int aumento;

Sueldo=1000;

Aumento=200;

sueldo = sueldo + aumento; // sueldo ahora es 1200

sueldo=sueldo+aumento;//sueldo ahora es 1400

Estructuras Repetitivas

Se llama Mientras a la estructura algorítmica que se ejecuta mientras la condición evaluada


resulte verdadera. Se evalúa la expresión booleana y, si es cierta, se ejecuta la instrucción
especificada, llamada el cuerpo del bucle. Entonces se vuelve a evaluar la expresión booleana,
y si todavía es cierta se ejecuta de nuevo el cuerpo. Este proceso de evaluación de la expresión
booleana y ejecución del cuerpo se repite mientras la expresión sea cierta.

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.

La diferencia entre ambas es que la condición se sitúa al principio o al final de la secuencia de


instrucciones. Entonces, en el primero, el bucle continúa mientras la condición es verdadera (la
cual se comprueba antes de ejecutar la acción) y en el segundo, el bucle continúa hasta que la
condición se hace verdadera (la condición se comprueba después de ejecutar la acción, es
decir, se ejecutará al menos una vez).
La estructura Desde/Para suele utilizarse cuando se conoce con anterioridad el número de
veces que se ejecutará la acción y se le conoce como Estructura Repetitiva en lugar de
iterativa, para diferenciarla de las dos anteriores.

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?

Se llama REPETIR / PARA a la estructura algorítmica que se ejecuta un número definido de


veces hasta que la condición se torna verdadera:
Representación pseudocodificada :

Para i=1 hasta N

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.

Nuevamente resolveremos el ejercicio de las dos lecciones anteriores, ahora utilizando la


estructura Repetir.¿Podrás decir cuál será ahora la diferencia? Las reglas para construcción de
esta estructura usando Repetir, nos dicen que debemos declarar una variable contador que
debe inicializarse antes del ciclo e incrementarse dentro del ciclo. A diferencia de la estructura
Mientras, la condición ahora estará colocada al final del bucle para que primero ejecutamos la
instrucción y luego preguntamos si la condición se cumple. Esto quiere decir, que en esta
estructura el bucle se realizará por lo menos una vez. También podrás observar que la
condición está al revés, porque el bucle se repite hasta que la condición se cumpla. En el bucle
Mientras, la condición se evaluaba mientras era cierta.
Sesión 9 Ejercicios de Estructuras Repetitivas - Mientras

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;

public class Cajero {


// 1) definimos las entradas al programa
String clave="1234";
String dni="19674473";
float monto_transaccion;

final short monto_maximo=1500; // constante que limita el monto de retiro


// 2) Definimos las salidas del programa
float saldo=3000;
// 3) Proceso
void transacción(){
try {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.println("Desea realizar una transacción");
char rpta = br.readLine().charAt(0);
boolean conSaldo=true;
while(rpta!='N'&& rpta!='n'&& conSaldo){
System.out.println("Ingrese el monto a retirar");
this.monto_transaccion=Float.parseFloat(br.readLine());
if (this.monto_transaccion>1500)
System.out.println("Máximo de retiro 1500");
else
if ((this.saldo-this.monto_transaccion)>=0)
this.saldo-=this.monto_transaccion;//actualizamos el saldo
else
System.out.println("El monto de transacción debe ser menor al saldo");
if (saldo<=0) conSaldo=false;
if (conSaldo){
System.out.println("Desea realizar una transacción");
rpta = br.readLine().charAt(0);
}
}

} catch (IOException ex) {


System.out.println("Error en el ingreso de Datos");
Logger.getLogger(Cajero.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Segunda Versión

public class Cajero1 {

private String clave="1234";


private String dni = "19674473";
private float monto_transaccion;
private short monto_maximo = 1500;// constante que limita el monto de retiro

// 2) Definimos e inicializamos las salidas del programa

private float saldo = 3000;


byte retirar(){
if (monto_transaccion>this.monto_maximo) return 0;
if (monto_transaccion<saldo) {
saldo-=monto_transaccion;//actualizamos saldo
return 1; // retornamos código que indica operación exitosa
} else
return -1; //retornamos código de error
}
boolean esClave(String pClave){
if (pClave.equalsIgnoreCase(this.clave))
return true;
else
return false;
}
boolean esDni(String pDni){
if (pDni.equalsIgnoreCase(this.dni))
return true;
else
return false;
}
public String getClave() {
return clave;
}
public void setClave(String clave) {
this.clave = clave;
}
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public float getMonto_transaccion() {
return monto_transaccion;
}
public void setMonto_transaccion(float monto_transaccion) {
this.monto_transaccion = monto_transaccion;
}
public short getMonto_maximo() {
return monto_maximo;
}
public void setMonto_maximo(short monto_maximo) {
this.monto_maximo = monto_maximo;
}
public float getSaldo() {
return saldo;
}
public void setSaldo(float saldo) {
this.saldo = saldo;
}

import java.io.*;

public class Cajero1_principal {


public static void main (String [] args){

try{

Cajero1 ocaj1 = new Cajero1();

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

System.out.print("Ingrese Clave : ");

if (ocaj1.esClave(br.readLine())){

System.out.println("Ingrese la clave");

if (ocaj1.esDni(br.readLine()))

System.out.println("Ingrese el monto a retirar");

ocaj1.setMonto_transaccion(Float.parseFloat(br.readLine()));

if (ocaj1.retirar()!=1) System.out.println("Error en el retiro");

else

System.out.println("DNI incorrecto");

else

System.out.println("Clave Incorrecta");

} catch(IOException ex){

System.out.println("Error de entrada y salida" + ex.getMessage());

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.

public class Nota {

private byte nota;

private short suma_nota;

private byte peso;

private float promedio;

private byte numero_de_notas;

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++;

public byte getNota() {

return nota;

public void setNota(byte nota) {

this.nota = nota;

public short getSuma_nota() {

return suma_nota;

public void setSuma_nota(short suma_nota) {

this.suma_nota = suma_nota;

public byte getPeso() {

return peso;

public void setPeso(byte peso) {

this.peso = peso;

}
public float getPromedio() {

return promedio;

public void setPromedio(float promedio) {

this.promedio = promedio;

public byte getNumero_de_notas() {

return numero_de_notas;

public void setNumero_de_notas(byte 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.

public class Numero {

static boolean es_positivo(int pnum){

return (pnum>0);

static boolean es_par(int pnum){

return ((pnum%2==0?true:false));

}
Sesión 10 Ejercicios de Estructuras Repetitivas - Para

Hacer un programa que sume los primeros 1000 números impares

Suma=0;

Para i=1 hasta 1000 hacer

Si i es impar entonces suma+=i;

Fin para

Mostrar suma;

Class Mostrar_impares{

static long suma;

static void sumar_impares(){

for (short i=1 ; i<=1000;i++)

if (i%2!=0) suma+=I;

}
class mostrar_impares_principal{

Public static void main(String [] args){


Mostrar_impares.sumar_impares();
System.out.println(Mostrar_impares.suma);
}
}

Hacer un programa que ingrese los sueldos de 234 trabajadores y calcules el promedio de
sueldo.

Promedio=0;

Constante max_trabajador;

Para i=1 hasta max_trabajador hacer

Leer sueldo

Total_sueldo+=sueldo; // incrementar el sueldo

Fin para

Promedio=total_sueldo/max_trabajador;
public class Trabajador {

private String nombre="";

static float total_sueldo=0.0f;

private float sueldo=0.0f;

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 {

public static void main(String [] args){


final short numTrabajadores=234;
try {

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader (isr);

for (short i =1 ; i<= numTrabajadores ; i++){

Trabajador otrab = new Trabajador();

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){

System.out.println("Error en programa principal " + ex.getMessage());

}
}}
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.

Dados N valores de Y, diseñe y codifique un programa para calcular el resultado de la siguiente


función:

3*Y + 36 Si 0 < Y <=11


Y4 – 10 Si 11 < Y <=33
Y15 + Y10 - 1 Si 33 < Y <=64
0 Si para cualquier otro valor de Y

Sesión 11 Arreglos Unidimensionales

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};

Asignación de valores a un Arreglo

La asignación de valores a un arreglo es de acuerdo al índice y considerando la longitud del


mismo. Por ejemplo vamos a inicializar diferentes tipos de arreglos:

boolean [] lista_booleanos = new boolean[20]; // boolean lista_booleanos [] = new boolean[20];

for(byte i =0; i<=19; i++) lista_booleanos[i] =true;

for(byte i =0; i<lista_booleanos.length; i++) lista_booleanos[i] =true;

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];

for(short indice=0; indice<400; indice++) lista_enteros[indice]= 3;

for(short indice=0; indice<lista_enteros.length ; indice++) lista_enteros[indice]= 3;

lista_enteros[345] =13; // asignamos al componente 346 el valor 13

Recuperación de elementos de un arreglo

tenemos el siguiente arreglo de temperaturas en ºC debemos convertirlo a ºF:

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(byte índice=0; índice<lista_temperaturas.length; índice++) {


tcenti =lista_temperaturas[indice]; // recuperamos el elemento ubicado en indice
tfah = tcenti *9 /5 +32;
lista_temperaturas[indice]=tfah; // asignamos el nuevo valor convertido a grados
}

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[][] C = new int[n][l];

int i,j,k,suma;

for(i = 0; i < n; i++)

for(j = 0; j< l; j++)

for(k = 0, suma = 0; k < m; k++)

suma = suma + A[i][k] * B[k][j];

C[i][j]= suma;

for(i = 0; i < n; i++)

for(j = 0; j < l; j++)

{
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:

char[][][] A = new char[2][3][6];

Aquí hemos creado 2 × 3 × 6 elementos de tipo char.

int[][][][] B = new int[2][2][2][2];

Aquí hemos creado 2 × 2 × 2 × 2 elementos de tipo int.


SESIÓN13 ARREGLOS DE OBJETOS

Suponga que tenemos la siguiente simple clase para representar cursos.


class Curso
{
private String sigla;
private int creditos;

public Curso(String sig, int cred)


{
sigla = sig;
creditos = cred;
}

public int Creditos(){ return creditos; }

public String Sigla(){ return sigla;}

Supongamos queremos tener una clase Alumno a la que podamos asignarle varios objetos de
tipo Curso.

La clase Alumno debería contener un arreglo de objetos Cursos.

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:

Curso[] cursos = new Curso[5];


Ahora podríamos a cada curso[i] asignarle un objeto de tipo curso, ya sea uno previamente
creado, o uno nuevo

Curso c1 = new Curso("ing1310", 10);


cursos[0] = c1;
cursos[2] = c1;
cursos[1] = new Curso("ing1320", 15);

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.

Siguiendo el ejemplo anterior, qué imprime este trozo de código?


System.out.println(cursos[2].Creditos());
System.out.println(cursos[1].Creditos());
System.out.println(cursos[0].Creditos());

Ahora podriamos tener una clase Alumno como la siguiente:

class Alumno
{
String nombre;
private Curso[] cursos;
private int cantidadCursos;
private int maximaCantidadCursos;

public Alumno(String nom)


{
nombre = nom;
cantidadCursos = 0;
maximaCantidadCursos = 6;
cursos = new Curso[maximaCantidadCursos];
}
....
}
Donde maximaCantidadCursos indica la máxima cantidad permitida de cursos que puede tener
asignado un alumno, y cantidadCursos representa la cantidad de cursos que actualmente tiene
asignado el alumno.

Ejercicio: complete la clase Alumno con los siguientes métodos:

public boolean TieneCurso(Curso c) que entrega true si el alumno ya tiene asignado un


curso en particular, y false en otro caso.

public void AsignaCurso(Curso c) para asignar un nuevo curso al alumno.

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.

public void EliminaCurso(Curso c) para eliminar un curso particular, previamente


asignado al alumno (este método es difícil porque se debe mantener la consistencia
interior del objeto).

ANEXO A Editar el programa en NetBeans


Creamos un nuevo proyecto, opción Archivo / Proyecto Nuevo

Seleccionamos categorías: Java y luego Aplicación Java en Proyectos

Creamos nuestro primero proyecto como Laboratorio1


Crear la clase principal y
también configurar como
proyecto principal, para que se
ejecute por defecto el
laboratorio que estamos
trabajando actualmente
Puedes ver en el explorador de proyectos
debe aparecer toda la estructura creada,
para el proyecto Laboratorio1 y además el
primer archivo .java, donde estará el
programa principal.

Luego a la derecha del explorador está el


editor del código fuente en donde
escribiremos nuestros programas.

You might also like