martes, 5 de julio de 2016

Error al convertir aplicación VS2008 en VS2012 - The primary reference "xxxxx.dll" could not be resolved because it has an indirect dependency on the .NET Framework assembly

Al abrir la solución de una aplicación de escritorio (WPF/C#) desarrollada en Visual Studio 2008 en un Visual Studio 2012, luego de realizar la conversión de los proyectos, envía el siguente error/warning:

The primary reference "X:\xxxx\xxx\xxx.dll" could not be resolved because it has an indirect dependency on the .NET Framework assembly "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which has a higher version "4.0.0.0" than the version "2.0.0.0" in the current target framework

Aunque se cambie el Framework utilizado por el proyecto que genera la dll con problemas, sigue saliendo este error.
Para corregir esto, se debe editar el proyecto donde se referencia la dll con problemas (click derecho -> abrir con...) y buscar la linea donde se encuentra la referencia:

<ProjectReference Include="..\xxxxx\PROYECTO.csproj">
<Project>{8DD71CAF-BEF7-40ED-9DD0-25033CD8009D}</Project><Name>PROYECTO</Name>
</ProjectReference>
Se debe agregar la etiqueta "SpecificVersion" en "true", para que el proyecto pueda generar la dll en la versión que se ha estacificado del Framework .NET

<ProjectReference Include="..\xxxxx\PROYECTO.csproj">
<Project>{8DD71CAF-BEF7-40ED-9DD0-25033CD8009D}</Project><Name>PROYECTO</Name>
<SpecificVersion>true</SpecificVersion>
</ProjectReference>

jueves, 1 de octubre de 2015

Encriptar un texto en lenguaje JAVA y desencriptarlo en PHP (Codificación AES) - < PHP 7.1.0

ACLARACIÓN: Esta función solo puede ser utilizada hasta PHP 7.1.0, ya que ha sido declarada como obsoleta para posteriores versiones.

Código para encriptar un texto en lenguaje JAVA y desencriptarlo en PHP. Codificación AES.
El parámetro "key" es la llave para encriptar/desencriptar y debe ser la misma en ambos lados del código

Método de encriptación JAVA
public static String encrypt(String input, String key){
   byte[] crypted = null;
   try{
     SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
       Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
       cipher.init(Cipher.ENCRYPT_MODE, skey);
       crypted = cipher.doFinal(input.getBytes());
     }catch(Exception e){
      System.out.println(e.toString());
     }
     return new String(Base64.encodeBase64(crypted));
 }
 

Método de desencriptación PHP
public static function decrypt($sStr, $sKey) {
  $decrypted= mcrypt_decrypt(
   MCRYPT_RIJNDAEL_128,
   $sKey, 
   base64_decode($sStr), 
   MCRYPT_MODE_ECB
  );
  $dec_s = strlen($decrypted); 
  $padding = ord($decrypted[$dec_s-1]); 
  $decrypted = substr($decrypted, 0, -$padding);
  return $decrypted;
 }

Código original de stevenholder. Más información y código completo en (Github)stevenholder/PHP-Java-AES-Encrypt

lunes, 21 de septiembre de 2015

Utilización de listas (List) y cálculo de promedios con foreach


Lenguaje: C#
Desarrollado para: Aplicación de Consola C#

Utilización de listas (List) y cálculo de promedios con foreach
  • Utilización de lista con tipos de datos primitivos y entidades de negocios.
  • Cálculo de promedio de edades por cada sexo.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AplicacionColecciones2
{
    public class Inicio
    {
        static void Main(string[] args)
        {
            //lista de tipo string - cadena de caracteres
            List listaString = new List();

            //add - agregar elementos del tipo indicado en la lista
            listaString.Add("Ejemplo");
            listaString.Add("Ejemplo 2");
            listaString.Add("Ejemplo 3");
            listaString.Add("Ejemplo 4");

            //Se recorre la lista con un for común
            for (int i = 0; i < 10; i++)
            {
                listaString.Add("Ejemplo " + i.ToString());
            }


            //lista de elementos de tipo int
            List listaNumeros = new List();

            //Se agregan 10 elementos en la lista
            for (int i = 0; i < 10; i++)
   {
       listaNumeros.Add(i);
   }

            //sumatoria de los valores de la lista de número 
            //se utiliza el 'foreach' para recorrer una colección sin conciderar el fin de una lista
            int suma = 0;
            foreach (int item in listaNumeros)
         {
                suma = suma + item;
         }

            //Lista de elementos tipo Alumno - entidad de negocios
            List listaAlumnos = new List();

            //Se llena el listado con alumnos creados en un for
            Alumno alumno = new Alumno();
            for (int i = 0; i < 5; i++)
            {
                alumno = new Alumno();
                alumno.NumeroMatricula = i;
                alumno.Nombres = "Pascual" + 1.ToString();
                alumno.Apellidos = "Arroyo";
                alumno.FechaRegistro = DateTime.Today;
                alumno.Edad = 10 + i;
                alumno.Sexo = (((i + 1) % 2) == 0) ? "F" : "M";

                listaAlumnos.Add(alumno);
            }

            Console.WriteLine("Promedio de edades por sexo");

            //Se recorre el listado con un foreach para calcular el promedio de edades por sexo
            double promedioF = 0.0;
            double promedioM = 0.0;
            int countF = 0;
            int countM = 0;

            foreach (Alumno al in listaAlumnos)
            {
                Console.WriteLine("Alumno "+al.Sexo+" - edad: "+al.Edad.ToString());

                if (al.Sexo.Equals("F")) {
                    ++countF;
                    promedioF += al.Edad;
                }
                else if (al.Sexo.Equals("M")) {
                    ++countM;
                    promedioM += al.Edad;
                }
            }


            Console.WriteLine("Promedio de edades por sexo");
            Console.WriteLine("");
            Console.WriteLine("Mujeres - Cantidad: "+countF.ToString() +" - Promedio: "+(promedioF/countF));
            Console.WriteLine("Hombres - Cantidad: " + countM.ToString() + " - Promedio: " + (promedioM / countM));
            Console.WriteLine("");
            Console.ReadKey();

        }
    }
}


Entidad de negocios - Alumno
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AplicacionColecciones2
{
    public class Alumno
    {
        public int NumeroMatricula { get; set; }
        public string Nombres { get; set; }
        public string Apellidos { get; set; }
        public DateTime FechaRegistro { get; set; }
        public string Sexo { get; set; }
        public int Edad { get; set; }
    }
}

lunes, 7 de septiembre de 2015

Ingreso y cálculo de promedios de sueldo para hombre y mujer


Lenguaje: C#
Desarrollado para: Aplicación de Consola C#

Desarrolle un programa en el cual:
  • Ingrese el sueldo de una persona validando que sea mayor o igual a $100.000.-
  • Indique cuantos sueldos han sido ingresados.
  • Indique cuantos sueldos han sido ingresados por cada sexo (H: Hombre; M: Mujer).
  • Promedio de sueldos separados por sexo.
  • Indique cual es el sueldo mayor por cada sexo.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SistemaSueldos
{
    class Inicio
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Sistema de sueldos");
            Console.WriteLine("");

            bool sigue = false;
            int vuelta = 0;

            //Variables de conteo 
            int cantidadSueldos = 0;
            int cantidadSueldosHombres = 0;
            int cantidadSueldosMujeres = 0;

            //Variables de promedios
            double promedioSueldosHombres = 0.0;
            double promedioSueldosMujeres = 0.0;

            //Variables de sueldo mayor 
            double sueldoMayorHombre = 0;
            double sueldoMayorMujer = 0;

            do{
                sigue = false;
                Console.WriteLine("Ingresar sueldo: ");

                double sueldo = double.Parse(Console.ReadLine());
                //Validación de sueldo mayor a 100000
                if (sueldo < 100000)
                {
                    Console.WriteLine("ERROR: El sueldo debe ser mayor a $100000, vuelva a intentar");
                    sigue = true;
                }
                else
                {
                    ++cantidadSueldos;
                    Console.WriteLine("Ingrese el sexo de la persona a la que pertenece el sueldo");
                    Console.WriteLine("[H]ombre - [M]ujer:");
                    string sexo = Console.ReadLine();

                    if (sexo.Trim().ToUpper().Equals("H")) {

                        if (vuelta == 0) sueldoMayorHombre = sueldo;
                        else{ 
                            if (sueldoMayorHombre < sueldo) sueldoMayorHombre = sueldo;
                        }

                        ++cantidadSueldosHombres;
                        promedioSueldosHombres = promedioSueldosHombres + sueldo;
                    }
                    else if (sexo.Trim().ToUpper().Equals("M")) {

                        if (vuelta == 0) sueldoMayorMujer = sueldo;
                        else{
                            if (sueldoMayorMujer < sueldo) sueldoMayorMujer = sueldo;
                        }

                        ++cantidadSueldosMujeres;
                        promedioSueldosMujeres = promedioSueldosMujeres + sueldo;
                    }

                    
                    Console.WriteLine("Desea seguir? [y/n]");
                    string res = Console.ReadLine();

                    if (res.Trim().ToUpper().Equals("Y")) sigue = true;

                }
                ++vuelta;
            } while (sigue);

            Console.WriteLine("");
            Console.WriteLine("Resultados");
            Console.WriteLine("");
            Console.WriteLine("Cantidad de sueldos ingresados: "+cantidadSueldos);
            Console.WriteLine("Cantidad sueldos de mujeres: "+cantidadSueldosMujeres);
            Console.WriteLine("Cantidad sueldos de hombres: " + cantidadSueldosHombres);
            Console.WriteLine("Promedio sueldos de mujeres: $" + (promedioSueldosMujeres/cantidadSueldosMujeres));
            Console.WriteLine("Promedio sueldos de hombres: $" + (promedioSueldosHombres / cantidadSueldosHombres));
            Console.WriteLine("Mayor sueldo de mujeres: $" + sueldoMayorMujer);
            Console.WriteLine("Mayor sueldo de hombres: $" + sueldoMayorHombre);
            Console.ReadKey();
        }
    }
}

viernes, 4 de septiembre de 2015

Promedio de 20 notas ingresadas por usuario + nota mayor y menor


Lenguaje: C#
Desarrollado para: Aplicación de Consola C#

Realice un programa donde el usuario ingrese las notas de 20 alumnos y despliegue los siguientes resultados:

  • Promedio General de Notas
  • Número de alumnos aprobados y reprobados por separado.
  • Nota Mayor y nota Menor.
  • Promedio de notas de alumnos aprobados y promedio de alumnos reprobados.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NotasAlumnos
{
    class Inicio
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Sistema de promedios");
            Console.WriteLine("");
            Console.WriteLine("Ingrese la nota de 20 alumnos para realizar las operaciones necesarias:");

            double promedioGeneral = 0;
            double promedioAprobados = 0;
            double promedioReprobados = 0;

            int cantidadAlumnosAprobados = 0;
            int cantidadAlumnosReprobados = 0;

            double notaMayor = 0;
            double notaMenor = 0;
            
            for (int i = 0; i < 20; ++i) {

                string valorNota = Console.ReadLine();
                string separadorDecimal = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
                double nota = double.Parse(valorNota.Replace(",", separadorDecimal).Replace(".", separadorDecimal));

                if (i == 0){
                    notaMayor = nota;
                    notaMenor = nota;
                }
                else {
                    if (notaMenor > nota) notaMenor = nota;
                    if (notaMayor < nota) notaMayor = nota;
                }

                if (nota < 4.0){
                    ++cantidadAlumnosReprobados;
                    promedioReprobados = promedioReprobados + nota;
                }
                else{ 
                    ++cantidadAlumnosAprobados;
                    promedioAprobados = promedioAprobados + nota;
                }

                promedioGeneral = promedioGeneral + nota;
            }


            Console.WriteLine("");
            Console.WriteLine("Resultado:");
            Console.WriteLine("");
            Console.WriteLine("Promedio general de notas: " + (promedioGeneral/20));
            Console.WriteLine("Cantidad de alumnos aprobados: "+cantidadAlumnosAprobados);
            Console.WriteLine("Cantidad de alumnos reprobados: "+cantidadAlumnosReprobados);
            Console.WriteLine("Nota mayor: "+notaMayor.ToString());
            Console.WriteLine("Nota menor: "+notaMenor.ToString());
            Console.WriteLine("Promedio notas alumnos aprobados: "+(promedioAprobados/cantidadAlumnosAprobados));
            Console.WriteLine("Promedio notas alumnos reprobados: "+(promedioReprobados/cantidadAlumnosReprobados));
            Console.ReadKey();
        }
    }
}

Calcular cuadrado de un número ingresado solo sumando

Lenguaje: C#
Desarrollado para: Aplicación de Consola C#

Calcule X2 donde X es un número entero y debe ingresarlo el usuario. El cálculo debe realizarlo utilizando solamente sumas.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CalculoNumeroCuadrado
{
    class Inicial
    {
        static void Main(string[] args)
        {
            string operatoria = "";
            Int32 sumatoria = 0;

            Console.WriteLine("Ingrese un número:");
            Int32 numeroX = Int32.Parse(Console.ReadLine());

            for (int i = 0; i < numeroX; ++i) {
                sumatoria = sumatoria + numeroX;
                
                if(i == 0) operatoria = numeroX.ToString();
                else operatoria = operatoria +"+"+ numeroX.ToString();

            }

            Console.WriteLine("############ Resultado ############");
            Console.WriteLine("Cuadrado de " + numeroX);
            Console.WriteLine(operatoria + "=" + sumatoria.ToString());
            Console.ReadKey();

        }
    }
}

miércoles, 2 de septiembre de 2015

Identificar número mayor y menor ingresado


Lenguaje: C#
Desarrollado para: Aplicación de Consola C#

Desarrollar una aplicación de consola que permita identificar de un conjunto de números a ingresar por teclado cuál es el mayor y cuál es el menor de ellos. Además, debe calcular el promedio general entre todos los números que son ingresados y que se encuentren entre 6 y 10.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IdentificarConjuntoNumeros
{
    class ProgramaInicial
    {
        static void Main(string[] args)
        {

            Console.WriteLine("1 - Identificar número mayor y menor");
            Console.WriteLine("Ingrese la cantidad de números a verificar:");

            //AGREGAR VALIDACIÓN PARA CUANDO NO INGRESAN NÚMEROS
            Int32 cant = Int32.Parse(Console.ReadLine());
            Int32 cantPromedio = 0;
            Int32 mayor = 0;
            Int32 menor = 0;
            double sumatoria = 0.0;
            
            for (int i = 0; i < cant; ++i) {

                Console.WriteLine("Ingrese el nro. ["+ (i+1) +" de "+ cant+"]");
                Int32 ingresado = Int32.Parse(Console.ReadLine());

                if (i == 0){
                    mayor = ingresado;
                    menor = ingresado;
                }
                else
                {
                    if (mayor < ingresado) mayor = ingresado;
                    if (menor > ingresado) menor = ingresado;
                }

                if ((ingresado >= 6) && (ingresado <= 10))
                {
                    sumatoria = sumatoria + ingresado;
                    ++cantPromedio;
                }
            }

            sumatoria = sumatoria / cantPromedio;

            Console.WriteLine("### Resultados ###");
            Console.WriteLine("Número menor : "+menor.ToString());
            Console.WriteLine("Número mayor : " + mayor.ToString());
            Console.WriteLine("Promedio : " + sumatoria.ToString());

            Console.ReadKey();
        }
    }
}