Anda di halaman 1dari 208

# - PROGRAMACIN I Primer Ao

Carrera: Carrera:

## Tecnicatura en Tcnico en Telecomunicaciones Telecomunicaciones

Ing. Eduardo Mansilla

-2-

Programacin I Telecomunicaciones

Indice General
INDICE GENERAL________________________________________________ 3 CLASE NMERO: 1 ______________________________________________ 7 INTRODUCCIN DE LA MATERIA _______________________________________ 7 CONCEPTOS PRINCIPALES ___________________________________________ 8 SMBOLOS NORMALIZADOS EN LA DIAGRAMACIN _______________________ 8 VENTAJAS DE UN DIAGRAMA DE FLUJO _________________________________ 9 Programa: _____________________________________________________ 9 Algoritmo: _____________________________________________________ 9 Variable: ______________________________________________________ 9 TIPOS DE VARIABLES ______________________________________________ 11 Tipo char _____________________________________________________ 11 Tipo int_______________________________________________________ 11 Tipo float _____________________________________________________ 11 Tipo String ____________________________________________________ 12 OPERADORES ARITMTICOS_________________________________________ 12 ESTRUCTURAS SECUENCIALES _______________________________________ 12 EJERCICIOS PROPUESTOS ______________________________________ 20 CLASE NMERO: 2 _____________________________________________ 21 ESTRUCTURAS CONDICIONALES _____________________________________ 21 OPERADORES RELACIONALES _______________________________________ 22 Estructura Condional Compuesta __________________________________ 25 Operador %_________________________________________________ 27 OPERADORES LGICOS ____________________________________________ 29 Tipo boolean ________________________________________________ 29 Utilizacin de los operadores lgicos _______________________________ 29 EJERCICIOS PROPUESTOS ______________________________________ 33 CLASE NMERO: 3 _____________________________________________ 35 ESTRUCTURA CONDICIONAL ANIDADA ________________________________ 35 ACTIVIDADES ____________________________________________________ 41 INSTRUCCIN SWITCH - CASE _______________________________________ 45 Comentarios___________________________________________________ 49 Comentarios de varias lneas _____________________________________ 49 EJERCICIOS PROPUESTOS ______________________________________ 51 CLASE NMERO: 4 _____________________________________________ 53 ESTRUCTURA REPETITIVA __________________________________________ 53 ESTRUCTURA WHILE ______________________________________________ 53 Contadores____________________________________________________ 54 Acumulador ___________________________________________________ 57 Impresin de series matemticas___________________________________ 61 Programacin I Telecomunicaciones -3-

ACTIVIDADES ___________________________________________________ 62 Ingreso de valores hasta que se digite una clave ______________________ 67 EJERCICIOS PROPUESTOS______________________________________ 70 CLASE NMERO: 5_____________________________________________ 71 ESTRUCTURA FOR ________________________________________________ 71 ACTIVIDADES ___________________________________________________ 80 Bsqueda del mayor de una serie de nmeros ingresados. ______________ 82 EJERCICIOS PROPUESTOS______________________________________ 85 CLASE NMERO: 6_____________________________________________ 87 ESTRUCTURA DO..WHILE __________________________________________ Concepto De Bandera __________________________________________ Posicionamiento del Cursor ______________________________________ Generacin de nmeros aleatorios_________________________________ 87 93 93 96

EJERCICIOS PROPUESTOS______________________________________ 99 CLASE NMERO: 7____________________________________________ 101 ARRAY _______________________________________________________ Introduccin _________________________________________________ Vectores ____________________________________________________ Carga e Impresin de un Vector__________________________________ 101 101 102 102

EJERCICIOS PROPUESTOS_____________________________________ 116 CLASE NMERO: 8____________________________________________ 117 MTODOS EN JAVA ______________________________________________ Introduccin _________________________________________________ CLASES EN JAVA ________________________________________________ ZONAS DE UN PROGRAMA COMPLETO EN JAVA _________________________ MTODO QUE DEVUELVEN O RETORNAN UN VALOR _____________________ Vectores utilizando Mtodos ____________________________________ VECTORES PARALELOS ___________________________________________ 117 117 118 118 122 123 131

EJERCICIOS PROPUESTOS_____________________________________ 135 CLASE NMERO: 9____________________________________________ 137 PROCESOS ALGORTMICOS ________________________________________ MAYOR Y MENOR ELEMENTO DE UN VECTOR _________________________ Funciones bsicas para el manejo de cadenas de caracteres ___________ Busqueda de un elemento en un vector ____________________________ Ordenamiento de Vectores ______________________________________ 137 137 142 143 147

EJERCICIOS PROPUESTOS_____________________________________ 156 CLASE NMERO: 10___________________________________________ 159 ORDENAMIENTO CON VECTORES PARALELOS _________________________ 159 CONSULTAS EN VECTORES PARALELOS ______________________________ 165 -4 Programacin I Telecomunicaciones

EJERCICIOS PROPUESTOS _____________________________________ 172 CLASE NMERO: 11 ___________________________________________ 173 ARREGLOS BIDIMENSIONALES ______________________________________ 173 CARGA E IMPRESIN DE UNA MATRIZ ________________________________ 174 PROCESAMIENTO DE MATRICES _____________________________________ 178 EJERCICIOS PROPUESTOS _____________________________________ 187 CLASE NMERO: 12 ___________________________________________ 189 MATRICES Y VECTORES PARALELOS _________________________________ 189 EJERCICIOS PROPUESTOS _____________________________________ 199 ANEXO ________________________________________________________ 201 CONSTANTES Y MTODOS MATEMTICOS _____________________________ 201 Class Math ___________________________________________________ 201 MODELO DE EXAMEN FINAL _______________________________________ 203

Programacin I Telecomunicaciones

-5-

-6-

Programacin I Telecomunicaciones

## TEMAS: Conceptos Principales. Diagramacin. Programacin. Tipos de Variables. Estructuras Secuenciales.

Clase

Clase Nmero: 1

Introduccin de la materia

## Ing. Eduardo Mansilla

Programacin I Telecomunicaciones

-7-

Conceptos Principales
Se comenzar con dar las definiciones fundamentales para inicializarse en la materia Algoritmos y Estructuras de Datos I.

Diagrama de Flujo: Se define a un Diagrama de Flujo, como una secuencia de pasos, mediante Smbolos, necesarios para la resolucin de un problema planteado. Para realizar el diagrama de una posible solucin de un problema, se utilizan smbolos normalizados, que mediante una distribucin Lgica y Razonable de los mismos, se obtiene una respuesta al problema presentado.
La respuesta obtenida con el desarrollo de un diagrama, no es nica, sino que es una de las numerosas que se pueden obtener. Cada persona tiene una forma de razonar distinta de los dems, por lo tanto, distintas personas pueden llegar a la solucin de un mismo problema de diversas maneras, es decir, que puede haber varias soluciones para un determinado problema.

Smbolo Nombre
Lneas de Flujo

## Accin que realiza

Muestra la Direccin y Sentido del flujo del proceso, conectando cada uno de los smbolos.

## En su interior, se coloca Inicio o Fin del Diagrama

Introduccin de Datos

## Se utiliza para ingresar datos. En su interior, se detalla la variable a ingresar.

Smbolo de Asignacin

Smbolo
-8-

Nombre

## Accin que realiza

Programacin I Telecomunicaciones

Smbolo de impresin

Toma de Decisin

Conector

## Ventajas de un Diagrama de Flujo

Favorecen la comprensin del proceso a travs de mostrarlo como un dibujo. El cerebro humano reconoce fcilmente los dibujos. Un buen diagrama de flujo reemplaza los diagramas varias pginas de texto. Permiten identificar los problemas y las oportunidades de mejora del proceso. Se identifican los pasos redundantes, los conflictos, las responsabilidades, y los puntos de decisin.

Programa:

Se define a un programa, como una secuencia de instrucciones, realizadas en un orden Lgico mediante un lenguaje determinado. Un Lenguaje de Programacin, es un idioma artificial, creado para comunicarse con las computadoras. Existen diversos tipos de Lenguajes de Programacin, cada uno de ellos se adapta para una actividad en particular. En esta materia, se programar en lenguaje Java. preescrito de instrucciones o reglas bien definidas, que permite realizar una actividad mediante pasos sucesivos. Tambin se puede decir que un algoritmo, es el mtodo o la tcnica descripta para desarrollar una determinada tarea o actividad.

Algoritmo: Es un conjunto

Variable: Se define a una variable, como el espacio fsico para albergar un dato.
Los datos pueden ser de diversos tipos y por lo tanto, se debe definir una variable de un determinado tipo, de acuerdo al dato que almacenar.

Programacin I Telecomunicaciones

-9-

Se puede imaginar a una variable como un casillero en el cual se deposita un determinado valor. Toda variable tiene tres parmetros, que son: El nombre de la variable, llamado Identificador, el tipo al que pertenece y el dato almacenado. Ejemplo: Suponer que se quiere definir la variable sueldo. Conceptualmente se tendra lo siguiente:

5800

sueldo

## Variable (Pertenece al tipo numrico)

- 10 -

Programacin I Telecomunicaciones

Tipos de Variables
Tipo char:
(char viene de la palabra charcter). Una variable definida de tipo char, puede almacenar un nico carcter, es decir, puede almacenar cualquier smbolo de los indicados en el teclado. Para definir una variable, debe colocar primero el Tipo y luego el nombre identificador de la misma. Si se necesita definir varias variables del mismo tipo, se pueden colocar todas separadas por comas. Al final de cada definicin, se debe colocar un punto y coma, es la forma en que Java identifica que termina una instruccin. Ocupa 2 bytes de memoria. Ejemplo: char letra, digito, sexo; Para asignar un dato a una variable definida de tipo char, se lo debe colocar entre apstrofes (Comillas Simples). letra = L ; digito = 7 ; sexo = M ;

Tipo int:

(int viene de la palabra integer). Una variable definida de este tipo, puede almacenar un nmero entero en el rango de [-2147483648.. 2147483647]. Ocupa 4 bytes de memoria. Ejemplo: int legajo, cantidad, codigo, dia ; legajo = 5832 ; cantidad = 16 ; codigo = 24 ; dia = 12 ;

Tipo float:

(float significa flotante). Una variable definida de tipo float, puede almacenar un nmero con punto decimal flotante en el rango de: [ 1.40239846 x 1045f a 3.40282347 x 1038f]. Ocupa 4 bytes de memoria. Ejemplo: float sueldo, precio, altura, distancia, ancho ; sueldo = 5436.44f ; precio = 35.50f ; altura = 1.67f ; Nota: La letra f al final de cada valor, es obligatorio colocarla para indicar a Java que el dato asignado a la variable es de tipo float.

Programacin I Telecomunicaciones

- 11 -

Tipo String: (String significa tira o hilera de caracteres). Una variable definida
de tipo String, permite almacenar una palabra, frase o texto. Ejemplo: String apellido, nombre, direccion, frase; apellido = Rodrguez ; nombre = Alberto ; direccion = 9 de Julio 1653 ; frase = Hoy es un da soleado ; Observar que para asignar un dato a una variable String, se debe hacerlo entre comillas. Nota: Existen mucho mas tipos de variables, pero sern vistos mas adelante.

## Operacin Aritmtica Suma Resta Multiplicacin Divisin Resto de Divisin

Estructuras Secuenciales
A partir de aqu, comenzaremos a realizar ejemplos de aplicacin de Diagramas de Flujo y posteriormente su traduccin a lenguaje Java. Ejemplo Nro. 1 : Calcular el importe que deber abonar una persona ingresando el Precio unitario de un artculo y la cantidad que se quiere comprar. Para la solucin, se deben pensar en las variables a utilizar en el diagrama, en este caso, se tienen dos variables de ingreso, que son el precio y la cantidad, y una variable de salida, que sera el importe que se debe abonar. La solucin sera la siguiente:

- 12 -

Programacin I Telecomunicaciones

Inicio

importe

Fin

## Fin del Diagrama

El diagrama de flujo, nos da una idea del orden de ejecucin de las actividades en el tiempo. Primero se introducen los datos de entrada, luego se realizan las operaciones necesarias y por ltimo se muestran los resultados. Ejemplo Nro. 2 : Hallar la superficie de un cuadrado conociendo el valor de uno de sus lados.

Inicio En este caso, se ingresa el valor de un lado del cuadrado, mediante el smbolo de Introduccin de Datos (paralelogramo), luego se calcula la superficie como el producto de lado por lado, en el smbolo rectngulo, y por ltimo se imprime el resultado de la superficie.

superficie

Fin

Programacin I Telecomunicaciones

- 13 -

Se proceder ahora a realizar la codificacin de los ejercicios desarrollados anteriormente, es decir, traducir los smbolos de los diagramas en instrucciones en lenguaje Java, para ello, se debe haber instalado el software necesario, que en nuestro caso, es el Ready to Program.

Para la instalacin de esta aplicacin se deber seguir los siguientes pasos: Localizar el instalador de dicha aplicacin, por lo general suele venir acompaando en el Cd de estudio. Tambin se puede conseguir en sitios de descarga o bien conseguirlo a travs del campus o ayudantes del laboratorio.

Para instalarlo, se puede ejecutar el instalador desde el cd o bien copiar los archivos y directorios a una unidad local (C:\ o D:\) Una vez instalado, y ejecutado el programa, se mostrar una pantalla como la siguiente:

All se puede comenzar a tipear las instrucciones para que Java las interprete, - 14 Programacin I Telecomunicaciones

tener en cuenta que a cada smbolo del diagrama, le corresponde una instruccin en Java. Por ejemplo:

Inicio

precio

Esta asignacin se coloca como est

## importe = precio * cantidad

importe

c.println (importe);

Fin

El programa debe comenzar con una llave, que indica el inicio de la actividad, luego se debe pedir el precio, para ello se utiliza la instruccin c.readFloat(), que significa: leer un valor con punto decimal flotante y almacenarlo en la variable precio, posteriormente, se ingresa la cantidad con la instruccin c.readInt(), que significa: leer un valor entero, y almacenarlo en la variable cantidad. La asignacin del clculo del importe, se coloca en el programa exactamente igual como est en el diagrama, y por ltimo, para mostrar el resultado obtenido, se utiliza la instruccin c.println(), con la variable que se quiere mostrar dentro de los parntesis. Para finalizar el programa, se coloca otra llave, pero observar, que esta es de cierre, mientras que la inicial es de apertura. Para comenzar a tipear el programa, se debe previamente indicarle a Java con que paquete de librerias se va a trabajar, esto se consigue con la instruccin: import hsa.Console; que le indica a Java que importe la librera de clases hsa.Console. Esta librera contiene las funciones y mtodos apropiados de Entrada y Salida. Se debe tener en cuenta adems, que en Java, todo programa es una clase y por lo tanto debe llevar un nombre que debe comenzar en Maysculas y es precisamente con ese nombre como debe ser grabado en el disco.

Programacin I Telecomunicaciones

- 15 -

## El programa una vez tipeado y grabado, quedar de la siguiente forma:

En este caso, a la clase se le di el nombre de Ejemplo1. La instruccin: static Console c ; se realiza para poder utilizar los mtodos de Entrada y Salida (readInt, readFloat, println) con el objeto c, mas adelante, se explicar en mayor medida esta lnea. La lnea: public static void main(String arg[]) es la cabecera del programa principal. Todos los programas que realicemos por el momento comenzarn de la misma forma. El inicio del programa empieza definiendo las variables a utilizar, en este caso, las variables precio e importe son definidas de tipo float y la cantidad de tipo int. Se define la variable como un objeto de la Console, por lo tanto, estar capacitada para acceder a los mtodos de entrada y salida. La lnea: c.print (ingrese Precio: ); no figura en el diagrama, pero es necesario colocarla para que la computadora, antes de detenerse pidiendo un dato con la lnea: precio - 16 = c.readFloat();

Programacin I Telecomunicaciones

muestre la leyenda correspondiente para ingresar el precio. Las dems lneas, continan secuencialmente, de acuerdo con el diagrama de flujo. La instruccin: println();

En caso de haber errores en las lneas tipeadas, el programa no se ejecutar, y se mostrar ms reasaltada la lnea en la cual se detect el error, indicndose el tipo de error en la parte inferior de la ventana. Codificacin del ejemplo nmero 2: Hallar la superficie de un cuadrado conociendo el valor de uno de sus lados. Inicio lado superficie = lado * lado { lado = c.readFloat();

superficie

## c.println(La superficie es: + superficie);

Fin

} Programacin I Telecomunicaciones - 17 -

Ejemplo Nro. 3 : Ingresar tres nombres con sus respectivas altura determinar e imprimir, la altura promedio.

Inicio

n1, a1

n2, a2

En el smbolo de introduccin de datos, se pueden colocar ms de una variable, pero se debe tener en cuenta que por cada variable, se debe tener una instruccin read en el programa. En este caso ser:

## n3, a3 n1 = c.readLine(); a1 = c.readInt(); promedio = (a1 + a2 + a3) / 3

promedio

Nota: para pedir in dato de tipo String, se utilizar la instruccin c.readLine(), que significa leer una linea.

Fin

- 18 -

Programacin I Telecomunicaciones

El programa del ejemplo 3, sera el siguiente: import hsa.Console; class Ejemplo3 { static Console c; public static void main(String arg[]) { String n1, n2, n3; float a1, a2, a3; float promedio; c = new Console(); c.print("Ingrese primer nombre: "); n1 = c.readLine(); c.print("Ingrese su altura: "); a1 = c.readFloat(); c.print("Ingrese segundo nombre: "); n2 = c.readLine(); c.print("Ingrese su altura: "); a2 = c.readFloat(); c.print("Ingrese tercer nombre: "); n3 = c.readLine(); c.print("Ingrese su altura: "); a3 = c.readFloat(); promedio = (a1 + a2 + a3)/3; c.println(); c.println("La altura promedio es: " + promedio); } }

Programacin I Telecomunicaciones

- 19 -

Ejercicios Propuestos
1.1 Calcular el sueldo mensual de un operario conociendo la cantidad de horas trabajadas y el valor por hora. 1.2 Realizar el ingreso de dos nmeros por teclado e imprimir su suma y su producto. 1.3 Ingresar la base y la altura de un tringulo, imprimir posteriormente la superficie del mismo. (Recordar que la superficie de un triangulo es base por altura sobre 2). La frmula sera: superficie = b * h / 2 ; 1.4 Ingresar el nombre de un artculo con su respectivo precio. Imprimir el importe a pagar si recibe un descuento del 12 % por abonarlo de contado.

- 20 -

Programacin I Telecomunicaciones

## TEMAS: Estructuras condicionales Operadores relacionales. Condicional Simple y compuesta.

Clase

Clase Nmero: 2

Estructuras Condicionales
En algunos casos, se pueden presentar condiciones que influyen sobre la secuencia de pasos a seguir para resolver un problema. Segn se cumplan o no determinadas condiciones, la secuencia de pasos a seguir puede continuar por caminos diferentes. En este caso, estamos frente a Estructuras Condicionales, que son las que determinan cual ser el camino a seguir, de acuerdo a una determinada condicin. En diagramacin, la estructura condicional se representa con un rombo de la siguiente manera:

Falso Condicin

## Sentencia 1; Sentencia 2; : Sentencia n;

Se puede observar que la estructura tiene una entrada y dos salidas, por el Falso y por el Verdadero. Si la condicin en su interior resulta verdadera, el programa continuar ejecutando las sentencias 1, 2, n. Por el contrario, si la condicin resulta Falsa, no se ejecutan dichas sentencias.

Se debe tener en cuenta que luego de procesar el bloque de sentencias del lado Verdadero, el camino en el diagrama se junta con el Falso y contina por una sola trayectoria.

Programacin I Telecomunicaciones

- 21 -

Esta fraccin de diagrama realizada anteriormente, recibe el nombre de Estructura Condicional Simple, porque hay actividades a realizar nicamente por el camino del verdadero. En programacin en lenguaje Java, se conoce a la estructura condicional con el nombre de if, que significa s, por lo tanto, se puede leer el diagrama anterior de la siguiente forma: S la condicin resulta verdadera, realizar el bloque de sentencias de la derecha, en caso contrario, no realizar ninguna actividad . Traducido a lenguaje Java, las instrucciones quedaran como: if (Condicin) { Sentencia 1; Sentencia 2; Sentencia n; }

El contenido de una variable puede ser igual, mayor o menor que el contenido de otra variable. Para ello, se utilizan unos smbolos llamados Operadores Relacionales. Estos operadores son los mismos que se utilizan en matemtica, pero con alguna diferencia en su escritura. A continuacin, se describen los operadores relacionales en matemtica, y su escritura en lenguaje Java:

Descripcin
Igual Mayor Menor Mayor o Igual Menor o Igual Distinto o No Igual

En Matemtica
= > <

En Java
== > < >= <= !=

Ejemplo Nro. 4 : Ingresar el sueldo de un operario e imprimir el sueldo a cobrar teniendo en cuenta que si el valor es mayor a \$5000, realizarle un descuento del 10%.

- 22 -

Programacin I Telecomunicaciones

Inicio

sueldo

descuento = 0

## sueldoACobrar = sueldo descuento

sueldoACobrar

Fin import hsa.Console; class Ejemplo4 { static Console c; public static void main(String arg[]) { float sueldo, descuento, sueldoACobrar; c = new Console(); c.print("Ingrese Sueldo: "); sueldo = c.readFloat(); descuento = 0.0f; if (sueldo > 5000) { descuento = sueldo * 10 / 100; } sueldoACobrar = sueldo - descuento; c.println(); c.println("El sueldo a cobrar es: " + sueldoACobrar); } }

Programacin I Telecomunicaciones

- 23 -

En este caso, se inicializa la variable descuento en cero, tener en cuenta que para inicializar una variable de tipo float, se le debe colocar la letra f al final del dato, para indicar que es una constante de tipo float, luego, si el sueldo es superior a 5000 se le realiza el clculo del descuento. Por ltimo, se imprime el sueldo a cobrar. Ejemplo Nro. 5 : Ingresar dos valores de longitud de tipo float, y calcular su promedio. Si el promedio es menor a 10 metros, incrementarlo en 2 metros. Por ltimo, imprimir el valor de dicho promedio.

Inicio

valor1

valor2

## Falso promedio < 10

promedio = promedio + 2

promedio

Fin

La nica instruccin nueva en este diagrama es la asignacin: promedio = promedio + 2 esta asignacin indica que a la variable promedio se le asigne el valor que tena promedio anteriomente mas 2. Esto es de la siguente manera, se realiza en primer medida el clculo de la suma (promedio + 2) y al resultado, se lo reasigna nuevamente a la variable promedio. - 24 Programacin I Telecomunicaciones

La codificacin del ejemplo 4 sera: import hsa.Console; class Ejemplo5 { static Console c; public static void main (String arg []) { float valor1, valor2, promedio; c = new Console (); c.print ("Ingrese Primer Valor: "); valor1 = c.readFloat (); c.print ("Ingrese Segundo Valor: "); valor2 = c.readFloat (); promedio = (valor1 + valor2) / 2; if (promedio < 10) { promedio = promedio + 2; } c.println (); c.println ("El resultado es: " + promedio); } }

## Estructura Condional Compuesta

Cuando se presenta la eleccin, se t iene la opcin de realizar una actividad u otra. Es decir que puede haber actividades tanto por el verdadero como por el falso de la condicin. Lo ms importante que hay que tener en cuenta, es que NUNCA se realizan las dos actividades simultneamente, siempre una o la otra. El esquema del diagrama sera el siguiente:

Falso

Condicin

## Actividades a realizar, si la condicin resultara falsa

Programacin I Telecomunicaciones

- 25 -

La codificacin de esta fraccin de diagrama en lenguaje Java seria de la siguiente forma: if ( Condicin ) { Sentencia1 Sentencia2 } else { SentenciaX SentenciaZ }

; ;

## Actividades a realizar si la condicin es falsa

; ;

Si la condicin resultara verdadera, se procesaran las Sentencia1 y la Sentencia2, en caso contrario, se procesaran las SentenciaX y la SentenciaZ. Cada vez que se debe realizar alguna actividad por el lado del falso, se debe colocar la instruccin else en el programa. Ejemplo Nro. 6 : Relizar un programa que permita ingresar dos nmeros distintos y que muestre cual es el mayor de ellos.

Inicio

n1

n2

Falso

n1 > n2

El mayor es: + n2

El mayor es: + n1

Fin

- 26 -

Programacin I Telecomunicaciones

Desarrollo del programa: import hsa.Console; class Ejemplo6 { static Console c; public static void main (String arg []) { int n1, n2; c = new Console (); c.print ("Ingrese Primer numero: "); n1 = c.readInt (); c.print ("Ingrese Segundo numero: "); n2 = c.readInt (); c.println (); if (n1 > n2) { c.println ("El mayor es: " + n1); } else { c.println ("El mayor es: " + n2); } } }

Para saber si un nmero es par o impar, se utiliza el operador devuelve el resto de una divisin, por ejemplo: 4%2=0 7%2=1 16 % 2 = 0 21 % 2 = 1 En estos ejemplos se tiene que: El resto de la divisin del numero 4 con el nmero 2 es igual a cero, lo mismo se puede observar que el resto de cualquier nmero par con el valor 2 es cero.

%, que

Ejemplo Nro. 7 : Desarrollar un programa para determinar si un nmero ingresado por teclado es par o impar.

Se puede realizar una estructura condicional que en su interior tenga la condicin: ( n % 2 == 0 ), en donde la variable n contiene el nmero que se quiere determinar si es par o impar. En este caso, se tendr que si el resultado de la condicin es verdadero, el nmero ser par, de lo contrario, ser impar. En la siguiente pgina, se observa el diagrama de flujo y programa correspondiente.

Programacin I Telecomunicaciones

- 27 -

Inicio

Falso

n % 2 == 0

El nmero es impar

El nmero es par

Fin

import hsa.Console; class Ejemplo7 { static Console c; public static void main (String arg []) { int n; c = new Console (); c.print ("Ingrese un numero: "); n = c.readInt (); c.println (); if (n % 2 == 0) { c.println ("El numero es Par"); } else { c.println ("El numero es Impar"); } } }

- 28 -

Programacin I Telecomunicaciones

Los operadores Lgicos se utilizan cuando se presentan problemas en donde se deben evaluar dos o mas condiciones en una misma estructura. Los operadores Lgico mas utilizados son los siguientes:

## Operador Y (And) O (Or) No (Not)

Nomenclatura && || !

Ejemplos ( sueldo > 4000 && antigedad < 10) ( edad > 21 || dni > 25000000 ) ( ! existe )

Significado de los ejemplos de la tabla anterior: ( sueldo > 4000 && antigedad < 10): Indica que la condicin ser verdadera si se verifican que las dos condiciones son verdaderas, esto es lo que especifica el smbolo &&. ( edad > 21 || dni > 25000000 ): En este caso, verificndose una de las dos condiciones como verdadera, edad>21 dni>25000000, toda la condicin ser verdadera. ( ! existe ) : Esta Condicin contiene un tipo de variable particular: el tipo boolean

Tipo boolean
Una variable definida de tipo boolean, puede contener nicamente las constantes true o false, es decir, puede ser verdadera o falsa. En el ejemplo anterior, en la instruccin (!existe), el signo de admiracin niega o invierte todo lo que est a la derecha del mismo, por lo tanto, si la variable existe contiene true, la lnea (!existe) quedar como false, y viceversa.

## Utilizacin de los operadores lgicos

Ejemplo Nro. 8 : Desarrollar un programa que permita ingresar el da y el mes de una fecha, y que muestre si corresponde a navidad. En este caso, se deber tener una condicin doble que indique que el da sea 25 y que adems, el mes corresponda a diciembre (12). El diagrama y programa correspondiente, puede observarse en la prxima pgina.

Programacin I Telecomunicaciones

- 29 -

Inicio

dia

mes

Falso

## dia == 25 && mes == 12

Fin

import hsa.Console; class Ejemplo8 { static Console c; public static void main (String arg []) { int dia, mes; c = new Console (); c.print ("Ingrese dia: "); dia = c.readInt (); c.print ("Ingrese mes: "); mes = c.readInt (); c.println (); if (dia == 25 && mes == 12) { c.println ("La Fecha corresponde a Navidad"); } else { c.println ("La Fecha no corresponde a Navidad"); } } }

- 30 -

Programacin I Telecomunicaciones

Ejemplo Nro. 9 : Elaborar un algoritmo que me muestre la edad de una persona: si es menor que 12 aos mostrar nio, si est entre 12 y 21 (ambos inclusive) mostrar joven, si es mayor que 21, mostrar adulto.

Inicio

Falso

Nio

Falso

Joven

Falso

Fin

Programacin I Telecomunicaciones

- 31 -

## El programa quedara resuelto de la siguiente forma:

import hsa.Console; class Ejemplo9 { static Console c; public static void main (String arg []) { int edad; c = new Console (); c.print ("Ingrese la edad: "); edad = c.readInt (); c.println (); if (edad < 12) { c.println ("Es un Nio"); } if (edad >= 12 && edad <= 21 ) { c.println ("Es un Joven"); } if (edad > 21) { c.println ("Es un Adulto"); } } }

- 32 -

Programacin I Telecomunicaciones

Ejercicios Propuestos

a) Si la altura es menor a 1.60, es una persona baja. b) Si la altura est comprendida entre 1.60 y 1.75 (ambos inclusive), es una persona Normal. c) Si la altura supera a la medida de 1.75, es una persona Alta.

2.10 Ingresar una letra, y determinar si es una vocal o una consonante. Nota: para poder ingresar una letra, la variable debe ser definida de tipo char, y para pedir el dato, se lo debe realizar con la instruccin c.readChar().

## Solucin del ejercicio 2.10

import hsa.Console; class PropuestoDos10 { static Console c; public static void main (String arg []) { char letra; c = new Console (); c.print ("Ingrese una Letra: "); letra = c.readChar (); c.println (); if (letra=='a' || letra=='A' || letra=='e' || letra=='E' || letra=='i' || letra=='I' || letra=='o' || letra=='O' || letra=='u' || letra=='U' ) { c.println ("Es una vocal"); } else { c.println ("Es una consonante"); } } } Observar que las variables de tipo char, se preguntan con el carcter entre apstrofes y no entre comillas.

- 34 -

Programacin I Telecomunicaciones

## TEMAS: Estructura condicional anidada. Instruccin Switch-Case

Clase

Clase Nmero: 3

Se dice que una estructura condicional es anidada cuando por la rama del verdadero o el falso de una estructura condicional hay otra estructura condicional. Ejemplo Nro. 10 : Ingresar un nmero y determinar si es positivo, negativo o nulo. Para saber si un nmero es positivo, simplemente se lo debe comparar con el cero, si el nmero en cuestin es mayor a cero, ser positivo y si es menor a cero ser negativo. Si no cumple con ninguna de las condiciones anteriores, ser nulo.

Inicio

numero

Falso

numero > 0

## Nmero Positivo Falso Numero < 0 Verdadero

Nmero Nulo

Nmero Negativo

Fin

Programacin I Telecomunicaciones

- 35 -

import hsa.Console; class Ejemplo10 { static Console c; public static void main (String arg []) { int numero; c = new Console (); c.print ("Ingrese un numero: "); numero = c.readInt (); c.println (); if (numero > 0) { c.println ("El numero es Positivo"); } else if (numero < 0) { c.println ("El numero es Negativo"); } else { c.println ("El numero es Nulo"); } } }

Ejemplo Nro. 11 : Realizar un programa que lea por teclado tres notas de un alumno, y calcule el promedio, imprimiendo algunos de los siguientes mensajes: Si el promedio es mayor o igual a 7, mostrar Alumno Promocionado. Si el promedio es mayor o igual a 4 y adems, menor a 7, mostrar Alumno Regular. Si el promedio es menor a 4, mostrar Alumno Reprobado.

- 36 -

Programacin I Telecomunicaciones

Inicio

## prom = (nota1 + nota2 + nota3) / 3

Falso

prom >= 7

prom >= 4

Regular

Fin

En este ejemplo, se ingresan tres valores por teclado que representan las notas de un alumno y se obtiene el promedio sumando los tres valores y dividiendo por 3 dicho resultado. Primeramente se pregunta si el promedio es superior o igual a 7, en caso afirmativo por la rama del verdadero de la estructura condicional se muestra un mensaje que indique Promocionado (con comillas indicamos un texto que debe imprimirse en pantalla). En caso que la condicin sea Falsa, por la rama del Falso aparece otra estructura condicional, porque todava se tienen dos posibilidades, que el promedio del alumno sea superior o igual a cuatro, o tabin, se puede dar el caso de que sea inferior a cuatro. En la segunda condicin, se averigua si el promedio es mayor o igual a 4, si es verdadero, se imprime Regular y en caso contrario, se imprime Reprobado, ya que por descarte, el promedio es menor a 4. El programa se observa en la pgina siguiente:

Programacin I Telecomunicaciones

- 37 -

import hsa.Console; class Ejemplo11 { static Console c; public static void main (String arg []) { int nota1, nota2, nota3; float prom; c = new Console (); c.print nota1 = c.print nota2 = c.print nota3 = ("Ingrese c.readInt ("Ingrese c.readInt ("Ingrese c.readInt Primer nota: "); (); Segunda nota: "); (); Tercer nota: "); ();

prom = (float)(nota1 + nota2 + nota3) / 3; c.println (); c.println ("El promedio es: " + prom); if (prom >= 7 ) { c.println ("Alumno Promocionado"); } else if (prom >= 4) { c.println ("Alumno Regular"); } else { c.println ("Alumno Reprobado"); } } }

La nica instruccin nueva en este programa es la palabra (float) en la lnea: prom = (float)(nota1 + nota2 + nota3)/3; Esta palabra float encerrada entre parntesis, indica que se debe transformar el valor que figure al lado de ella en un valor de tipo float, debido a lo siguiente: Cada una de las notas son de tipo entero (int), y la suma de valores enteros en Java es otro entero, adems, la divisin de dos enteros, es tambin otro entero. Por lo tanto, si se ingresaran como ejemplo las notas: 7, 7 y 8 el promedio dara como resultado el valor de 7 (sin decimales) y no de 7.33, que sera lo correcto. Por este motivo, es que se coloca la palabra float delante de la suma de las notas, para transformar dicha suma en un valor de tipo float, y , al dividir un valor float con un entero, el resultado es un float, por lo tanto, ahora s dar el valor del promedio correcto con decimales.

- 38 -

Programacin I Telecomunicaciones

Inicio

n1

n2

n3

Falso

## El Mayor es: + n1 Falso n2 > n3 Verdadero

El Mayor es: + n3

El Mayor es: + n2

Fin

La lgica de este proceso sera la siguiente: Luego de ingresar los tres valores, se comienza preguntando se el primer nmero es mayor a los otros dos, esto se logra con una condicin doble utilizando el operador lgico and (&&). La condicin se lee de esta manera: Si el valor almacenado en n1 es mayor al valor almacenado en n2, y adems, el valor almacenado en la variable n1 es mayor al valor almacenado en la variable n3, entonces imprimir El Mayor es : n1, de lo contrario, (descartado que el valor de n1 es el mayor), se pregunta si el valor almacenado en n2 es mayor al valor almacenado en n3, que en caso de ser verdadero, se muestra que el Mayor es: n2 , de lo contrario se muestra El mayor es: n3. Programacin I Telecomunicaciones - 39 -

import hsa.Console; class Ejemplo12 { static Console c; public static void main (String arg []) { int n1, n2, n3; c = new Console (); c.print ("Ingrese Primer Numero: "); n1 = c.readInt (); c.print ("Ingrese Segundo Numero: "); n2 = c.readInt (); c.print ("Ingrese Tercer Numero: "); n3 = c.readInt (); c.println (); if (n1 > n2 && n1 > n3) { c.println ("El Mayor es: " + n1); } else if (n2 > n3) { c.println ("El Mayor es: " + n2); } else { c.println ("El Mayor es: " + n3); } } }

Se debe tener en cuenta que en la condicin doble: if (n1 > n2 && n1 > n3) Se deben cumplir obligatoriamente las dos condiciones independientes para que toda la condicin resulte verdadera (True en ingls). Esto es indicado por el signo and (&&). Si alguna de las dos no se cumple, toda la condicin resultar falsa (False en ingls).

- 40 -

Programacin I Telecomunicaciones

Es de fundamental importancia realizar los diagramas de flujo y la posterior codificacin en Java, de los siguientes problemas: 3.1 Se deben ingresar tres valores por teclado, si todos son iguales imprimir la suma del primero con el segundo y a este resultado multiplicarlo por el tercero. Si no son iguales, mostrar una Leyenda. 3.2 Escribir un programa que pida ingresar las coordenadas de un punto en el plano, es decir dos valores enteros x e y. Posteriormente imprimir en pantalla en que cuadrante se ubica dicho punto.

, , , ,

## y>0 y>0 y<0 y<0

x

3.3 De un postulante a un empleo, que realiz un test de capacitacin, se obtuvo la siguiente informacin: nombre del postulante, cantidad total de preguntas que se le realizaron y la cantidad de preguntas que contest correctamente. Se pide confeccionar un programa que lea los datos del postulante e informe el nivel del mismo segn el porcentaje de respuestas correctas que ha obtenido, sabiendo que:
Nivel superior: Nivel medio: Nivel regular: Fuera de nivel: Porcentaje>=90%. Porcentaje>=75% y <90%. Porcentaje>=50% y <75%. Porcentaje<50%.

3.4 Ingresar un valor de frecuencia e indicar a que banda corresponde, segn la siguiente clasificacin en telecomunicaciones:
BANDA ULF ELF ILF VLF LF MF HF VHF UHF SHF EHF SUBDIVISIN DE FRECUENCIA Frecuencia ultra baja Frecuencia extremadamente baja Frecuencia infra baja Frecuencia muy baja Frecuencia baja Frecuencia media Frecuencia alta Frecuencia muy alta Frecuencia ultra alta Frecuencia super alta Frecuencia extremadamente alta RANGO DE FRECUENCIA 3 a 30 Hz 30 a 300 Hz 300 Hz a 3 Khz 3 a 30 Khz 30 a 300 Khz 300 Khz a 3 Mhz 3 a 30 Mhz 30 a 300 Mhz 300 Mhz a 3 Ghz 3 a 30 Ghz 30 a 300 Ghz

Programacin I Telecomunicaciones

- 41 -

A continuacin se muestran los diagramas de las actividades, quedando el programa para realizar por el alumno. Actividad 3.1

Inicio

valor1

valor2

valor3

Falso

## Los tres valores no son iguales La solucion es: + multi

Fin

- 42 -

Programacin I Telecomunicaciones

Inicio

Falso

Falso

## x > 0 && y > 0

Fin

Programacin I Telecomunicaciones

- 43 -

Inicio Nota: La variable nombre, debe ser definida de tipo String, y para pedir un nombre, se lo debe hacer con la instruccin readLine(), de la siguiente manera: String nombre; c.print(Ingrese nombre); nombre = c.readLine();

nombre

total

correctas

Falso

por >= 90

## Nivel Superior Falso por >= 75 Verdadero

Falso

por >= 50

Nivel Medio

Fuera de Nivel

Nivel Regular

Fin

- 44 -

Programacin I Telecomunicaciones

La Actividad 3.4, es muy similar a la actividad 3.3. Queda como tarea a desarrollar por el alumno, el diagrama y programa.

## Instruccin Switch - Case

La instruccin switch() es una instruccin de decisin mltiple, donde el compilador prueba o busca el valor contenido en una variable con una lista de constantes ints o chars, cuando el computador encuentra el valor de igualdad entre variable y constante, entonces ejecuta el grupo de instrucciones asociados a dicha constante, si no encuentra el valor de igualdad entre variable y constante, entonces ejecuta un grupo de instrucciones asociados a la instruccin default, aunque esta ltima instruccin es opcional. Existen numerosas simbologias sobre la instraccin switch para realizar un diagrama de flujo, pero la ms utilizada es la siguiente:

variable

Caso 1

Caso 2

Caso 3

Caso 4

fin

Programacin I Telecomunicaciones

- 45 -

Inicio

mes

mes

Caso 1

Enero

Caso 2

Febrero

Caso 11

Noviembre

Caso 12

Diciembre

No es Vlido

fin

fin

## Fin del programa

- 46 -

Programacin I Telecomunicaciones

import hsa.Console; class Ejemplo13 { static Console c; public static void main (String arg []) { int mes; c = new Console (); c.print ("Ingrese un Numero: "); mes = c.readInt (); switch (mes) { case 1: c.println break; case 2: c.println break; case 3: c.println break; case 4: c.println break; case 5: c.println break; case 6: c.println break; case 7: c.println break; case 8: c.println break; case 9: c.println break; case 10: c.println break; case 11: c.println break; case 12: c.println break; default: c.println break; } } } Explicacin: El programa comienza con la introduccin del nmero y luego se ingresa a la estructura de la instruccin switch.Esta instruccin es muy facil de seguirla, es este caso, si el mes es 1 se imprime la leyenda Corresponde a Enero, si el mes es 2, se imprime la leyenda Corresponde a Febrero y as sucesivamente. Observar que al finalizar cada lnea, se coloca una sentencia break. El uso del break en un switch es critico ya que si no se coloca, se continan evaluando los distintos valores restantes, e ingresando en cada una de las alternativas. Al final, se puede colocar la instruccin default, que es opcional, indicando que no corresponde a ninguna de las alternativas anteriores.

("Corresponde a Enero"); ("Corresponde a Febrero"); ("Corresponde a Marzo"); ("Corresponde a Abril"); ("Corresponde a Mayo"); ("Corresponde a Junio"); ("Corresponde a Julio"); ("Corresponde a Agosto"); ("Corresponde a Septiembre"); ("Corresponde a Octubre"); ("Corresponde a Noviembre"); ("Corresponde a Diciembre"); ("No Corresponde a un mes valido");

Programacin I Telecomunicaciones

- 47 -

Ejemplo Nro. 14: Determinar el sueldo que se deber abonar a un empleado, teniendo en cuenta que se le debe realizar un incremento, de acuerdo a la categora que pertenece. Se debe ingresar el sueldo basico y la categora. Inicio

sb

categoria

Categora 1 2 3 4

## Incremento 20% 15% 10% 5%

categoria

categoria = 1

incremento = sb * 20 / 100

categoria = 2

incremento = sb * 15 / 100

categoria = 1

incremento = sb * 10 / 100

categoria = 1

incremento = sb * 5 / 100

incremento = 0

## Fin del switch

sueldo = sb + incremento

sueldo

Fin

- 48 -

Programacin I Telecomunicaciones

import hsa.Console; class Ejemplo14 { static Console c; public static void main (String arg []) { float sb; // Sueldo Basico float incremento, sueldo; int categoria; c = new Console (); c.print ("Ingrese Sueldo Basico: "); sb = c.readFloat(); c.print ("Ingrese Categoria: "); categoria = c.readInt (); switch (categoria) { case 1: incremento = sb * 20 /100; break; case 2: incremento = sb * 10 /100; break; case 3: incremento = sb * 15 /100; break; case 4: incremento = sb * 5 /100; break; default : incremento = 0; break; } sueldo = sb + incremento; c.println("El sueldo a cobrar es: " + sueldo); } }

Comentarios
En el programa anterior, se agregaron dos barras inclinadas al lado del la sentencia float sb. Estas dos barras inclinadas se utilizan para colocar comentarios en el programa. Los comentarios no son tenidos en cuenta por el compilador, y pueden colocarse en cualquier lugar del programa. Se utilizan para hacer una determinada acotacin, observacin o nota en el programa. Comentarios de varias lneas: Para colocar un comentario de varias lneas en el programa, se utilizan los smbolos: /* y */ para abrir y cerrar un comentario. Ejemplo: /* Esto es un comentario de tres lineas en el progama desarrollado. */

Programacin I Telecomunicaciones

- 49 -

En algunos casos, se desea realizar una misma actividad para varias alternativas, es este caso, se colocan cada altenaviva sin la sentencia break, y a la ltima alternativa de una determinada actividad, se le coloca el break. Ejemplo Nro. 15: Ingresar una fecha, y determinar cuantos das le corresponden al mes de esa fecha. (Se deber imprimir: 28,29, 30 o 31).

import hsa.Console; class Ejemplo15 { static Console c; public static void main (String arg []) { int dia, mes, anio, cantidad; c = new Console (); c.print ("Ingrese dia: "); dia = c.readInt (); c.print ("Ingrese mes: "); mes = c.readInt (); c.print ("Ingrese anio: "); anio = c.readInt (); cantidad = 0; switch (mes) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: cantidad = 31; break; case 4: case 6: case 9: case 11: cantidad = 30; break; case 2: if ( ((anio%4 == 0) && !(anio%100 == 0)) || (anio % 400 == 0) ) cantidad = 29; else cantidad = 28; break; } c.println(); c.println("Al mes de esa fecha, le coresponden: " + cantidad + " dias"); } }

- 50 -

Programacin I Telecomunicaciones

En este caso, para las alternativas 1, 3, 5, 7, 8, 10 y 12 se le asigna a la variable cantidad el valor de 31, luego, para las alternativas 4, 6, 9 y 11, se le asigna a la variable cantidad el valor de 30. Por ltimo, si la alternativa es 2, se pregunta si el ao es bisiesto, que en caso de ser verdadero, se le asigna a la cantidad el valor de 29, de lo contrario, se le asigna 28. Al final se imprime la variable cantidad.

Ejercicios Propuestos
3.1 Ingresar un nmero de hasta 5 cifras, y determinar cuantos digitos tiene. 3.2 Ingresar los sueldos de 4 empleados, y calcular el promedio de ellos. Se deber imprimir una leyenda que indique si el promedio est por encima o por debajo del Nivel de Pobreza. Este valor de Nivel de Pobreza, tambin deber ser ingresado por teclado. 3.3 Escribir un programa en el cual: dada una lista de tres valores numricos distintos se calcule e informe su rango de variacin (debe mostrar el menor y el mayor de ellos). Ejemplo: Si se introducen los nmeros: 8 , 2 y 5 La impresin debera ser: Rango = [2..8]

3.4 Leer un valor entero. Mostrar el nmero de da que corresponde a ese valor. Suponer que 0 corresponde a domingo, se debe mostrar el nombre del da que le corrresponde. Ejemplo:
Ingrese nmero de da: 4 Corresponde al da: Jueves

3.5 Obtener un algoritmo que determine el Sueldo Neto a cobrar por un empleado ingresando el Sueldo Bsico y su antigedad. Tener en cuenta que al Sueldo Bsico debe realizarse aumento por antigedad segn los siguiente: Hasta 5 aos un 3% Entre 5 y 10 aos un 5% Ms de 10 aos un 8%

En todos los casos se practica un descuento del 10% en concepto de aportes. 3.6 Ingresar 4 nmeros y mostrar el mayor de ellos.

Programacin I Telecomunicaciones

- 51 -

3.7 Ingresar 3 nmeros y realizar lo siguiente: Si los tres son iguales, imprimir el cubo de ellos. Si dos son iguales, imprimir el cuadrado de ellos. Si todos son distintos, imprimir la leyenda: Todos son distintos.

3.7 Ingresar dos ngulos de un tringulo y determiner a que tipo de tingulo corresponde (Equiltero: 3 ngulos iguales, Issceles: 2 ngulos iguales, Escaleno: todos los ngulos desiguales). Ejemplo: Ingrese un ngulo: 40 Ingrese otro ngulo: 70 Corresponde a un Tringulo Isosceles

3.8 Ingresar el precio de una prenda y la categora a la que pertenece. Se deber imprimir el importe a pagar, teniendo en cuenta el porcentaje a incrementar, de acuerdo a su categora: Categora B C D Porcentaje 5% 8% 10% 12%

3.9 Imprimir el importe que deber abonar una persona por el alquiler de un vehculo, ingresando el tipo de vehiculo y la cantidad de das, sabiendo lo siguiente: Tipo de Vehculo 1 2 3 4 Caracterstica Sedan 4 puertas Coupe Pick up 4x4 Precio por da \$ 80 \$ 100 \$ 120 \$ 150

Ejemplo: Ingrese Tipo de Vehiculo: 2 Ingrese cantidad de das: 5 Importe a abonar: \$ 500

- 52 -

Programacin I Telecomunicaciones

## UNIDAD N 2: Estructuras Repetitivas.

Clase

Clase Nmero: 4

Estructura Repetitiva
Una estructura repetitiva permite ejecutar una instruccin o un conjunto de instrucciones varias veces, dependiendo de una condicin que sea falsa o verdadera. Si la condicin que determina la ejecucin de las instrucciones es siempre verdadera, estamos en presencia de un ciclo repetitivo infinito. Dicha situacin es un error de programacin, porque nunca finalizara un programa.

Estructura While
Es un tipo de estructura repetitiva en donde la condicin que repetir las instrucciones, se encuentra al principio de la misma. Su smbolo en diagramacin es el siguiente:

Condicion

Falso

## Sentencia1; Sentencia2; : SentenciaN;

While, significa Mientras, y en el diagrama de la estructura se puede observar que mientras la condicin sea Verdadera, se procesarn las Sentencias indicadas, de lo contrario, si la condicin es falsa, sale del ciclo repetitivo y contina con la secuencia de instrucciones fuera del ciclo. Cabe hacer notar, que si la condicin es falsa de entrada, no se procesarn las sentencias indicadas ni una sola vez.

Programacin I Telecomunicaciones

- 53 -

## i=1 Valor Final

Falso

i <= 100

i+ Incremento

i=i+1

Fin

- 54 -

Programacin I Telecomunicaciones

El diagrama comienza por colocar el Valor Inicial del contador en uno, que es el valor del cual se quiere comenzar a contar, luego se ingresa al ciclo repetitivo con la condicin de verificar que el valor de la variable i se mantenga por debajo o igual a 100, que es el Valor Final al cual llegar la variable. Si el valor de la variable i es menor o igual a 100 se ingresar al ciclo, la primera vez, la variable i tiene el valor de uno, por lo tanto, la condicin resulta verdadera y se ingresa al ciclo imprimiendo el valor de la variable i, (uno en este caso), posteriormente se encuentra el contador, con lo cual se incrementa el valor de la variable en una unidad (dos en este caso) y se vuelve a la condicin, ahora se preguntar si el valor de 2 es menor o igual 100, resulta nuevamente verdadero, imprimindose el nmero dos en la pantalla, luego se incrementa nuevamente en una unidad, volviendo a la verificacin de la condicin, y as sucesivamente. Es muy comun, de utilizar en vez de la linea i=i+1; la lnea i++, la cual indica que se debe incrementar en una unidad a la variable i. Mientras la variable i tenga un valor entre 1 y 100, el programa se mantendr dentro del ciclo, cuando la variable i alcance el valor de 101, la condicin resulta falsa, y sale del ciclo finalizando la ejecucin del programa. En la impresin, se coloc la lnea: i + , esto significa que se debe imprimir el valor que tiene la variable i con un espacio en blanco al lado de la misma, la nica misin de este espacio en blanco, es para que no salgan todos los nmeros encimados. La codificacin sera la siguiente: import hsa.Console; class Ejemplo16 { static Console c; public static void main (String arg []) { int i; c = new Console (); i = 1; while (i <= 100) { c.print (i + " "); Se puede colocar i++; i = i + 1; en vez de esta lnea. } } }

Ejemplo Nro. 17: Imprimir todos los nmeros pares entre 100 y 300 En este caso el Valor Inicial del contador es 100, el Valor Final es 300 y el incremento es de dos en dos. Ver el diagrama y el programa en la pgina siguiente.

Programacin I Telecomunicaciones

- 55 -

Inicio

i = 100

Falso

i <= 300

i+

i=i+2

Fin

import hsa.Console; class Ejemplo17 { static Console c; public static void main (String arg []) { int i; c = new Console (); i = 100; while (i <= 300) { c.print (i + " "); i = i + 2; } } }

- 56 -

Programacin I Telecomunicaciones

Es una variable que suma sobre s misma, un conjunto de valores para de esta manera, tener la suma de todos ellos en una sola variable. La diferencia entre un contador y un acumulador es que un contador vara su contenido en incrementos constantes, mientras el acumulador, va aumentando en una cantidad variable. La forma de un acumulador es: a = a + otraVariable;

i=1 a=0

i <= 10

Falso

a=a+n

i=i+1

Fin

Programacin I Telecomunicaciones

## El programa, resulta ser el siguiente:

import hsa.Console; class Ejemplo18 { static Console c; public static void main (String arg []) { int i, a, n; c = new Console (); i = 1; a = 0; while (i <= 10) { c.print("Ingrese un numero: "); n = c.readInt(); a = a + n; i = i + 1; } c.println(); c.println("La suma de los numeros ingresados es: " + a); } } La ejecucin del programa, arrojara la siguiente pantalla si se ingresan los nmeros del 1 al 10.

- 58 -

Programacin I Telecomunicaciones

Ejemplo Nro. 19: Ingresar 12 nmeros por teclado y determinar: Cuntos fueron mltiplos de 3. Cuntos fueron mltiplos de 5. Cuntos fueron mltiplos de 3 y de 5 al mismo tiempo.

Inicio

i=1 m3 = 0 m5 = 0 m35 = 0

i <= 12

Falso

Falso

n % 3 == 0

m3 ++

Falso

n % 5 == 0

m5 ++

## m3, m5, m35

Falso

n % 3 == 0 && n % 5 ==0

Fin

m35 ++

i=i+1

Programacin I Telecomunicaciones

- 59 -

Para saber si un nmero es mltiplo de 3, simplemente se toma el nmero y se lo divide por 3, si la divisin es exacta, o sea, que el Resto es cero, el nmero en cuestin es mltiplo de 3. Por lo tanto, lo nico que interesa saber, es si el Resto de la divisin del nmero con 3 es cero, para ello se utiliza el operador %, que devuelve precisamente el resto de la divisin de los operandos. De la misma forma, se averigua si es mltiplo de 5 o de cualquier otro valor. Para saber si es mltiplo de 3 y 5 al mismo tiempo, solo se realiza una condicin doble: (n%3 && n%5). A continuacin se realiza el programa correspondiente: import hsa.Console; class Ejemplo19 { static Console c; public static void main (String arg []) { int i, m3, m5, m35, n; c = new Console (); i = 1; m3 = 0; m5 = 0; m35 = 0; while (i <= 12) { c.print ("Ingrese un numero: "); n = c.readInt (); if (n % 3 == 0) m3++; if (n % 5 == 0) m5++; if (n % 3 == 0 && n % 5 == 0) m35++; i = i + 1; } c.println (); c.println ("La cantidad de multiplos de 3 es: " + m3); c.println ("La cantidad de multiplos de 5 es: " + m5); c.println ("La cantidad de multiplos de 3 y 5 es: " + m35); } }

Nota: En esta codificacin del programa, las instrucciones if, fueron utilizadas sin tener en cuenta las llaves limitadoras de principio y fin de bloque. Esto es debido a lo siguiente: Cuando en una estructura, (como por ejemplo en un if) se encuentra una sola sentencia, no es necesario colocar las llaves, ahora, si se deben procesar ms de una instruccin, tanto por el verdadero como por el falso, s es obligatorio coloca las llaves que limiten el bloque de instrucciones a ejecutar.

- 60 -

Programacin I Telecomunicaciones

## Impresin de series matemticas

Una serie matemtica es una sucecin de trminos en donde hay una relacin entre cada uno de dichos trminos. Ejemplo Nro. 20: Imprimir los 30 trminos de la serie: 10 16 22 28

Cuando se debe imprimir los trminos de una serie, se debe encontrar en primera medida cual es la relacin entre un elemento y otro. Tener en cuenta que no se deben ingresar datos, si no que, el programa debe generar cada uno de los trminos que se van a imprimir. Razonando y observando los trminos de la serie a imprimir, se puede deducir que es un contador que va de seis en seis y comienza en 10, es decir, que se tiene una instruccin de la forma: t = t + 6. Cada trmino est formado como el anterior ms seis. Teniendo ya la frmula que rige a la serie, el resto simplemente consiste en encerrar a dicha frmula en un ciclo que se repita 30 veces, previa impresin de la variable t. A continuacin, se desarrolla el algoritmo: Inicio

i=1

t = 10

i <=30

t+

t=t+6

i = i +1

## Fin Programacin I Telecomunicaciones - 61 -

import hsa.Console; class Ejemplo20 { static Console c; public static void main (String arg []) { int i, t; c = new Console (); i = 1; t = 10; c.println("Impresion de la serie: "); c.println(); while (i <= 30) { c.print(t + " "); t = t + 6; i = i + 1; } } }

Actividad 4.1: Obtener la suma de todos los nmeros menores o iguales a 100. Se deber imprimir la suma de: 1 +2 + 3 + 4 + + 98 + 99 + 100 = Actividad 4.2: Ingresar 7 valores de tipo float y obtener su promedio, indicando si es mayor o menor de 100. Actividad 4.3: Ingresar 15 valores, e imprimir: Cuntos fueron pares. Cuntos fueron impares. Cuntos terminados en cero. Actividad 4.4: Ingresar 10 nmeros y mostrar la suma de los cinco ltimos. Actividad 4.5: Imprimir la suma de los 50 trminos de la serie: 5*6+5*7+5*8+5*9+ Actividad 4.6: Imprimir los 15 trminos de la serie: 500 525 550 575

- 62 -

Programacin I Telecomunicaciones

En caso de tener dificultad en resolver los ejercicios, se desarrollan a continuacin algunos diagramas de los mismos. Actividad 4.1 Inicio

i=1 a=0

Falso

i <= 100

a=a+i

i=i+1

Fin

i=1 a=0

i <= 7

Falso

valor

1
Programacin I Telecomunicaciones - 63 -

1
a = a + valor

i=i+1

prom = a / 7

## El promedio es mayor o igual a 100

Fin

- 64 -

Programacin I Telecomunicaciones

i <= 15

Falso

Falso

n % 2 == 0

impar ++

par ++

Falso

n % 10 == 0

cero ++

i=i+1

## Terminados en cero: + cero Fin

Programacin I Telecomunicaciones

- 65 -

Inicio

i=1 a=0

i <= 10

Falso

Falso

i>5

a=a+n

i=i+1

Fin

- 66 -

Programacin I Telecomunicaciones

## Ingreso de valores hasta que se digite una clave

En algunos casos, no se tienen en cuenta la cantidad de valores a ingresar, si no que se ingresan datos hasta que se digite un valor clave. Este valor clave, indica la finalizacin del ingreso de datos. Ejemplo Nro. 21: Ingresar sueldos de personas hasta que se digite el valor clave de 99999. Determinar, cuntos fueron mayores o iguales a \$5000, cuntos menores de \$5000 y mostrar adems, el sueldo promedio de todos los ingresados. Nota: El valor de 99999 es el que indica la finalizacin de ingresos de datos, este valor no debe ser tenido en cuenta en la cantidad de mayores a \$5000, ni tampoco para el clculo del promedio

Inicio

sueldo

sueldo != 99999

Falso

Falso

## sueldo >= 5000

menores ++

mayores ++

1
a = a + sueldo

sueldo

Programacin I Telecomunicaciones

- 67 -

Falso

No se ingresaron sueldos

## Menores a \$5000: + menores

Promedio de sueldos: + p

Fin

- 68 -

Programacin I Telecomunicaciones

import hsa.Console; class Ejemplo21 { static Console c; public static void main (String arg []) { int cantidad, mayores, menores; float a, sueldo, p; c = new Console (); a = 0; cantidad = 0; mayores = 0; menores = 0; c.print ("Ingrese un sueldo (99999 para terminar): "); sueldo = c.readFloat (); while (sueldo != 99999) { cantidad++; if (sueldo >= 5000) mayores++; else menores++; a = a + sueldo; c.print ("Ingrese un sueldo (99999 para terminar): "); sueldo = c.readFloat (); } c.println (); if (cantidad > 0) { p = a / cantidad; c.println ("Cantidad mayores o iguales a \$5000: " + mayores); c.println ("Cantidad menores a \$5000: " + menores); c.println ("Promedio de sueldos: " + p); } else c.println ("No se ingresaron sueldos"); } }

Programacin I Telecomunicaciones

- 69 -

Ejercicios Propuestos
4.1 Ingresar 12 precios de productos y determinar: Cuantos fueron menores a \$50. Cuantos fueron entre \$50 y \$100, ambos inclusive. Cuantos fueron mayores de \$100. 4.2 Imprimir todos los mltiplos de 7 menores a 100. (0 7 14 21 28) 4.3 En un Banco se debe ingresar por cada cliente, el nmero de cuenta y el monto de depsito a realizar. El ingreso de datos se debe realizar hasta que se digite un valor de cuenta negativo. Se deber imprimir lo siguiente: Cantidad de clientes procesados. Cantidad de clientes con depsitos superiores a \$2000. Suma acumulada de todos los depsitos. Promedio de todos los depsitos.

4.9 Imprimir los nmeros pares en forma decreciente desde el 800 hasta el 400. 4.10 Obtener el promedio de los mltiplos de 4 menores a 300. - 70 Programacin I Telecomunicaciones

## TEMAS: Estructura For. Busqueda del mayor.

Clase

Clase Nmero: 5
Estructura for
En general, la estructura FOR, se usa en aquellas situaciones en las cuales sen conoce de antemano, la cantidad de veces que se quiere que se ejecute el bloque de instrucciones. Ejemplo: cargar 10 nmeros; ingresar 5 notas de alumnos; etc. Se conoce de antemano la cantidad de veces que queremos que el bloque se repita. Representacin grfica

## Inicializacin; condidin a evaluar; modificacin

Falso

Operaciones

En su forma ms tpica y bsica, esta estructura requiere una variable entera que cumple la funcin de un CONTADOR de vueltas. En la seccin indicada como inicializacin, se suele colocar el nombre de la variable que har de contador, asignndole a dicha variable un valor inicial. En la seccin de condicin a evaluar se coloca la condicin que deber ser verdadera para que el ciclo contine. Y finalmente, en la seccin de modificacin se incrementa o decrementa el valor de la variable que hace de contador (para permitir que alguna vez la condicin sea falsa).

Programacin I Telecomunicaciones

- 71 -

## Ejemplo: Suponer que se necesitan procesar 10 empleados de una empresa:

Condicin que indica la finalizacin del ciclo, mientras la variable i, sea menor o igual a 10 se mantendr dentro del ciclo

## Se inicializa la variable, indicando de qu valor comenzar el ciclo repetitivo

i=1 ;

i <= 10 ;

i ++

Falso

Operaciones

Todas las operaciones que se encuentren dentro del for, se repetirn 10 veces en este caso.

- 72 -

Programacin I Telecomunicaciones

Ejemplo Nro. 22: Realizar un programa que permita imprimir todos los nmeros del 1 al 100. Inicio

i=1

; i <= 100 ; i ++

Falso

i+

Fin

import hsa.Console; class Ejemplo22 { static Console c; public static void main (String arg []) { int i; c = new Console (); for (i = 1 ; i <= 100 ; i++) { c.print (i + " "); } } } Al ingresar al ciclo for, se le asigna la variable i el valor 1 y como no es superior a 100 se ejecuta el bloque, imprimiendo el contenido de i, al finalizar el bloque repetitivo se incrementa en una unidad, pasando a tener el valor de 2. Como 2 no es superior a 100 se repite el bloque de instrucciones. Cuando la variable i llega a 101, la condicin resulta falsa y sale de la estructura repetitiva for y finaliza el programa.

Ejemplo Nro. 23: Desarrollar un programa que permita ingresar la altura de 8 personas y muestre el promedio de ellas.

Programacin I Telecomunicaciones

- 73 -

Inicio

suma = 0

i=1

; i <= 8 ; i ++

Falso

altura

## suma = suma + altura

promedio = suma / 8

## El promedio es: + promedio

Fin import hsa.Console; class Ejemplo23 { static Console c; public static void main (String arg []) { int i; float altura, suma, promedio; c = new Console (); suma = 0; for (i = 1 ; i <= 8 ; i++) { c.print ("Ingrese altura: "); altura = c.readFloat(); suma = suma + altura; } promedio = suma / 8; c.println(); c.println("El promedio es: " + promedio); } } - 74 Programacin I Telecomunicaciones

Ejemplo Nro. 24: Escribir un programa que lea 10 notas de alumnos e informe cuntos tienen notas mayores a 7, cuantos entre 4 y 7, ambos inclusive, y cuntos menores a 4. Para resolver este problema, se necesitan 4 contadores, uno para la variable del for, para contar las 10 notas, otro para contar la cantidad de notas mayores a 7, otro para contar las notas que estn entre 4 y 7 y otro para las notas inferiores a 4. Dentro de la estructura repetitiva for, se deben realizar la carga de la variable nota y verificar con estructuras condicionales, si el contenido de la variable nota, es mayor o igual a 7, si est entre 4 y 7 y si es menor a 4, para incrementar los contadores correspondientes. Inicio

i=1

; i <= 10 ; i ++

Falso

nota

Falso

nota >7

Falso

nota >= 4

mayores ++

menores++

entre ++

## mayores, entre, menores

Fin

Programacin I Telecomunicaciones

- 75 -

import hsa.Console; class Ejemplo24 { static Console c; public static void main (String arg []) { int i, nota, mayores, menores, entre; c = new Console (); mayores = menores = entre = 0; for (i = 1 ; i <= 10 ; i++) { c.print ("Ingrese nota: "); nota = c.readInt (); if (nota > 7) mayores++; else if (nota >= 4) entre++; else menores++; } c.println c.println c.println c.println } } Una variante de inicializar todos los contadores en cero, es colocar una variable igual a otra, igual a otra y as sucesivamente, y al ltimo colocar igual a cero. En este caso se realizo: mayores = menores = entre = 0; El for permite introducir 10 notas, con las cuales se averigua si es mayor a 7, si se est entre 4 y 7 y si est por debajo de 4, incrementndose los contadores correspondientes. Observar que la impresin de los contadores se realiza despus de la finalizacin del ciclo, que es cuando ya se ingresaron las 10 notas. (); ("Cantidad de mayores a 7: " + mayores); ("Cantidad entre 4 y 7: " + entre); ("Cantidad de menores a 7: " + menores);

Ejemplo Nro. 25: Escribir un programa que imprima todos los mltiplos de 6 que hay entre 100 y 200, imprimiendo adems, la cantidad de ellos. En este caso, se debe tener en cuenta que no se deben introducir datos, ya que la mquina debe generar los nmeros entre 100 y 200. Luego se debe verificar cual es mltiplo de 6, para ello se utiliza el operador %. Ver diagrama en la pgina siguiente.

- 76 -

Programacin I Telecomunicaciones

Inicio

i = 100

; i <= 200 ; i ++

Falso

Falso

i % 6 == 0

i+

Fin

import hsa.Console; class Ejemplo25 { static Console c; public static void main (String arg []) { c = new Console (); for (int i = 100 ; i <= 200 ; i++) { if (i%6 == 0) c.print (i + " "); } } }

En este programa, se defini a la variable i dentro del for, en el mismo lugar que donde se inicializa. Esta es otra modalidad de definicin de variables, en este caso, la variable i es Local a la estructura for, lo que significa que fuera de dicha estructura, no existe.

Programacin I Telecomunicaciones

- 77 -

En algunos casos se debe ingresar la cantidad de datos a procesar al inicio del programa, es decir, que dicha cantidad de datos es variable.

Ejemplo Nro. 26: Escribir que lea n nmeros enteros por teclado y calcule la cantidad de valores que fueron mayores 1000 y adems, la suma de ellos. Inicio

mayores = suma = 0

n
Falso

i=1

; i <= n ; i ++

numero

Falso

numero >1000

## mayores ++ suma = suma + numero

mayores, suma

Fin

- 78 -

Programacin I Telecomunicaciones

import hsa.Console; class Ejemplo26 { static Console c; public static void main (String arg []) { int n, numero, mayores, suma; c = new Console (); mayores = suma = 0; c.print ("Ingrese cantidad a procesar: "); n = c.readInt (); c.println(); for (int i = 1 ; i <= n ; i++) { c.print ("Ingrese un numero: "); numero = c.readInt (); if (numero > 1000) { mayores++; suma = suma + numero; } } c.println (); c.println ("Cantidad de mayores a 1000: " + mayores); c.println ("Suma de los mayores a 1000: " + suma); } } Razonamiento Lgico: Lo primero que se realiza es cargar una variable que indique la cantidad de valores a ingresar. Dicha variable se carga antes de entrar a la estructura repetitiva for. La estructura for permite que el valor inicial o final dependa de una variable cargada previamente por teclado.

Programacin I Telecomunicaciones

- 79 -

Actividad 5.1: Confeccionar un programa que lea N pares de datos, cada par de datos corresponde a la medida de la base y la altura de un tringulo. El programa deber informar: De cada tringulo la medida de su base, su altura y su superficie. La cantidad de tringulos cuya superficie es mayor a 12. Actividad 5.2: Desarrollar un programa que solicite la carga de 15 nmeros e imprima la suma de lo ltimos 10 valores ingresados. Actividad 5.3: Elaborar un programa que me muestre el mayor de 20 nmeros ingresados.

Actividad 5.4: Desarrollar un programa que muestre la tabla de multiplicar del 5 (del 1 al 20). Ejemplo: 5x1=5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 : 5 x 20 = 100

Actividad 5.5: Confeccionar un programa que permita ingresar un valor del 1 al 10 y nos muestre los mltiplos del mismo (los primeros 30 trminos). Ejemplo: Si se ingresa en nmero 3, deber aparecer:

Multiplos de 3 0 3 6 9 12 15...

Actividad 5.6: Realizar un programa que lea los 3 lados de N tringulos, e informar: a) De cada uno de ellos, qu tipo de tringulo es: equiltero (tres lados iguales), issceles (dos lados iguales), o escaleno (todos los lados desiguales). b) Cantidad de tringulos de cada tipo. c) Tipo de tringulo que posee menor cantidad.

- 80 -

Programacin I Telecomunicaciones

En caso de tener dificultad en resolver los ejercicios, se desarrollan a continuacin algunos diagramas de los mismos. Actividad 5.1

Inicio

cant = 0 n

i = 1;

i <= n;

i++

b, h

superficie = b * h

b, h, superficie

## Cantidad de tringulos con sup. Mayor a 12: + cant

Fin

Programacin I Telecomunicaciones

- 81 -

suma = 0

i = 1;

i <= 15;

i++

numero

Fin

## Bsqueda del mayor de una serie de nmeros ingresados.

Para determinar el mayor de 20 nmeros ingresados por teclado, el algoritmo sera de la siguiente manera: 1) Se realiza un for para pedir los 20 nmeros. 2) El primer nmero que se ingresa, se lo asigna a una variable, por ejemplo: m. Hasta ese momento, el valor guardado en m es el mayor. 3) Se pregunta si alguno de los siguientes nmeros ingresados es mayor al almacenado en la variable m. En caso de resultar verdadero, se le asigna a la variable m el nuevo valor. 4) Por ltimo, se imprime el valor de la variable m.

- 82 -

Programacin I Telecomunicaciones

## Desarrollo del algoritmo de Bsqueda del mayor.

Inicio

Si el valor de la variable i es igual a 1, significa que se tiene el primer nmero ingresado, por lo tanto, se lo guarda en la variable m. i++
Falso

i = 1;

i <= 20;

numero

Falso

i == 1

m = numero

Falso

numero > m

m = numero

## El mayor de los nmeros ingresados es: + m

Fin

Si alguno de los sucesivos valores ingresados es mayor al guardado en la variable m, se guarda el nuevo valor en la misma variable m.

Programacin I Telecomunicaciones

- 83 -

Inicio

i = 1;

i <= 20;

i++

r=5*i

5+x+i+=+r

Fin

termino = 0

i = 1;

i <= 30;

i++

termino +

termino = termino + n

Fin

- 84 -

Programacin I Telecomunicaciones

Ejercicios Propuestos

5.7 Mostrar los 30 trminos de la serie: 50 x 3; 50 x 4; 50 x 5; 50 x 6; 5.8 Ingresar las 20 notas de un curso y determinar su promedio. Imprimir lo siguiente: a) Si el promedio del curso es inferior a 5, mostrar: Curso deficiente. b) Si el promedio est entre 5 y 7, mostrar: Curso Satisfactorio. c) Si el promedio es mayor a 7, mostrar: Curso muy Bueno. Programacin I Telecomunicaciones - 85 -

5.9 Calcular el factorial de un nmero ingresado por teclado. El factorial de un nmero consiste en tomar al nmero ingresado y multiplicarlo por todos los inferiores a l, sin incluir el cero. Ejemplo: Factorial de 5 = 5 x 4 x 3 x 2 x 1 Ingrese un nmero: 5 El Factorial de 5 es: 120

Se asume que el factorial de cero es igual a 1 y no existe factorial de numeros negativos. 5.10 Ingresar un nmero y mostrar todos sus mltiplos entre 500 y 1000. 5.11 Mostrar los trminos 40 trminos de la serie: 100; -200; 120; -190; 140; -180; 160; -170; 5.12 Ingresar dos nmeros por teclado y determinar cuntos valores pares hay entre esos dos nmeros. Ejemplo: Ingrese un Nmero: 20 Ingrese otro Nmero: 50 Hay 14 nmeros pares entre 20 y 50 5.13 Ingresar los sueldos de 20 empleados y determinar lo siguiente: a) b) c) d) Cuntos empleados tienen un sueldo inferior \$3000. Cuntos tienen un sueldo entre \$3000 y \$5000. Cuntos tienen un sueldo superior a \$5000. Sueldo total a abonar a todos los empleados.

5. 14 Ingresar un nmero y determinar cuntos mltiplos tiene entre 0 y100, ambos inclusive. Ejemplo: Ingrese un Nmero: 20 El 20 tiene 6 mltiplos entre 0 y 100

- 86 -

Programacin I Telecomunicaciones

## UNIDAD N 2: Estructuras Repetitivas.

TEMAS: Estructura do..while Concepto de Bandera. Posicionamiento del cursor. Generacin de nmeros aleatorios.

Clase

Clase Nmero: 6
Estructura do..while
La sentencia do..while es otra estructura repetitiva, la cual ejecuta al menos una vez su bloque repetitivo, a diferencia del while o del for que si la condicin es falsa la primera ves, no ejecuta el bloque de instrucciones. Esta estructura repetitiva se utiliza cuando se conoce de antemano que por lo menos una vez, se ejecutar el bloque repetitivo. La condicin en esta estructura est por debajo del bloque a repetir, a diferencia del while o del for que est en la parte superior. Representacin grfica:

do

## Bloque de instruciones a repetir.

Condicin
Falso

Programacin I Telecomunicaciones

- 87 -

El bloque de operaciones se repite MIENTRAS que la condicin sea Verdadera. Si la condicin retorna Falso, el ciclo se detiene. Es importante analizar y ver que las operaciones se ejecutan como mnimo una vez. La estructura do..while se codifica de la siguiente forma: do { Sentencia1; Sentencia2; : SentenciaN; } while (Condicion); Ejemplo Nro. 27: Ingresar nmeros y determinar si son pares o impares. El programa deber terminar cuando se digite el nmero cero.

Inicio

do Estructura if n

Falso

n % 2 == 0

## El Numero ingresado es par

n != 0
Falso

Fin

while

- 88 -

Programacin I Telecomunicaciones

No hay que confundir los rombos de las estructuras condicionales, con los de las estructuras repetitivas do..while. Observar que el rombo de la estructura condicional (if) tiene los brazos a izquierda y derecha, y el while, tiene uno de los brazos hacia abajo.

import hsa.Console; class Ejemplo27 { static Console c; public static void main (String arg []) { int n; c = new Console (); do { c.print("Ingrese un numero (Cero para terminar): "); n = c.readInt (); if (n % 2 == 0) c.println ("El numero ingresado es par"); else c.println ("El numero ingresado es impar"); c.println (); } while (n != 0); c.println (); c.println ("Fin de Proceso"); } }

El ciclo repetitivo se lee de esta manera: Hacer las instrucciones siguientes, mientras el valor de la variable n sea distinto de cero. Se ingresa al ciclo introduciendo un valor para almacenarlo en la variable n, y se pregunta si el resto de la divisin del valor de n con 2, es igual a cero, en caso de ser verdadero, significa que el valor de n es divisible por 2, por lo tanto es un nmero par y se imprime la leyenda correspondiente. En caso de ser falso, el nmero ingresado no es par y se imprime: nmero impar. Mientras el valor ingresado en n sea distinto de cero, el programa se direccionar nuevamente a la instruccin do, pidiendo otro ingreso de dato. El proceso termina cuando se digite el valor cero para la variable n, en este caso, la condicin del while resulta falsa y sale del ciclo.

Programacin I Telecomunicaciones

- 89 -

Ejemplo Nro. 28: Escribir un programa que solicite la carga de nmeros por teclado, y obtener su promedio. Finalizar el programa cuando se ingrese el valor de 9999. (El valor de 9999, no debe ser tenido en cuenta para el clculo del promedio) Inicio

cantidad = 0 suma = 0 do

Falso

n != 9999

n != 9999
Falso

Falso

## promedio = suma / cantidad No se ingresaron nmeros El promedio es: + promedio

Fin

- 90 -

Programacin I Telecomunicaciones

Programacin I Telecomunicaciones

- 91 -

En algunos casos, luego de ingresar un dato, la computadora pregunta si se desea realizar otro ingreso, si se le responde que si, nuevamente pide un valor y en caso contrario, se muestra el proceso de los datos ingresados hasta ese momento. Este es un ejemplo tpico del uso del do..while, en donde se verifica exclusivamente que la condicin se encuentra al final del ciclo. Ejemplo Nro. 29: Desarrollar un programa que solicite una serie de nombres de productos con sus respectivos precios, y mostrar el nombre del producto de menor precio. La computadora debe preguntar si se siguen ingresando datos. Inicio

b=0

do

nombre precio

b == 0

b=1

nx = nombre px = precio

Falso

precio < px

nx = nombre px = precio

## Ingresa otro juego de datos (s/n): opcion

1
- 92 Programacin I Telecomunicaciones

2

opcion == s
Falso

## El producto de menor precio es + nx

Fin

Concepto De Bandera

## Posicionamiento del Cursor

Para poder posicionar el cursor en un determinado lugar de la pantalla, se utiliza la instruccin: c.setCursor(Fila,Columna), que tiene como parmedtro la fila y la columna en la cual se quiere posicionar. Por ejemplo, si se necesita colocar el cursor en la posicin Fila: 10 y Columna: 20, se debe colocar: c.setCursor(10,20);

Programacin I Telecomunicaciones

- 93 -

El programa del diagrama anterior es el siguiente: import hsa.Console; class Ejemplo29 { static Console c; public static void main (String arg []) { c=new Console(); int b; String nombre, nx; float precio, px; char opcion; b=0; px=0; nx=""; do { c.clear (); c.setCursor (3, 15); c.print ("Carga de datos"); c.setCursor (4, 15); c.print ("--------------"); c.setCursor (6, 10); c.print ("Ingrese Nombre de Producto: "); nombre = c.readLine (); c.setCursor (9, 10); c.print ("Ingrese Precio del Producto: "); precio = c.readFloat(); if (b == 0) { b = 1; nx = nombre; px = precio; } if (precio < px) { nx = nombre; px = precio; } c.setCursor (15, 10); c.print ("Ingresa otro juego de datos (S/N): "); opcion = c.readChar (); } while (opcion == 'S' || opcion == 's'); c.setCursor(18,10); c.print ("El producto de menor precio es: " + nx); c.setCursor(19,10); c.print ("Su precio es de: \$ " + px); } } - 94 Programacin I Telecomunicaciones

Programacin I Telecomunicaciones

- 95 -

## Generacin de nmeros aleatorios

que es el mximo que se almacenar en la variable d1. Por lo tanto, en la variable d1 se almacenar nicamente valores enteros entre 1 y 6. Para el dado 2, la instruccin es exactamente la misma. El diagrama sera el siguiente: Inicio

do

d1 = (int) (Math.random() * 6) + 1

d2 = (int) (Math.random() * 6) + 1

suma = d1 + d2

Falso

suma == 7

Perdi

Gan

opcion

Opcin == S

Fin

Programacin I Telecomunicaciones

- 97 -

- 98 -

Programacin I Telecomunicaciones

Ejercicios Propuestos
6.1 - Se realiz un censo provincial y se desea procesar la informacin obtenida en dicho censo. De cada una de las personas censadas se tiene la siguiente informacin: nmero de documento, edad y sexo ("femenino" o "masculino"). Se pide confeccionar un programa que lea los datos de cada persona censada (Luego de ingresar un juego de datos, se debe preguntar si se quiere ingresar otro juego). Informar lo siguiente: a) b) c) d) Cantidad de personas censadas. Cantidad de varones. Cantidad de mujeres. Cantidad de varones mayores o iguales a 18 aos.

6.2 - Ingresar un nmero, e imprimir todos sus mltiplos inferiores a 800. Ejemplo: Ingrese un nmero: 30 Los mltiplos de 30 menores a 800 son: 0 30 60 90 120 150 180 210 240 270 300 330 360 390 420 450 480 510 550 570 600 430 660 690 720 750 780

6.6 - Laura est de compras en un hipermercado y decide llevar un control sobre lo que va comprando, para saber la cantidad de dinero que tendr que pagar al llegar a una caja. El supermercado tiene una promocin especial del 15% de descuento sobre aquellos artculos cuya etiqueta sea de color rojo; del 10% sobre los de etiqueta amarilla, y del 5% sobre los de etiqueta verde. Escribir un programa que lea el precio y el color de etiqueta del producto e imprimir la cantidad de dinero que Laura deber pagar. 6.7 - Una Distribuidora necesita calcular el aumento de sueldo para sus empleados, bajo el siguiente criterio: Sueldo < \$1500: Aumento 15% Sueldo comprendido entre \$1500 y \$2500: Aumento 10% Sueldo superior a \$2500: Aumento 5%. Realizar un programa que permita ingresar el Nombre, el Sueldo y el Sexo de cada empleado y determine lo siguiente: el sueldo promedio de las mujeres, el sueldo promedio de hombres y el total a abonar por parte de la distribuidora.

- 100 -

Programacin I Telecomunicaciones

Arreglos

## TEMAS: Array Vectores Carga e Impresin de un Vector

Clase

Clase Nmero: 7

Array
Introduccin

Array

Programacin I Telecomunicaciones

- 101 -

Vectores
Se define a un vector, como un grupo o conjunto de datos de un mismo tipo, La variable de un vector se denomina: Variable Subindicada, porque tiene un subndice que indica la posicin de un componente o elemento determinado. Por ejemplo, si se supone que se quiere almacenar las notas de 5 alumnos, matemticamente se debera colocar:

nota[i] = [8,4,9,5,7]

subndice

componentes

En este caso, se debe tener en cuenta que la cantidad de componentes es cinco y los elementos estn enumerados del cero al cuatro. Es decir que: nota[0] nota[1] nota[2] nota[3] nota[4] = = = = = 8 4 9 5 7 Por lo tanto, la variable i, deber asumir los valores del cero al cuatro. Si en este vector la variable i, tomara el valor de cinco, dara un error, porque no existe un elemento en la posicin cinco.

## Carga e Impresin de un Vector

La carga y la impresin de un vector, se realiza componente a componente, indicando en que posicin se almacenar cada elemento. Ejemplo Nro. 31: Realizar la carga y la impresin de 5 edades de personas. Tanto para realizar la carga como la impresin de cada uno de los componentes de un vector, se debe realizar un ciclo. El ciclo mas utilizado y mas fcil de implementar para estos propsitos, es el ciclo for, en el cual, la variable del for debera variar de cero a cuatro para este ejemplo. El diagrama y programa para resolver este ejemplo, sera el siguiente:

- 102 -

Programacin I Telecomunicaciones

Inicio

i = 0 ; i < 5 ; i++

Falso

## i = 0 ; i < 5 ; i++ Impresin del Vector

Falso

Fin

El proceso de carga del vector se realiza con un ciclo for, el cual contiene una variable que se inicializa en cero, para la primer componente del vector. Como el primer valor de i es cero, la condicin i<5 es verdadera, por lo tanto se ingresa al ciclo y se pide un valor que ser almacenado en la variable edad[0], luego se retorna al for incrementndose la variable i al valor 1, que nuevamente al ser menor a 5 se ingresa al ciclo pidiendo el segundo valor, que ser almacenado en edad[1], es decir, en la misma variable pero en la posicin 1. Se contina con los sucesivos valores para la variable i, hasta que llege al valor de 5, y al llegar a este valor, la condicin i<5, resulta falsa, saliendo del ciclo for y dando como consecuencia el almacenamiento de los 5 valores para la variable edad. Bsicamente el programa quedara de la siguiente manera:

Programacin I Telecomunicaciones

- 103 -

- 104 -

## "]: " imprimiendo en la pantalla lo siguiente: Ingrese edad [0]:

All se detiene la ejecucin del programa hasta que se digite un valor para ser almacenado en la variable edad [0]. El proceso de carga contina hasta ingresar edad [4], que sera el quinto elemento. (del cero al cuatro hay cinco posiciones) Una vez realizado la carga de las 5 edades, se sale del ciclo y nos encontramos con dos renglones en blanco debido a las dos sentencias c.println(). Posteriormente se imprime una leyenda indicando El vector ingresado es: [ Observar que la leyenda finaliza con un corchete abierto, esto es simplemente para darle la forma de vector a la impresin de los valores. Se contina con el ciclo de impresin, similar al de carga, y luego, cuando se sale del ciclo, se cierra el corchete del vector. La ejecucin del programa, arrojar la siguiente salida:

Se puede inicializar los elementos de un vector en el momento de definir la variable, por ejemplo, si se quiere cargar las notas de alumnos, se puede escribir la siguiente lnea: int [] notas = { 5, 9, 4, 8 }; si se quiere cargar en un vector, las vocales del abecedario, sera: char [] vocales = { 'a', 'e', 'i', 'o', 'u' }; Cuando se realiza la declaracin junto con la inicializacin, pareciera que se est omitiendo la asignacin del tamao del vector, pero no es as, el tamao est implcito en la inicializacin, el compilador lo establece segn la cantidad de elementos con que se inicializa. Es decir, en el primer caso, el vector nota, tendr un tamao de cuatro, y en el caso del vector vocales, tendr un tamao de cinco. Programacin I Telecomunicaciones - 105 -

Se puede acceder al nmero de elementos de un vector, por medio de la variable miembro length. Por ejemplo: c.println("Cantidad de notas: " + notas.length); c.println("Cantidad de vocales: " +vocales.length); Nota: A partir de aqu, siempre se utilizar la variable miembro length para conocer la cantidad de componentes almacenados en un vector. Ejemplo Nro. 32: Desarrollar un programa que inicialice un vector con los nmeros pares hasta 12 y luego los imprima mediante un ciclo for. Inicio

numerosPares = { 0, 2, 4, 6, 8, 10, 12 }

## i = 0 ; i < numerosPares.length ; i++

Falso

numerosPares [i]

Fin import hsa.Console; class Ejemplo32 { static Console c; public static void main (String arg []) { c = new Console (); int [] numerosPares = {0, 2, 4, 6, 8, 10, 12}; c.print("Los numeros pares hasta 12 son: [ "); for (int i = 0 ; i < numerosPares.length ; i++) { c.print (numerosPares [i] + " "); } c.print ("]"); } }

- 106 -

Programacin I Telecomunicaciones

En el ejemplo siguiente, se puede observar la ventaja de tener almacenadas todas las alturas de las personas en un vector. Si no conociramos los vectores, s e tendra que cargar otra vez las alturas por teclado, para compararlas con el promedio. Mientras el programa est en ejecucin se t iene el vector de alturas, a nuestra disposicin. Es importante tener en cuenta que cuando finaliza la ejecucin del programa, se pierde los contenidos de todas las variables. (Simples y Vectores) Ejemplo Nro. 33: Definir y car gar un vector de 5 componentes de tipo float que representen las alturas de 5 personas. Obtener el promedio de las mismas. Contar cuntas personas son ms altas que el promedio y cuntas ms bajas o iguales al promedio. Inicio suma = 0 altas = 0 bajas = 0

Falso

## promedio = suma / alturas.length

promedio

1
Programacin I Telecomunicaciones - 107 -

Falso

Falso

bajas ++

altas ++

## Cantidad de Personas altas: + altas Cantidad de Personas bajas: + bajas

Fin

import hsa.Console; class Ejemplo33 { static Console c; public static void main (String arg []) { c = new Console (); float [] alturas; alturas = new float [5]; float suma = 0; float promedio; int altas, bajas; altas = bajas = 0; c.println ("Ingrese los valores de las alturas "); c.println (); for (int i = 0 ; i < alturas.length ; i++) { c.print ("alturas[" + i + "]: "); alturas [i] = c.readFloat (); - 108 Programacin I Telecomunicaciones

suma = suma + alturas[i]; } promedio = suma / alturas.length; c.println (); c.println ("El promedio es: " + promedio); for (int i = 0 ; i < alturas.length ; i++) { if (alturas[i] > promedio) altas++; else bajas++; } c.println("Cantidad de Personas altas: " + altas); c.println("Cantidad de Personas bajas: " + bajas); } }

Explicacin: Se comienza definiendo el vector alturas en la lnea: float [] alturas; En la lnea siguiente, se crea el vector y se indica cuantos elementos contendr, cinco en este caso. Posteriormente, se definen y se inicializan las dems variables que intervienen. Se inicia el ciclo for con la variable ndice en cero y se ingresan las alturas mientras la variable ndice sea menor que la cantidad de elementos del vector, esta condicin est determinada por: i < alturas.length. Dentro del mismo ciclo for, tambin se acumulan las alturas ingresadas en la variable suma, inicializada en cero antes de entrar en el ciclo. Luego de cargar las cinco alturas, se sale del ciclo y se calcula el promedio de las mismas, mostrndolo en pantalla. Para poder saber cuntas personas son ms altas que el promedio, se debe realizar otro ciclo para recorrer el vector de las alturas, de modo que en este segundo ciclo, se ha colocado un if, preguntando si alguna de las alturas ingresadas es mayor al valor promedio. En caso de ser verdadero, se incrementa el contador de personas altas, y en caso de ser falso, se incrementa el contador de personas bajas. Por ltimo, se imprimen ambas cantidades.

Ejemplo Nro. 34: Almacenar en un vector todos los nmeros impares menores de 100 y luego mostrar: a) Cantidad de elementos mltiplos de 3. b) Cantidad de elementos mltiplos de 5 c) Suma total de todos los elementos.

Programacin I Telecomunicaciones

- 109 -

Inicio
Carga del Vector

Inicializacin de variables

contador = 1 m3 = m5 = 0 suma = 0

Falso

Proceso

## i = 0 ; i < vector.length ; i++

Falso

vector[i] +

vector[i] % 3 == 0 m3++

vector[i] % 5 == 0 m5++

## suma = suma + vector[i]

1
- 110 Programacin I Telecomunicaciones

Cantidad de Multiplos de 3: + m3 Cantidad de Multiplos de 5: + m5 Suma total de impares menores de 100: + suma

Fin import hsa.Console; class Ejemplo34 { static Console c; public static void main (String arg []) { c = new Console (); int [] vector; vector = new int [50]; int contador, m3, m5, suma; contador = 1; m3 = m5 = 0; suma = 0; for (int i = 0 ; i < vector.length ; i++) { vector [i] = contador; contador = contador + 2; } c.println ("El vector de impares menores a 100 es: "); for (int i = 0 ; i < vector.length ; i++) { c.print (vector [i] + " "); if (vector [i] % 3 == 0) m3++; if (vector [i] % 5 == 0) m5++; suma = suma + vector[i]; } c.println(); c.println(); c.println ("Cantidad de multiplos de 3: " + m3); c.println ("Cantidad de multiplos de 5: " + m5); c.println ("suma total de impares: " + suma); } }

Programacin I Telecomunicaciones

- 111 -

Explicacin: Se comienza definiendo y creando el vector de 50 elementos, ya que estar integrado por los nmeros impares menores que 100, es decir del 1 al 99 y como van de dos en dos, se tienen 50 elementos. Luego se inicializan las variables: contador para ir generando los nmeros impares, m3 para los mltiplos de 3, m5 para los mltiplos de 5 y suma para almacenar la suma total de los impares menores de 100. El primer ciclo for se utiliza para realizar la carga del vector con los nmeros impares, para ello se le asigna a cada elemento del vector el valor que va asumiendo la variable contador, que como va de dos en dos y comienza del valor uno, va conteniendo valores impares. El segundo ciclo es el del procesamiento del vector, imprimiendo todos los nmeros almacenados en l, se contina preguntando si alguno de los elementos del vector es mltiplo de 3 con la lnea: if (vector[i] % 3 == 0) que en caso de ser verdadero, se incrementa el contador de los mltiplos de 3. El segundo if, es similar al primero, pero con los mltiplos de 5. Antes de cerrar el ciclo for, se realiza el acumulador de todos los elementos almacenados en el vector. Fuera del for, se realizan las impresiones correspondientes.

Ejemplo Nro. 35: Almacenar en dos vectores las notas de dos cursos A y B. El curso A tiene 20 alumnos y el curso B tiene 15 alumnos. Luego realizar las siguientes operatorias: a) Cuntos alumnos de cada curso estn promocionado (nota mayor o igual a 7). b) Cuntos alumnos de cada curso quedaron Libres (nota menor a 4). c) Promedio general de cada curso. d) Indicar cual es el curso de mayor promedio. Inicio promocionadoA = promocionadoB = libreA = libreB = suma = 0

Falso

## a [i] suma = suma + a [i] 2 1 3

- 112 -

Programacin I Telecomunicaciones

Falso

a [i] >= 7

Falso

a [i] < 4

libreA ++

Falso

b [i]

## suma = suma + b [i]

Falso

b [i] >= 7

Falso

b [i] < 4

libreB ++ 4

Programacin I Telecomunicaciones

- 113 -

pb = suma / b.length

Cant. De Promocionados en el curso A: + promocionadoA Cant. De Libres en el curso A: + libreA Promedio del curso A: + pa Cant. De Promocionados en el curso B: + promocionadoB Cant. De Libres en el curso B: + libreB Promedio del curso B: + pb

Falso

pa > pb

## Curso de mayor promedio: A

Fin En este caso, se deben realizar dos ciclos de ingreso de datos, uno para el procesamiento de las notas del curso A y otro para el procesamiento de las notas del curso B, ya que los cursos tienen distinta cantidad de alumnos. Observar que se utiliza una sola variable suma para acumular la suma de las notas de cada curso, esto es debido a que luego de obtener la suma del curso A, se calcula el promedio del mismo y se lo almacena en la variable pa, a partir de all, la variable suma no vuelve a ser utilizada para el curso A, por lo tanto, se la coloca en cero nuevamente y se la utiliza para acumular las notas del curso B en el segundo ciclo for. Al finalizar el segundo ciclo se calcula el promedio del curso B y se imprimen los contenidos de las variables en juego. Queda por parte del alumno, analizar la lgica completa del Diagrama de Flujo. import hsa.Console; class Ejemplo35 { static Console c; public static void main (String arg []) { c = new Console (); int [] a; a = new int [20]; - 114 Programacin I Telecomunicaciones

Programacin I Telecomunicaciones

- 115 -

Ejercicios Propuestos
7.1 - Un comercio tiene almacenados los precios de sus productos en un vector de 30 elementos. Realizar las siguientes operatorias: a) b) c) d) e) f) Carga del vector de Precios. Impresin del vector. Cuntos productos se tienen un precio menor a \$100. Cuantos productos tienen un precio entre \$100 y \$200. Cuntos productos tienen un precio mayor a \$200. Importe total que representan todos los productos.

7.2 - Cargar tres vectores numricos de 10 elementos y determinar cual es el que tiene un valor acumulado mayor. 7.3 - Realizar la carga de 2 vectores de 5 elementos cada uno y obtener la suma de ellos. La suma de dos vectores es componente por componente. Ejemplo: Vector 1: ( 4 6 2 1 5 ) Vector 2: ( 2 1 7 3 4 ) Suma : (67949)

7.4 - Ingresar un vector de 10 elementos de valores enteros y luego determinar cuntos tienen un valor mayor al valor del quinto elemento. 7.5 - Cargar un vector de 15 elementos y calcular el promedio de los primeros 10 elementos. 7.6 - Realizar la carga de un vector de 12 componentes y dividirlo en dos vectores de 6 componentes cada uno, de manera que el primero tenga los valores de los ndices pares y el segundo los valores de los ndices impares. Ejemplo:

## Vector = ( 5 2 9 4 8 3 5 6 2 5 7 1 ) Vector de ndices pares: ( 5 9 8 5 2 7 ) Vector de indices impares: ( 2 4 3 6 5 1 )

Tener presente que la primera componente est en el ndice cero que es par.

- 116 -

Programacin I Telecomunicaciones

Mtodos Vectores

TEMAS: Mtodos en Java Clases en Java Zonas de un programa Mtodos que retornan Valores Vectores Paralelos

Clase

Clase Nmero: 8

Mtodos en Java
Introduccin
Se puede decir que en Java, toda la lgica de programacin est agrupada en Funciones o Mtodos. Se define a una Funcin o Mtodos, a una fraccin de programa que cumple una misin especfica. Generalmente el trmino funcin es utilizado en la Programacin Estructurada y el trmino Mtodo, es utilizado en la Programacin Orientada a Objetos. Bsicamente un Mtodo es: Un bloque de cdigo que tiene un nombre, Recibe opcionalmente parmetros o argumentos, Contiene sentencias o instrucciones, Devuelve opcionalmente un valor de algn tipo conocido.

## La sintaxis sera la siguiente: TipoDevuelto nombreDelMetodo ( ListaDeParametros ) { Bloque de cdigo; }

El TipoDevuelto puede ser cualquiera de los visto hasta el momento, por ejemplo: int, char, float, String. En caso de que el mtodo no devuelva ningn valor se coloca la palabra void. Los nombres de los mtodos siempre deben comenzar con una letra en minscula, cuando se deben colocar nombres formados por dos o mas palabras, se coloca la primer letra de la primer palabra en minscula y la primer letra de las siguientes palabras en maysculas. Tener en cuenta que, al igual que los nombres de las variables, no se puede colocar espacios en blanco entre cada palabra del nombre del mtodo a realizar.

Programacin I Telecomunicaciones

- 117 -

Ejemplos vlidos de nombres de mtodos: void cargarDatos() { Sentencias; } int cubo (int x) { Sentencias; } void listadoDePrecios() { Sentencias; }

Clases en Java
Se define a una Clase como una coleccin de variables y mtodos, que a partir de la misma, se pueden crear diversos ejemplares de dicha clase. Cada ejemplar de una clase, recibe el nombre de Instancia de la clase y se pueden crear tantas instancias como se quiera.

## Zonas de un programa completo en Java

Las diferentes zonas que intervienen en un programa en lenguaje Java son las siguientes: Importacin de libreras. Ejemplo: import hsa.Console Nombre de la clase. Ejemplo: class Listado Zona de declaracin de variables miembros de la clase. Ejemplo: String nombre; int edad; float sueldo;

Declaracin del Constructor (Opcional) Zona de declaracin de Mtodos. Programa principal Ejemplo: public static void main(String[] args)

- 118 -

Programacin I Telecomunicaciones

Ejemplo Nro. 36: Desarrollar un programa que tenga dos mtodos, uno para la introduccin de tres nmeros y otro mtodo para calcular e imprimir el promedio de ellos.

import hsa.Console; class Ejemplo36 { static Console c; int n1, n2, n3;

Variables Miembros

Mtodos void ingresoDeDatos () { c.print ("Ingrese primer Numero: "); n1 = c.readInt (); c.print ("Ingrese primer Numero: "); n2 = c.readInt (); c.print ("Ingrese primer Numero: "); n3 = c.readInt (); } void calcularPromedio () { float prom; prom = (float) (n1 + n2 + n3) / 3; c.println(); c.print ("El promedio es: " + prom); } public static void main (String arg []) { c = new Console (); Ejemplo36 e; e = new Ejemplo36 (); c.println("Promedio de 3 Numeros"); c.println("---------------------"); e.ingresoDeDatos (); e.calcularPromedio (); } }

Ejemplar de la clase

Explicacin: Al principio se coloca la lnea de Importacin de libreras: import hsa.Console; Indicando que se incluyan en el programa todas las instrucciones de la clase Console. En la segunda lnea, se define la clase, llamada en este caso Ejemplo36, luego, en la tercera lnea se define el objeto c de la clase Console, este objeto estar capacitado para utilizar los mtodos de entrada y salida. Programacin I Telecomunicaciones - 119 -

A continuacin, se definen las variables miembros que se utilizarn en el programa, y luego se realizan los mtodos de ingreso y de calcular el promedio de los nmeros ingresados. El programa principal es el encargado de llamar a cada uno de los mtodos necesarios para la resolucin del problema planteado. En el programa principal, al igual que en los ejemplos anteriores, se crea un objeto de la clase Console, luego se define un objeto de la clase Ejemplo36 llamado e: Ejemplo36 e; Posteriormente se crea el objeto e, con la lnea: e = new Ejemplo36 (); Estas dos lneas realizadas anteriormente, se pueden realizar en una sola, de la siguiente manera: Ejemplo36 e = new Ejemplo36 (); Se coloca a modo de ttulo, la leyenda Promedio de 3 Nmeros y se la subraya, luego se llaman a los mtodos realizados, teniendo en cuenta que para llamar a un mtodo, se lo realiza colocando el nombre del objeto, luego un punto y luego el nombre del mtodo. En este caso: e.ingresoDeDatos (); e.calcularPromedio ();

Ejemplo Nro. 37: Realizar un programa que permita ingresar un numero y muestre la tabla de multiplicar del mismo del 1 al 12. Los diagramas de los mtodos seran los siguientes: void tablaDeMultiplicar ( ) void ingresoDeDato ( ) i = 1; n i < 12; i++

Falso

n+x+i+=+r Fin

## Fin El diagrama del programa principal sera:

- 120 -

Programacin I Telecomunicaciones

Inicio

ingresoDeDato ( )

Fin

import hsa.Console; class Ejemplo37 { static Console c; int n; void ingresoDeDato () { c.print ("Ingrese un Numero: "); n = c.readInt (); } void tablaDeMultiplicar () { int r; c.println (); c.println ("Tabla de Multiplicar del numero: " + n); c.println (); for (int i = 1 ; i <= 12 ; i++) { r = n * i; c.println (n + " x " + i + " = " + r); } } public static void main (String arg []) { c = new Console (); Ejemplo37 e = new Ejemplo37 (); e.ingresoDeDato (); e.tablaDeMultiplicar (); } } La variable r que se define en el mtodo tablaDeMultiplicar, recibe el nombre de Variable Local, y tiene la particularidad de que tiene accin nicamente dentro del mtodo, fuera de l, no existe, es decir, que el espacio que estaba ocupando en el momento en que se encontraba utilizada, queda liberado cuando la ejecucin del programa sale del mtodo. Programacin I Telecomunicaciones - 121 -

## Mtodo que devuelven o retornan un valor

Cuando se desea que un mtodo devuelva un valor, es necesario colocar un Tipo en la cabecera del mtodo, delante del nombre del mismo. El Tipo colocado, tiene que ver con el Tipo de valor que se desea que retorne el mtodo. Ejemplo Nro. 38: Desarrollar un programa que tenga un mtodo que acepte un nmero entero y retorne el cubo del mismo. int cubo ( x ) void proceso ( ) Inicio

z=x*x*x

proceso ( )

Retornar z

resultado = cubo ( n )

Fin

Fin

Fin

import hsa.Console; class Ejemplo38 { static Console c; int cubo (int x) { int z; z = x * x * x; return z; } void proceso () { int n, resultado; c.print ("Ingrese un Numero: "); n = c.readInt (); resultado = cubo (n); c.print ("Su cubo es: " + resultado); }

- 122 -

Programacin I Telecomunicaciones

public static void main (String arg []) { c = new Console (); Ejemplo38 e = new Ejemplo38 (); e.proceso (); } }

## Vectores utilizando Mtodos

Ejemplo Nro. 39: En una empresa se almacenaron los sueldos de 10 personas. Desarrollar un programa para realizar: 1) 2) 3) 4) Carga de los sueldos en un Vector. Impresin de todos los sueldos. Cuntos tienen un sueldo superior a \$4000. Mostrar todos los sueldos que estn por debajo del promedio. void cargarSueldos ( )

## i = 0; i < s.length; i++

Falso

s [i]

Fin

void imprimirSueldos ( )

## i = 0; i < s.length; i++

Falso

s [i]

Fin

Programacin I Telecomunicaciones

- 123 -

void punto3 ( )

float promedio ( )

superior = 0

suma = 0

Falso

Falso

Retornar prom

Fin

Fin

## Programa Principal Inicio void punto4 ( ) cargarSueldos ( ) i = 0; i < s.length; i++

imprimirSueldos ( )

## s[i] < promedio() punto3 ( ) s[i] punto4 ( )

Fin

Fin

- 124 -

Programacin I Telecomunicaciones

import hsa.Console; class Ejemplo39 { static Console c; float [] s; Ejemplo39 () { s = new float [10]; } void cargarSueldos () { c.println ("Cargue los sueldos de las 10 personas: "); for (int i = 0 ; i < s.length ; i++) { c.print ("Ingrese sueldo[" + (i + 1) + "]: "); s [i] = c.readFloat (); } } void imprimirSueldos () { c.println ("Sueldos almacenados: "); for (int i = 0 ; i < s.length ; i++) { c.println (" \$ " + s [i]); } } void punto3 () { int superior = 0; for (int i = 0 ; i < s.length ; i++) { if (s [i] > 4000) superior++; } c.println (); c.println ("Los sueldos superiores a \$4000 son: " + superior); } float promedio () { float suma = 0; float prom; for (int i = 0 ; i < s.length ; i++) { suma = suma + s [i]; } prom = suma / s.length; return prom; }

Programacin I Telecomunicaciones

- 125 -

void punto4 () { c.println(); c.println("El promedio de sueldos es: \$ " + promedio()); c.println(); c.println("Los sueldos inferiores al promedio son: "); for (int i = 0 ; i < s.length ; i++) { if (s[i] < promedio() ) c.print(s[i] + " "); } } public static void main (String arg []) { c = new Console (); Ejemplo39 e = new Ejemplo39 (); e.cargarSueldos (); c.clear(); e.imprimirSueldos(); e.punto3(); e.punto4(); } } Explicacin: El programa comienza definiendo la variable s (sueldo) como un vector de componentes float, definiendo as, una variable miembro de la clase Ejemplo39. En este ejemplo se ha colocado por primera vez, la zona del Constructor. Un Constructor es un mtodo que se utiliza para inicializar las variables miembros de la clase, en este caso, se ha utilizado para crear el vector de sueldos. Todo Constructor, tiene la particularidad de ser el primer mtodo que se ejecuta cuando se inicia la ejecucin del programa y no es necesario invocarlo del programa principal. Para que un mtodo sea Constructor, es necesario que tenga el mismo nombre de la clase, en este caso, Ejemplo39, y debe llevar los parntesis, dentro de los cuales, opcionalmente puede haber parmetros. A continuacin se encuentra el mtodo cargarSueldos(), que es el encargado de pedir los sueldos que se quieren almacenar en el vector. La leyenda impresa en el c.print: c.print ("Ingrese sueldo[" + (i + 1) + "]: "); Tiene por objeto, mostrar la palabra sueldo con un subndice que comienza en 1, debido a (i + 1). Esto es simplemente a modo visual, porque internamente, en la memoria, el vector se almacenar desde la posicin cero. En la pantalla aparecer: Ingrese sueldo[1]: Ingrese sueldo[2]: Etc.

- 126 -

Programacin I Telecomunicaciones

Luego esta el mtodo para imprimir los sueldos almacenados en el vector, simplemente consta de un ciclo for con la impresin dentro de l. El siguiente mtodo, es el punto 3 del enunciado del ejercicio, Cuntos tienen un sueldo superior a \$4000. Para ello, se utiliza un ciclo for y dentro de l, un if para preguntar si algunos de los sueldos es mayor a 4000, que en caso de ser verdadero, se incrementa en uno, a la variable superior, que es la encargada de almacenar los mayores a 4000. Fuera del ciclo for, se imprime el valor de la variable superior. A continuacin, se realiz el mtodo del clculo del promedio, este mtodo retorna un valor, por lo tanto tiene que tener un tipo delante del nombre. Como un promedio siempre es un resultado numrico Real, se coloca el tipo float y para su clculo, se realiza la suma de todos los sueldos y posteriormente se la divide por la cantidad de elementos. Antes de finalizar el mtodo, se debe colocar la instruccin return con la variable calculada. El mtodo del punto4 es el encargado de llamar al mtodo promedio para averiguar cuales sueldos son inferiores al promedio, Este proceso consiste en un ciclo for y dentro de l, una pregunta solicitando al mtodo promedio(). En caso de que la pregunta resulte verdadera, se imprime el sueldo en cuestin. Por ltimo, se realiza el programa principal, creando un objeto de la clase Ejemplo39 para poder llamar a los diversos mtodos de la clase. La ejecucin del programa dara el siguiente resultado:

Ejemplo Nro. 40: Un comercio tiene dos turnos (maana y tarde) en los que trabajan 8 empleados (4 por la maana y 4 por la tarde). Confeccionar un programa que permita almacenar los sueldos de los empleados agrupados por turno. Imprimir los gastos en sueldos de cada turno.

Programacin I Telecomunicaciones

- 127 -

void cargarSueldosM ( )

void cargarSueldosT ( )

Falso

Falso

sM [i]

sT [i]

Fin

Fin

## float gastos ( float[ ] s )

void imprimirGastos ( )

suma = 0

Falso

## suma = suma + s[i]

Fin

Retornar suma

Inicio

Fin

cargarSueldosM( )

## cargarSueldosT( ) Programa Principal

imprimirGastos( )

Fin

- 128 -

Programacin I Telecomunicaciones

El programa quedara de la siguiente manera: import hsa.Console; class Ejemplo40 { static Console c; float [] sM; float [] sT; Ejemplo40 () { sM = new float [4]; sT = new float [4]; }

## Creacin de los Vectores

void cargarSueldosM () { c.println ("Cargue los sueldos del Turno Manana: "); for (int i = 0 ; i < sM.length ; i++) { c.print ("Ingrese sueldo[" + (i + 1) + "]: "); sM [i] = c.readFloat (); } } void cargarSueldosT () { c.println ("Cargue los sueldos del Turno Tarde: "); for (int i = 0 ; i < sT.length ; i++) { c.print ("Ingrese sueldo[" + (i + 1) + "]: "); sT [i] = c.readFloat (); } } float gastos (float [] s) { float suma = 0; for (int i = 0 ; i < s.length ; i++) { suma = suma + s [i]; } return suma; Llamado al mtodo gastos con los } vectores sM y sT. void imprimirGastos () { c.println (); c.println ("Gasto del turno Manana: \$ " + gastos(sM)); c.println ("Gasto del turno Tarde : \$ " + gastos(sT)); }

Programacin I Telecomunicaciones

- 129 -

public static void main (String arg []) { c = new Console (); Ejemplo40 e = new Ejemplo40 (); e.cargarSueldosM (); c.println(); e.cargarSueldosT (); c.println(); e.imprimirGastos (); } }

## La ejecucin del programa muestra la siguiente salida:

Lo nuevo en este ejemplo, es el mtodo: float gastos (float [] s) { float suma = 0; for (int i = 0 ; i < s.length ; i++) { suma = suma + s [i]; } return suma; } Que acepta como parmetro un vector de componentes tipo float y retorna el valor de la suma de los componentes de dicho vector pasado como parmetro. Este mtodo establece una de las ventajas de trabajar con procesos independientes, ya a l se le puede pasar cualquier vector y entregar la suma de sus componentes. En este caso, se le enviarn los vectores del turno maana y del turno tarde, cosa que se realiza en el mtodo imprimirGastos.

- 130 -

Programacin I Telecomunicaciones

Es de suma importancia comprender la reutilizacin de los mtodos, justamente esa es una de las potencialidades de la programacin. En el ejercicio anterior, el mtodo gastos, se lo utiliza en dos oportunidades y recibe distintos vectores realizando el clculo de la suma de cada uno sin ningn problema, lo que ahorra escribir una nueva funcin para que trabaje con el segundo vector.

Vectores Paralelos
El concepto de Vectores Paralelos se d, cuando hay dos o ms vectores relacionados entre s a travs del subndice. Ejemplo: 0 Productos Televisor 1 Notebook 2 Radio 3 Dvd 4 Ventilador

Precios

4500

3100

340

650

280

Los dos vectores, Productos y Precios, se encuentran relacionados por medio de la posicin que ocupa cada elemento, por ejemplo, al producto Televisor que est en la posicin cero, le corresponde el precio de 4500, que se encuentra tambin en la posicin cero, y as sucesivamente.

Ejemplo Nro. 41: Realizar la carga de los vectores Productos y Precios de 5 artculos. Posteriormente, realizar un listado en dos columnas indicando el valor acumulado de todos los productos. Los diagramas correspondientes, se muestran en la pgina siguiente.

Programacin I Telecomunicaciones

- 131 -

void cargarDatos ( )

void imprimirDatos ( )

Falso

suma = 0

productos [i]

Falso

precios [i]

Fin

## La suma de los precios es: + suma Inicio Fin

cargarDatos()

imprimirDatos()

Inicio

import hsa.Console; class Ejemplo41 { static Console c; String [] productos; float [] precios; Ejemplo41 () { productos = new String [5]; precios = new float [5]; } Definicin de los vectores

## Creacin de los vectores

- 132 -

Programacin I Telecomunicaciones

void cargarDatos () { c.println ("Cargue los datos de los articulos: "); c.println (); for (int i = 0 ; i < productos.length ; i++) { c.print ("Ingrese producto[" + (i + 1) + "]: "); productos [i] = c.readLine (); c.print ("Ingrese su precio: "); precios [i] = c.readFloat (); c.println (); } } Se cargan los dos vectores en el mismo ciclo for void imprimirDatos () { float suma = 0; int linea = 5; c.setCursor (3, 10); c.println ("Listado de Productos"); c.setCursor (4, 10); c.println ("--------------------"); for (int i = 0 ; i < productos.length ; i++) { c.setCursor (linea, 10); c.print (productos [i]); c.setCursor (linea, 30); c.print (precios [i],8,2); linea++; suma = suma + precios [i]; } c.println (); c.println (); c.print (" La suma de los precios es: "); c.print (suma,8,2); } public static void main (String arg []) { c = new Console (); Ejemplo41 e = new Ejemplo41 (); e.cargarDatos (); c.clear (); e.imprimirDatos (); } }

Programacin I Telecomunicaciones

- 133 -

Lo nuevo en este programa est en el mtodo imprimitDatos(), en donde se utiliza la instruccin c.setCursor para posicionarse en un lugar de la pantalla. Esta instruccin acepta como parmetros, la fila y la columna en donde se quiere posicionar, en el ejemplo figura: c.setCursor (3, 10); c.println ("Listado de Productos"); c.setCursor (4, 10); c.println ("--------------------"); La primera lnea establece que se posicione el cursor en la fila 3 y columna 10 y luego imprima la leyenda Listado de Productos, posteriormente, se posiciona una lnea mas abajo, lnea 4, y en la misma columna 10, para subrayar el ttulo. Se contina con el ciclo for para realizar el listado completo de todos los productos con sus respectivos precios. Se posiciona el cursor donde lo indica el valor de la variable linea, que ha sido inicializada en 5 y en la columna 10, all se imprime el nombre del primer producto, o sea, productos[0], porque la primera vez, la variable i vale cero, luego en la misma lnea 5, pero en la columna 30, se imprime el valor del precio correspondiente a la posicin cero. El valor de 8,2 que figura en la impresin, tiene el siguiente significado: 8 significa el valor del campo en donde se debe imprimir, es decir 8 espacios, y 2 significa la cantidad de decimales con que se deber imprimir el precio del producto. Es para que todos los precios se muestren alineados a la derecha y con dos decimales. Antes de cerrar el ciclo for, se debe incrementar la variable linea, para seguir imprimiendo en las lneas sucesivas los otros pares de datos. Adems, tambin antes de cerrar el for, se debe acumular los precios pera poder imprimir fuera de l, la suma de ellos. La salida del programa se ver de la siguiente manera:

- 134 -

Programacin I Telecomunicaciones

Ejercicios Propuestos
8.1 - Desarrollar u programa que permita ingresar un vector de 7 elementos y luego informe: a) El valor acumulado de todos los elementos. b) El valor acumulado de todos los elementos mayores a 50 c) Cantidad de valores mayores a 50. 8.2 - Cargar 3 vectores de 5 elementos cada uno. Se deber imprimir un vector por lnea junto con el promedio de cada uno. Por ltimo, determinar cual es el que tiene mayor promedio. 8.3 - En un curso de 8 alumnos se registraron las notas de sus exmenes y se deben procesar de acuerdo a lo siguiente: a) Ingresar Nombre y Nota de cada alumno. b) Realizar un listado en tres columnas de Nombres, Notas y Condicin de alumno. En la columna Condicin, colocar Muy Bueno si la nota es mayor o igual a 8, Bueno si la nota est entre 4 y 7.99, y colocar Insuficiente si la nota es inferior a 4. c) Imprimir cuantos alumnos tienen la leyenda Muy Bueno. Ejemplo:

Listado de notas de alumnos Nombre Javier Marcelo Viviana Ral Ricardo Roxana Hugo Rita Nota 6 9 7 3 10 5 2 8 Condicin Bueno Muy Bueno Bueno Insuficiente Muy Bueno Bueno Insuficiente Muy Bueno

## Cantidad de alumnos Muy Buenos: 3

8.4 - Cargar en dos vectores Nombres de productos con sus respectivos Precios. Posteriormente ingresar un valor y mostrar todos los nombres que tienen un precio mayor al valor ingresado. Programacin I Telecomunicaciones - 135 -

8.5 - Desarrollar un mtodo que acepte dos vectores del mismo tamao como parmetros, y retorne el producto escalar de los mismos. El producto escalar de dos vectores, es un nmero que se calcula acumulando los productos de las componentes del mismo ndice. Ejemplo: V1[i] = [ 2, 8, 5, 3, 8 ] V2[i] = [ 6, 3, 9, 4, 7 ] Producto Escalar = 2 * 6 + 8 * 3 + 5 * 9 + 3 * 4 + 8 * 7 = 149

8.6 - En una empresa de 12 empleados se necesita realizar las siguientes operatorias: a) b) c) d) e) Ingresar los nombres de los empleados con sus respectivos sueldos. Indicar cuntos cobran ms de \$3500. Cuntos cobran menos de \$2500. Imprimir en dos columnas, los nombres de los empleados con sus respectivos sueldos. Imprimir el importe total que debe tener la empresa para abonar el sueldo a sus empleados.

8.7 - Desarrollar un programa que permita cargar las frecuencias de 7 emisoras de FM con sus respectivos nombres. Luego realizar lo siguiente: a) Impresin en dos columnas de las frecuencias y los nombres de emisoras. b) Ingresar un valor de emisora y mostrar todos los nombres de emisoras que tienen una frecuencia menor a la ingresada.

- 136 -

Programacin I Telecomunicaciones

Mtodos Vectores

## TEMAS: Procesos Algortmicos Mayor y Menor elemento Consultas Ordenamientom de Vectores

Clase

Clase Nmero: 9

Procesos Algortmicos
En esta clase se vern las tcnicas y metodologas algortmicas ms comunes a utilizar en la mayora de los programas y sistemas a realizar, como por ejemplo: Bsqueda del Mayor y Menor, Ordenamiento, etc. En lo que respecta a Ordenamiento de una lista de datos, existen numerosos procesos, y cada uno con una ventaja distinta con respecto al otro, aqu se aprender a utilizar los procesos ms sencillos y quedar por parte del alumno investigar sobre las dems.

## Mayor y Menor elemento de un Vector

Dado una lista de elementos almacenadas en un vector, una actividad muy util, es encontrar el mayor y menor elemento de la lista. Es de suma importancia, no solamente encontrar el mayor elemento, sin, la posicin que ocupa dentro del vector. Como generalmente se trabaja con Vectores Paralelos, encontrando la posicin del mayor elemento en un vector, se tendr tambin a quin le coresponde por medio de esa posicin. Ejemplo: Suponer que se tienen dos vectores, uno de Nombres de personas y otro con las edades de las mismas: Nombres de Personas Mario Alejandra Laura Santiago Luis

Edades 27 0 21 1 35 2 28 3 24 4

Se puede realizar un algoritmo que retorne la posicin de la persona de mayor edad, en el ejemplo sera la posicin nmero 2 con 35 aos. Como se est Programacin I Telecomunicaciones - 137 -

trabajando con vectores paralelos, la Posicin 2 le corresponde a Laura, por lo tanto, se puede decir que obteniendo la posicin del mayor en un vector, se puede conocer todos los datos asociados en todos los otros vectores paralelos, por medio del mismo ndice.

Ejemplo Nro. 42: Dados tres vectores de nombres, edades y sueldos de personas, imprimir todos los datos de la persona de mayor edad. El algoritmo de la busqueda del mayor con su posicin, consiste en lo siguiente:

Edades [i] m 0 1 2 3 4 27 21 35 28 24 Tomar el primer elemento del vector y almacenarlo en una variable auxiliar, por ejemplo m y guardar en la variable p el valor cero, que corresponde a la primera posicin. Este valor guardado en m se utilizar para comparar con el resto de los elementos del vector. 27 p 0

Una vez almacenado el primer elemento en m, se realiza un ciclo for desde la posicin 1 hasta la ltima y con una estructura if dentro de l, preguntando si alguno de los sucesivos componentes del vector es mas grande al valor almacenado en m. En caso de ser verdadero, se le asigna a m el nuevo valor y se guarda en p la nueva posicin, dada por la variable ndice del for a cada instante. Una vez recorrido todo el vector, quedar en la variable m el mayor de los elementos, y en la variable p la posicin que ocupa dentro del vector. Con la posicin del mayor, obtenida en la variable p, se imprimien los datos que sean necesarios, que en este caso, en el ejemplo 42, se pide imprimir el nombre y el sueldo que le corresponde. Debido a que se est trabajando con Vectores Paralelos, los datos que correspondern a la persona de mayor edad son los siguiente: nombres[p] y sueldos[p]

## El diagrama y programa se muestran a continuacin:

- 138 -

Programacin I Telecomunicaciones

void cargarDatos ( )

Falso

nombres [i]

sueldos [i]

Fin

Falso

## i = 1; i < edades.length; i++

Retornar p

Fin

Programacin I Telecomunicaciones

- 139 -

void mostrarDatos()

El nombre de mayor edad es: + nombres[p] La mayor edad es: + edad[p] Le corresponde un sueldo de: + sueldo[p]

Fin

import hsa.Console; class Ejemplo42 { static Console c; String [] nombres; int [] edades; float [] sueldos; Ejemplo42 () { nombres = new String [5]; edades = new int [5]; sueldos = new float [5]; } void cargarDatos () { c.println ("Cargue los datos de las personas: "); c.println (); for (int i = 0 ; i < nombres.length ; i++) { c.print ("Ingrese nombre[" + (i + 1) + "]: "); nombres [i] = c.readLine (); c.print ("Ingrese su edad: "); edades [i] = c.readInt (); c.print ("Ingrese su sueldo: "); sueldos [i] = c.readFloat (); c.println (); } }

- 140 -

Programacin I Telecomunicaciones

int mayor (int [] edades) { int m = edades [0]; int p = 0; for (int i = 1 ; i < edades.length ; i++) { if (edades [i] > m) { m = edades [i]; p = i; } } return p; } void imprimirDatos () { int p; c.setCursor (3, 10); c.println ("Datos de la persona de Mayor edad"); c.setCursor (4, 10); c.println ("---------------------------------"); c.println (); p = mayor (edades); c.println("El nombre de mayor edad es: " + nombres [p]); c.println("La mayor edad es: " + edades [p]); c.println("Le corresponde un sueldo de: " + sueldos [p]); } public static void main (String arg []) { c = new Console (); Ejemplo42 e = new Ejemplo42 (); e.cargarDatos (); c.clear (); e.imprimirDatos (); } }

Para ralizar la bsqueda del Menor, simplemente se debe cambiar el smbolo de mayor por menor

Programacin I Telecomunicaciones

- 141 -

## Funciones bsicas para el manejo de cadenas de caracteres

< 0 > 0 = 0

Programacin I Telecomunicaciones

## Busqueda de un elemento en un vector

Consiste en recorrer y comparar cada elemento de un vector con una variable auxiliar. Ejemplo: Buscar los datos de una persona por su nombre, buscar el saldo de un cliente, buscar las nota de un alumno, etc. Ejemplo Nro. 43: Desarrollar un programa que permita cargar los nombres de 5 emisoras de FM y sus respectivas frecuencias. Luego de la carga, realizar una consulta ingresando el nombre de una emisora, y en caso de existir, mostrar la frecuencia que le corresponde. emisoras

frecuencias
96.1 100.5 89.7 105.3 102.3

Importante: Hay que tener en cuenta que los vectores son estructuras de datos cuya informacin se pierde cuando finaliza la ejecucin del programa.

Para realizar la bsqueda se utiliza una variable auxiliar de tipo String (emisoraAux) para ingresar por teclado el nombre de la emisora a buscar. Otra variable importante es posicion que indica en qu lugar del vector se encuentra el nombre consultado. Esta variable posicin se inicializa con el valor -1 como indicando que la emisora buscada hasta el momento no se encuentra en el vector (no se usa el cero, porque el cero es una posicin vlida dentro del vector). Luego en una estructura repetitiva se controla cada componente del vector emisoras con la variable auxiliar (emisoraAux). En caso que coincida, se guarda en la variable posicion, el contenido de la variable del for que representa el nmero de componente en ese momento.

Observar que en Java, para la comparacin de cadenas se utiliza las sentencias: equals(), equalsIgnoreCase o compareTo()

Programacin I Telecomunicaciones

- 143 -

void cargarDatos ( )

## i = 0; i < emisoras.length; i++

Falso

emisoras [i]

frecuencias [i]

Fin

void consulta ( )

posicion = -1

emisoraAux

## i = 0; i < emisoras.length; i++

Falso

emisoraAux.equal(emisoras[i])

posicion = i

- 144 -

Programacin I Telecomunicaciones

posicion != -1

## Le corresponde la frecuencia de : frecuencias[posicion]

Fin

import hsa.Console; class Ejemplo43 { static Console c; String [] emisoras; float [] frecuencias; Ejemplo43 () { emisoras = new String [5]; frecuencias = new float [5]; } void cargarDatos () { c.println ("Cargue las emisoras de FM: "); c.println (); for (int i = 0 ; i < emisoras.length ; i++) { c.print ("Ingrese emisora[" + (i + 1) + "]: "); emisoras [i] = c.readLine (); c.print ("Ingrese su frecuencia: "); frecuencias [i] = c.readFloat (); c.println (); } }

Programacin I Telecomunicaciones

- 145 -

void consultas () { int posicion; String emisoraAux; char op; do { c.clear (); c.println ("Consultas por emisoras"); c.println ("----------------------"); posicion = -1; c.println (); c.print ("Ingrese la emisora a buscar: "); emisoraAux = c.readLine (); for (int i = 0 ; i < emisoras.length ; i++) { if (emisoraAux.equalsIgnoreCase (emisoras [i])) { posicion = i; } } c.println (); if (posicion != -1) { c.print ("Le corresponde la frecuencia de: "); c.println (frecuencias [posicion] + " MHz"); } else { c.println ("No existe esa emisora"); } c.println (); c.println (); c.print ("Desea realizar otra consulta (s/n): "); op = c.readChar (); } while (op == 'S' || op == 's'); } public static void main (String arg []) { c = new Console (); Ejemplo43 e = new Ejemplo43 (); e.cargarDatos (); e.consultas (); System.exit (0); } }

- 146 -

Programacin I Telecomunicaciones

Explicacin del proceso Consultas: Se comienza definiendo las variables que intervienen en el proceso, la variable de posicin, la variable auxiliar de bsqueda, emisoraAux y la variable de opcin op. Esta variable op ser utilizada para poder volver a hacer otra consulta o n. Se realiza un ciclo do..while para permitir precisamente realizar otra consulta, este ciclo no figuraba en el diagrama, ya que en l, se ha desarrollado nicamente la esencia del algoritmo de bsqueda. Cada vez que se comienza una consulta, se limpia la pantalla con la instruccin c.clear() y se coloca el ttulo. Se inicializa la variable posicion en el valor de -1, de esta manera, se asegura que no corresponde a una posicin vlida del vector. Posteriormente, se pide la emisora a buscar con la lnea: emisoraAux = c.readLine (); Luego se ingresa en un ciclo for con una condicin dentro para verificar si la emisora auxiliar coincide con alguna de las sucesivas emisoras del vector. En caso de ser verdadera, se guarda el ndice de ese instante en la variable posicion. Al salir del ciclo for, se verifica el valor de la variable posicion, que en caso de tener un valor distinto de -1, es porque se ha encontrado la emisora auxiliar buscada, imprimiendo el valor de la frecuencia que le corresponde. Si la variable posicion qued con el valor de -1, indica que so se encontr a la emisora buscada y por lo tanto, se imprime la leyenda No existe esa emisora. Posteriormente se pregunta si se quiere realizar otra consulta, aceptando la letra S o N. Si se responde con la letra S, se retorna al ciclo do y se realiza una nueva consulta, si se responde con letra N, se finaliza el programa.

Ordenamiento de Vectores
Ordenamiento es la operacin de arreglar los registros de una tabla, vector o algn tipo de estructura, en orden secuencial de acuerdo a un criterio de ordenamiento. El ordenamiento se efecta con base en el valor de algn campo o dato. El propsito principal de un ordenamiento es el de facilitar las bsquedas de los miembros del conjunto ordenado, o mostrar un listado de datos. El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una secuencia tal, que represente un orden, el cual puede ser numrico, alfabtico o incluso alfanumrico, ascendente o descendente. Entre los mtodos ms destacados se encuentran: Insercin directa Seleccin directa Burbuja Shell Quick sort. El mtodo que se ver en este curso se llama Mtodo de la Burbuja (Bubble Sort). Es un sencillo algoritmo de ordenamiento. Funciona revisando cada Programacin I Telecomunicaciones - 147 -

elemento de la lista que va a ser ordenada con el siguiente, intercambindolos de posicin, si estn en el orden equivocado. Es necesario revisar varias veces toda la lista hasta que no se necesiten ms intercambios, lo cual significa que la lista est ordenada. Este algoritmo obtiene su nombre de la forma con la que suben por la lista los elementos durante los intercambios, como si fueran pequeas "burbujas". Ejemplo Nro. 44: Desarrollar un programa para ordenar un vector de valores enteros. v[i] 120 75 82 55 49

i = 0;

i < 4;

i++

Falso

## auxi = v[i] v[i] = v[i+1] v[i+1] = auxi

Esta primera aproximacin tiene por objetivo analizar los intercambios de elementos dentro del vector. El algoritmo consiste en comparar si la primera componente es mayor a la segunda, en caso que la condicin sea verdadera, intercambiamos los contenidos de las componentes.

- 148 -

Programacin I Telecomunicaciones

En este ejemplo: es 120 mayor a 75? La respuesta es verdadera, por lo tanto se intercambia el contenido de la componente 0 con el de la componente 1. El vector quedara con el intercambio de la siguiente manera: 75 v [0] 120 v [1]

Luego se compara el contenido de la componente 1 con el de la componente 2: Es 120 mayor a 82? La respuesta es verdadera entonces se intercambian. Es decir que el vector quedara as: 75 v[0] 82 v[1] 120 v[2]

Si hay 5 componentes hay que hacer 4 comparaciones, por eso el for va de 0 a 3. Generalizando: si el vector tiene N componentes hay que hacer N-1 comparaciones. v[0] 75 v[1] 120 v[2] 82 v[3] 55 v[4] 49

75

85

120

55

49

75

82

55

120

49

75

82

55

49

120

Podemos ver cmo el valor ms grande del vector desciende a la ltima componente. Se emplea una variable auxiliar (Aux) para el proceso de intercambio: auxi = v[i]; v[i] = v[i+1]; v[i+1] = auxi; Al salir del for en este ejemplo el contenido del vector es el siguiente: 75 82 55 49 120

Analizando el algoritmo podemos comprobar que el elemento mayor del vector se ubica ahora en el ltimo lugar.

Programacin I Telecomunicaciones

- 149 -

Pero todava este algoritmo no ordena un vector. Solamente en este primer barrido del vector, se tiene la seguridad de que el elemento ms grande ha quedado al ltimo. Ahora bien, con los 4 elementos que nos quedan podemos hacer el mismo proceso visto anteriormente, con lo cual quedar ordenado otro elemento del vector (el anteltimo). Este proceso se repite hasta que quede ordenado por completo el vector. Como debemos repetir el mismo algoritmo, podemos englobar todo el bloque en otra estructura repetitiva.

k = 1;

k < 5;

k++

Falso

i = 0;

i < 4;

i++

Falso

## Relicemos una prueba del algoritmo anterior: Cuando k = 1 75 120 82 55 49

75

82

120

55

49

75

82

55

120

49

75

82

55

49

120

- 150 -

Programacin I Telecomunicaciones

## Cuando k = 2 75 82 55 490 49 120

75

55 55

82

49

120

75

49

82

120

75

55

49

82

120

Cuando k = 3 55 75 49 82 120

55

49

75

82

120

55 55 Cuando k = 4 49 49 49 49

49 49

75 75

82 82

120 120

55 55 55 55

75 75

82 82

120 120

75

82

120 120

75

82

Por qu se repite 4 veces el for externo? Como se sabe, cada vez que se repite en forma completa el for interno, queda ordenada una componente del vector. Si se observa, cuando quedan dos elementos por ordenar (k=3) al ordenar uno de ellos queda el otro automticamente ordenado (podemos imaginar que si Programacin I Telecomunicaciones - 151 -

tenemos un vector con 2 elementos no se requiere el for externo, porque este debera repetirse una nica vez). Una ltima consideracin a este ALGORITMO de ordenamiento es que a medida que los elementos se van ordenando, se contina comparando los elementos an cuando esto ya no es necesario. Ejemplo: En la primera ejecucin del For interno el valor 120 queda ubicado en la posicin 5 del vector. En la segunda ejecucin se compara si el 82 es mayor a 120, lo cual seguramente ser falso: ya que el 120 qued en su lugar definitivo al terminar la primera vuelta el for interno. Se puede concluir que la primera vez se debe hacer para este ejemplo 4 comparaciones con el ciclo interno, en la segunda ejecucin del for interno se deberan hacer 3 comparaciones (porque el ltimo valor ya est ordenado y es una prdida de tiempo volver a compararlo) y en general se debe ir reduciendo en uno la cantidad de comparaciones. Si bien el algoritmo planteado funciona, un algoritmo ms eficiente, que se deriva del anterior es el siguiente:

k = 1;

k<5;

k++

Falso

i = 0;

i<5k;

i++

Falso

Falso

## auxi = v[i] v[i] = v[i+1] v[i+1] = auxi

- 152 -

Programacin I Telecomunicaciones

El algoritmo queda planteado con un for interno que va a ir decreciendo en uno cada vez que el contador del for externo se incremente. Inicialmente k=1 por lo que el for interno se repite 4 veces (desde i =0 hasta i = 4-k o sea 4 1 = 3). Cuando k=2 el for interno se repite 3 veces (desde 0 hasta 2), y as sucesivamente. Este algoritmo descrito funciona correctamente para un vector de 5 elementos, en caso de tener N elementos, la funcin de ordenamiento de un vector quedara de la siguiente manera:

k = 1;

k<n;

k++

Falso

i = 0;

i<nk;

i++

Falso

Falso

## auxi = v[i] v[i] = v[i+1] v[i+1] = auxi

Fin

Programacin I Telecomunicaciones

- 153 -

Ejemplo Nro. 44: Desarrollar un programa para ordenar un vector de n elementos. Se deber imprimir el vector como se ingres y luego el vector ordenado. import hsa.Console; class Ejemplo44 { static Console c; int [] v; Ejemplo44 { c.print int n = v = new } () ("Ingrese la cantidad de elementos del vector: "); c.readInt (); int [n];

void cargarDatos () { c.println ("Cargue los elementos del vector"); c.println (); for (int i = 0 ; i < v.length ; i++) { c.print ("Ingrese elemento[" + (i + 1) + "]: "); v [i] = c.readInt (); } } void ordenar (int [] v, int n) { int auxi; for (int k = 1 ; k < n ; k++) { for (int i = 0 ; i < n - k ; i++) { if (v [i] > v [i + 1]) { auxi = v [i]; v [i] = v [i + 1]; v [i + 1] = auxi; } } } } void imprimir () { for (int i = 0 ; i < v.length ; i++) { c.print (v [i] + " "); } }

- 154 -

Programacin I Telecomunicaciones

void imprimirOrdenado() { int n = v.length; ordenar(v,n); imprimir(); } public static void main (String arg []) { c = new Console (); Ejemplo44 e = new Ejemplo44 (); c.println(); e.cargarDatos (); c.println(); c.println ("Vector ingresado:"); e.imprimir (); c.println (); c.println (); c.println ("Vector ordenado:"); e.imprimirOrdenado (); } }

Programacin I Telecomunicaciones

- 155 -

Ejercicios Propuestos
9.1 - Desarrollar un programa que permita el ingreso de 2 vectores de 10 componentes de tipo float. Implementar dos funciones, una para la carga y otra que muestre por pantalla el mayor elemento de cada uno. 9.2 - Realizar un programa que permita la carga de 20 nmeros enteros. Se deber mostrar impreso el vector en forma inversa 9.3 - Una empresa que realiza cursos de computacin tiene la siguiente informacin Nombre del curso Operador de PC Reparador de PC Internet Programacin Enero 223 22 122 121 Febrero 333 22 160 180 Marzo 222 21 190 210

Desarrollar un programa que permita: a) Cargar en vectores los nombres de los cursos y las cantidades de inscriptos en cada curso en los meses de enero, febrero, y marzo. b) Obtener el total de alumnos que se han inscripto en los tres meses para cada curso. c) Qu curso ha tenido mayor cantidad de inscripciones, mostrar el nombre del curso. d) En los meses de enero y febrero cual fue la cantidad de inscripciones en total en la academia (sin discriminar por cursos). e) En el mes de marzo reducir en 5 la cantidad de inscriptos a todos los cursos e imprimir los inscriptos en marzo. 9.4 - Generar un vector de 12 elementos con componentes aleatorias entre los valores de 10 y 90. (Rever la clase nmero 6 para utilizar la funcin Math.random). Se deber imprimir el vector generado y el Rango del mismo. (Se llama Rango de un vector al valor del mnimo y mximo de dicho vector). Ejemplo: Vector generado v[i] = 40 55 13 47 45 67 32 43 66 87 15 72 Rango = [ 13..87 ] 9.5 - Cargar tres vectores que contengan nombre de libro, ao de edicin y precio. Realizar una consulta por nombre y determinar cual es el libro ms antiguo. 9.6 - En el ejercicio anterior, ingresar dos precios y mostrar todos los libros que se encuentran comprendido entre esos precios.

- 156 -

Programacin I Telecomunicaciones

import hsa.Console; class PropuestoNueve3 { static Console c; String [] nombre; int [] enero; int [] febrero; int [] marzo; int [] total; PropuestoNueve3() { nombre = new String[4]; enero = new int[4]; febrero = new int[4]; marzo = new int[4]; total = new int[4]; }

## Solucin del ejercicio propuesto 9.3

void cargarDatos() //Punto a { int fila = 4; c.setCursor(2,5); c.print("Nombre"); c.setCursor(2,20); c.print("Enero"); c.setCursor(2,35); c.print("Febrero"); c.setCursor(2,50); c.print("Marzo"); for (int i=0; i<nombre.length; i++) { c.setCursor(fila,5); nombre[i]=c.readLine(); c.setCursor(fila,20); enero[i]=c.readInt(); c.setCursor(fila,35); febrero[i]=c.readInt(); c.setCursor(fila,50); marzo[i]=c.readInt(); fila++; } } void totalDeAlumnos() //Punto b { int fila = 4; c.setCursor(2,65); c.print("Total"); for(int i=0; i<enero.length; i++) { total[i] = enero[i] + febrero[i] + marzo[i]; c.setCursor(fila,65); c.print(total[i],4); fila++; } c.readChar(); } void mayor() //Punto c { int m = total[0]; int posicion = 0; for (int i=1; i<total.length; i++) if(total[i]>m) { Programacin I Telecomunicaciones

- 157 -

m=total[i]; posicion=i; } c.println(); c.println(); c.print("el curso con mayor cantidad de inscriptos es: "); c.println(nombre[posicion]); c.readChar(); } void totalEneroFebrero() //Punto d { int suma = 0; for(int i=0; i<enero.length; i++) { suma = suma + enero[i] + febrero[i]; } c.println(); c.print("El total en los meses de Enero y Febrero es: "); c.println(suma); c.readChar(); } void reducir() //Punto e { int fila = 4; c.println(); c.print("Pulse [Enter] para reducir en 5 los marzo"); c.readChar(); for(int i=0; i<marzo.length; i++) { marzo[i] = marzo[i] - 5; c.setCursor(fila,50); c.print(marzo[i],4); fila++; } } public static void main (String arg []) { c = new Console (); PropuestoNueve3 p = new PropuestoNueve3(); p.cargarDatos(); p.totalDeAlumnos(); p.mayor(); p.totalEneroFebrero(); p.reducir(); p.totalDeAlumnos(); System.exit(0); } }

inscriptos

en

- 158 -

Programacin I Telecomunicaciones

Mtodos Vectores

Clase

10

Clase Nmero: 10

## Ordenamiento con Vectores Paralelos

Cuando se tienen vectores paralelos y se ordena uno de ellos hay que tener la precaucin de intercambiar los elementos de los otros vectores asociados. Ejemplo Nro. 45: Se tienen dos vectores, en uno se deben cargar los nombres de las provincias Argentinas y en el otro las temperaturas medias anuales de cada provincia. Realizar las siguientes operatorias: a) Realizar un listado por pantalla de las provincias en orden alfabtico, como se indica a continuacin: Nombre de Provincia Buenos Aires Chubut Crdoba Tierra del Fuego Temperatura 22 8 23 4

b) Realizar un listado ordenado por las temperaturas (desde la temperatura ms baja hasta la ms alta). Nombre de Provincia Tierra del Fuego Chubut Buenos Aires Crdoba Temperatura 4 8 22 23

Programacin I Telecomunicaciones

- 159 -

void cargarDatos ( )

Falso

provincias [i]

temperaturas [i]

Fin

## void ordenarPorProvincias (v, n)

k = 1;

k<n;

k++

Falso

i = 0;

i<nk;

i++

Falso

Falso

provincias[i].compareto(provincias[i+1]) >0

auxiProvincia = provincia[i] provincia[i] = provincia[i+1] provincia[i+1] = auxiprovincia auxiTemperatura = temperatura[i] temperatura[i] = temperatura[i+1] temperatura[i+1] = auxiTemperatura

Fin

- 160 -

Programacin I Telecomunicaciones

k = 1;

k<n;

k++

Falso

i = 0;

i<nk;

i++

Falso

Falso

## temperaturas[i] > temperaturas[i+1]

auxiProvincia = provincia[i] provincia[i] = provincia[i+1] provincia[i+1] = auxiprovincia auxiTemperatura = temperatura[i] temperatura[i] = temperatura[i+1] temperatura[i+1] = auxiTemperatura

Fin

import hsa.Console; import java.awt.*; class Ejemplo45 { static Console c; String [] provincias; float [] temperaturas; Ejemplo45 () { c.print("Ingrese la cantidad de provincias: "); int n = c.readInt (); provincias = new String [n]; temperaturas = new float [n]; }

Programacin I Telecomunicaciones

- 161 -

void cargarDatos () { c.clear (); c.println ("Cargue los datos"); c.println (); for (int i = 0 ; i < provincias.length ; i++) { c.print ("Ingrese provincias[" + (i + 1) + "]: "); provincias [i] = c.readLine (); c.print ("Ingrese su Temperatura: "); temperaturas [i] = c.readFloat (); c.println (); } } void imprimir () { int fila; c.setCursor(3, 10); c.print ("Provincias"); c.setCursor(4, 10); c.print ("----------"); c.setCursor(3, 30); c.print ("Temperaturas"); c.setCursor(4, 30); c.print ("------------"); fila = 5; for (int i = 0 ; i < provincias.length ; i++) { c.setCursor(fila, 10); c.print(provincias[i]); c.setCursor(fila, 30); c.print(temperaturas[i],4,1); fila++; } c.println(); c.println (); c.setTextColor(Color.red); c.print(" Digite [Enter] para retornar al Menu "); c.readChar (); } void ordenarPorProvincias () { int n=provincias.length; String auxiProvincia; float auxiTemperatura; for (int k = 1 ; k < n ; k++) { for (int i = 0 ; i < n - k ; i++) { if(provincias[i].compareTo(provincias[i+1]) > 0) { auxiProvincia = provincias [i]; provincias [i] = provincias [i + 1]; provincias [i + 1] = auxiProvincia; auxiTemperatura = temperaturas [i]; temperaturas [i] = temperaturas [i + 1]; temperaturas [i + 1] = auxiTemperatura; }

- 162 -

Programacin I Telecomunicaciones

} } } void ordenarPorTemperaturas () { int n = provincias.length; String auxiProvincia; float auxiTemperatura; for (int k = 1 ; k < n ; k++) { for (int i = 0 ; i < n - k ; i++) { if(temperaturas[i] > temperaturas[i+1]) { auxiProvincia = provincias [i]; provincias [i] = provincias [i + 1]; provincias [i + 1] = auxiProvincia; auxiTemperatura = temperaturas [i]; temperaturas [i] = temperaturas [i + 1]; temperaturas [i + 1] = auxiTemperatura; } } } } public static void main (String arg []) { c = new Console (); Ejemplo45 e = new Ejemplo45 (); int op; c.setTextBackgroundColor (Color.cyan); do { c.clear (); c.setTextColor(Color.blue); c.setCursor (3, 10); c.print ("Menu de Opciones"); c.setCursor (4, 10); c.print ("----------------"); c.setCursor (5, 10); c.print ("1- Cargar Datos"); c.setCursor (6, 10); c.print ("2- Listado ordenado por Provincias"); c.setCursor (7, 10); c.print("3-Listado ordenado por Temperaturas"); c.setCursor (8, 10); c.print ("4- Finalizar el programa"); c.setCursor (12, 10); c.print ("Digite la opcion: "); op = c.readInt ();

Programacin I Telecomunicaciones

- 163 -

switch (op) { case 1: e.cargarDatos (); break; case 2: c.clear (); c.setCursor (1, 10); c.print("Listado Ordenado por Provincias"); e.ordenarPorProvincias (); e.imprimir(); break; case 3: c.clear(); c.setCursor (1, 10); c.print("Listado Ordenado por Temperaturas"); e.ordenarPorTemperaturas (); e.imprimir(); break; } } while (op != 4); System.exit (0); } } Observar que los dos ordenamientos, el de Provincias y el de Temperaturas, son similares, lo nico que cambia es la condicin del if . En el ordenamiento por provincia se utiliza el mtodo compareTo( ) de la siguiente manera: if(provincias[i].compareTo(provincias[i+1])>0) Recordando, este mtodo retorna un valor menor a cero si provincias[i] es menor alfabticamente a provincias[i+1]. Un valor igual a cero, si provincias[i] es igual a provincias[i+1], y un valor mayor a cero, si provincias[i] es mayor a provincias[i+1]. Este ltimo caso es el que se utiliza en la condicin, ya que si provincias[i] es mayor a provincias[i+1], se debe realizar el intercambio de datos debido a que las provincias estn desordenadas. Para realizar el men, se utiliza un ciclo do..while en el programa principal, de manera que el programa siempre muestre el men mientras no se digite la opcin 4. La salida del programa para el listado ordenado por provincias sera similar a la siguiente pantalla:

- 164 -

Programacin I Telecomunicaciones

## Consultas en Vectores Paralelos

Cuando se realiza una consulta con vectores paralelos, se debe obtener la posicin en el vector del dato por el cual se busca. Una vez localizada la posicin, se accede a los otros vectores a travs de ella. Ejemplo Nro. 46: Realizar la carga de tres vectores que contengan: Descripcin de Producto, Precio Unitario y Procedencia. Desarrollar adems, las siguientes operatorias: a) b) c) d) e) Listado en tres columnas Consultas por Descripcin de Producto. Mostrar todos los datos del Producto de menor precio. Consulta por Procedencia Menu de Opciones.

import hsa.Console; import java.awt.*; class Ejemplo46 { static Console c; String [] descripcion; float [] precio; String [] procedencia; Ejemplo46 () { c.print("Ingrese la cantidad de productos: "); int n = c.readInt (); descripcion = new String [n]; precio = new float [n]; procedencia = new String[n]; } void cargarDatos () { c.clear (); c.println ("Cargue los Productos"); c.println (); for (int i = 0 ; i < descripcion.length ; i++) { c.print ("Ingrese descripcion[" +(i + 1)+ "]: "); descripcion [i] = c.readLine (); c.print ("Ingrese su precio unitario: "); precio [i] = c.readFloat (); c.print ("Ingrese su procedencia: "); procedencia [i] = c.readLine (); c.println (); } } Programacin I Telecomunicaciones - 165 -

void imprimir () { int fila; c.setCursor (3, 10); c.print ("Descripcion"); c.setCursor (4, 10); c.print ("-----------"); c.setCursor (3, 30); c.print ("Precio"); c.setCursor (4, 30); c.print ("------"); c.setCursor (3, 45); c.print ("Procedencia"); c.setCursor (4, 45); c.print ("-----------"); fila = 5; for (int i = 0 ; i < descripcion.length ; i++) { c.setCursor (fila, 10); c.print (descripcion [i]); c.setCursor (fila, 30); c.print (precio [i], 8, 2); c.setCursor (fila, 45); c.print (procedencia [i]); fila++; } c.println (); c.println (); c.setTextColor(Color.red); c.print(" Digite [Enter] para retornar al Menu "); c.readChar (); } void consultasPorDescripcion() { String dx; char op; do { c.clear(); c.setCursor(3,10); c.print("Consultas por Descripcion"); c.setCursor(4,10); c.print("-------------------------"); c.setCursor(6,10); c.print("Ingrese Descripcion de Producto a buscar: "); dx = c.readLine(); int posi=-1;

- 166 -

Programacin I Telecomunicaciones

for(int i=0; i<descripcion.length;i++) { if(dx.equalsIgnoreCase(descripcion[i])) { posi = i; } } if(posi !=-1) { c.setCursor(8,10); c.print("Precio Unitario: \$ "); c.print(precio[posi],0,2); c.setCursor(9,10); c.print("Procedencia: "); c.print(procedencia[posi]); } else { c.setCursor(9,10); c.print("No existe esa Descripcion"); } c.setCursor(20,10); c.print("Realiza otra consulta: "); op=c.readChar(); }while (op=='s' || op=='S'); } void productoDeMenorPrecio() { float menorPrecio=precio[0]; int posi=0; for(int i=1; i<precio.length; i++) { if(precio[i] < menorPrecio) { menorPrecio=precio[i]; posi=i; } } c.clear(); c.setCursor(5,10); c.print("Los datos del producto de menor Precio son: "); c.setCursor(7,10); c.print("Descripcion: "); c.print(descripcion[posi]); c.setCursor(8,10); c.print("Precio Unitario: \$ "); c.print(precio[posi],0,2); c.setCursor(9,10); c.print("Procedencia: "); c.print(procedencia[posi]); c.setCursor(20,10); c.setTextColor(Color.red);

Programacin I Telecomunicaciones

- 167 -

c.print (" Digite [Enter] para retornar al Menu "); c.readChar (); } void consultasPorProcedencia() { String px; char op; do { c.clear(); c.setCursor(3,10); c.print("Consultas por Procedencia"); c.setCursor(4,10); c.print("-------------------------"); c.setCursor(6,10); c.print("Ingrese Procedencia a buscar: "); px = c.readLine(); int fila=10; for(int i=0; i<descripcion.length;i++) { if(px.equalsIgnoreCase(procedencia[i])) { c.setCursor(8,10); c.print("Descripcion"); c.setCursor(9,10); c.print("-----------"); c.setCursor(8,30); c.print("Precio"); c.setCursor(9,30); c.print("------"); c.setCursor(fila,10); c.print(descripcion[i]); c.setCursor(fila,30); c.print(precio[i],8,2); fila++; } } if(fila == 10) { c.setCursor(9,10); c.print("No existe esa procedencia"); } c.println(); c.println(); c.print("Realiza otra consulta: "); op=c.readChar(); } while (op=='s' || op=='S'); }

- 168 -

Programacin I Telecomunicaciones

void mensaje() { c.clear(); c.setTextColor(Color.red); c.setCursor(10,15); c.print("Faltan cargar los productos"); c.setCursor(14,15); c.print("Digite [Enter para Menu]..."); c.readChar(); } public static void main (String arg []) { c = new Console (); Ejemplo46 e = new Ejemplo46(); int op; c.setTextBackgroundColor (Color.yellow); int bandera=0; do { c.clear (); c.setTextColor(Color.blue); c.setCursor (3, 10); c.print ("Menu de Opciones"); c.setCursor (4, 10); c.print ("----------------"); c.setCursor (5, 10); c.print ("1- Cargar Datos"); c.setCursor (6, 10); c.print ("2- Listado Completo"); c.setCursor (7, 10); c.print ("3- Consultas por descripcion"); c.setCursor (8, 10); c.print("4- Datos del Producto de menor Precio"); c.setCursor (9, 10); c.print ("5- Consultas por Procedencia"); c.setCursor (10, 10); c.print ("6- Finalizar el programa"); c.setCursor (13, 10); c.print ("Digite la opcion: "); op = c.readInt (); switch (op) { case 1: e.cargarDatos(); bandera=1; break; case 2: if(bandera==0) e.mensaje(); else { c.clear (); c.setCursor (1, 10); c.print ("Listado Completo"); e.imprimir (); } break;

Programacin I Telecomunicaciones

- 169 -

- 170 -

Programacin I Telecomunicaciones

Programacin I Telecomunicaciones

- 171 -

Ejercicios Propuestos
10.1 En una empresa que tiene n empleados con los siguientes datos: Legajo, Nombre, Profesin y Sueldo, se deben realizar las siguientes operatorias: a) b) c) d) e) f) g) Carga de los datos de cada empleado. Listado competo ordenado por nombre en cuatro columnas. Consulta por Legajo. Consulta por Nombre. Consulta por Profesin. Datos del la persona de mayor sueldo. Men de opciones.

- 172 -

Programacin I Telecomunicaciones

Arreglos Bidimensionales

## TEMAS: Matrices Carga e impresin Procesamiento de Matrices

Clase

11

Clase Nmero: 11

Arreglos Bidimensionales

Los 4 cursos estaran identificados desde la posicin cero hasta la posicin 3 y las 5 notas de los alumnos de cada curso, desde la posicin cero hasta la posicin 4. Por ejemplo la nota en el curso 2 del alumno en la posicin 3 es 7, es decir: nota[2,3] = 7

Programacin I Telecomunicaciones

- 173 -

De esta manera, se pueden identificar cada una de las notas, a travs de la Fila y Columna en la cual se encuaentran por ejemplo: nota[0,0] = 7; nota[0,1] = 5; nota[0,2] = 8 ; nota[0,3] = 9 ; nota[0,4] = 6 nota[1,0] = 8; nota[1,1] = 9; nota[1,2] = 6 ; nota[1,3] = 7 ; nota[1,4] = 8 y as sucesivamente

## Carga e impresin de una Matriz

Para realizar la carga de una Matriz en memoria, se deben realizar dos ciclos for, uno dentro del otro, tanto para las Filas como para las Columnas, de manera que cuando el primer for se encuentre en la fila cero, el segundo for vare entre cero y la cantidad de columnas que tenga la matriz. Ejemplo Nro. 47: Realizar la carga e impresin de una Matriz de componentes enteras, que representan las notas de alumnos de diferentes cursos. cargarMatriz ( )

i = 0;

Falso

j = 0;

## j < col ; j++

Falso

nota [i][j]

Fin

La explicacin de este mtodo es la siguiente: Se comienza ingresando al primer for, en donde se le asigna a la variable i el valor de cero, luego se ingresa en el segundo for, en donde se le asigna a la variable j el valor de cero, hasta este momento, tanto i como j valen cero, por lo tanto, el valor que se pedir en el smbolo de introduccin de datos, ser almacenado en la variable nota[0,0].

- 174 -

Programacin I Telecomunicaciones

Es decir, que se almacenar en un lugar llamado nota y dentro del l, en la Fila cero y Columna cero. Luego, siguiendo la flecha del diagrama, se accede nuevamente al segundo for, en donde se incrementa el valor de la variable j en una unidad, pasando ahora a tener el valor de uno. Si el valor de esta variable j es menor al valor de la variable fila, se vuelve a pedir otro dato. Este nuevo dato ingresado, ser almacenado en la variable nota[0,1], porque j vale uno, es decir en el lugar llamado nota en la Fila cero y en la Columna 1. Se contina sucesivamente ingresando valores almacenndolos en la Fila cero y en las columnas 1, 2, 3, etc., de acuerdo a los valores que vaya tomando la variable fila. Cuando se termin el segundo for, observando el diagrama, se accede al primer ciclo for, incrementndose en este momento la variable i, pasando a valer uno, por lo tanto se estar ahora en la Fila 1. Se ingresa nuevamente en el segundo for, y se debe tener en cuenta, que cada vez que se ingresa a un ciclo for, se le da a la variable en cuestin, el valor inicial, es decir que la variable j vuelve a tener el valor de cero. Por lo tanto, se vuelve a repetir el ciclo for para la variable j, variando desde cero hasta la cantidad de columnas menos una, y pidiendo datos nuevamente, pero esta vez, almacenndolos en la Fila 1. El proceso se repite hasta que la que la variable i del primer for alcance las cantidad de filas a procesar. El mtodo de impresin es similar al de carga, con la diferencia que en vez de colocar el smbolo de introduccin de datos, se coloca en smbolo de impresin.

imprimirMatriz ( )

i = 0;

Falso

j = 0;

Falso

nota [i][j]

Fin

## El programa se puede observar en la pgina siguiente.

Programacin I Telecomunicaciones

- 175 -

import hsa.Console; import java.awt.*; class Ejemplo47 { static Console c; int [] [] nota; int fila; int col; Ejemplo47 () { c.print ("Ingrese la cantidad de filas de la Matriz: "); fila = c.readInt (); c.print ("Ingrese la cantidad de columnas de la Matriz: "); col = c.readInt (); nota = new int[fila][col]; } void cargarMatriz () { c.clear (); c.println ("Cargue las Notas"); c.println (); for (int i = 0 ; i < fila ; i++) { for (int j = 0 ; j < col ; j++) { c.print ("Ingrese nota[" + i + "," + j + "]: "); nota [i] [j] = c.readInt (); } c.println (); } c.println (); } void imprimirMatriz () { c.clear (); c.println ("Impresion las Notas"); c.println ("-------------------"); c.println (); for (int i = 0 ; i < fila ; i++) { for (int j = 0 ; j < col ; j++) { c.print ( " " + nota [i][j]); } c.println(); } c.println (); c.readChar(); } public static void main (String arg []) { - 176 Programacin I Telecomunicaciones

c = new Console (); Ejemplo47 e = new Ejemplo47 (); int op; c.setTextBackgroundColor (Color.cyan); c.clear (); e.cargarMatriz(); e.imprimirMatriz(); System.exit(0); } }

## Programa en ejecucin cuando se est ingresando los datos de la Matriz

Programacin I Telecomunicaciones

- 177 -

## Programa en ejecucin cuando se muestran los datos de la Matriz

Procesamiento de Matrices
Ejemplo Nro. 48: Agregar al ejemplo anterior los siguientes mtodos: a) Generar e imprimir un vector en el que cada componente sea el promedio de las notas de cada curso. Ejemplo: Vector Generado Alumno Nro. 0 1 Cursos 2 3 4 9 7 9 9 8 6 7 8 8 7 8,20 7,40 0 4 7 8 1 5 9 2 8 6 3 9 7 6 8 7 7,60

b) Indicar cual es el curso de mayor promedio. Ejemplo: El curso de mayor promedio es el nmero: 2 c) Promedio general de todos los cursos. Ejemplo: El promedio generan de todos los cursos es: 7,55

- 178 -

Programacin I Telecomunicaciones

generarVector ( )

Punto a)

i = 0;

Falso

suma = 0

j = 0;

Falso

## promedio = suma / col

v [i] = promedio

Fin

void imprimirVector ( )

Falso

v [i]

void mayor ( )

Punto b)

m = v [0] p=0
Falso

## El curso de mayor promedio es el: + p

Fin

promedioDeTodosLosCursos ( )

Punto c)

suma = 0

i = 0;

Falso

## promedio = suma / fila

Fin

- 180 -

Programacin I Telecomunicaciones

import hsa.Console; import java.awt.*; class Ejemplo48 { static Console c; int [] [] nota; float [] v; int fila; int col; Ejemplo48 () { c.print ("Ing. la cantidad de filas de la Matriz: "); fila = c.readInt (); c.print ("Ing. la cantidad de columnas de la Matriz: "); col = c.readInt (); nota = new int[fila][col]; v = new float[fila]; } void cargarMatriz () { c.clear (); c.println ("Cargue las Notas"); c.println (); for (int i = 0 ; i < fila ; i++) { for (int j = 0 ; j < col ; j++) { c.print ("Ingrese nota[" + i + "," + j + "]: "); nota [i] [j] = c.readInt (); } c.println (); } c.println (); } void imprimirMatriz () { c.clear (); c.println ("Impresion las Notas"); c.println ("-------------------"); c.println (); for (int i = 0 ; i < fila ; i++) { for (int j = 0 ; j < col ; j++) { c.print ( " " + nota [i][j]); } c.println(); } c.readChar(); }

Programacin I Telecomunicaciones

- 181 -

void generarVector() { for (int i=0; i<fila; i++) { int suma = 0; for (int j=0; j<col; j++) { suma = suma+nota[i][j]; } float promedio= (float)suma/col; v[i]=promedio; } } void imprimirVector() //Promedios de cada curso { c.println(); c.println("El promedio de cada curso es:"); c.println(); for(int i=0; i<fila; i++) { c.println(" " + "Curso ["+ i +"]: " + v[i]); } c.readChar(); } void mayor() { float m=v[0]; int p=0; for (int i=0; i<fila; i++) if (v[i]>m) { m=v[i]; p=i; } c.println(); c.println("El curso de mayor promedio es el: " + p); c.readChar(); } void promedioDeTodosLosCursos() { float suma=0; for(int i=0; i<fila; i++) { suma = suma + v[i]; } float p = suma / fila; c.println(); c.println("El promedio de todos los cursos es: " + p); c.readChar(); }

- 182 -

Programacin I Telecomunicaciones

public static void main (String arg []) { c = new Console (); Ejemplo48 e = new Ejemplo48 (); int op; c.setTextBackgroundColor (Color.cyan); c.clear (); e.cargarMatriz(); e.imprimirMatriz(); e.generarVector(); e.imprimirVector(); e.mayor(); e.promedioDeTodosLosCursos(); System.exit(0); } } La solucin del programa sera una pantalla similar a la siguiente:

Es muy til en la matemtica encontrar la diagonal principal de una matriz cuadrada. Una matriz cuadrada es aquella en que la cantidad de filas es igual a la cantidad de columnas. En el siguiente ejemplo, se realiza el proceso de la diagonal principal.

Programacin I Telecomunicaciones

- 183 -

Ejemplo Nro. 49: Cargar una matriz cuadrada y obtener la suma de su diagonal principal. Adems, intercambiar la primera fila con la ltima fila.

suma = 0

i = 0;

Falso

## suma = suma + m[i][i]

suma

Fin

intercambiarFilas ( )

j = 0;

Falso

## auxi = m[0][j] m[0][j] = m[fila-1][j] m[fila-1][j] = auxi

Fin

- 184 -

Programacin I Telecomunicaciones

import hsa.Console; import java.awt.*; class Ejemplo49 { static Console c; int [] [] m; int fila; int col; Ejemplo49 () { c.print("Cantidad de filas de la Matriz cuadrada: "); fila = c.readInt (); col = fila; m = new int[fila][col]; } void cargarMatriz () { c.clear (); c.println ("Cargue las Notas"); c.println (); for (int i = 0 ; i < fila ; i++) { for (int j = 0 ; j < col ; j++) { c.print ("Ingrese m[" + i + "," + j + "]: "); m [i] [j] = c.readInt (); } c.println (); } c.println (); } void imprimirMatriz () { c.println ("Impresion la Matriz"); c.println ("-------------------"); c.println (); for (int i = 0 ; i < fila ; i++) { for (int j = 0 ; j < col ; j++) { c.print ( " " + m [i][j]); } c.println(); } c.readChar(); }

Programacin I Telecomunicaciones

- 185 -

void sumaDiagonalPrincipal() { int suma = 0; for (int i=0; i<fila; i++) { suma = suma+ m[i][i]; } c.println(); c.print("La suma de de la Diagonal Principal es: "); c.println(suma); } void intercambiarFilas() { int auxi; for (int j=0; j<col; j++) { auxi = m[0][j]; m[0][j] = m[fila-1][j]; m[fila-1][j] = auxi; } } public static void main (String arg []) { c = new Console (); Ejemplo49 e = new Ejemplo49 (); c.setTextBackgroundColor (Color.cyan); c.clear (); e.cargarMatriz(); c.clear(); e.imprimirMatriz(); e.sumaDiagonalPrincipal(); e.intercambiarFilas(); c.println(); c.println("La matriz intercambiadas las filas es: "); e.imprimirMatriz(); System.exit(0); } } Explicacin: El mtodo de sumar los elementos de la diagonal principal consiste simplemente en un ciclo for y dentro de l, un acumulador para sumar los elementos que se encuentran en la posicin [i][i], es decir en la posicin donde coincidan las filas con las columnas, ya que esos son los elementos de la diagonal principal. El mtodo de intercambiar la primera fila con la ltima tiene en cuenta una variable auxiliar para guardar el valor del elemento de la primera fila. Este mtodo consiste en recorrer las columnas intercambiando elemento por elemento. Observar que la ltima fila est dado por: [fila-1], ya que si se tienen por ejemplo 5 filas, como estn enumeradas de la cero a la 4, la ltima ser la fila nmero 4.

- 186 -

Programacin I Telecomunicaciones

Si se ingresa una matriz cuadrada de 3x3, o sea, 3 filas y 3 columnas, la salida sera similar a la siguiente pantalla:

Ejercicios Propuestos
12.3 - Realizar un programa para que reciba, desde teclado, una matriz NxN de nmeros enteros, luego calcule y escriba la suma de todas las filas y todas las columnas. 12.3 - Desarrollar un programa que permita obtener el mayor elemento de una matriz de 4x3 componentes, e informe la posicin que ocupa dentro de la matriz (fila y columna del mayor). 12.3 - Cargar una matriz de 5x5 y realizar lo siguiente: a) Imprimir la matriz. b) Intercambiar la primera columna con la ltima. c) Promedio de los elementos de la ltima columna.

Programacin I Telecomunicaciones

- 187 -

12.3 - Simular un tablero de ajedrez, o sea, una matriz de 8x8 casilleros. Se deber colocar en cada casillero un valor numrico de la siguiente manera: El valor que se deber colocar en un casillero estar formado por el doble del anterior, comenzando en el casillero 1 con el nmero 1. Ejemplo:
1 2 4 8 16 32

Mostrar la matriz generada. 12.3 - Cargar una matriz de 4x4. Luego ingresar una fila (de cero a 3) y generar un vector con los elementos de esa fila. Mostrar la matriz ingresada y el vector generado. 12.3 - Cargar una matriz de 5x5 y determinar todos los valores pares, imprimiendo el valor y su posicin que ocupa dentro de la matriz. 12.3 - Dada una matriz cuadrada de NxN de valores enteros, se deber ingresar una columna y determinar el promedio de la misma. 12.3 - Desarrollar un programa que permita los siguiente: a) Cargar una matriz de 3x4 elementos. b) Mostrar la matriz cargada. c) Permitir ingresar una fila y que muestre la cantidad de mltiplos de 3 de esa fila. d) Permitir ingresar una columna y que muestre la cantidad de impares de esa columna.

- 188 -

Programacin I Telecomunicaciones

Arreglos Bidimensionales

Clase

12

Clase Nmero: 12

## Matrices y Vectores Paralelos

Como ya se vio en clases anteriores, dos o ms vectores son paralelos cuando hay una relacin entre las componentes de igual subndice (misma posicin) de cada uno de ellos. Generalmente cuando se trabaja con Matrices y vectores paralelos, se establece una relacin entre los elementos del vector y las filas o columnas de la matriz. Por ejemplo, supongamos que se desea almacenar en una matriz las producciones de trigo de algunas provincias en determinados aos. Se podra establecer a las provincias relacionadas con las filas de la matriz y a los aos con las columnas de la matriz de la siguiente manera:
2005 2006 2007 2008 2009

## 200 180 190 210

Por lo tanto se puede conocer perfectamente para cada provincia en un determinado ao, el valor de la produccin anual. Por ejemplo, para la provincia de Tucumn en el ao 2006, la produccin fue de 220 toneladas de trigo. En este caso se tienen dos estructuras de datos, un vector de tipo String, en el cual se almacenarn las Provincias, y una matriz de valores enteros, para almacenar las producciones anuales. Tambin se podra haber descripto un vector para almacenar los aos.

Programacin I Telecomunicaciones

- 189 -

Ejemplo Nro. 50: Definir las estructuras de datos del ejemplo anterior, para realizar un programa con las siguientes alternativas: a) Carga de datos del vector de Provincias y de la Matriz de Producciones. b) Impresin segn el ejemplo. c) Determinar la produccin total para cada provincia generando un vector con dicho total. d) Cul fue la provincia de mayor Produccin? e) Cul fue la provincia de menor Produccin? f) Imprimir dos columas, provincia y produccin total ordenada por Provincia.

import hsa.Console; import java.awt.*; class Ejemplo50 { static Console c; String [] provincias; int [] [] m; int fila; int col; int [] total; Ejemplo50 () { fila = 4; col = 5; provincias = new String [fila]; m = new int [fila] [col]; total = new int [fila]; } void cargarMatriz () { c.clear (); c.setCursor (1, 25); c.print ("Produccion de trigo"); c.setCursor (2, 25); c.print ("-------------------"); c.println (); c.setCursor (3, 3); c.print ("Provincias"); c.setCursor (4, 3); c.print ("----------"); int linea = 3; int columna = 20; int anio = 2005; for (int j = 0 ; j < col ; j++) { c.setCursor (linea, columna); c.print (anio); - 190 Programacin I Telecomunicaciones

c.setCursor (linea + 1, columna); c.print ("----"); columna = columna + 10; anio++; } linea = 5; for (int i = 0 ; i < fila ; i++) { c.setCursor (linea, 3); provincias [i] = c.readLine (); columna = 20; for (int j = 0 ; j < col ; j++) { c.setCursor (linea, columna); m [i] [j] = c.readInt (); columna = columna + 10; } linea++; } } void totalPorProvincia () //Punto c { c.setCursor (3, 72); c.print ("Total"); c.setCursor (4, 72); c.print ("-----"); int linea = 5; int columna = 72; int suma; for (int i = 0 ; i < fila ; i++) { suma = 0; for (int j = 0 ; j < col ; j++) { suma = suma + m [i] [j]; } total [i] = suma; c.setCursor(linea,72); c.print(total[i],5); linea++; } c.readChar (); } void provinciaDeMayorProduccion() // Punto d { int mayor = total[0]; int posi = 0; for(int i=1; i<fila; i++) { if(total[i]> mayor) { mayor=total[i]; posi = i; } Programacin I Telecomunicaciones

- 191 -

} c.print("La provincia de mayor produccion es: "); c.println(provincias[posi]); c.println("Con un valor de: "+total[posi]+" toneladas"); c.readChar(); } void provinciaDeMenorProduccion() // Punto e { int menor = total[0]; int posi = 0; for(int i=1; i<fila; i++) { if(total[i]< menor) { menor=total[i]; posi = i; } } c.print("La provincia de menor produccion es: "); c.println(provincias[posi]); c.println("Con un valor de: "+total[posi]+" toneladas"); c.readChar(); } void listado() // Punto f { String auxiP; int auxiT; for(int k=1; k<fila; k++) for(int i=0; i<fila-k; i++) { if(provincias[i].compareTo(provincias[i+1])>0) { auxiP = provincias[i]; provincias[i] = provincias[i+1]; provincias[i+1] = auxiP; auxiT = total[i]; total[i] = total[i+1]; total[i+1] = auxiT; } } c.clear(); c.setCursor(2,20); c.print("Listado ordenado por Provincias"); c.setCursor(3,20); c.print("-------------------------------"); c.setCursor(4,10); c.print("Provincia"); c.setCursor(5,10); c.print("---------"); c.setCursor(4,30); c.print("Total de Produccion"); c.setCursor(5,30); c.print("-------------------"); int linea=7; for(int i=0; i<fila; i++) { c.setCursor(linea,10); c.print(provincias[i]); c.setCursor(linea,35); c.print(total[i]); - 192 Programacin I Telecomunicaciones

linea++; } c.readChar(); } public static void main (String arg []) { c = new Console (); Ejemplo50 e = new Ejemplo50 (); c.setTextBackgroundColor (Color.cyan); e.cargarMatriz (); e.totalPorProvincia (); c.println(); e.provinciaDeMayorProduccion(); e.provinciaDeMenorProduccion(); e.listado(); } }

La carga de la matriz se diferencia de los mtodos realizados anteriormente en el sentido de que al realizarlo de esta manera, una vez realizada la carga, ya se tiene la matriz impresa, es mucho mas ordenado que las cargas vistas es los ejemplos anteriores. En este proceso, se imprimen los ttulos y el cursor va saltando de columna en columna para cargar los datos correspondientes. La primera parte: int linea = 3; int columna = 20; int anio = 2005; for (int j = 0 ; j < col ; j++) { c.setCursor (linea, columna); c.print (anio); c.setCursor (linea + 1, columna); c.print ("----"); columna = columna + 10; anio++; } Tiene por objeto mostrar los aos desde el 2005 en adelante, observar que en el ciclo, el cursor se mantiene siempre en la misma fila, indicada con la lnea = 3, lo que varia es la columna de 10 en 10 lugares, por lo tanto esta fraccin de programa, muestra a modo de ttulo subrayado los nmeros del 2005 hasta el 2009.

Programacin I Telecomunicaciones

- 193 -

La segunda parte del mtodo cargarMatriz ( ): linea = 5; for (int i = 0 ; i < fila ; i++) { c.setCursor (linea, 3); provincias [i] = c.readLine (); columna = 20; for (int j = 0 ; j < col ; j++) { c.setCursor (linea, columna); m [i] [j] = c.readInt (); columna = columna + 10; } linea++; } Realiza el ingreso de datos especficamente, de la siguiente manera: El primer for varia las filas y permite cargar el vector de las provincias, ubicndose el cursor en primera instancia, en la lnea 5 y columna 3. El for ms interno es para la variacin de las columnas y poder realiza la carga por fila, de los elementos de la matriz. Los dems procesos ya han sido vistos en forma independientes, queda por parte del alumno, analizarlos y practicarlos. La primera ejecucin del programa, arrojara los siguientes resultados:

- 194 -

Programacin I Telecomunicaciones

## La segunda parte de la ejecucin del programa, mostrara:

Ejemplo Nro. 51: En un comercio de 4 empleados, se han registrados sus nombres y sus sueldos en los primeros tres meses del ao, como se indica a continuacin:

## Nombres Javier Marcelo Alejandro Ricardo

Enero
3540.60 3843,65 5376,43 3521,67

Febrero
2600.60 4365,24 4763,35 3573,44

Marzo
5467,60 4654,66 6543,55 4365,77 Sueldos

Realizar la siguiente operatoria: a) Carga e impresin de los datos segn ejemplo. b) Mostrar los totales por mes que abon el comercio. c) Realiza una consulta por Nombre de empleado, mostrando los tres sueldos que le corresponden. d) Mostrar el total de sueldo de todos los empleados en los tres meses.

Programacin I Telecomunicaciones

- 195 -

import hsa.Console; import java.awt.*; class Ejemplo51 { static Console c; String [] nombres; float [] [] sueldos; int fila; int col; Ejemplo51 () { fila = 4; col = 3; nombres = new String [fila]; sueldos = new float [fila] [col]; } void cargarMatriz () { c.clear (); c.setCursor (1, 25); c.setCursor (3, 3); c.print ("Nombres"); c.setCursor (4, 3); c.print ("-------"); int linea = 3; int columna = 25; c.setCursor (linea, columna); c.print ("Enero"); c.setCursor (linea + 1, columna); c.print ("-----"); columna = columna + 15; c.setCursor (linea, columna); c.print ("Febrero"); c.setCursor (linea + 1, columna); c.print ("-------"); columna = columna + 15; c.setCursor (linea, columna); c.print ("Marzo"); c.setCursor (linea + 1, columna); c.print ("-----"); linea = 5; for (int i = 0 ; i < fila ; i++) { c.setCursor (linea, 3); nombres [i] = c.readLine (); columna = 25; for (int j = 0 ; j < col ; j++) { c.setCursor (linea, columna); sueldos [i] [j] = c.readFloat (); columna = columna + 15; } linea++; - 196 Programacin I Telecomunicaciones

} } void totalPorMes () //Punto a { int linea = 11; int columna = 22; float suma; for (int j = 0 ; j < col ; j++) { suma = 0; for (int i = 0 ; i< fila ; i++) { suma = suma + sueldos [i] [j]; } c.setCursor(linea,columna); c.print(suma,8,2); columna = columna + 15; } c.readChar (); } void consultaPorNombre() { c.setCursor(13,10); c.print("Ingrese el nombre a buscar: "); String nx = c.readLine(); int posi = -1; for(int i = 0; i<fila; i++) { if (nx.equalsIgnoreCase(nombres[i])) { posi=i; } } if (posi != -1) { c.setCursor(15,10); c.print("Le corresponden los sueldos:"); c.setCursor(16,10); c.print("Enero: \$ " + sueldos[posi][0]); c.setCursor(17,10); c.print("Febrero: \$ " + sueldos[posi][1]); c.setCursor(18,10); c.print("Marzo: \$ " + sueldos[posi][2]); } else { c.setCursor(16,10); c.print("No existe ese empleado"); } } void sueldoTotal() { float total = 0; for(int i=0; i<fila; i++) Programacin I Telecomunicaciones - 197 -

{ for (int j=0; j<col; j++) { total = total + sueldos[i][j]; } } c.setCursor(20,10); c.print("El sueldo total de todos los empleados es: \$ "); c.println(total,0,2); c.readChar(); } public static void main (String arg []) { c = new Console (); Ejemplo51 e = new Ejemplo51 (); e.cargarMatriz (); e.totalPorMes(); e.consultaPorNombre(); e.sueldoTotal(); } }

- 198 -

Programacin I Telecomunicaciones

Ejercicios Propuestos
12.1 - Se desea registrar la produccin de petrleo de los pases que integran el Mercosur en los ltimos cinco aos. Elegir las estructuras de datos adecuadas: Para el almacenamiento de las denominaciones de los pases. Para el almacenamiento de las producciones anuales de cada pas (en los ltimos cinco aos). a) Realizar un procedimiento para la carga de datos. (carga de pases y las producciones de los mismos en los ltimos cinco aos) b) Obtener la produccin promedio de cada pas en los ltimos 5 aos. c) Listar los pases que incrementaron la produccin (para ello tener en cuenta nicamente la produccin del primero y quinto ao, o sea si la produccin del quinto ao es superior al primero se imprime). d) Listar en orden alfabtico los pases y la produccin media de cada pas.

## 220 320 100 :

12.2 - En una ferretera se realiz una estadstica de las herramientas que comercializ en el segundo semestre del ao en curso. Los datos se almacenan segn el esquema. Las filas representan al cdigo de una herramienta en particular y las columnas, los meses del semestre.
Cdigos 0 1 .... .... 999 jul ago sept oct nov dic

## 7 25 14 30 60 95 15 20 18 35 50 40 ............................. ..... .................................. 10 30 15 36 55 75

Se debern realizar las siguientes operatorias: a) Carga de datos: vector de meses, vector de cdigos y matriz de valores. b) Impresin de los datos segn esquema. c) Cantidad total de cada una de las herramientas vendidas. d) Cul es la herramienta que ms se vendi en el semestre? e) Ingresar por teclado el cdigo de una herramienta y mostrar cuantas se vendieron en el mes de noviembre. Programacin I Telecomunicaciones - 199 -

f) Informar los cuatro meses que ms venta de herramientas hubo. (ordenados de mayor a menos) 12.3 - Un laboratorio necesita llevar el control de sus visitadores mdicos, como asi tambin la recaudacin en pesos de los mismos por zona, para ello se cuentan con los siguientes datos, organizados en las estructuras correspondientes:
Monto vendido en \$ por zona Sur Ctro Oeste 3800 4000 .

## Este 1700 500 ..

- 200 -

Programacin I Telecomunicaciones

Anexo
Constantes y Mtodos Matemticos
Class Math
Constantes
public final static double E; public final static double PI;

Mtodos
public static double abs(double a); public static float abs(float a); public static int abs(int a); public static long abs(long a); public static double acos(double a); public static double asin(double a); public static double atan(double a); public static double atan2(double a, double b); public static double ceil(double a); public static double cos(double a); public static double exp(double a); public static double floor(double a); public static double IEEEremainder(double f1, double f2); public static double log(double a); public static double max(double a, double b); public static float max(float a, float b); public static int max(int a, int b); public static long max(long a, long b); public static double min(double a, double b); Programacin I Telecomunicaciones - 201 -

public static float min(float a, float b); public static int min(int a, int b); public static long min(long a, long b); public static double pow(double a, double b); public static double random(); public static double rint(double a); public static long round(double a); public static int round(float a); public static double sin(double a); public static double sqrt(double a); public static double tan(double a);

- 202 -

Programacin I Telecomunicaciones

## Modelo de Examen Final

EXAMEN FINAL Carrera: Materia: Alumno: PROFESOR: PUNTAJE OBTENIDO: FECHA: NOTA DEFINITIVA: ANALISTA DE SISTEMAS Modalidad: P-S-D

## ALGORITMOS Y ESTRUCTURAS DE DATOS 1

Realizar la carga de una matriz de 3 x 5, en donde cada componente indica la produccin de uvas en toneladas en cada provincia. Cargar adems en un vector las provincias intervinientes.
Lunes Cordoba Chubut Salta 120 150 160 Martes 200 180 190 Mircoles 180 120 110 Jueves 150 140 100 Viernes 100 160 130

Realizar las siguientes operatorias: 1- Mostrar los totales por provincia. 2- Ingresar un da de la semana y mostrar la suma de las producciones para ese da. 3- Indicar el da y la provincia a la cual le corresponde la mayor produccin.

Puntajes para Alumnos regulares: Impresin en pantalla y punto 1: 35% ; Punto 2: 30% ; Punto 3: 35%

Alumnos Libres: 4- Ingresar una provincia y un da de la semana y mostrar la produccin que le corresponde. Puntajes para Alumnos Libres: Impresin en pantalla y punto 1: 25% Punto 2: 25% Punto 3: 25% Punto 4: 25%

Programacin I Telecomunicaciones

- 203 -

Solucin:

import hsa.Console; class Examen { static Console c; int [] [] matriz; String [] provincia; String [] dia; Examen () { matriz = new int [3] [5]; provincia = new String [3]; dia = new String [5]; } void cargarMatriz () { int fil, col; for (fil = 0 ; fil < 3 ; fil++) { for (col = 0 ; col < 5 ; col++) { c.print ("Ingrese componente [" + (fil + 1) + "] [" + (col + 1) + "]: "); matriz [fil] [col] = c.readInt (); } } } void cargarProvincias () { c.clear (); int fil; for (fil = 0 ; fil < 3 ; fil++) { c.print ("Ingrese provincia " + (fil + 1) + ": "); provincia [fil] = c.readLine (); } } void cargarDias { dia [0] = dia [1] = dia [2] = dia [3] = - 204 () "Lunes"; "Martes"; "Miercoles"; "Jueves";

Programacin I Telecomunicaciones

## dia [4] = "Viernes"; }

void imprimirMatriz () { c.clear (); int fil, col, ff, cc; ff = 3; cc = 13; for (col = 0 ; col < 5 ; col++) { c.setCursor (ff, cc); c.print (dia [col]); cc = cc + 10; } ff = 5; for (fil = 0 ; fil < 3 ; fil++) { cc = 15; c.setCursor (ff, 5); c.print (provincia [fil]); for (col = 0 ; col < 5 ; col++) { c.setCursor (ff, cc); c.print (matriz [fil] [col]); cc = cc + 10; } ff = ff + 1; } } void totalesPorProvincia () { int fil, col, total; int ff = 5; c.setCursor (3, 68); c.print ("Totales"); for (fil = 0 ; fil < 3 ; fil++) { total = 0; for (col = 0 ; col < 5 ; col++) { total = total + matriz [fil] [col]; } c.setCursor (ff, 70); c.print (total); ff = ff + 1; } } void sumaDeProducciones () Programacin I Telecomunicaciones

- 205 -

{ c.setCursor (11, 15); c.print ("Ingrese dia de la semana para ver su produccion: "); String dx = c.readLine (); int posi = -1; int col; for (col = 0 ; col < 5 ; col++) { if (dx.equalsIgnoreCase (dia [col])) posi = col; } if (posi != -1) { int suma = 0; int fil; for (fil = 0 ; fil < 3 ; fil++) { suma = suma + matriz [fil] [posi]; } c.setCursor (12, 15); c.print ("La produccion para el " + dx + " es de: " + suma); } else { c.setCursor (12, 15); c.print ("Dia incorrecto"); } } void mayorProduccion() { int fil, col, posiF, posiC; posiF = 0; posiC = 0; int m = matriz[0][0]; for (fil=0; fil<3; fil++) { for (col=0; col<5; col++) { if(matriz[fil][col]>m) { m = matriz[fil][col]; posiF=fil; posiC=col; } } } c.setCursor (14, 15); c.print ("La mayor produccion le corresponde a la provincia: " + provincia[posiF]); c.setCursor (15,15); c.print ("En el dia " + dia[posiC]); } - 206 Programacin I Telecomunicaciones

// Para los alumnos libres void punto4() { String px, dx; c.setCursor (17,15); c.print ("Ingrese provincia: "); px = c.readLine(); c.setCursor (18,15); c.print ("Ingrese dia: "); dx = c.readLine(); int posiF, posiC; posiF = posiC = -1; if (px.equalsIgnoreCase(provincia[0])) posiF=0; else if (px.equalsIgnoreCase(provincia[1])) posiF=1; else if (px.equalsIgnoreCase(provincia[2])) posiF=2; int col; for (col = 0 ; col < 5 ; col++) { if (dx.equalsIgnoreCase (dia [col])) posiC = col; } if (posiF != -1 && posiC != -1) { c.setCursor (19, 15); c.print ("Le corresponde una produccion de: " + matriz[posiF][posiC]) ; } else { c.setCursor (19, 15); c.print ("Ingreso de datos incorrectos"); } } public static void main (String [] args) { c = new Console (); Examen e = new Examen (); e.cargarMatriz (); e.cargarProvincias (); e.cargarDias (); e.imprimirMatriz (); e.totalesPorProvincia (); e.sumaDeProducciones (); e.mayorProduccion(); e.punto4(); } }

Programacin I Telecomunicaciones

- 207 -

- 208 -

Programacin I Telecomunicaciones