sábado, 31 de diciembre de 2022

Configurar archivo .htaccess en Apache reescribir las rutas de archivos .php

Para configurar un archivo .htaccess en un servidor Apache local montado en un sistema operativo Linux Ubuntu y reescribir las rutas de archivos .php, sigue estos pasos:

Abre el archivo .htaccess en tu editor de texto preferido. Si no tienes un archivo .htaccess en tu directorio, puedes crear uno nuevo.

Agrega la siguiente línea al archivo .htaccess:

RewriteEngine On

Esto habilita la funcionalidad de reescritura de URL en el servidor Apache.

A continuación, agrega la regla de reescritura que deseas utilizar. Por ejemplo, para reescribir todas las solicitudes a archivos .php a un archivo index.php, agrega la siguiente línea:

RewriteRule ^(.*)\.php$ /index.php [L]

Esto significa que cualquier solicitud a un archivo .php será reescrita a index.php.

Guarda el archivo .htaccess y carga la página en tu navegador para verificar que la reescritura de URL esté funcionando correctamente.

Es importante tener en cuenta que el archivo .htaccess se aplica a todo el directorio y a todos sus subdirectorios. Si deseas configurar reescrituras de URL solo para un subdirectorio específico, debes crear un archivo .htaccess en ese subdirectorio y agregar las reglas de reescritura allí.


miércoles, 16 de noviembre de 2022

Laravel: Conexión con base de datos

Para conectar nuestro proyecto Laravel con una BD de MySQL.

Dentro del archivo database.php en el directorio config configuramos el driver de la conexión, por defecto vendrá con mysql, si queremos cambiarlo por otro motor de base de datos tendremos que cambiar el valor mysql por sqlite, pgsql, sqlsrv.

'default' => env('DB_CONNECTION', 'mysql')

Tendremos que configurar el archivo .env ubicado en la raíz del proyecto.

DB_HOST=localhost --- indicar el servidor propio local
DB_DATABASE=test  --- nombre de la base de datos 
DB_USERNAME=root  --- usuario de conexión a la base de datos
DB_PASSWORD=123   --- password del usuario 

Una vez que tengamos todo configurado, nos dirigimos a la terminal y ejecutamos el comando php artisan migrate para crear las migraciones, si todo ha salido bien tendremos que ver las tablas:

  • migrations
  • password_resets
  • users

En Laravel, los nombres de las tablas siempre son escritos en plural, esto  es parte de una convención: Convención de la configuración, que nos evita realizar configuraciones y pasos extras de la asociación de Modelos con tablas entre otras cosas.

Instalación de Framework Laravel

Laravel necesita un servidor web. No importa cuál sea pero la mayoría de la comunidad usa Apache o Nginx, por lo que es recomendable instalar uno de los dos para cuando se necesite buscar información sobre solucionar problemas.

Instalación de XAMPP (Windows)

XAMPP es un programa que nos ofrece una distribución de Apache, MySQL, PHP y Perl muy simple de instalar, administrar y utilizar. Podemos descargarlo aquí.

Instalación de LAMP (Linux)

LAMP es el conjunto de aplicaciones Apache, MySQL, PHP o Python en entornos Linux que nos facilitan el desarrollo de sistemas.

En Ubuntu o derivadas podemos instalarlo con los siguientes comandos:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install lamp-server^
sudo apt-get install php5-mcrypt
sudo php5enmod mcrypt

Después de tener instalado nuestro Servidor web, es necesario instalar Composer el cuál es un gestor de dependencias php muy útil y del cuál se hablará más tarde.

Instalación de composer (Windows)

La forma más sencilla de instalar Composer en tu ordenador Windows consiste en descargar y ejecutar el archivo Composer-Setup.exe, que instala la versión más reciente de Composer y actualiza el PATH de tu ordenador para que puedas ejecutar Composer simplemente escribiendo el comando composer.

Instalación de composer (Linux)

En ubuntu bastará con ejecutar los siguientes comandos en la terminal.

sudo apt-get install curl
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo echo 'PATH=$PATH:~/.composer/vendor/bin' >> ~/.profile

Instalación de Laravel

Existen diferentes formas de instalar laravel en nuestra computadora.

  • Podemos clonar el repositorio Laravel de github.
  • Usando el instalador:
    composer global require "laravel/installer=~1.1"
    laravel new Proyecto
    
  • Usando composer:
    composer create-project laravel/laravel --prefer-dist Proyecto
    
    Una vez instalado laravel es recomendable situarse en la raíz del proyecto y ejecutar:
    composer update
    php artisan key:generate
    php artisan app:name Curso

viernes, 11 de noviembre de 2022

Activar módulo rewrite de Apache en Ubuntu

El módulo rewrite es un módulo de la aplicación Apache que permite modificar la URL de un sitio. Este módulo viene desactivado por defecto.
Para activarlo en Ubuntu se utiliza el comando a2enmod que permite pasar los módulo disponibles de apache del directorio /etc/apache2/mods-available al directorio /etc/apache2/mods-enabled

$ sudo a2enmod rewrite

Se debe indicar donde se quiere aplicar el módulo, con lo cual se abre el archivo de configuración del sitio en efecto:

$ sudo gedit /etc/apache2/sites-enabled/000-default

Y se reemplaza "AllowOverride None" por "AllowOverride All" donde se quiera aplicar el cambio.
Por último se reinicia el Apache:

$ sudo /etc/init.d/apache2 force-reload

lunes, 8 de marzo de 2021

Fatal error base address marks unusable memory region (Opcache error - Local by Flywheel)

Lenguaje: Wordpress - Flywheel

Desarrollado para:  Aplicación web.

Luego de una instalación local normal de Local (de Flywheel) en un SO Windows 7, comienza la descarga e instalación de Wordpress y antes de poder iniciar el servidor, muestra el siguiente mensaje de error

 


Para poder corregir este error, debemos realizar lo siguiente:

  • Ir al archivo php.ini.hbs, que debe estar en la siguiente ruta: 
    • "C:\Users\[usuario de windows]\Local Sites\[nombre del sitio]\conf\php"
  • Dentro del archivo, ir a la sección Opcache y agregar las siguientes 2 lineas:

opcache.file_cache="C:\Windows\temp\php_opcache"
opcache.file_cache_fallback=1_

  • Luego guardar el archivo y reiniciar el sitio. Con eso debería iniciar correctamente. 

martes, 29 de septiembre de 2020

Cambio del valor propiedad en href con Javascript

Lenguaje: Javascript
Desarrollado para: Aplicación Web

Para cuando es necesario cambiar el valor de un parámetro (codigo) en un link a href, según el valor seleccionado en un combobox/select


//Función para el select, evento "change". Cuando se selecciona un valor, llama a la función que cambia el valor del link (change_link

$("#id-select").change(function(){
      change_link();
});


//Función que cambia el valor del parámetro del link

function change_link(){
    var val = $("#id-select option:selected").val();    // Selecciona el valor seleccionado en el select - ej.: 34
    $("#link").each(function(){
        var nhref = "";
        var href = $(this).attr("href").split("=");     // Obtiene el valor del link "href" y lo divide en un arreglo 
                                                                                             // - ej.: [pagina.php?codigo][]"
        nhref += href[0]+"=";                                 //Obtiene lo de la primera posición - ej.: pagina.php?codigo=
        nhref += val;                                               //Pega el valor del select - ej.: pagina.php?codigo=34
        $(this).attr("href",nhref);                            //Coloca el valor en el atributo "href"
    });
}

miércoles, 8 de mayo de 2019

HashtableUtil - Pasar una lista tipificada a Hashtable, utilizando Reflection


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

Clase que permite transformar una lista de valores en Hashtable y todas las listas que tanga asociadas, llamandose recursivamente.


using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;


namespace Util
{
    /// <summary>
    /// Clase que permite transformar un objeto en hashtable
    /// </summary>
    public class HashtableUtil
    {
        /// <summary>
        /// Clase que permite generar un Hashtable de una lista de objetos, por su tipo.
        /// </summary>
        /// <typeparam name="T">Tipo de objeto al que pertenece la lista</typeparam>
        /// <param name="objetos" />
        /// <returns></returns>
        public static Hashtable ObtieneHash<t>(List<t> objetos)
        {
            // obtiene las propiedades del tipo de objeto y las guarda en un arreglo
            PropertyInfo[] props = typeof(T).GetProperties();

            // se ordenan las propiedades por nombre
            Array.Sort(props ,delegate (PropertyInfo propertyInfo1, PropertyInfo propertyInfo2)
            { return propertyInfo1.Name.CompareTo(propertyInfo2.Name); });

            int indexProp = 0;
            // recorre las propiedades, para encontrar el indice de la propiedad "cod_code"
            foreach (PropertyInfo propertyInfo in props)
            {
                if (propertyInfo.Name.ToUpper().Equals("CODCODE")) { break; }
                indexProp++;
            }

            bool usaCorrelativo = false;
            if (indexProp &gt;= props.Length) { usaCorrelativo = true; }


            // se recorre la lista de objetos para guardar los objetos con su codigo asociado
            Hashtable retorno = new Hashtable();
            // indice de las propiedades
            int indice = 0;
            foreach (T obj in objetos)
            {
                //se crean los objetos a utilizar
                Hashtable ht = new Hashtable();
                List<object> lista = new List<object>();

                foreach (PropertyInfo propertyInfo in props)
                {
                    // se obtiene el tipo (type) de la propiedad y se compara con el tipo de la lista
                    Type tipo = ((T)obj).GetType().GetProperty(propertyInfo.Name).PropertyType;
                    if (tipo.Name == lista.GetType().Name)
                    {
                        // si es una lista, se obtiene el valor (T) de la lista
                        Type itemTipo = tipo.GetGenericArguments()[0];
                        // se crea un MethodInfo con el mismo método, pasandole el tipo de la lista
                        MethodInfo mi = typeof(HashtableUtil).GetMethod("ObtieneHash", BindingFlags.Static | BindingFlags.Public);
                        MethodInfo mi2 = mi.MakeGenericMethod(new Type[] { itemTipo });
                        // Invocamos el método con los valores obtenidos de la propiedad
                        ht[propertyInfo.Name] = mi2.Invoke(null, new object[] { ((T)obj).GetType().GetProperty(propertyInfo.Name).GetValue(obj, null) });
                    }
                    else
                    {
                        // si no es una lista, se mete directo el valor del objeto, con su nombre de propiedad.
                        ht[propertyInfo.Name] = ((T)obj).GetType().GetProperty(propertyInfo.Name).GetValue(obj, null);
                    }
                }

                if (usaCorrelativo)
                    retorno[indice.ToString()] = ht;
                else
                {
                    string nombrePropiedad = props[indexProp].Name;
                    // se coloca el código como key en el Hashtable de retorno, asociando su misma hashtable de valores.
                    retorno[((T)obj).GetType().GetProperty(nombrePropiedad).GetValue(obj, null).ToString()] = ht;
                }
                indice++;
            }
            return retorno;

        } 
    }
}

miércoles, 27 de diciembre de 2017

Clase GIF para WPF


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

Clase que permite utilizar imagenes GIF animadas en aplicaciones de escritorio con WPF
  • En el Summary de la misma clase aparece la descripción de como utilizarla, invocando un control en el archivo XAML.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Media.Animation;

namespace Miro.Utils
{
    /// 
    /// Clase para utilizar imagenes GIF en WPF
    /// Forma de utilizar: 
    /// * Primero indicar el namespace en el archivo XAML
    /// Ej.:xmlns:local="clr-namespace:WpfApplication1"
    /// * Segundo invocar el control del tipo indicado anteriormente (local), 
    /// indicando en la propiedad GifSource la ruta de la imagen a utilizar
    /// Ej.:""
    /// 
    public class GifImageUtils : Image
    {
        private GifBitmapDecoder _decoder;
        private Int32Animation _animation;

        #region FrameIndex

        public static readonly DependencyProperty FrameIndexProperty = DependencyProperty.Register("FrameIndex", typeof(int), typeof(GifImageUtils), new UIPropertyMetadata(0, new PropertyChangedCallback(ChangingFrameIndex)));

        public int FrameIndex
        {
            get { return (int)GetValue(FrameIndexProperty); }
            set { SetValue(FrameIndexProperty, value); }
        }

        private static void ChangingFrameIndex(DependencyObject obj, DependencyPropertyChangedEventArgs ev)
        {
            GifImageUtils gifImage = obj as GifImageUtils;
            gifImage.ChangeFrameIndex((int)ev.NewValue);
        }

        private void ChangeFrameIndex(int index)
        {
            Source = _decoder.Frames[index];
        }

        #endregion

        #region GifSource

        public static readonly DependencyProperty GifSourceProperty = DependencyProperty.Register("GifSource", typeof(string), typeof(GifImageUtils), new UIPropertyMetadata(String.Empty, new PropertyChangedCallback(GifSourceChanged)));
        public string GifSource
        {
            get { return (string)GetValue(GifSourceProperty); }
            set { SetValue(GifSourceProperty, value); }
        }

        private static void GifSourceChanged(DependencyObject obj, DependencyPropertyChangedEventArgs ev)
        {
            GifImageUtils gifImage = obj as GifImageUtils;
            gifImage.GifSourceChanged(ev.NewValue.ToString());
        }

        private void GifSourceChanged(string newSource)
        {
            if (_animation != null)
                BeginAnimation(FrameIndexProperty, null);

            _decoder = new GifBitmapDecoder(new Uri(newSource), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
            Source = _decoder.Frames[0];

            int count = _decoder.Frames.Count;
            _animation = new Int32Animation(0, count - 1, new Duration(new TimeSpan(0, 0, 0, count / 10, (int)((count / 10.0 - count / 10) * 1000))));
            _animation.RepeatBehavior = RepeatBehavior.Forever;
            BeginAnimation(FrameIndexProperty, _animation);
        }

        #endregion
    }
}

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

Aclaraciones

Blog que se crea para poder aportar con código desarrollado de manera simple y comprensiva, que ayude en los inicios del desarrollo como programador.

Si se encuentra algún problema con los código, o algún comentario que pueda aportar, siempre será bienvenido