miércoles, 6 de agosto de 2014


Problemario de Programación
Arreglos

Ejercicio 5.36
Se tienen los resultados de las últimas elecciones a gobernador en el estado X, el cual está conformado por 5 municipios.    

En dichas elecciones hubo 4 candidatos.

Elabore un programa que:

• Lea e imprima una tabla indicando los votos obtenidos en cada municipio por los 4 candidatos.
• Calcule el total de votos recibidos por cada candidato y el porcentaje del total de votos emitidos.
• Calcule el candidato más votado.
• Si un candidato recibió más del 50% de los votos, indicar que es el ganador. Si ningún candidato recibió más del 50% de los votos, el programa debe imprimir los dos candidatos más votados, que serán los que pasen a la segunda ronda de las elecciones.


package programacionPares;
public class _36_Ejercicio {
public static final int f = 5, c = 4;
public static void main(String[] args) {
int Matriz[][] = new int [f][c];

System.out.println("\t\tCand-1\tCand-2\tCand-3\tCand-4");
for (int i = 0; i < f; i++){
System.out.print("Municipio: ["+(i+1)+"]");
for (int j = 0; j < c; j++){
Matriz[i][j] = Integer.parseInt(javax.swing.JOptionPane.showInputDialog("Candidato ["+(j+1)+"]"+"\nMunicipio ["+(i+1)+"]", ""));
System.out.print("\t"+Matriz[i][j]);
}
System.out.println();
}

int Vector [] = new int [c];

// SUMA DE VOTOS
Vector = ResVect(Vector, Matriz);

System.out.println("\nCalculo de Candidatos");
System.out.print("Votos Total: ");

int totalVotos = 0;
for (int value: Vector){
System.out.print("\t"+value);
totalVotos += value;
}

double [] Porcentajes = new double [c];

// OBTIENE LOS PORCENTAJES
Porcentajes = ObtenerPorcent(totalVotos, Vector, Porcentajes);

System.out.println();

// RESULTADO DE VOTACION
ResultadosVotacion(Porcentajes);
}

// SUMA DE VOTACIONES
public static int [] ResVect (int [] Vec, int [][] Matriz){

int Suma, mayorVotado = 0, Pos = 0;
for (int j = 0; j < c; j++){
Suma = 0;
for (int i = 0; i < f; i++){
Suma += Matriz[i][j];
}

Vec[j] = Suma;
if (mayorVotado < Vec[j]){
mayorVotado = Vec[j];
Pos = j + 1;
}
}

return Vec;
}

// OBTIENE PORCENTAJES
public static double [] ObtenerPorcent(int totVotos, int [] aVect, double [] Porcentajes){
System.out.print("\nPorcentaje: ");
for (int i = 0; i < Porcentajes.length; i++){
Porcentajes[i] = (aVect[i]*100) / totVotos;
System.out.print("\t"+Porcentajes[i]+"%");
}
return Porcentajes;
}

// RESULTADOS DE VOTACIONES
public static void ResultadosVotacion(double[] porcentajes){
boolean verif = true;
double Mayor1 = 0;
int posMay1 = 0;
double Mayor2 = 0;
int posMay2 = 0;

for (int i = 0; i < porcentajes.length; i++){
if (porcentajes[i] > Mayor1){
Mayor1 = porcentajes[i];
posMay1 = i;
}

if (porcentajes[i] > 50.00){
System.out.println("GANADOR"+" Candidato "+(i+1));
verif = false;
}
}

for (int i = 0; i < porcentajes.length; i++){
if (posMay1 != i){
if (porcentajes[i] > Mayor2){
Mayor2 = porcentajes[i];
posMay2 = i + 1;
}
}
}

if (verif){
System.out.println("\nSEGUNDA VUELTA");
System.out.println("Candidato : "+(posMay1+1)+" porcentaje "+Mayor1);
System.out.println("Candidato : "+posMay2+" porcentaje "+Mayor2);
}
}

}


Captura de Ingreso de Matriz


Resultado 1 Ganador


Resultado 2 Segunda vuelta


miércoles, 9 de julio de 2014

Congruencia de Zeller

Ejercicio 1:

Congruencia de Zeller

Realice un programa que imprima los días de un mes y de un año ingresados por teclado, utilizando la congruencia de Zeller, el mismo deberá considerar si el año ingresado es bisiesto y los días que pueden tener cada mes, además debe de presentar los últimos días del mes anterior (si es que hay disponibles) y los primeros días del mes siguiente según el mes que sea este.

Consideraciones
Para calcular la congruencia de Zeller, se parte de una fecha del calendario gregoriano o Juliano como en nuestro ejercicio, se consideran como tres enteros: año, mes (1=enero, 12=diciembre) y día. Pero solo se lo realizara ingresando mes y año.

Los meses de Enero y Febrero serán equivalentes a los meses 13 y 14 del mes anterior.
q = es el día del mes
m = es el mes

Se debe obtener los valores de:
j = es la centura (año / 100)
k = es el año de la centuria (año % 100)

A partir de ahí, basta con aplicar la fórmula.



Falta el texto Alt de la imagen

h = dia devuelto (0 = Sabado, 1 = Domingo, 2 = Lunes, 3 = Martes, 4 = Miercoles, 5 = Jueves, 6 Viernes)

Desarrollo:
Java (Eclipse Standard/SDK)

package congruencia;
public class trabajo1 {
public static void main(String[] args) {
// INGRESO AÑO Y MES
int aa = Integer.parseInt(javax.swing.JOptionPane.showInputDialog("Ingrese el año",""));
int mm = Integer.parseInt(javax.swing.JOptionPane.showInputDialog("Ingrese el mes",""));

// DIAS PERMITIDOS POR MES
int dperm = 0; // Variable para los días permitidos del mes (28, 29, 30 o 31)
switch (mm){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dperm = 32; break;
case 4:
case 6:
case 9:
case 11: dperm = 31; break;
case 2:
if (aa%4 == 0 & aa%100 != 0 || aa %400 == 0){
dperm = 30;
} else{
dperm = 29;
}
break;
}

// CONDICION SI EL MES ES 1 O 2
if (mm <= 2){
mm += 12;
aa -= 1;
}

// OBTIENE CENTURIA y AÑO DE CENTURIA....
int j = aa / 100;
int k = aa % 100;

// DIA DE INICIO
int h = (1+(26*(mm+1))/10+k+k/4+j/4+5*j)%7;
System.out.println("Sa\tDo\tLu\tMa\tMi\tJu\tVi");

// OBTIENE LOS DIAS
int dias = 0, salto = 0; // salto es para cambiar de línea
int mesSig = 0; // Dias del mes siguiente
int cal[] = new int [42]; // Guarda los días encontrados

for (int i = h; i < cal.length; i++){
dias++;
if (dias < dperm){ // DIAS DEL MES
cal[i] = dias;
} else{ // DIAS DEL SIGUIENTE MES
mesSig++;
cal[i] = mesSig;
}
}

// OBTIENE LOS DIAS DEL MES ANTERIOR
if (h != 0){
int dMesAnt = 0;
switch (mm){
case 3:
if (aa%4 == 0 & aa%100 != 0 || aa %400 == 0){
dMesAnt = 29;
} else{
dMesAnt = 28;
}
break;
case 4: dMesAnt = 31; break;
case 5: dMesAnt = 30; break;
case 6: dMesAnt = 31; break;
case 7: dMesAnt = 30; break;
case 8: dMesAnt = 31; break;
case 9: dMesAnt = 31; break;
case 10: dMesAnt = 30; break;
case 11: dMesAnt = 31; break;
case 12: dMesAnt = 30; break;
case 13: dMesAnt = 31; break;
case 14: dMesAnt = 31; break;
}

for (int i = h - 1; i >= 0; i--){
cal[i] = dMesAnt;
dMesAnt -= 1;
}
}

// MUESTRA RESULTADO
for (int i = 0; i < cal.length; i++){
System.out.print(cal[i]+"\t");
salto++;
if (salto == 7){
System.out.println("");
salto = 0;
}
}
}
}


Capturas:
1. Ingresamos el Año 

2. Ingresamos el mes

3. El resultado será los días del mes ingresado segun el año, junto a los días del mes anterior y los del mes siguiente.


David Arévalo Castro
Estudiante Licenciatura en Sistemas de Información


Introduccion

Hola a todos, hoy empezaré a subir ciertos ejercicios en Java (Eclipse), los cuales no se encuentran tan fácilmente, espero que sean de ayuda para todos quienes como yo, recién empiezan en esto que no es simplemente una ciencia sino que es un arte... como lo es programar :)