jueves, 13 de agosto de 2015

WINDOWS 10: Vista previa

No lo pienses, si estas pensando en quedarte con tu sistema Windows anterior a Windows 10, la decisión debe ser rápida y directa: en cuanto te llegue la notificación de que puedes actualizar hazlo.

Estamos, y llevo muchos años con mirando los diferentes productos de Microsoft, ante el mejor y el mayor cambio desde el cambio de MSDOS a Windows.


Si habéis soñado con un Windows estable, con un sistema que no se cuelgue aunque le pase cualquier cosa, aunque uno de sus programas principales se cuelgue, estáis ante lo que soñabais, aunque se cuelgue la parte que se cuelgue puedes seguir trabajando en otras cosas y mientras el sistema buscará una solución.

Es decir, irá a internet y contará por ti el problema para ver cómo puede solucionarse ese programa que se ha venido abajo para que puedas usarlo en cuanto se pueda.

Pero el cambio es también para los desarrolladores, si has estado haciendo programas para Windows 8 o 8.1, será mejor que vayas olvidando lo aprendido, ya que volvemos a las ventanas, el nuevo mundo es un mundo de programas abiertos en ventanas, con iconos más bonitos, pero volvemos a desarrollar las cosas como en Windows 7.

Sin embargo, hay muchas cosas nuevas, por ejemplo, el antiguo menú de inicio es ahora un lugar donde se han colocado los iconos grandes de Windows 8, allí está el correo, allí están tus juegos, twitter... Allí tienes todo lo que tenías en el menú principal de Windows 8.

Pero el mayor cambio viene de lo que el señor Bill Gates deseó hace muchos años: la integración.

Integrar la navegación Web con el sistema operativo era el plan original cuando se creó Windows Me, era la idea que cierto juicio antimonopolio le hizo desechar. Pero le ha costado cambiar el nombre de Internet Explorer para no volver a caer en la misma trampa.

Porque el nuevo navegador de Microsoft se llama Edge, y tiene un lugar en la parte inferior  al lado del logo de Windows para que busques en tu sistema y busques en internet, es decir, para que a menos que lo cambies busques en Bing.



Otro punto para Microsoft que intenta a marchas forzadas recuperar todo lo que ha perdido en estos años frente a Android, porque Google sigue adelante y sigue siendo la primera en el ranking de Alexa en búsquedas, y no solo eso, sigue teniendo miles de programas y juegos gratis en su tienda online, con lo que el que tiene un Android no se aburre y encima no paga.

Pero eso es parte de una guerra que irá haciendo que mejore la vida de la gente, ya que los sistemas operativos así orientados (orientados a publicidad) están generando un cambio en los hábitos de las personas que solo en las próximas décadas lograremos comprender. No es gratis lo que te dan gratis, tu tienes que consumir anuncios para usar esa aplicación.

Y aunque hay cosas que aún no funcionan del todo bien, de momento lo dicho, espero que os encante como a mi.

viernes, 26 de junio de 2015

PROGRAMAR EN C#: Matrices

Muchos programas se pueden hacer solo con los tipos que hemos mostrado en el artículo anterior, pero hay casos que no es suficiente con las variables para resolver algunos problemas con datos.

Por ejemplo, si queremos representar una lista de 100 números necesitaríamos 100 variables para representarlos, pero esto sería muy complicado de manejar, si quisieras añadir 1000 números más necesitarías 1000 variables más (mira todo esto en http://joscarmartom.blogspot.com.es/2015/06/variables-tercera-parte-arrays.html).

Por esto se recurre a una representación matemática muy usada las matrices o Arrays. Esto va a dar una gran potencia a nuestros programas ya que solo tenemos que aumentar el número de 100 a 1100 y tentemos todo el espacio que necesitamos.





La matriz más básica es unidimensional, y en matemáticas a éstas se les llama vectores, un vector es una colección de elementos dispuestos uno al lado de otro.

Estas matrices unidimensionales nos valen por ejemplo para modelar el ejemplo anterior en C#:

int [] mimatriznumerica= new int [100];

Con esto hemos reservado 100 espacios int en memoria a nombre de mimatiznumerica, y si quisiéramos ahora 1000:

int [] mimatriznumerica= new int [1000];

Ahora que tenemos el espacio reservado podemos empezar a darles valor a cada uno de ellos:

mimatriznumerica[0]=100;
mimatriznumerica[1]=10;
...

Es decir, se coloca el nombre de la matriz, se pone el indice entre corchetes y después del igual se coloca el valor que queremos asignar:

nombrematriz [indice] = valor;

Esto puede resultar muy difícil de entender, pero es lo mismo que cuando asignamos un valor a una variable.

Como podéis entender introducir los 100 o los 1000 campos de esta forma puede resultar muy tedioso y para solucionar esto veremos en próximos capítulos las iteraciones y los bucles que nos permitirán repetir una cosa una y otra vez.

Tenéis que comprender otra cosa importante, estos arrays se pueden declarar de cualquier tipo incluidas matrices, o tipos más complejos, de esta manera se puede reservar espacio para diferentes clases de cosas.

La declaración será siempre igual:

tipo [] nombrematriz = new tipo [dimensión];

Si queremos recuperar el valor de alguna posición lo único que tenemos que hacer es llamar al indice que queramos:
 
  mimatriznumerica[2]=100;
  Console.WriteLine(mimatriznumérica[2]);


Esto mostraría en pantalla el valor 100.


Es importante que os fijéis que la colocación de los valores es desde cero, es decir, el primer indice no es el 1 sino el cero, de manera que el objeto que ocupa la posición 3 en una matriz tiene el valor de indice 2, es decir, es en base al cero y no al uno como funciona esto:


Veamos ahora algunos ejemplos:

Ejemplo 1:

            byte[] matrizbyte;
            matrizbyte = new byte[] { 2, 3 };

En este caso hemos definido una matriz sin decir el tamaño pero al asignar los valores {2,3} le decimos al compilador que la matriz será de una dimensión (vector) y tendrá dos valores.

Esta forma de inicializar valores será muy útil si tenemos una gran lista:

int [] mimatriz=new int[]{1,2,3,4,5,6,7};

Ejemplo 2:


            int[,] matrizdosdimensiones = new int[,] { { 1, 2 }, { 1, 2 } };


Este ejemplo declara una matriz de 2 por 2 y le asigna los valores 1,2 a cada fila:

1 2
1 2

Y recuperar un valor sería de la siguiente forma:

            Console.WriteLine(matrizdosdimensiones[0, 1]);

Mostraría el valor 2 en pantalla.

Ejemplo 3:


Y este es para nota, ya que definimos una matriz que contiene dos matrices de rango 1. Primero le damos unos valores y luego cambiamos algunos de ellos:

   int[][,] matrizdematrices = new int[][,] {new int[,]{{1,1},{2,2}}};

            matrizdematrices[1][1, 2] = 100;
            matrizdematrices[0][1, 2] = 100;


Espero que os haya gustado, iré añadiendo más ejemplos más adelante, cuando vemos los bucles...


jueves, 25 de junio de 2015

MICROSOFT VISUAL STUDIO 4: Proyectos

PROGRAMAR EN C#: Variables

Si alguno habéis visto la serie de artículos que tengo sobre las variables ya sabréis porqué es tan importante saber qué son y para que se usan las variables.

Una variable es un lugar de memoria, es decir, es un espacio de memoria donde se almacena un dato determinado y al que se le asigna un nombre. Esto es fundamental pues no se puede interactuar sin memoria, es decir, sin memoria no hay programas.



Las variables en C# son de diferentes tipos y las podemos ver todas representadas en el siguiente programa:

using System;

namespace Primerprograma
{
    class Program
    {
        static void Main(string[] args)
        {
            //tipos enteros

            byte mibyte;
            sbyte mibyteconsigno;

            short mishort;
            ushort mishortsinsigno;

            int miint;
            uint miintsinsigno;

            long milong;
            ulong milongsinsigno;

            decimal midecimal;


            //tipos decimales

            float mifloat;
            double midouble;

            //tipos caracter

            char michar;
            string mistring;

            //tipo booleano

            bool mibool;

        }
    }
}

En este programa como veis lo que hacemos es definir diferentes tipos de variables y les damos un nombre, la estructura es siempre la misma:

tipovariable nombrevariable;

Los tipos se catalogan en diferentes tipos:

Enteros con y sin signo (byte 8bits , short 16 bits, int  32 bits , long)

Decimales de diferente precisión (float para poca, decimal para gran precisión, double para numeros con muchos decimales)

Caracters (char, un solo caracter; string, cadeanas de caracteres)

Bool (booleanos, true or false)


Si queréis ver el valor máximo que tiene cada tipo podéis añadir al programa las siguientes lineas:


            // maximo número

            Console.WriteLine("Tipos enteros:");
            Console.WriteLine("byte: " + byte.MaxValue);
            Console.WriteLine("sbyte: " + sbyte.MaxValue);
            Console.WriteLine("short: " + short.MaxValue);
            Console.WriteLine("ushort: " + ushort.MaxValue);
            Console.WriteLine("int: " + int.MaxValue);
            Console.WriteLine("uint: " + uint.MaxValue);
            Console.WriteLine("decimal: " +decimal.MaxValue);
            Console.WriteLine("long: " + long.MaxValue);
            Console.WriteLine();


            Console.WriteLine("Tipos decimales");
            Console.WriteLine("float: " + float.MaxValue);
            Console.WriteLine("double: " + double.MaxValue);
      
            Console.WriteLine();

            Console.WriteLine("Tipos caracter:");
            Console.WriteLine("char: " + char.MaxValue);

De esta manera lo que obtenemos es el tipo de variable y el valor máximo que se le puede asignar a cada tipo de dato. Esto además nos da un ejemplo del tipo de definición que tiene cada uno.

Y os dará como resultado lo siguiente:

Tipos enteros:
byte: 255
sbyte: 127
short: 32767
ushort: 65535
int: 2147483647
uint: 4294967295
long: 9223372036854775807


decimal: 79228162514264337593543950335

Tipos decimales
float: 3,402823E+38
double: 1,79769313486232E+308

Tipos caracter:
char: ?


Esta es una forma rápida de ver los límites en los que nos estamos moviendo...




Visual Studio 3

Visual Studio 2