domingo, 5 de marzo de 2017

Lenguajes de programación


Lenguajes
Según la definición teórica, como lenguajes se entiende a un sistema de comunicación que posee una determinada estructura, contenido y uso.
La programación es, en el vocabulario propio de la informática, el procedimiento de escritura del código fuente de un software. De esta manera, puede decirse que la programación le indica al programa informático qué acción tiene que llevar a cabo y cuál es el modo de concretarla.
Los lenguajes de programación son herramientas que nos permiten crear programas y software. Entre ellos tenemos Delphi, Visual Basic, Pascal, Java, entre otras.



Una computadora funciona bajo control de un programa el cual debe estar almacenado en la unidad de memoria; tales como el disco duro.

Los lenguajes de programación de una computadora en particular se conocen como código de máquinas o lenguaje de máquinas.

Estos lenguajes codificados en una computadora específica no podrán ser ejecutados en otra computadora diferente.

Por otra parte, los lenguajes de programación en código de máquina son verdaderamente difíciles de entender para una persona, ya que están compuestos de códigos numéricos sin sentido nemotécnico.
Los lenguajes de programación facilitan la tarea de programación, ya que disponen de formas adecuadas que permiten ser leídas y escritas por personas, a su vez resultan independientes del modelo de computador a utilizar.
Los lenguajes de programación representan en forma simbólica y en manera de un texto los códigos que podrán ser leídos por una persona. 
Los lenguajes de programación son independientes de las computadoras a utilizar.





Arreglos de programación

¿Qué  son los arreglos?
Los arreglos se pueden definir como objetos en los que podemos guardar más de una variable, es decir, al tener un único arreglo, este puede guardar múltiples variables de acuerdo a su tamaño o capacidad, es importante recordar que las variables guardadas deben ser del mismo tipo, por ejemplo: Si tenemos un arreglo de tipo numérico que puede almacenar 20 variables, solo podrá almacenar 20 números diferentes, no otras variables como Caracteres o String.

Existen 3 tipos de arreglos, los unidimensionales, bidimensionales y los multidimensionales.

Arreglos unidimensionales
Cada elemento de un arreglo está asignado a una posición concreta del arreglo, designada por un índice.

Declaración de Arreglos

La declaración de un arreglo unidimensional se puede hacer de 2 formas:

 1. tipoDato nombreArreglo[];
 2. tipoDato[] nombreArreglo;
 Ejemplo:

Int notas[] o Int[] notas;

En este ejemplo se está declarando un arreglo llamado notas que almacenará valores enteros (int).




Arreglos bidimensionales
Son estructuras de datos que agrupan muchos datos del mismo tipo, en donde cada elemento se puede trabajar individualmente y se puede referenciar con un mismo nombre. Se usan para representar datos que pueden verse como una tabla con filas y columnas.

Ejemplo:

#include <stdio.h>
int main()
{
int fila, columna;
int matriz[2][2];
for(fila=0; fila<2; fila++)
for(columna=0; columna<2; columna++)
printf(“%d”, matriz[fila][columna]);
return 0;
}



Arreglos multidimensionales
Un arreglo multidimensional es simplemente una extensión de un  arreglo unidimensional. Más que almacenar una sola lista de elementos, piensa en un arreglo Multidimensional como el almacenamiento de múltiples listas de elementos. 
Por ejemplo, un arreglo  bidimensional almacena listas en un formato de tabla de dos dimensiones de filas y columnas, en donde cada  fila es una lista. Las filas proporcionan la dimensión vertical del arreglo, y las columnas dan la dimensión horizontal. Un arreglo de tres dimensiones almacena listas en un formato de tres dimensiones de filas, columnas y planos, en donde cada plano es un  arreglo bidimensional. Las  filas proporcionan la dimensión vertical; las columnas, la dimensión horizontal; y los planos, la dimensión de profundidad del arreglo.


Modelos computacionales



Un modelo computacional es un modelo matemático en las ciencias de la computación que requiere extensos recursos computacionales para estudiar el comportamiento de un sistema complejo por medio de la simulación por computadora. El sistema bajo estudio es a menudo un sistema complejo no lineal para el cual las soluciones analíticas simples e intuitivas no están fácilmente disponibles. En lugar de derivar una solución analítica matemática para el problema, la experimentación es hecha con el modelo cambiando los parámetros del sistema en la computadora, y se estudian las diferencias en el resultado de los experimentos. 

Las teorías de la operación del modelo se pueden derivar/deducir de estos experimentos de computacionales.

Ejemplos de modelos de computacionales comunes son: modelos de el pronóstico del tiempo, modelos del Earth Simulator, modelos de simulador de vuelo, modelos de plegamiento molecular de proteínas, y modelos de red neuronal.

Se considera a los algoritmos al conjunto de pasos ordenados, que permiten resolver un problema bajo una secuencia lógica, es decir, que tenga inicio y fin (sentido concreto).

Programas: Algoritmos para ser ejecutados por un ordenador.
Un ordenador o computadora está, desde que se enciende hasta que se apaga totalmente, ejecutando un algoritmo. Por lo general, estos algoritmos, escritos para que los entienda una máquina, terminan siendo vagos y confusos para la mayoría de quienes no han estudiado programación. Una máquina no puede entender "escribe Hola Mundo!" porque no sabe lo que es "escribe" ni lo que es una letra o un espacio, ni lo que es una pantalla. En cambio, puede entender "MOV EAX, 0x23afb31" (escribir en el registro EAX el número 0x23afb31), aunque nosotros no. Un ordenador es solo un circuito electrónico, no funciona a base de magia ni nada por el estilo.

Debido a lo difícil que es escribir en lenguaje máquina, e incluso en ensamblador, se crearon diferentes lenguajes de programación, más o menos parecidos al inglés actual y a cómo se redacta un algoritmo. Estos lenguajes proveen de cosas tan complejas para una máquina como los bucles for. Los compiladores se encargan de traducir esos ficheros al lenguaje ensamblador que corresponda, el ensamblador de traducirlos a lenguaje máquina y el enlazador de juntar todo ese código máquina en un solo archivo, el programa. Y el microprocesador, se encarga de ir encendiendo o apagando transistores según lo que le diga el código máquina. Es fácil entender el lenguaje de alto nivel en comparación al lenguaje maquina pero de la evolución surgieron.

¿Qué instrucciones ejecuta un ordenador?


                                                                                    Lenguaje de máquina 
Cada tipo de microprocesador contiene un conjunto de instrucciones que realizan ciertas operaciones sobre una o más palabras de bits; las instrucciones van también codificadas en bits. No queremos hacer aquí una discusión sobre arquitectura de ordenadores, por lo que con esto debe valer por ahora.

Se entiende que escribir sólo con dos teclas, el 0 y el 1, es incómodo. Históricamente, a la hora de diseñar un algoritmo para que el ordenador ejecutara, se escribía mediante unas etiquetas nemotécnicas; éste fue el origen del lenguaje ensamblador.

Por ejemplo quizás en una cierta arquitectura la instrucción de borrado de memoria (Memory Clear, en inglés) corresponda al código 010. Pronto surgieron programas que leían, siguiendo el    ejemplo, MC, y lo sustituían por 010.


Lenguaje ensamblador
El código máquina tenía dos grandes inconvenientes para los programadores:
Las instrucciones eran difíciles de recordar, ya que no guardaban relación con la operación que se está realizando.
Puede haber, y de hecho hay, diferencias entre las instrucciones de un procesador a otro.
Todo esto ha llevado a poner nombre a las instrucciones de código máquina de manera que a una secuencia concreta de bits que realiza una operación se le pone un nombre sencillo que identifique la operación. Esta traducción a un lenguaje más sencillo para las personas resulta en una mayor comodidad para el programador, además el proceso de traducción inverso de lenguaje ensamblador a código máquina puede ser realizado por un sencillo programa.


Programación para seres humanos

Lenguajes de alto nivel
Sobre este lenguaje ensamblador inicial se fueron construyendo otros lenguajes de programación de más alto nivel; esto significa que ocultan ciertos aspectos de manera que el programador no se ha de preocupar sobre si en la máquina que quiere que se ejecute el algoritmo el MC corresponde a la instrucción 101 o 010. Se produce, por tanto, una abstracción de datos, muy deseable para poder utilizar el trabajo de otros para avanzar un paso más en vez de tener que "reinventar la rueda", como se suele decir. Estos textos en los que se codifican los algoritmos son los códigos fuente; siguen las reglas sintácticas de un determinado lenguaje de programación. Existen numerosos lenguajes de programación, y se utiliza uno u otro según sus características se adecuen más o menos a la resolución de nuestro problema
.
Traductores e intérpretes
Tras la escritura del algoritmo, un compilador o un intérprete (otros programas) transformarán el texto en código máquina que el procesador es capaz de ejecutar.
Toda esta abstracción permite resolver problemas alejados de sumar números binarios, como pueden ser la consulta de esta misma enciclopedia o jugar a un videojuego en 3D.

Lenguajes interpretados vs. Lenguajes compilados
Los lenguajes interpretados son como respuesta a la dificultad de manejo de los compilados. Un lenguaje compilado es sólo apto para un sistema operativo o formato de ejecutable (en GNU/Linux y Unix System V es ELF, en Windows o incluso en BSD es muy diferente), y es tedioso de manejar: para comprobar bugs o errores el computador debe:
  • Compilar cada uno de los ficheros de código.
  • Ensamblarlos en ficheros objeto.
  • Enlazar los ficheros objeto.
  • Volverlos a ensamblar.

Todo eso no es gran derroche de recursos para un ordenador medio actualmente, pero dura sus 10 o 15 segundos. En cambio, con un lenguaje interpretado, el programa intérprete analiza el fichero de código y lo va ejecutando en tiempo real, sin compilarlo ni ensamblarlo. Otra de las ventajas de los lenguajes interpretados es que son multiplataforma: un programa en Perl, por ejemplo, no debe ser compilado dos veces (una para Unix y otra para Windows). Con que haya diferentes versiones del intérprete en cada uno de esos ordenadores, específicamente compilados para ellos.

Sus desventajas:
  • Consume muchos recursos de memoria, sobre todo RAM.
  • Se depende del intérprete: si no tienes instalado el intérprete que corresponda, no podrás ejecutar el programa.


Ejemplos de lenguajes interpretados son: PHP, Perl, Python, Tcl/Tk, BASIC, LISP, entre otros.

Programas resueltos de arreglos

Programa del promedio de calorías consumidas.

import java.util.Scanner;
public class CALORIAS
{
 public static void main (String args [])
   {
     Scanner leer =new Scanner (System.in);
     int Calorias[]=new int[7];
     int Suma=0;
     System.out.println("Captura las calorias consumidas en la semana");
     for(int indice=0;indice<Calorias.length;indice++)
   
     {
      System.out.println("DIA"+ (indice+1)+": ");
      Calorias[indice]=leer.nextInt();
      Suma+=Calorias[indice];
     }
     for(int indice=Calorias.length-1;indice>=0;indice--)
     {
      System.out.print(Calorias[indice]+"    ");
     }
      System.out.println("Promedio de calorias consumidas: "+((float)Suma/Calorias.length));
   }
}



Programa de calorías con métodos.

import java.util.Scanner;
public class CALORIAS_METODOS
{
   public static void mayorCalorias ()
   {
     Scanner leer =new Scanner (System.in);
     int Calorias[]=new int[7];
     int Suma=0;
     System.out.println("Captura las calorias consumidas en la semana");
     for(int indice=0;indice<Calorias.length;indice++)
   
     {
      System.out.println("DIA"+ (indice+1)+": ");
      Calorias[indice]=leer.nextInt();
      Suma+=Calorias[indice];
     }
     for(int indice=Calorias.length-1;indice>=0;indice--)
     {
      System.out.print(Calorias[indice]+"    ");
     }
      System.out.println("Promedio de calorias consumidas: "+((float)Suma/Calorias.length));
     }
   public static void menorCalorias()
     {
      {
     Scanner leer =new Scanner (System.in);
     int Calorias[]=new int[7];
     int Resta=0;
     System.out.println("Captura las calorias consumidas en la semana");
     for(int indice=0;indice<Calorias.length;indice++)
   
     {
      System.out.println("DIA"+ (indice+1)+": ");
      Calorias[indice]=leer.nextInt();
      Resta-=Calorias[indice];
     }
     for(int indice=Calorias.length-1;indice>=0;indice--)
     {
      System.out.print(Calorias[indice]+"    ");
     }
      System.out.println("Promedio de calorias consumidas: "+((float)Resta/Calorias.length));
    }
   }
}

Programa para sacar la varianza, media y moda(Directo).

import java.util.Scanner;
public class CALCULAR
{
  static double n[]={10,5,7,7,8,6,9,7,9,7,5,7};
  static int c;
  static double n1,nv=0,nde,mm,ndee,hue,temp;
  static double vr=0,mr=0,mod=0,med;

  public static void main(String args[])
  {
      media();
      varianza();
      desviacionEstandar();
      moda();
    }
    public static void media()
    {
        for (c=0;c<n.length;c++)
        {
            n1=n1+n[c];
        }
        System.out.println("LA MEDIA ARITMETICA ES: "+(n1/c+" "+c));
        med=n1/c;
    }
    public static void varianza()
    {
        for (c=0; c<n.length;c++)
        {
         
            hue=n[c]*n[c];
            nv=nv+hue;
         
        }
     
        System.out.println("LA VARIANZA ES: "+((nv/c)-(med*med))+" "+c);
        ndee=(nv/c)-(med*med);
    }
    public static void desviacionEstandar()
    {
        nde=Math.sqrt(ndee);
        System.out.println("LA DESVIACION ESTANDAR ES: "+nde);
    }
    public static void moda()
    {
        for(int i=0; i<n.length; i++)
        {
         
            for(int j=0; j<n.length; j++)
            {
                if(n[i] == n[j])
                mod++;
            }
            if(mod > mr){
                mm = n[i];
                mr = mod;
            }
        }
        System.out.println("LA MODA ES: "+mm);
    }
}



Programa para sacar la varianza, media y moda.

import java.util.Scanner;

public class CALCULAR1
{
     static double Numero,Media,Varianza,Desviacion;
     static int Num;
  public static void main(String args[])
    {
        Scanner teclado=new Scanner(System.in);
        System.out.println("Cantidad de numeros a calcular");
        Num=teclado.nextInt();
        double Numeros []=new double[Num];
        for(int i=0; i<Num; i++)
        {
          System.out.println("Ingrese el numero: ");
          Numeros[i]=teclado.nextDouble();
       }
 
       //MEDIA
        double suma=0;
        for(double i: Numeros)
        {
         suma=suma+i;
        }
        Media=suma/Num;
        System.out.println("La Media es: "+Media);
     //VARIANZA
       double sumat;
       for (int i=0 ;i<Num; i++)
       {
           sumat=Math.pow(Numeros[i]-Media,2);
           Varianza=Varianza+sumat;
           Varianza=Varianza/(Num-1);
       
       }
     
        System.out.println("La varianza es: "+Varianza);
     //DESVIACION ESTANDAR
     Desviacion=Math.sqrt(Varianza);
     double Redondeo=Math.rint(Desviacion*100)/100;
     System.out.println("La Desviacion Estandar es: "+Redondeo);
  }
}