ALGORITMOS ESTRUCTURAS DE
DEDATOS
DATOSI I
Primer Año – Primer Semestre
PRIMER AÑO – PRIMER SEMESTRE
Carrera: Carrera:
Técnico en de Sistemas
Analista
Telecomunicaciones
Ing. Eduardo Mansilla
ING. EDUARDO MANSILLA
– ISSD – EDUARDO MANSILLA –
Indice General
INDICE GENERAL ________________________________________________ 3
TEMAS:
UNIDAD Nº 1: Clase
Conceptos Principales.
1
Introducción a la Diagramación.
lógica y la Programación.
programación Tipos de Variables.
Estructuras Secuenciales.
Clase Número: 1
Introducción de la materia
El objetivo fundamental de esta materia “Algoritmos y Estructuras de
Datos I”, es que el alumno aprenda a razonar, realizando problemas
generalmente de tipo matemático, aplicando métodos estructurados
lógicamente.
Conceptos Principales
Se comenzará con dar las definiciones fundamentales para inicializarse
en la materia Algoritmos y Estructuras de Datos I.
Se utiliza cuando se
Símbolo de Asignación quiere asignar un valor a
una variable.
En su interior se coloca
Conector un número, que indica
donde debe continuar el
diagrama.
5800
Variable (Pertenece al tipo numérico)
sueldo
Identificador
Tipos de Variables
Tipo char: (char viene de la palabra charácter). Una variable definida de tipo
char, puede almacenar un único carácter, es decir, puede almacenar cualquier
símbolo 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 definición, se
debe colocar un punto y coma, es la forma en que Java identifica que termina
una instrucción. 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 apóstrofes (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 número 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 número con punto decimal flotante en el rango de:
[ 1.40239846 x 10–45f 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 ;
apellido = “Rodríguez” ;
nombre = “Alberto” ;
direccion = “9 de Julio 1653” ;
frase = “Hoy es un día soleado” ;
Observar que para asignar un dato a una variable String, se debe hacerlo entre
comillas.
Nota: Existen muchos mas tipos de variables, pero serán vistos mas adelante.
Operadores Aritméticos
Los operadores aritméticos son los utilizados para realizar cálculos matemáticos
en una determinada asignación. Java reconoce los siguientes operadores
aritméticos:
Estructuras Secuenciales
A partir de aquí, comenzaremos a realizar ejemplos de aplicación de
Diagramas de Flujo y posteriormente su traducción a lenguaje Java.
precio
Introducción de datos
cantidad
Inicio
En este caso, se ingresa el valor
de un lado del cuadrado,
lado mediante el símbolo de
Introducción de Datos
(paralelogramo), luego se
superficie = lado * lado calcula la superficie como el
producto de lado por lado, en el
símbolo rectángulo, y por
último se imprime el resultado
superficie de la superficie.
Fin
Allí se puede comenzar a tipear las instrucciones para que Java las
interprete, tener en cuenta que, a cada símbolo del diagrama, le corresponde una
instrucción en Java. Por ejemplo:
Inicio {
Fin }
import hsa.Console;
Se debe tener en cuenta, que en Java, todo programa es una clase y por lo
tanto debe llevar un nombre que debe comenzar en Mayúsculas y es
precisamente con ese nombre como debe ser grabado en el disco.
static Console c ;
precio = c.readFloat();
La instrucción: println();
Inicio {
Fin }
Inicio
En el símbolo de introducción
de datos, se pueden colocar
más de una variable, pero se
n1, a1
debe tener en cuenta que por
cada variable, se debe tener
una instrucción read en el
n2, a2 programa.
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();
Ejercicios Propuestos
superficie = b * h / 2 ;
TEMAS: Clase
UNIDAD Nº 1:
2
Estructuras condicionales
Operadores relacionales.
Estructuras Condicional Simple y
condicionales. compuesta.
Clase Número: 2
Estructuras Condicionales
En algunos casos, se pueden presentar condiciones que influyen sobre la
secuencia de pasos a seguir para resolver un problema. Según 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 condición.
if (Condición)
{
Sentencia 1;
Sentencia 2;
Sentencia n;
}
Operadores Relacionales
El contenido de una variable puede ser igual, mayor o menor que el
contenido de otra variable. Para ello, se utilizan unos símbolos llamados
Operadores Relacionales. Estos operadores son los mismos que se utilizan en
matemática, pero con alguna diferencia en su escritura.
Inicio
sueldo
descuento = 0
Falso Verdadero
sueldo > 5000
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);
}
}
Inicio
valor1
valor2
Falso Verdadero
promedio < 10
promedio = promedio + 2
promedio
Fin
promedio = promedio + 2
import hsa.Console;
class Ejemplo5
{
static Console c;
public static void main (String arg [])
{
float valor1, valor2, promedio;
c = new Console ();
c.println ();
c.println ("El resultado es: " + promedio);
}
}
if ( Condición )
{
Sentencia1 ; Actividades a realizar si la
Sentencia2 ; condición es Verdadera
}
else
{
SentenciaX ; Actividades a realizar si la
SentenciaZ ; condición es Falsa
}
Inicio
n1
n2
Fin
import hsa.Console;
class Ejemplo6
{
static Console c;
public static void main (String arg [])
{
int n1, n2;
c = new Console ();
c.println ();
if (n1 > n2)
{
c.println ("El mayor es: " + n1);
}
else
{
c.println ("El mayor es: " + n2);
}
}
}
Operador “%”
Para saber si un número es par o impar, se utiliza el operador “%”,
que devuelve el resto de una división, por ejemplo:
Inicio
Falso n % 2 == 0 Verdadero
Fin
import hsa.Console;
class Ejemplo7
{
static Console c;
public static void main (String arg [])
{
int n;
c = new Console ();
c.println ();
if (n % 2 == 0)
{
c.println ("El numero es Par");
}
else
{
c.println ("El numero es Impar");
}
}
}
Operadores Lógicos
Los operadores Lógicos se utilizan cuando se presentan problemas en
donde se deben evaluar dos o mas condiciones en una misma estructura. Los
operadores Lógico mas utilizados son los siguientes:
( sueldo > 4000 && antiguedad < 10): Indica que la condición será
verdadera si se verifican que las dos condiciones son verdaderas, esto es lo que
especifica el símbolo &&.
( edad > 21 || dni > 25000000 ): En este caso, verificándose una de las
dos condiciones como verdadera, edad>21 ó dni>25000000, toda la condición
será verdadera.
Tipo “boolean”
En este caso, se deberá tener una condición doble que indique que el día
sea 25 y que además, el mes corresponda a diciembre (12).
Inicio
dia
mes
Fin
import hsa.Console;
class Ejemplo8
{
static Console c;
public static void main (String arg [])
{
int dia, mes;
c = new Console ();
c.println ();
if (dia == 25 && mes == 12)
{
c.println ("La Fecha corresponde a Navidad");
}
else
{
c.println ("La Fecha no corresponde a Navidad");
}
}
}
Inicio
edad
“Chico”
“Joven”
“Adulto”
Fin
import hsa.Console;
class Ejemplo9
{
static Console c;
public static void main (String arg [])
{
int edad;
c = new Console ();
c.println ();
if (edad < 12)
{
c.println ("Es un Chico");
}
if (edad >= 12 && edad <= 21 )
{
c.println ("Es un Joven");
}
if (edad > 21)
{
c.println ("Es un Adulto");
}
}
}
Ejercicios Propuestos
2.1 – Ingresar un número por teclado en el rango de 0 a 99 y determinar si tiene
uno dos dígitos.
2.2 – Realizar un programa que lea por teclado dos números, si el primero es
mayor al segundo, informar su suma y diferencia, en caso contrario,
informar el producto y la división del primero por el segundo.
2.4 – Ingresar una fecha por teclado, día mes y año, y determinar si corresponde
al primer trimestre del año. Mostrarlo las leyendas: “Corresponde al primer
Trimestre” o “No corresponde al primer Trimestre”, según corresponda.
2.6 – Ingresar tres valores numéricos por teclado, si todos son iguales, imprimir
la leyenda: “Todos los números ingresados son iguales”, de lo contrario,
imprimir la leyenda “No todos los números son iguales”.
2.8 – Se debe ingresar tres números por teclado, si al menos uno de los
números es menor a 10, imprimir la leyenda “Alguno de los números es
menor a 10” de lo contrario, “Ninguno de los números es menor a 10”.
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 instrucción
c.readChar().
import hsa.Console;
class PropuestoDos10
{
static Console c;
public static void main (String arg [])
{
char letra;
c = new Console ();
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");
}
}
}
TEMAS: Clase
UNIDAD Nº 1:
Estructuras
condicionales.
Estructura condicional
anidada.
Instrucción Switch-Case
3
Clase Número: 3
Estructura Condicional Anidada
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 número y determinar si es positivo,
negativo o nulo.
Para saber si un número es positivo, simplemente se lo debe comparar
con el cero, si el número en cuestión 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
“Numero Positivo”
Falso Numero < 0 Verdadero
Fin
import hsa.Console;
class Ejemplo10
{
static Console c;
public static void main (String arg [])
{
int numero;
c = new Console ();
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:
Inicio
“Promocionado”
Falso prom >= 4 Verdadero
“Reprobado” “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 condición sea Falsa, por la rama del Falso aparece otra
estructura condicional, porque todavía se tienen dos posibilidades, que el
promedio del alumno sea superior o igual a cuatro, o tabién, se puede dar el
caso de que sea inferior a cuatro.
En la segunda condición, 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.
import hsa.Console;
class Ejemplo11
{
static Console c;
public static void main (String arg [])
{
int nota1, nota2, nota3;
float prom;
c = new Console ();
Inicio
n1
n2
n3
Fin
import hsa.Console;
class Ejemplo12
{
static Console c;
public static void main (String arg [])
{
int n1, n2, n3;
c = new Console ();
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);
}
}
}
Actividades
Actividades
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.
SUBDIVISIÓN DE RANGO DE
BANDA
FRECUENCIA FRECUENCIA
ULF Frecuencia ultra baja 3 a 30 Hz
ELF Frecuencia extremadamente baja 30 a 300 Hz
ILF Frecuencia infra baja 300 Hz a 3 Khz
VLF Frecuencia muy baja 3 a 30 Khz
LF Frecuencia baja 30 a 300 Khz
MF Frecuencia media 300 Khz a 3 Mhz
HF Frecuencia alta 3 a 30 Mhz
VHF Frecuencia muy alta 30 a 300 Mhz
UHF Frecuencia ultra alta 300 Mhz a 3 Ghz
SHF Frecuencia super alta 3 a 30 Ghz
EHF Frecuencia extremadamente alta 30 a 300 Ghz
Actividad 3.1
Inicio
valor1
valor2
valor3
Fin
Actividad 3.2
Inicio
“Primer Cuadrante”
Falso x<0 && y>0 Verdadero
“Segundo Cuadrante”
Falso x > 0 && y > 0 Verdadero
Fin
Actividad 3.3
Inicio
String nombre;
c.print("Ingrese nombre"); correctas
nombre = c.readLine();
“Nivel Superior”
Falso por >= 75 Verdadero
“Nivel Medio”
Falso por >= 50 Verdadero
Fin
variable
fin
Inicio
mes
mes
Caso 1 “Enero”
Caso 2 “Febrero”
Caso 11 “Noviembre”
Caso 12 “Diciembre”
“No es Valido”
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 ("Corresponde a Enero");
break;
case 2: c.println ("Corresponde a Febrero");
break;
case 3: c.println ("Corresponde a Marzo");
break;
case 4: c.println ("Corresponde a Abril");
break;
case 5: c.println ("Corresponde a Mayo");
break;
case 6: c.println ("Corresponde a Junio");
break;
case 7: c.println ("Corresponde a Julio");
break;
case 8: c.println ("Corresponde a Agosto");
break;
case 9: c.println ("Corresponde a Septiembre");
break;
case 10: c.println ("Corresponde a Octubre");
break;
case 11: c.println ("Corresponde a Noviembre");
break;
case 12: c.println ("Corresponde a Diciembre");
break;
default: c.println ("No Corresponde a un mes valido");
break;
}
}
}
Inicio
sb Categoría Incremento
1 20%
2 15%
categoria 3 10%
4 5%
categoria
incremento = 0
sueldo = sb + incremento
sueldo
Fin
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 ();
Ejemplo:
/*
Esto es un comentario de
tres lineas en el progama
desarrollado.
*/
import hsa.Console;
class Ejemplo15
{
static Console c;
public static void main (String arg [])
{
int dia, mes, anio, cantidad;
c = new Console ();
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");
}
}
Nota: Tener presente que la letra ñ, no puede ser utilizada como variable.
Debido a esto, se colocó la variable anio.
Ejercicios Propuestos
3.3 – Escribir un programa en el cual: dada una lista de tres valores numéricos
distintos se calcule e informe su rango de variación (debe mostrar el menor y
el mayor de ellos).
3.4 – Leer un valor entero. Mostrar el número de día que corresponde a ese
valor. Suponer que 0 corresponde a domingo, se debe mostrar el nombre del
día que le corrresponde.
• Hasta 5 años un 3%
• Entre 5 y 10 años un 5%
• Más de 10 años un 8%
Categoría Porcentaje
‘A’ 5%
‘B’ 8%
‘C’ 10%
‘D’ 12%
3.9 – Imprimir el importe que deberá abonar una persona por el alquiler de un
vehículo, ingresando el tipo de vehiculo y la cantidad de días, sabiendo lo
siguiente:
Ejemplo:
TEMAS: Clase
UNIDAD Nº 2:
Estructuras
Repetitivas.
Estructuras Repetitivas
Estructura While
Contadores - Acumuladores. 4
Clase Número: 4
Estructura Repetitiva
Una estructura repetitiva permite ejecutar una instrucción o un conjunto
de instrucciones varias veces, dependiendo de una condición que sea falsa o
verdadera.
Si la condición que determina la ejecución de las instrucciones es
siempre verdadera, estamos en presencia de un ciclo repetitivo infinito. Dicha
situación es un error de programación, porque nunca finalizaría un programa.
Estructura While
Es un tipo de estructura repetitiva en donde la condición que repetirá las
instrucciones, se encuentra al principio de la misma. Su símbolo en
diagramación es el siguiente:
While, significa
Mientras, y en el diagrama
Falso
de la estructura se puede
Condicion observar que, mientras la
condición sea Verdadera, se
procesarán las Sentencias
Verdadero
indicadas, de lo contrario, si
la condición es falsa, sale
Sentencia1; del ciclo repetitivo y
Sentencia2; continúa con la secuencia de
: instrucciones fuera del
SentenciaN; ciclo.
Contadores
Un contador, es una variable cuyo valor se incrementa o decrementa
en una cantidad constante, cada vez que se produce un determinado suceso o
acción.
Los contadores se utilizan con la finalidad de contar sucesos o acciones
internas de un bucle. Deben realizar una operación de inicialización y
posteriormente sucesivos incrementos o decrementos del mismo. La
inicialización consiste en asignarle al contador un valor. Se situará antes y fuera
del ciclo repetitivo.
Es decir que se utilizan para llevar el control del número de ocasiones en
que se realiza una operación o se cumple una condición. Los incrementos son
generalmente de uno en uno, pero puede haber contadores de dos en dos, tres en
tres, etc. La simbología es la de asignación, o sea, un rectángulo como, por
ejemplo:
i=i+1
Inicio
Valor Inicial
i=1
Valor Final
Falso
i <= 100
Verdadero
i+“ “
Incremento
i=i+1
Fin
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 línea.
}
}
}
Ejemplo Nro. 17: Imprimir todos los números 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 página
siguiente.
Inicio
i = 100
Falso
i <= 300
Verdadero
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;
}
}
}
Acumulador
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 varía su contenido en
incrementos constantes, mientras el acumulador, va aumentando en una
cantidad variable.
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);
}
}
Inicio
i=1
m3 = 0
m5 = 0
m35 = 0
Falso
i <= 12
Verdadero
Falso Verdadero
n % 3 == 0
m3 ++
Falso Verdadero
n % 5 == 0
Fin
Falso n % 3 == 0 && Verdadero
n % 5 ==0
m35 ++
i=i+1
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 codificación 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 más de una instrucción, tanto por el verdadero como por el
falso, sí es obligatorio coloca las llaves que limiten el bloque de instrucciones a
ejecutar.
Inicio
i=1
t = 10
i <=30
t+" "
t=t+6
i = i +1
Fin
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;
}
}
}
Actividades
Actividades
Actividad 4.1: Obtener la suma de todos los números menores o iguales a 100.
Se deberá imprimir la suma de: 1 +2 + 3 + 4 + … + 98 + 99 + 100 =
5*6+5*7+5*8+5*9+…
Actividad 4.1
Inicio
i=1
a=0
Falso
i <= 100
Verdadero
a=a+i a
i=i+1
Fin
Actividad 4.2
Inicio
i=1
a=0
Falso
i <= 7
Verdadero
2
valor 3
2 1 3
a = a + valor
i=i+1
prom = a / 7
Fin
Actividad 4.3
Inicio
i=1
par = 0
impar = 0
cero = 0
Falso
i <= 15
Verdadero
Falso Verdadero
n % 2 == 0
impar ++ par ++
Falso Verdadero
n % 10 == 0
cero ++
i=i+1
Fin
Actividad 4.4
Inicio
i=1
a=0
Falso
i <= 10
Verdadero
Falso Verdadero
i>5
a=a+n
i=i+1
Fin
Inicio
a=0
cantidad = 0
mayores = 0
menores = 0
sueldo
Falso
sueldo != 99999
Verdadero
cantidad ++
Falso Verdadero
sueldo >= 5000
menores ++ mayores ++
a = a + sueldo
sueldo
Falso Verdadero
cantidad > 0
p = a / cantidad
“Promedio de sueldos: “ + p
Fin
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.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");
}
}
Ejercicios Propuestos
4.1 – Ingresar 12 precios de productos y determinar:
4.5 – Ingresar dos valores numéricos y mostrar todos los números comprendidos.
No se deben imprimir los valores ingresados.
4.7 – Ingresar edades de persona hasta que se digite el valor clave de 1111. Se
deberá imprimir lo siguiente:
4.9 – Imprimir los números pares en forma decreciente desde el 800 hasta el 400.
Clase
UNIDAD Nº 2: TEMAS:
Estructuras
Repetitivas.
Estructura For.
Busqueda del mayor. 5
Clase Número: 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 un bloque de instrucciones.
Representación gráfica
Falso
Inicialización; condidión a evaluar; modificación
Verdadero
Operaciones
Falso
i=1 ; i <= 10 ; i ++
Verdadero
Operaciones
Ejemplo Nro. 22: Realizar un programa que permita imprimir todos los
números del 1 al 100.
Inicio
Falso
i = 1 ; i <= 100 ; i ++
Verdadero
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 + " ");
}
}
}
Inicio
suma = 0
Falso
i=1 ; i <= 8 ; i ++
Verdadero
altura
promedio = suma / 8
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);
}
}
Inicio
Falso
i=1 ; i <= 10 ; i ++
Verdadero
nota
Falso Verdadero
nota >7
menores++ entre ++
Fin
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;
c.println ();
c.println ("Cantidad de mayores a 7: " + mayores);
c.println ("Cantidad entre 4 y 7: " + entre);
c.println ("Cantidad de menores a 7: " + menores);
}
}
Ejemplo Nro. 25: Escribir un programa que imprima todos los múltiplos
de 6 que hay entre 100 y 200, mostrando, además, la cantidad de ellos.
Inicio
Falso
i = 100 ; i <= 200 ; i ++
Verdadero
Falso Verdadero
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 + " ");
}
}
}
Ejemplo Nro. 26: Escribir un programa que lea “n” números enteros por
teclado y calcule la cantidad de valores que fueron mayores 1000 y además, la
suma de ellos.
Inicio
mayores = suma = 0
n
Falso
i=1 ; i <= n ; i ++
Verdadero
numero
Falso Verdadero
numero >1000
mayores ++
mayores, suma
Fin
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.println ();
c.println ("Cantidad de mayores a 1000: " + mayores);
c.println ("Suma de los mayores a 1000: " + suma);
}
}
Actividades
Actividades
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
triángulo. El programa deberá informar:
De cada triángulo la medida de su base, su altura y su
superficie.
La cantidad de triángulos cuya superficie es mayor a 12.
Ejemplo:
5x1=5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
:
5 x 20 = 100
Multiplos de 3
0 – 3 – 6 – 9 – 12 – 15...
Actividad 5.6: Realizar un programa que lea los 3 lados de N triángulos, e informar:
a) De cada uno de ellos, qué tipo de triángulo es: equilátero (tres
lados iguales), isósceles (dos lados iguales), o escaleno (todos
los lados desiguales).
b) Cantidad de triángulos de cada tipo.
c) Tipo de triángulo que posee menor cantidad.
Actividad 5.1
Inicio
cant = 0
i = 1; i <= n; i++
b, h
superficie = b * h
b, h, superficie
superficie > 12
cant ++
Fin
Actividad 5.2
Inicio
suma = 0
numero
i>5
Fin
Actividad 5.3
Si el valor de la variable i
es igual a 1, significa que
se tiene el primer número
Inicio ingresado, por lo tanto, se
lo guarda en la variable m.
Falso
i = 1; i <= 20; i++
Verdadero
numero
Falso Verdadero
i == 1
m = numero
Falso Verdadero
numero > m
m = numero
r=5*i
5+“x“+i+“=“+r
Fin
Actividad 5.5
Inicio
termino = 0
termino + “ – “
termino = termino + n
Fin
Ejercicios Propuestos
5.1 – Escribir un programa que pida ingresar coordenadas (x,y) que representan
puntos en el plano. Informar cuántos puntos se han ingresado en el primer,
segundo, tercer y cuarto cuadrante. Al comenzar el programa se pide que se
ingrese la cantidad de puntos a procesar.
5.5 – Ingresar dos valores y realizar un programa que muestre la suma de todos
los números comprendidos entre esos dos valores.
Ejemplo:
Ingrese un numero: 50
1; 2; 5; 10; 25; 50
50 x 3; 50 x 4; 50 x 5; 50 x 6; …
Ingrese un número: 5
5.10 – Ingresar un número y mostrar todos sus múltiplos entre 500 y 1000.
5.12 – Ingresar dos números por teclado y determinar cuántos valores pares hay
entre esos dos números.
Ejemplo:
Ingrese un Numero: 20
Ingrese otro Numero: 50
El 20 tiene 6 multiplos
entre 0 y 100
TEMAS: Clase
UNIDAD Nº 2: Estructura do..while
6
Concepto de Bandera.
Estructuras Posicionamiento del cursor.
Repetitivas. Generación de números
aleatorios.
Clase Número: 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 condición 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 condición en esta estructura está por debajo del bloque a repetir, a diferencia
del while o del for que está en la parte superior.
Representación gráfica:
do
Bloque de
instruciones a
repetir.
Verdadero
Condición
Falso
do
{
Sentencia1;
Sentencia2;
:
SentenciaN;
}
while (Condicion);
Inicio
do
Estructura if
Falso n % 2 == 0 Verdadero
Verdadero
n != 0
Falso
Fin while
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");
}
}
Ejemplo Nro. 28: Escribir un programa que solicite la carga de números 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 cálculo del
promedio)
Inicio
cantidad = 0
suma = 0
do
cantidad ++
Verdadero
n != 9999
Falso
Fin
import hsa.Console;
class Ejemplo28
{
static Console c;
public static void main (String arg [])
{
int n, cantidad, suma;
float promedio;
c = new Console ();
cantidad = 0;
suma = 0;
do
{
c.print ("Ingrese un numero (9999 para terminar): ");
n = c.readInt ();
if (n != 9999)
{
cantidad++;
suma = suma + n;
}
}
while (n != 9999);
c.println ();
if(cantidad != 0)
{
promedio = (float) suma / cantidad;
c.println ("El promedio es: " + promedio);
}
else
c.println("No se ingresaron numeros.");
}
}
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
Falso Verdadero
b == 0
b=1
nx = nombre
px = precio
Falso Verdadero
precio < px
2
nx = nombre
px = precio
opcion
2 1
Verdadero
opcion == ‘s’
Falso
Fin
Concepto De Bandera
Una bandera es una variable que puede asumir únicamente dos
valores, por ejemplo, cero y uno, verdadero o falso, etc.
Se utiliza cuando se necesita procesar una porcion de programa si se verifica
una determinada condición en un momento adecuado para una alternativa. En el
programa siguiente, se utiliza una bandera para poder asignar el primer dato
ingresado a una variable arbitraria para poder compararla con los siguientes
datos que se ingresarán. El proceso consiste en lo siguiente:
c.setCursor(10,20);
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;
if (b == 0)
{
b = 1;
nx = nombre;
px = precio;
}
b = 1;
nx = nombre;
px = precio;
Que significa que mientras la variable opción tenga almacenado la letra ‘S’,
retornará a pedir otro juego de datos. Observar que la constante ‘S’, se ha
colocado entre apóstrofes, ya que es un carácter. También se utilizó un operador
lógico Or, debido a que el teclado puede estar trabajando en mayúsculas o
minúsculas.
Por ejemplo, si se quiere generar números entre cero y 100 se debe colocar la
siguiente línea:
Explicación:
Ejemplo Nro. 30: Desarrollar un programa que simule la tirada de dos dados, y
determinar si salió el número 7, mostrando la leyenda “Ganó” en caso de ser
verdadero y la Leyenda “Perdió” en caso de ser falso.
d1 = (int)(Math.random() * 6) + 1;
do
d1 = (int) (Math.random() * 6) + 1
d2 = (int) (Math.random() * 6) + 1
“Dado 1: “ + d1
“Dado 2: “ + d2
suma = d1 + d2
Falso Verdadero
suma == 7
“Perdió “ “Ganó “
opcion
Fin
import hsa.Console;
class Ejemplo30
{
static Console c;
public static void main (String arg [])
{
int d1, d2, suma;
char opcion = ' ';
c = new Console ();
do
{
c.clear ();
d1 = (int) (Math.random () * 6) + 1;
d2 = (int) (Math.random () * 6) + 1;
c.setCursor (5, 20);
c.print ("Dado 1: " + d1);
c.setCursor (7, 20);
c.print ("Dado 2: " + d2);
suma = d1 + d2;
c.setCursor (10, 20);
if (suma == 7)
c.print ("*** Gano ***");
else
c.print ("Perdio");
c.setCursor (15, 20);
c.print ("Realiza otra tirada de dados(s/n): ");
Ejercicios Propuestos
Ingrese un numero: 30
TEMAS: Clase
UNIDAD Nº 3:
7
Array
Vectores
Arreglos Carga e Impresión de un
Vector
Clase Número: 7
Array
Introducción
En determinadas situaciones, se tiene la necesidad de procesar
una colección de valores que están relacionados entre si, de alguna forma, como
por ejemplo una lista de notas, de asistencias, de productos, etc.
El procesamiento de tales conjuntos de datos, utilizando datos simples, puede
ser extremadamente complicado y por ello, la mayoría de los lenguajes de
programación cuentan con procesamiento de estructuras de datos.
Anteriormente se han procesado datos sueltos, ahora se estudiará la forma de
almacenar un conjunto de datos relacionados entre sí, por ejemplo: un conjunto
de nombres de personas, un conjunto de precios de productos, etc. Para al
macerar un conjunto de datos, se utilizan las estructuras llamadas Array, que
significa: Arreglos.
Un Arreglo en Java, es un grupo o conjunto de datos
relacionados entre sí y todos del mismo tipo. Es decir, que, si uno de los datos
es un valor entero, todos los demás deben ser enteros, si uno es un String, todos
los demás deben ser String, y así sucesivamente. Cada elemento del conjunto,
está identificado por la posición que ocupa dentro del arreglo. Estas posiciones
se encuentran numeradas del cero en adelante, es decir que el primer elemento
está en la posición cero, el segundo en la posición uno, y así sucesivamente.
En definitiva, un Array es una estructura de datos,
representados en una secuencia de posiciones de la memoria central, a las que
se puede acceder directamente por medio del uso de índice.
Los arreglos se clasifican de acuerdo a la cantidad de variables
de posicionamiento que posean, así se denominan: Unidimensionales,
Bidimensionales, Tridimensionales, etc. Los arreglos unidimensionales son
llamados comúnmente Vectores y los de más de una dimensión se denominan
Matrices.
Unidimensionales Vectores
Bidimensionales
Array
Tridimensionales Matrices
Etc.
Vectores
nota[i] = [8,4,9,5,7]
Inicio
Falso
i = 0 ; i < 5 ; i++
Verdadero
Carga del Vector edad [i]
Falso
i = 0 ; i < 5 ; i++
Verdadero
Impresión del Vector
edad [i]
Fin
import hsa.Console;
class Ejemplo31
{
static Console c;
public static void main (String arg [])
{
c = new Console();
int [] edad;
edad = new int[5];
for (int i = 0 ; i < 5 ; i++)
{
c.print("Ingrese edad [" + i + "]: ");
edad[i] = c.readInt ();
}
c.println();
c.println();
c.print("El vector ingresado es: [ ");
for (int i = 0 ; i < 5 ; i++)
{
c.print(edad[i]+" ");
}
c.print("]");
}
}
int [] edad;
Los corchetes indican que la variable edad es un vector. Para crear un vector e
indicarle la cantidad de elementos o componentes que contendrá, se utiliza la
siguiente línea:
Ingrese edad [
Ingrese edad [0
Allí se detiene la ejecución del programa hasta que se digite un valor para ser
almacenado en la variable edad [0]. El proceso de carga continúa hasta ingresar
edad [4], que sería 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
int [] notas = { 5, 9, 4, 8 };
Ejemplo Nro. 32: Desarrollar un programa que inicialice un vector con los
números pares hasta 12 y luego los imprima mediante un ciclo for.
Inicio
numerosPares = { 0, 2, 4, 6, 8, 10, 12 }
Falso
i = 0 ; i < numerosPares.length ; i++
Verdadero
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 ("]");
}
}
Inicio
suma = 0
altas = 0
bajas = 0
Falso
i = 0 ; i < alturas.length ; i++
Verdadero
alturas [i]
promedio
Falso
i = 0 ; i < numerosPares.length ; i++
Verdadero
Falso Verdadero
altura[i] > promedio
bajas ++ altas ++
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 - – Algoritmos y Estructuras de Datos I –
– ISSD – EDUARDO MANSILLA –
float [] alturas;
Ejemplo Nro. 34: Almacenar en un vector todos los números impares menores
de 100 y luego mostrar:
Inicio Inicialización de
variables
Carga del
Vector contador = 1
m3 = m5 = 0
suma = 0
Falso
i = 0 ; i < vector.length ; i++
Verdadero
vector[i] = contador
contador = contador + 2
Proceso
Falso
i = 0 ; i < vector.length ; i++
Verdadero
vector[i] + “ “
vector[i] % 3 == 0
m3++
vector[i] % 5 == 0
m5++
“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);
}
}
if (vector[i] % 3 == 0)
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) Cuántos alumnos de cada curso están promocionado (nota mayor o igual
a 7).
b) Cuántos 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
Falso
i = 0 ; i < a.length ; i++
Verdadero
a [i]
2 1 3
2 1 3
Falso Verdadero
a [i] >= 7
promocionadoA ++
Falso Verdadero
a [i] < 4
libreA ++
pa = suma / a.length
suma = 0
Falso
i = 0 ; i < b.length ; i++
Verdadero
b [i]
Falso Verdadero
b [i] >= 7
promocionadoB ++
Falso Verdadero
b [i] < 4
libreB ++
4
pb = suma / b.length
Falso Verdadero
pa > pb
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 lógica 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];
int [] b;
b = new int [15];
int promocionadoA, promocionadoB,
int libreA, libreB, suma;
promocionadoA=promocionadoB=libreA=libreB=suma = 0;
float pa, pb;
c.println ("Ingrese las " + a.length + " Notas para
el curso A:");
for (int i = 0 ; i < a.length ; i++)
{
c.print ("Nota [" + (i + 1) + "] = ");
a [i] = c.readInt ();
suma = suma + a [i];
if (a [i] >= 7)
promocionadoA++;
if (a [i] < 4)
libreA++;
}
pa = (float) suma / a.length;
suma = 0;
c.println ();
c.println ("Ingrese las " + b.length + " Notas para
el curso B:");
for (int i = 0 ; i < b.length ; i++)
{
c.print ("Nota [" + (i + 1) + "] = ");
b [i] = c.readInt ();
suma = suma + b [i];
if (b [i] >= 7)
promocionadoB++;
if (b [i] < 4)
libreB++;
}
pb = (float) suma / b.length;
c.println (); c.println ();
c.println ("Cantidad de Promocionados en el curso
A: " + promocionadoA);
c.println ("Cantidad de Libres en el curso A: " +
libreA);
c.println ("Promedio del curso A: " + pa);
c.println ();
c.println ("Cantidad de Promocionados en el curso
B: " + promocionadoB);
c.println ("Cantidad de Libres en el curso B: " + libreB);
c.println ("Promedio del curso B: " + pb);
c.println ();
Ejercicios Propuestos
Vector 1: ( 4 6 2 1 5 )
Vector 2: ( 2 1 7 3 4 )
Suma : (67949)
TEMAS:
UNIDAD Nº 4: Clase
Métodos en Java
8
Clases en Java
Métodos Zonas de un programa
Vectores Métodos que retornan Valores
Vectores Paralelos
Clase Número: 8
Métodos en Java
Introducción
El TipoDevuelto puede ser cualquiera de los tipos visto hasta el momento, por
ejemplo: int, char, float, String.
En caso de que el método no devuelva ningún valor se coloca la palabra “void”.
Los nombres de los métodos siempre deben comenzar con una letra en
minúscula, cuando se deben colocar nombres formados por dos o mas palabras,
se coloca la primera letra de la primer palabra en minúscula y la primer letra de
las siguientes palabras en mayúsculas. 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 método a realizar.
void cargarDatos()
{
Sentencias;
}
void listadoDePrecios()
{
Sentencias;
}
Clases en Java
Se define a una Clase como una colección de variables y métodos, 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.
♦ Importación de librerías.
♦ Programa principal
Ejemplo Nro. 36: Desarrollar un programa que tenga dos métodos, uno para la
introducción de tres números y otro método para calcular e imprimir el
promedio de ellos.
void calcularPromedio ()
{
float prom;
prom = (float) (n1 + n2 + n3) / 3;
c.println();
c.print ("El promedio es: " + prom);
}
import hsa.Console;
Ejemplo36 e;
e.ingresoDeDatos ();
e.calcularPromedio ();
void tablaDeMultiplicar ( )
void ingresoDeDato ( )
Falso
i = 1; i < 12; i++
n Verdadero
n+“x“+i+“=“+r
Fin
Fin
Inicio
ingresoDeDato ( )
tablaDeMultiplicar ( )
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);
}
}
Ejemplo Nro. 38: Desarrollar un programa que tenga un método que acepte un
número entero y retorne el cubo del mismo.
z=x*x*x n proceso ( )
Fin resultado
Fin
import hsa.Console;
class Ejemplo38
{
static Console c;
void proceso ()
{
int n, resultado;
c.print ("Ingrese un Numero: ");
n = c.readInt ();
resultado = cubo (n);
c.print ("Su cubo es: " + resultado);
}
void cargarSueldos ( )
Falso
i = 0; i < s.length; i++
Verdadero
s [i]
Fin
void imprimirSueldos ( )
Falso
i = 0; i < s.length; i++
Verdadero
s [i]
Fin
superior = 0 suma = 0
Falso Falso
i = 0; i < s.length; i++ i = 0; i < s.length; i++
Verdadero Verdadero
superior++
Fin Fin
Programa Principal
Inicio
void punto4 ( )
cargarSueldos ( )
Falso
i = 0; i < s.length; i++
imprimirSueldos ( )
Verdadero
punto4 ( )
Fin Fin
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;
}
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] + " ");
}
}
Ejemplo Nro. 40: Un comercio tiene dos turnos (mañana y tarde) en los que
trabajan 8 empleados (4 por la mañana 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.
Falso Falso
i = 0; i < sM.length; i = 0; i < sT.length; i++
i++
Verdadero Verdadero
sM [i] sT [i]
Fin Fin
Falso
i = 0; i < s.length; i++
“Gastos del turno T: “ + gastos (sT)
Verdadero
Fin cargarSueldosM( )
cargarSueldosT( )
Programa Principal
imprimirGastos( )
Fin
import hsa.Console;
class Ejemplo40
{
static Console c;
float [] sM; Definición de los Vectores.
float [] sT;
Ejemplo40 ()
{
sM = new float [4]; Creación de los Vectores
sT = new float [4];
}
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 ();
}
}
Vectores Paralelos
El concepto de Vectores Paralelos se dá, cuando hay dos o más vectores
relacionados entre sí a través del subíndice.
Ejemplo:
0 1 2 3 4
Falso suma = 0
i = 0; i < productos.length; i++
Verdadero
Falso
productos [i] i = 0; i < productos.length; i++
Verdadero
Fin
Fin
cargarDatos()
imprimirDatos()
Inicio
import hsa.Console;
class Ejemplo41
{
static Console c;
Ejemplo41 ()
{
productos = new String [5]; Creación de los vectores
precios = new float [5];
}
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);
}
Ejercicios Propuestos
8.1 - Desarrollar u programa que permita ingresar un vector de 7 elementos y
luego informe:
Ejemplo:
Javier 6 Bueno
Marcelo 9 Muy Bueno
Viviana 7 Bueno
Raúl 3 Insuficiente
Ricardo 10 Muy Bueno
Roxana 5 Bueno
Hugo 2 Insuficiente
Rita 8 Muy Bueno
8.5 - Desarrollar un método que acepte dos vectores del mismo tamaño como
parámetros, y retorne el producto escalar de los mismos. El producto
escalar de dos vectores, es un número 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 ]
9
Procesos Algorítmicos
Mayor y Menor elemento
Métodos
Consultas
Vectores Ordenamientom de Vectores
Clase Número: 9
Procesos Algorítmicos
En esta clase se verán las técnicas y metodologías algorítmicas más
comunes a utilizar en la mayoría de los programas y sistemas a realizar, como
por ejemplo: Búsqueda 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 más sencillos y quedará por parte del alumno investigar
sobre las demás.
Nombres de Personas
Mario Alejandra Laura Santiago Luis
Edades
27 21 35 28 24
0 1 2 3 4
Edades [i]
m p
0 27 27 0
1 21
Tomar el primer elemento del vector y
2 35 almacenarlo en una variable auxiliar, por
ejemplo “m” y guardar en la variable “p” el valor
3 28 cero, que corresponde a la primera posición. Este
valor guardado en “m” se utilizará para comparar
4 24 con el resto de los elementos del vector.
nombres[p] y sueldos[p]
void cargarDatos ( )
Falso
i = 0; i < nombres.length; i++
Verdadero
nombres [i]
edades [i]
sueldos [i]
Fin
m = edades[0]
p=0
Falso
i = 1; i < edades.length; i++
Verdadero
Falso Verdadero
edades[i] > m
m = edades[i]
p=i
Retornar p
Fin
void mostrarDatos()
p = mayor (edades)
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 ();
}
}
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]);
}
"Viviana".equals("Analia") False
"Viviana".equals("Viviana") True
"Viviana".equals("VIVIANA") False
"Viviana".equalsIgnoreCase("Analia") False
"Viviana".eaualsIgnoreCase("Viviana") True
"Viviana".eaualsIgnoreCase("VIVIANA") True
cadena1.compareTo(cadena2)
Ejemplos:
"Alicia".compareTo("Maria") < 0
"Javier".compareTo("Aldo") > 0
"Marcos".compareTo("Marcos") = 0
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 información se pierde cuando finaliza la ejecución del programa.
void cargarDatos ( )
Falso
i = 0; i < emisoras.length; i++
Verdadero
emisoras [i]
frecuencias [i]
Fin
void consulta ( )
posicion = -1
emisoraAux
Falso
i = 0; i < emisoras.length; i++
Verdadero
Falso Verdadero
emisoraAux.equals(emisoras[i])
posicion = i
posicion != -1
“Le corresponde la
“No existe esa frecuencia de : “
emisora” 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 ();
}
}
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');
}
Luego se ingresa en un ciclo for con una condición 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
Inserción directa
Selección directa
Burbuja
Shell
Quick sort.
120 75 82 55 49
Falso
i = 0; i < 4; i++
Verdadero
Falso Verdadero
v[i] > v[i+1]
auxi = v[i]
v[i] = v[i+1]
v[i+1] = auxi
75 120
v [0] v [1]
75 82 120
v[0] v[1] v[2]
75 120 82 55 49
75 85 120 55 49
75 82 55 120 49
75 82 55 49 120
Podemos ver cómo el valor más 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;
75 82 55 49 120
Falso
k = 1; k < 5; k++
Verdadero
Falso
i = 0; i < 4; i++
Verdadero
Falso Verdadero
v[i] > v[i+1]
auxi = v[i]
v[i] = v[i+1]
v[i+1] = auxi
Cuando k = 1
75 120 82 55 49
75 82 120 55 49
75 82 55 120 49
75 82 55 49 120
Cuando k = 2
75 82 55 490
49 120
75 55 82 49 120
75 55 49 82 120
75 55 49 82 120
Cuando k = 3
55 75 49 82 120
55 49 75 82 120
55 49 75 82 120
55 49 75 82 120
Cuando k = 4
49 55 75 82 120
49 55 75 82 120
49 55 75 82 120
49 55 75 82 120
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 automáticamente ordenado (podemos imaginar que si
tenemos un vector con 2 elementos no se requiere el for externo, porque este
debería repetirse una única vez).
Se puede concluir que la primera vez se debe hacer para este ejemplo 4
comparaciones con el ciclo interno, en la segunda ejecución del for interno se
deberían hacer 3 comparaciones (porque el último valor ya está ordenado y es una
pérdida de tiempo volver a compararlo) y en general se debe ir reduciendo en uno
la cantidad de comparaciones.
Falso
k = 1; k<5; k++
Verdadero
Falso
i = 0; i<5–k; i++
Verdadero
Falso Verdadero
v[i] > v[i+1]
auxi = v[i]
v[i] = v[i+1]
v[i+1] = auxi
Falso
k = 1; k<n; k++
Verdadero
Falso
i = 0; i<n–k; i++
Verdadero
Falso Verdadero
v[i] > v[i+1]
auxi = v[i]
v[i] = v[i+1]
v[i+1] = auxi
Fin
import hsa.Console;
class Ejemplo44
{
static Console c;
int [] v;
Ejemplo44 ()
{
c.print ("Ingrese la cantidad de elementos del vector: ");
int n = c.readInt ();
v = new 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 imprimir ()
{
for (int i = 0 ; i < v.length ; i++)
{
c.print (v [i] + " ");
}
}
void imprimirOrdenado()
{
int n = v.length;
ordenar(v,n);
imprimir();
}
Ejercicios Propuestos
9.5 - Cargar tres vectores que contengan nombre de libro, año de edición y
precio. Realizar una consulta por nombre y determinar cual es el libro más
antiguo.
9.6 - En el ejercicio anterior, ingresar dos precios y mostrar todos los libros que
se encuentran comprendido entre esos precios.
import hsa.Console;
class PropuestoNueve3
{
static Console c; Solución del ejercicio
String [] nombre; propuesto 9.3
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];
}
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();
}
10
Ordenamiento con Vectores
Paralelos
Métodos
Consultas en vectores
Vectores paralelos
Clase Número: 10
Ordenamiento con Vectores
Paralelos
Cuando se tienen vectores paralelos y se ordena uno de ellos hay que
tener la precaución 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:
void cargarDatos ( )
Falso
i = 0; i < provincias.length; i++
Verdadero
provincias [i]
temperaturas [i]
Fin
Falso
k = 1; k<n; k++
Verdadero
Falso
i = 0; i<n–k; i++
Verdadero
Falso Verdadero
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
Falso
k = 1; k<n; k++
Verdadero
Falso
i = 0; i<n–k; i++
Verdadero
Falso Verdadero
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];
}
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;
}
}
}
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;
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);
}
}
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 ();
}
}
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;
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);
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;
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');
}
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();
}
if(dx.equalsIgnoreCase(descripcion[i]))
{
posi = i;
}
Esta condición establece que mientras la variable “op” sea igual a la letra
“s”, ya sea en minúscula o mayúscula, retornará al principio del ciclo do.
El otro tipo de Consulta, es la Consulta por Procedencia, en la cual se
debe tener en cuenta de que puede haber mas de un producto que pertenezca a la
procedencia buscada. El algoritmo comienza ingresando la procedencia a buscar
en la variable “px” (procedencia incógnita). En este caso, utilizar la variable
“posi” para la coincidencia de procedencia, sería un error conceptual, porque
como se mencionó antes, puede haber mas de un producto que cumpla con la
condición de igualdad de procedencias, por lo tanto, el proceso sería similar a
un listado por condición, es decir que se deben mostrar datos siempre que se
verifique una coincidencia entre la procedencia buscada y las almacenadas en el
vector de procedencias. Al igual que en todos los Listados, se inicializa una
variable para contar las filas que se imprimirán, en este caso, se coloca a la
variable “fila” en el valor de 10, ya que líneas anteriores contienen los títulos y
el ingreso de la procedencia a buscar. Una vez dentro del ciclo for, se pregunta
en forma similar a la pregunta de la descripción, pero con las variables de
procedencia:
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++;
}
Ejercicios Propuestos
10.1 En una empresa que tiene “n” empleados con los siguientes datos:
Legajo, Nombre, Profesión y Sueldo, se deben realizar las siguientes
operatorias:
Donde género:
1….Accion 2…..Terror 3…Documental
Se pide:
UNIDAD Nº 5: Clase
TEMAS:
11
Matrices
Arreglos Carga e impresión
Bidimensionales Procesamiento de Matrices
Clase Número: 11
Arreglos Bidimensionales
Un arreglo es Bidimensional, cuando se necesitan dos variables de
posición para identificar un elemento determinado, por ejemplo, un tablero de
ajedrez es una Matriz Bidimensional, porque para indicar en que lugar se sitúa
una determinada pieza, se necesita indicar en que Fila y Columna se encuentra.
Las Matrices bidimensionales pueden se cuadradas o rectangulares. Son
matrices cuadradas, cuando la cantidad de Filas es igual a la cantidad de
Columnas y las matrices rectangulares son aquellas en que la cantidad de Filas
es distinta a la cantidad de columnas. En Java existe un tipo más de Matrices en
lo que respecta a la disposición y cantidad de elementos de cada columna,
llamada matrices Dentadas, las cuales están fuera del alcance de este apunte.
Se debe tener en cuenta que tanto las Filas como las columnas de una
Matriz, comienzan desde la posición cero y no desde uno.
Ejemplo, supongamos que se quiere almacenar 5 notas de alumnos de 4
cursos, la matriz sería como la siguiente:
Alumno Nro. 0 1 2 3 4
0 7 5 8 9 6
1 8 9 6 7 8
Cursos
2 9 9 8 7 8
3 7 9 6 8 7
y así sucesivamente…
cargarMatriz ( )
Falso
i = 0; i < fila ; i++
Verdadero
Falso
j = 0; j < col ; j++
Verdadero
nota [i][j]
Fin
imprimirMatriz ( )
Falso
i = 0; i < fila ; i++
Verdadero
Falso
j = 0; j < col ; j++
Verdadero
nota [i][j]
Fin
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();
}
Programa en ejecución
cuando se muestran los
datos de la Matriz
Procesamiento de Matrices
Alumno Nro. 0 1 2 3 4
0 7 5 8 9 6 7
1 8 9 6 7 8 7,60
Cursos
2 9 9 8 7 8 8,20
3 7 9 6 8 7 7,40
generarVector ( ) Punto a)
Falso
i = 0; i < fila ; i++
Verdadero
suma = 0
Falso
j = 0; j < col ; j++
Verdadero
v [i] = promedio
Fin
void imprimirVector ( )
Falso
i = 0; i < fila; i++
Verdadero
v [i]
Fin
m = v [0]
p=0
Falso
i = 1; i < fila; i++
Verdadero
Falso Verdadero
fila [i] > m
m = fila [i]
p=i
Fin
promedioDeTodosLosCursos ( ) Punto c)
suma = 0
Falso
i = 0; i < fila ; i++
Verdadero
Fin
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();
}
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 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();
}
sumaDiagonalPrincipal ( )
suma = 0
Falso
i = 0; i < fila ; i++
Verdadero
suma
Fin
intercambiarFilas ( )
Falso
j = 0; j < col ; j++
Verdadero
auxi = m[0][j]
m[0][j] = m[fila-1][j]
m[fila-1][j] = auxi
Fin
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();
}
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;
}
}
Ejercicios Propuestos
12.3 - Realizar un programa para que reciba, desde teclado, una matriz NxN de
números enteros, luego calcule y escriba la suma de todas las filas y todas
las columnas.
a) Imprimir la matriz.
b) Intercambiar la primera columna con la última.
c) Promedio de los elementos de la última columna.
12.3 - Simular un tablero de ajedrez, o sea, una matriz de 8x8 casilleros. Se deberá
colocar en cada casillero un valor numérico de la siguiente manera:
1 2 4 8 16 32 64
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 posición 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.
UNIDAD Nº 5: Clase
TEMAS:
12
Matrices y Vectores
Arreglos paralelos
Bidimensionales
Clase Número: 12
Matrices y Vectores Paralelos
Como ya se vio en clases anteriores, dos o más vectores son paralelos
cuando hay una relación entre las componentes de igual subíndice (misma
posición) de cada uno de ellos. Generalmente cuando se trabaja con Matrices y
vectores paralelos, se establece una relación 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 años.
Se podría establecer a las provincias relacionadas con las filas de la matriz y a los
años con las columnas de la matriz de la siguiente manera:
Ejemplo Nro. 50: Definir las estructuras de datos del ejemplo anterior,
para realizar un programa con las siguientes alternativas:
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);
c.setCursor (linea + 1, columna);
- 190 - – Algoritmos y Estructuras de Datos I –
– ISSD – EDUARDO MANSILLA –
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++;
}
}
}
c.readChar();
}
int linea = 3;
int columna = 20;
int anio = 2005;
Tiene por objeto mostrar los años desde el 2005 en adelante, observar
que, en el ciclo, el cursor se mantiene siempre en la misma fila, indicada con la
línea = 3, lo que varia es la columna de 10 en 10 lugares, por lo tanto, esta
fracción de programa, muestra a modo de título subrayado los números del 2005
hasta el 2009.
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++;
}
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 - – Algoritmos y Estructuras de Datos I –
– ISSD – EDUARDO MANSILLA –
}
}
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++)
– Algoritmos y Estructuras de Datos I – - 197 -
– ISSD – EDUARDO MANSILLA –
{
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();
}
Ejercicios Propuestos
12.1 - Se desea registrar la producción de petróleo de los países que integran el
Mercosur en los últimos cinco años. Elegir las estructuras de datos
adecuadas:
: : : : : :
0 7 25 14 30 60 95
1 15 20 18 35 50 40
.... ............................. .....
.... ..................................
999 10 30 15 36 55 75
Se pide:
Anexo
Constantes y Métodos Matemáticos
Class Math
Constantes
Métodos
public static double abs(double a);
Alumnos Libres:
Solución:
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] = "Lunes";
dia [1] = "Martes";
dia [2] = "Miercoles";
dia [3] = "Jueves";
dia [4] = "Viernes";
- 204 - – Algoritmos y Estructuras de Datos I –
– ISSD – EDUARDO MANSILLA –
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 ()
{
– Algoritmos y Estructuras de Datos I – - 205 -
– ISSD – EDUARDO MANSILLA –
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]);
}
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");
}
}