martes, 23 de noviembre de 2010

Pascal (extra)

Hola compañeros en esta ocasión les mostrare un programa en pascal el cual no sabía instalar en emacs pero gracias a las entradas de otros compañeros pude saber cómo instalarlo gracias.
Bueno pues
Pascal: fue desarrollado en los años 60 con el fin de que dicho lenguaje convirtiera en un lenguaje sencillo para el aprendizaje de la programación. Fue desarrollado por el profesor suizo Niklaus Wirth. Con el paso del tiempo su uso se propago a las grandes escuelas para convertirse en un robusto lenguaje para la creación de todo tipo de aplicaciones. El IDE más popular de este lenguaje fue Turbo Pascal para MS-DOS, es un lenguaje de programación estructurado fuertemente tipificado.
Es también un lenguaje
de programación de alto nivel (hay lenguaje maquina de 1 y 0, lenguaje assembler, y los lenguajes de alto nivel como pascal y otros). Su propósito principal es el aprendizaje de la programación estructurada.
Bueno pues aquí un ejemplo sencillo en pascal:
En el cual me pide que elija un número de empleado del 1 al 4 y una vez tecleado me aparecerá en la pantalla el nombre y número de empleado.
Esta es la sintaxis de pascal

Este es el programa en ejecución

Aquí en pascal
VAR: se declaran variables.
BEGIN: es donde tendremos el cuerpo de la codificación, es similar al main de C.
WRITE: es para imprimir el mensaje.
READLN: lee un valor del teclado y lo almacena donde se declaran las variables.
WRITELN: es un salto de linea.
Y pues el IF ya lo conocen muy bien.
Si algo no les quedo claro puede checar este manual de pascal es muy bueno:
http://proton.ucting.udg.mx/tutorial/pascal/unidad1p.html

lunes, 22 de noviembre de 2010

Progama de Contraseña (Extra)

Hola compañeros bueno pues ahora les voy a poner un programa en el cual tendremos que poner el nombre de usuario en este caso pondré los el usuario y contraseña mas básicos que son:
Usuario: administrador
Contraseña: admin
En este programa utilizaremos cadena de caracteres que son tipos de datos estructurados compuesto por caracteres. En C, una cadena de caracteres se define como un arreglo de caracteres que termina con el carácter nulo (‘\0’). El acceso a una cadena se realiza por medio de un apuntador que señala al primer carácter de la cadena.
Para esto hay que utilizar las funciones de entrada y de salida de las bibliotecas stdio.h como: gets, scanf, puts y printf.
Bueno pues aquí está la codificación es C para que lo puedan copiar y checar en su compilador:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct empleado
{
       int matricula;
       char nombre[50];
       };

main()
{
      struct empleado a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
      int op, i, opcaso1, cont=0;
      char usuario[]="administrador", usuarioing[30];
      char clave[]="admin", claveing[20];
      do
      {
      system("cls");
      printf("==============DEPARTAMENTO DE RECURSOS HUMANOS=====================\n\niniciar sesion");
      printf("\n\nusuario: ");
      gets(usuarioing);
      printf("clave: ");
      gets(claveing);
      }
      while (strcmp(usuario,usuarioing)!=0 && strcmp(clave,claveing)!=0);
      printf("\ndatos correctos\nbienvenido");
      do
      {
      printf("\n\nmenu:\n1- para capturar nombre del empleado y matricula \n2- para imprimir los datos ingresados en la opcion 1");
      printf("\ncual fue su eleccion: ");
      scanf("%d", &op);
      switch(op)
      {
      case 1:
      {
      printf("ingrese la matricula del empleado: ");
      scanf("%d", &a1.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a1.nombre);
      printf("desea seguir ingresado datos?: 1- para si......2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      if (opcaso1==1)
      {
      printf("\ningrese la matricula del empleado: ");
      scanf("%d", &a2.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a2.nombre);
      printf("desea agregar mas datos?: 1- para si.....2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      if(opcaso1==1)
      {
      printf("\ningrese la matricula del empleado: ");
      scanf("%d", &a3.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a3.nombre);
      printf("desea agregar mas datos?: 1- para si.....2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      if(opcaso1==1)
      {
      printf("\ningrese la matricula del empleado: ");
      scanf("%d", &a4.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a4.nombre);
      printf("desea agregar mas datos?: 1- para si.....2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      if(opcaso1==1)
      {
      printf("\ningrese la matricula del empleado: ");
      scanf("%d", &a5.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a5.nombre);
      printf("desea agregar mas datos?: 1- para si.....2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      if(opcaso1==1)
      {
      printf("\ningrese la matricula del empleado: ");
      scanf("%d", &a6.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a6.nombre);
      printf("desea agregar mas datos?: 1- para si.....2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      if(opcaso1==1)
      {
      printf("\ningrese la matricula del empleado: ");
      scanf("%d", &a7.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a7.nombre);
      printf("desea agregar mas datos?: 1- para si.....2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      if(opcaso1==1)
      {
      printf("\ningrese la matricula del empleado: ");
      scanf("%d", &a8.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a8.nombre);
      printf("desea agregar mas datos?: 1- para si.....2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      if(opcaso1==1)
      {
      printf("\ningrese la matricula del empleado: ");
      scanf("%d", &a9.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a9.nombre);
      printf("desea agregar mas datos?: 1- para si.....2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      if(opcaso1==1)
      {
      printf("\ningrese la matricula del empleado: ");
      scanf("%d", &a10.matricula);
      fflush(stdin);
      printf("ingrese el nombre del empleado: ");
      gets(a10.nombre);
      printf("desea agregar mas datos?: 1- para si.....2- para no: ");
      scanf("%d", &opcaso1);
      cont++;
      }
      }
      }
      }
      }
      }
      }
      }
      }
       break;
       }
       case 2:
       {
       printf("datos de los empleados: ");
       printf("\n\nnmatricula: %d\n",  a1.matricula);
       puts(a1.nombre);
       if(cont>=2)
       {
       printf("\n\nnmatricula: %d\n",  a2.matricula);
       puts(a2.nombre);
       if(cont>=3)
       {
       printf("\n\nnmatricula: %d\n",  a3.matricula);
       puts(a3.nombre);
       if(cont>=4)
       {
       printf("\n\nnmatricula: %d\n",  a4.matricula);
       puts(a4.nombre);
       if(cont>=5)
       {
       printf("\n\nnmatricula: %d\n",  a5.matricula);
       puts(a5.nombre);
       if(cont>=6)
       {
       printf("\n\nnmatricula: %d\n",  a6.matricula);
       puts(a6.nombre);
       if(cont>=7)
       {
       printf("\n\nnmatricula: %d\n",  a7.matricula);
       puts(a7.nombre);
       if(cont>=8)
       {
       printf("\n\nnmatricula: %d\n",  a8.matricula);
       puts(a8.nombre);
       if (cont>=9)
       {
       printf("\n\nnmatricula: %d\n",  a9.matricula);
       puts(a9.nombre);
       if(cont>=10)
       {
       printf("\n\nnmatricula: %d\n",  a10.matricula);
       puts(a10.nombre);
       }
       }
       }
       }
       }
       }
       }
       }
       }
       //royo del caso 2//
       break;
       }
       }//cierre del switch//
       }
       while (opcaso1==2);
      system("pause");
      }
Bueno  la librerías #include < string.h> es para el manejo de cadenas.
Strcmp: hace comparaciones de caracteres en este caso comparara que “administrador” y “admin” sean correctas.
Una vez terminado este paso creamos un swtich para crear el menú de captura de datos, en mi caso yo elegí 10 empleados.
Después de terminar con la captura de los 10 empleados comenzamos con el case 2 en el cual solo imprimirá los datos ya guardados en la codificación.
Ahora les mostrare la ejecución del programa:
Aquí yo guarde 3 datos, presiono 1 para capturar datos, después nos preguntara que si ya no queremos capturar datos, pero yo puse que 1 para sí y así capturar los 3 datos que se muestran.

Después elegimos la segunda opción que es no seguir capturando datos, con esto se nos desglosara nuevamente el menú de capturar datos, pero la segunda opción dice mostrar datos ya almacenado, la elegimos y ahí está el resultado.

Lenguajes Go y Oz

GO proviene de la fusión de varios lenguajes, entre ellos el afamado lenguaje C. Aún asi incorpora elementos de Python (recordemos que es lenguaje preferido de Google, además que el creador de este lenguaje,, trabaja también alli), así como de la familia de  Pascal/Modula/Oberon entre otros programas dinámicos.

El clásico ejemplo de un  programa es el Hola mundo en Go es similar a como se haría en C++. Con este mítico ejemplo podemos apreciar que en cuanto a sintaxis son muy similares:

package main
impor "fmt"
func main()
{
fmt. Printf("Hola mundo\n")
}
Go es tambien considerado el lenguaje de Google:
Dado que han pasado 10 años en los que no se ha creado un nuevo lenguaje de programación, Google cree que ya es el momento de dar el gran salto pues, según ellos mismos afirmaron en una conferencia de presentación, el mundo de la web y la computación ha cambiado dramáticamente en esos últimos años, pero los lenguajes de programación no han evolucionado al mismo ritmo.
Pero, Google no solamente va a diseñar un lenguaje de programación que sea bastante eficiente, sino que desea que este lenguaje sea usado masivamente por miles de desarrolladores en la creación de aplicación web y de software a nivel mundial.
Bueno aquí les dejo un vídeo que halle acerca del nuevo Go:
http://www.youtube.com/watch?v=rKnDgT73v8s 

Lenguaje Oz
Oz es un lenguaje de programación multiparadigma, esto quiere decir que incluye paradigmas como programación lógica, funcional, imperativa, orientada a objetos, con restricciones, distribuida, concurrente. 
Como un énfasis a la programación multiparadigma, las principales ventajas de Oz están en la programación con restricciones y la programación distribuida. Debido a su diseño, Oz implementa un modelo de programación distribuido que hace a la red transparente. Este modelo hace fácil programar aplicaciones abiertas y tolerantes a fallas en el lenguaje. Para Programación con restricciones, Oz introduce la idea de espacios de computación, los cuales permiten búsquedas definidas por el usuario y estrategias de distribución que son ortogonales al dominio de restricciones.
Un ejemplo de un programita el clásico hola mundo, que su sintaxis seria así:
declare
{Browse 'Hola Mundo'}


Convertir de binario a decimal o de decimal a binario(Extra)

Hola compañero hace poco publique un comentario en una entra que hablaba sobre los codigos decimales y binarios,y de como se convierte uno en otro.
Bueno el punto es que yo le sugerí a mi compañero que realizara un programa que transformara un numero decimal a binario o viceversa.
Y pues yo hice un programa en C que calcula lo ya mencionado.
Recordemos que para convertir un numero decimal a binario o viceversa hay que utilizar las siguientes formulas:
De decimal a binario:
Solo tenemos que ir dividiendo nuestro numero entre 2 como el siguiente ejemplo:

 
100|0
 50|0
 25|1   --> 1, 25-1=24 y seguimos dividiendo por 2
 12|0
  6|0
  3|1
  1|1   -->  (100)10 = (1100100)2 
 
De binario a decimal:
Solo hay que ir elevando el exponete del numero binario ejemplo:
 
0010 esto es igual a decir 2 en decimal vamos a comprobarlo 

(0)2^3+(0)2^2+(1)2^1(0)2^0= 0+0+2+0=2decimal
 
Codificación de Programa en C:
 
 
Bueno pues en si esta es la codificación del programa para convertir de decimal a binario solo hay que dividir entre dos y decirle a nuestro programa que solo imprima el residuo y es asi como obtenemos el numero binario.
Y para convertir de binario a decimal si batalle un poco mas ya que, tuve que poner un while para que fuera repitiendo las serie de 1 y 0 a calcular y ya con esto imprimir el numero decimal.


domingo, 21 de noviembre de 2010

Tratamiento de errores y excepciones

El tratamiento de errores es una técnica recién incorporada al Object Pascal proveniente de C++, por lo que la voy a comentar de su novedad y la seguridad que aporta. En ANALOGIA.EXE se ha intentado preservar la seguridad en la ejecución, por lo que todas las operaciones de alojamiento dinámico de memoria, gestión de ficheros, etc. se realizan como medida de seguridad entre bloques TRY..EXCEPT o TRY..FINALLY, que veremos a continuación.

Los errores se pueden dividir en dos grupos: errores en tiempo de compilación (corregibles antes de hacer funcionar el programa), y errores en tiempo de ejecución, más complicados de encontrar, puesto que el error casi siempre es culpa del usuario y suele manifestarse con frecuencia.
Una excepción es una señal provocada por un error, tal como pueda ser una división por cero, el sobrepasar los límites de un array, o el intento de acceso a los datos apuntados por un puntero nulo.
Por ejemplo:
La excepción generalmente dispone de la información necesaria para conocer la causa del error. Dicha información la podemos aprovechar en nuestro código si interceptamos la excepción, o bien será mostrada en un mensaje antes de que el programa se interrumpa, si no la interceptamos (no es recomendable).
Para interceptar los errores, trataremos de aislar el bloque a proteger entre la palabra Try y la palabra Except, de forma que si vemos en ANALOGIA.EXE el siguiente código:
 
try
  num:=StrToFloat(Value);
for cont:=0 to PanelL.ComponentCount-1 do
  if PanelL.Components[cont] is TCompMecanico then
    begin
    .....................
    .....................
    end
Except   {Excepción si es un valor numérico inválido}
  PanelL.Pan1.Strg1.Cells[1,ARow]:='';
end;
 
se ejecutará lo que hay después de la asignación num:=StrToFloat(Value) solo si se ha producido esta asignación correctamente y no ha habido problemas en el procedimiento StrToFloat. En caso de tener en Value un valor incorrecto, se generará una excepción (que no se muestra al usuario), y se salta directamente al código que hay después de la palabra clave Except. Este código se ha utilizado por ejemplo para evitar que el usuario de valores incorrectos (letras, etc) a los valores de los componentes.
Si observamos este otro trozo de código correspondiente a la escritura de un fichero .MEC en disco:
 
Try Rewrite(Fich);
  for cont:=0 to FormDibu.PanelL.ComponentCount-1 do
    if FormDibu.PanelL.Components[cont] is TCompMecanico then
      begin
      Aux:=FormDibu.PanelL.Components[cont] as TCompMecanico;
      Reg.left:=Aux.left;
      ..................
      ..................
      write (Fich,Reg);   {Escribe componente en el fichero}
      end;
Finally
  CloseFile(Fich);      {Cierra en cualquier caso el fichero}
end;
 
Ahora ocurre lo siguiente: Si la apertura/creación (Rewrite(Fich)) del fichero es correcta, se ejecutará el bucle for cont... y después se ejecutará lo que hay después de Finally (se cerrará el fichero). Sin embargo, si el Rewrite(Fich) provoca un error por cualquier causa (disco lleno, etc.), se saltará directamente al código que hay detrás de Finally, puesto que nos interesará siempre no dejar ficheros abiertos.
Como vemos, con Finally se ejecuta siempre el código que hay a continuación, mientras que con Except se ejecuta solo si se ha producido una excepción. En cualquier caso lo que hay detrás de Try... solo se ejecuta si no se ha producido ningún error.
También es útil un ejemplo de gestión de los errores de memoria que nos muestra también como anidar estructuras Try..Except y Try..Finally:
 
Try
  Try
    New (PNumero);          {Asignar memoria dinámica}
    PNumero:=Dividendo div Divisor;
  Finally
    Dispose (PNumero);      {Liberar siempre recursos}
  end;
Except          {Ejecutar si se produjo una excepción}
  Writeln ('Se produjo una excepción');
end;
 
Estas son las principales herramientas de gestión de excepciones, pero no las únicas (gestión de excepciones según su tipo, creación de excepciones propias, etc.), sin embargo una discusión más amplia del tema se escapa de los límites del proyecto.

Programación de aplicaciones paralelas con MPI (Message Passing Interface)

MPI es, como su nombre indica, es un interfaz, lo que quiere decir que el
estándar no exige una determinada implementación del mismo. Lo
importante es dar al programador una colección de funciones para que ésterealize su aplicación, sin que tenga necesariamente que conocer el hardware
concreto sobre el que se va a ejecutar, ni la forma en la que se han
implementado las funciones que emplea.

MPI ha sido desarrollado por el MPI Forum, un grupo formado por
investigadores de universidades, laboratorios y empresas involucrados en la
computación de altas prestaciones.
Sus objetivos fundamentales del MPI
Forum son los siguientes:
1. Definir un entorno de programación único que garantice la portabilidad de
las aplicaciones paralelas.
2. Definir totalmente el interfaz de programación, sin especificar cómo debe
ser la implementación del mismo
3. Ofrecer implementaciones de calidad, de dominio público, para favorecer
la extensión del estándar.
4. Convencer a los fabricantes de computadores paralelos para que ofrezcan
versiones de MPI optimizadas para sus máquinas ( lo que ya han hecho
fabricantes como IBM y Silicon Graphics).
Los elementos básicos de MPI son una definición de un interfaz de
programación independiente de lenguajes, más una colección de bindings o
concreciones de ese interfaz para los lenguajes de programación más
extendidos en la comunidad usuaria de computadores paralelos:
C y FORTRAN.
Un programador que quiera emplear MPI para sus futuros proyectos trabajará con una implementación concreta de MPI, que constará de , al menos, estos
elementos:
• Una biblioteca de funciones para C, más el fichero de cabecera mpi.h con
las definiciones de esas funciones y de una colección de constantes y
macros.
• Una biblioteca de funciones para FORTRAN + mpif.h.
• Comandos para compilación, típicamente mpicc, mpif77, que son
versiones de los comandos de compilación habituales (cc, f77) que
incorporan automáticamente las bibliotecas MPI.
• Comandos para la ejecución de aplicaciones paralelas, típicamente
mpirun.
• Herramientas para monitorización y depuración.
MPI no es, evidentemente, el único entorno disponible para la elaboración de
aplicaciones paralelas. Existen muchas alternativas, entre las que
destacamos las siguientes:
• Utilizar las bibliotecas de programación propias del computador paralelo
disponible: NX en el Intel Paragon, MPL en el IBM SP2, etc.
• PVM (Parallel Virtual Machine): de características similares a MPI, se
desarrolló con la idea de hacer que una red de estaciones de trabajo
funcionase como un multicomputador. Funciona también en
multicomputadores, normalmente como una c apa de software encima del
mecanismo de comunicaciones nativo.
• Usar, si es posible, lenguajes de programación paralelos (FORTRAN 90) o
secuenciales (C, FORTRAN 77) con directivas de paralelismo.
• Usar lenguajes secuenciales junto con compiladores que paralelicen
automáticamente.
MPI está aún en sus comienzos, y aunque se está haciendo un hueco
creciente en la comunidad de programadores de aplicaciones científicas
paralelas, no es probable que desplace a corto plazo a los entornos de
programación ya existentes (como los anteriormente citados) o impida la
aparición de otros nuevos.

El MPI Forum es consciente de que MPI todavía
adolece de algunas limitaciones, e incluso ha identificado bastantes de ellas:

• Entrada/salida: no se establece un mecanismo estandarizado de E/S
paralela.
• Creación dinámica de procesos. MPI asume un número de procesos
constante, establecido al arrancar la aplicación.
• Variables compartidas. El modelo de comunicación estandarizado por MPI
sólo tiene en cuente el paso de mensajes.
• Bindings para otros lenguajes, además de C y FORTRAN. Se piensa, en
concreto, en C++ y Ada.
• Soporte para aplicaciones de tiempo real. MPI no recoge en ningún punto
restricciones de tiempo real.
• Interfaces gráficos. No se define ningún aspecto relacionado con la
interacción mediante GUIs con una aplicación paralela.

Como ya hemos comentado, MPI está especialmente diseñado para
desarrollar aplicaciones SPMD. Al arrancar una aplicación se lanzan en
paralelo N copias del mismo programa * (procesos). Estos procesos no
avanzan sincronizados instrucción a instrucción sino que la sincronización,
cuando sea necesaria, tiene que ser explícita. Los procesos tienen un
espacio de memoria completamente separado. El intercambio de
información, así como la sincronización, se hacen mediante paso de
mensajes.
Se dispone de funciones de comunicación punto a punto (que involucran sólo
a dos procesos), y de funciones u operaciones colectivas (que involucran a
mútiples procesos). Los procesos pueden agruparse y formar
comunicadores, lo que permite una definición del ámbito de las operaciones
colectivas, así como un diseño modular.
La estructura típica de un programa MPI, usando el binding para C, es la
siguiente:
# include "mpi.h"
main (int argc, char **argv) {
int nproc; /* Número de procesos */
int yo; /* Mi dirección: 0<=yo<=(nproc-1) */
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nproc);
MPI_Comm_rank(MPI_COMM_WORLD, &yo);
/* CUERPO DEL PROGRAMA */
}
MPI_Finalize();
Este segmento de código ya nos presenta cuatro de las funciones más
*
Las implementaciones de MPI también suelen permitir lanzar aplicaciones en las que no
todos los procesos ejecutan el mismo programa.
utilizadas de MPI: MPI_Init() para iniciar la aplicación paralela,
MPI_Comm_size() para averiguar el número de procesos que participan en
la aplicación, MPI_Comm_rank(), para que cada proceso averigue su
dirección (identificador) dentro de la colección de procesos que componen la
aplicación, y MPI_Finalize() para dar por finalizada la aplicación.

MPI_Init(int *argc, char ***argv);
MPI_Comm_size (MPI_Comm comm, int *size);
MPI_Comm_rank (MPI_Comm comm, int *rank);
MPI_Finalize(void);
El ejemplo nos sirve también para que prestemos atención a algunas
convenciones de MPI. Los nombres de todas las funciones empiezan con
“MPI_”, la primera letra que sigue siempre es mayúscula, y el resto son
minúsculas.
La mayor parte de las funciones MPI devuelven un entero, que es un
diagnóstico. Si el valor devuelto es MPI_SUCCESS, la función se ha
realizado con éxito. No se han estandarizado otros posibles valores.
La palabra clave MPI_COMM_WORLD hace referencia a l comunicador
universal, un comunicador predefinido por MPI que incluye a todos los
procesos de la aplicación. Más adelante veremos cómo definir otros
comunicadores. Todas las funciones de comunicación de MPI necesitan
como argumento un comunicador.
En el resto de este tutorial vamos a ir presentando las diferentes funciones
que MPI ofrece para la comunicación y sincronización entre procesos. En la
sección 2 presentamos los mecanismos para la comunicación entre pares de
procesos (Comunicación punto a punto). En la sección 3 presentamos las
funciones para comunicación entre grupos de procesos ( Operaciones
colectivas). La sección 4 discute aspectos de MPI relacionados con la
Modularidad. En la sección 5 se describen las funciones disponibles para
definir Tipos de datos derivados. Por último, la sección 6 (Bibliografía) aporta
referencias para la localización de información adicional sobre MPI.

Sistemas Distribuidos(Extra)

Hola compañeros pues aquí les dejo un poco de lo que son sistemas distribuidos ya que en la ultima clase no fue la Doctora.

Un sistema distribuido: se define como una colección de computadores libres conectados por una red, y con el software adecuado para que el sistema sea visto por los usuarios como una única corporación capaz de proporcionar facilidades de computación.
El desarrollo de los sistemas distribuidos vino junto de las redes locales de alta velocidad a principios de 1970.
Los sistemas distribuidos se implementan en diversas plataformas hardware, desde unas pocas estaciones de trabajo conectadas por una red de área local, hasta Internet, una colección de redes de área local y de área extensa interconectados, que en lazan millones de ordenadores.
Las aplicaciones de los sistemas distribuidos varían desde la subsistencia de capacidad de computo a grupos de usuarios, hasta sistemas bancarios, comunicaciones multimedia y abarcan prácticamente todas las aplicaciones comerciales y técnicas de los ordenadores.
Características:

  • Concurrencia: esta característica de los sistemas distribuidos permite que los recursos disponibles en la red puedan ser utilizados simultáneamente por los usuarios y/o agentes que interactúan en la red.
  • Carencia de reloj global: las coordinaciones para la transferencia de mensajes entre los diferentes componentes para la realización de una tarea, no tienen una temporización general, esta más bien distribuida a los componentes.
  • Fallos independientes de los componentes: cada componente del sistema puede fallar independientemente, por lo cual los demás pueden continuar ejecutando sus acciones. Esto permite el logro de tareas con mayor efectividad, pues el sistema en su conjunto continua trabajando.
Evolución:
Procesamiento central (Host): uno de los primeros modelos de ordenadores interconectados, llamados centralizados, donde todo el procesamiento de la organización se llevaba a cabo en una sola computadora, normalmente un Mainframe, y los usuarios utilizaba sencillos ordenadores personales.
Los problemas de este modelo son:
  • Cuando la carga de procesamiento aumentaba se tenía que cambiar el hardware del Mainframe, lo cual es más costoso que añadir más computadores personales clientes o servidores que aumenten las capacidades.
  • El otro problema que surgió son las modernas interfases gráficas del usuario, las cuales podían ser a un gran aumento de tráfico en los medios de comunicación y por consiguiente podían colapsar.
Grupo de Servidores: otro modelo que entró a competir con el anterior, también un tanto centralizado, son un grupo de ordenadores actuando como servidores, normalmente de archivos o de impresión, poco inteligentes para un número de Minicomputadores que hacen el procesamiento conectados a una red de área local.
Los problemas de este otro modelo son:
  • Podría generarse una saturación de los medios de comunicación entre los servidores poco inteligentes y los minicomputadores, por ejemplo cuando se solicitan archivos grades por varios clientes a la vez, podían disminuir en un alto porcentaje la velocidad de transmisión de información.
La Computación Cliente Servidor: este modelo, es el que predomina en la actualidad, permite descentralizar el procesamiento y recursos, sobre todo, de cada uno de los servicios y de la visualización de la Interfaz Gráfica de Usuario. Esto hace que ciertos servidores estén dedicados solo a una aplicación determinada y por lo tanto ejecutarla en forma eficiente.



En conclusión:

  • Los sistemas distribuidos abarcan una cantidad de aspectos considerables, por lo cual su desarrollo implica mucha complejidad.
  • Existen ciertos aspectos que requieren extremo cuidado al desarrollarse e implantarse como el manejo de fallos, el control de la concurrencia, etc.
  • Existen muchos temas de investigación relacionados con los sistemas distribuidos, por ejemplo los planteados en el apartado de Desafíos.
  • Se nota también que muchas tecnologías están en constante desarrollo y maduración, lo cual implica un minucioso estudio previo de muchos factores antes de apostar por alguna tecnología en especial. 
Referencias:

http://dmi.uib.es/~bbuades/sistdistr/sld007.htm (Sistemas Distribuidos).
http://members.fortunecity.es/lrmdl/SO7.htm#VSDRC (Sistemas Distribuidos).
http://www-lt.ls.fi.upm.es/sistemas_dist/Introduccion.pdf (Sistemas Distribuidos).
http://www.dia.eui.upm.es/cgi-bin/asigfram.pl?cual=sis_dis&nombre=Sistemas-Distribu%EDdos (Sistemas Distribuidos: Aplicaciones).

Lenguajes Orientados a Objetos

El concepto de programación orientada a objetos (OOP)  se basa en la idea natural de la existencia de todo aquello que nos rodea lleno de objetos y que la resolución del problema se realiza en términos de objetos, un lenguaje se dice que está basado en objetos si soporta objetos como una característica fundamental del mismo.
El elemento fundamental de la OOP es tal y como lo indica es un objeto.  
Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización.
En primer lugar, un objeto no es un dato simple, si no que contiene en su interior cierto número de componentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de una organización conjunta o de otro tipo.
Un objeto puede considerarse como una especie de cápsula dividida en tres partes:

1 - RELACIONES
2 - PROPIEDADES
3 - MÉTODOS
Las relaciones: permiten que el objeto se insterte en la organización y están formadas esencialmente por punteros a otros objetos.
Las propiedades: distinguen un objeto determinado de los restantes que forman parte de la misma organización y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organización.
Los métodos: son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de ejecutar y que también pone a disposición de sus descendientes a través de la herencia.
Algunos lenguajes orientados a objetos son:
C++: Es un lenguaje de programación siendo este una mejora del lenguaje C, con el cual puedes crear muchos tipos de programas. Ademas de que una gran diferencia con el lenguaje C es que C++ posee la capacidad de crear objetos y clases (Programacion orientada a objetos) mientras que C solo permite la programación estructurada.
Ejemplo de programa en C++:
Codificación:
Ejecucion de programa:
Cabe destacar que para compilar C++ en emacs, tenemos que escribir guardar nuestro archivo con la extensión.cpp y el compilador es 
g++ archivo.cpp

Java:es un lenguaje de programación y entre sus características se encuentran las siguientes:

Es orientado a objetos:
esto es , que el paradigma de programación que utiliza y para el cuál fue construido es la Programación Orientada a Objetos (POO) y consiste en relacionar todo como si se trataran de objetos del mundo real.
En este lenguaje todo son objetos excepto los básicos como ( int, float, double, char... ).
Es un lenguaje de propósito general: ya que esta diseñado para que puedas programar cualquier cosa con el.
Es un lenguaje interpretado: esto es, que hay una máquina virtual llamada JVM (Java Virtual Machine) que se encarga de interpretar y ejecutar el código de los programas hechos en Java en tiempo de ejecución. 
Es un lenguaje portable: esto significa que si tu escribes el código se debe  ejecutar en cualquier Sistema Operativo para el cuál se haya elaborado y tenga instalada la JVM antes mencionada.

Ejemplo de codificación en java:
Serie Fibonacci:

public class Fibonacci
{
public static void main (String [] args)
{
int f1=1, f2=1;
System.out.println (f1);
while (f1<500)
{
System.out.println(f2);
f2+=f1;
f1 = f2 - f1;
}
}
}

Ejecución del programa:

Reporte #6(Lenguajes imperativos)

Lenguajes Imperativos

Estos lenguajes cuyo origen está ligado a la propia arquitectura de von Neumann, la arquitectura consta de una secuencia de celdas, llamadas memoria, en la cual se pueden guardar en forma codificada, los mismos  datos que instrucciones y de un procesador, el cual es capaz de ejecutar de manera secuencial una serie de operaciones, principalmente aritméticas y booleanas, llamadas comandos.
Un lenguaje imperativo conceptos que se traducen de forma natural al modelo de la máquina.

Por ejemplo los lenguajes imperativos más destacados de la historia han sido: Fortran, Algol, Pascal, C, Modula-2, Ada.

Fortran: es lenguaje de propósito general, principalmente orientado a la computación matemática, por ejemplo en ingeniería. Originalmente fue escrito con mayúsculas como FORTRAN. Pero pos lo habitual es poner sólo la primera letra con mayúscula, que es como se escribe actualmente como Fortran.
Fortran fue el primer lenguaje de programación de alto nivel. Su desarrollo inicio en la decada de 1950 en IBM y han habido muchas versiones desde entonces.  Como estas:
  • Fortran 66
  • Fortran 77
  • Fortran 90 (95)
La versión más común de Fortran actualmente es todavía Fortran 77, sin embargo Fortran 90 esta creciendo en popularidad. Fortran 95 es una versión revisada de Fortran 90 la cual fue aprobada por ANSI en 1996. Hay también varias versiones de Fortran para computadoras paralelas. La más importante es HPF (High Performance Fortran), la cual es de hecho el estándar.
Pero se debe ser cuidadoso con los compiladores de Fortran 77, ya que pueden manejar un superconjunto de Fortran 77, por ejemplo contienen extensiones no estándarizadas.

Programa en Fortran
parte 1

parte 2
Este es el compilador de Fortran ya que cada Fortran tiene su propio compilador que es: gfortran -ffree-form nombre del archivo.for y después para ejecutarlo ./a.out


Ejecución de programa en Fortran



Pues en si no hay mucho que explicar de este programa ya que solo se esta implementando una sentencia que en C conocemos como switch, el cual calcula las cuatro operaciones aritméticas básicas.
Bueno aqui les dejo un excelente manual de Fortran ya que explica a detalle cada sentencia, variable y operaciones aritméticas.

www.uam.es/.../kike/FORTRAN/FORTRAN.html
  
Lenguaje C: Bueno ya todos conocemos este lenguje desde el semestre pasado pero como quiera le voy a poner una breve explicacion.


C es un lenguaje de programación de propósito general que ofrece economía sintáctica, control de flujo y estructuras sencillas y un buen conjunto de operadores.
No es un lenguaje de muy alto nivel y más bien un lenguaje pequeño, sencillo y no está especializado en ningún tipo de aplicación.
Es fácil de dominar y en poco tiempo, un programador puede utilizar la totalidad del lenguaje.
Los tipos que ofrece son caracteres, números enteros y en coma flotante, de varios tamaños. Además se pueden crear tipos derivados mediante la utilización de punteros, vectores, registros y uniones. El primer compilador de C fue escrito por Dennis Ritchie para un DEC PDP-11 y escribió el propio sistema operativo en C.Introducción al lenguaje C.

Ejemplo de programa en C

Disculpen el pagadero de imágenes pero bueno este es nuestro programa en C el cual su función es insertar una cantidad N de numero y luego el programa te los acomoda en ordene ascendente.
Para lograr esto vamos a utilizar la secuencia repetitiva for la cual leerá, acomodara e imprimirá dicho resultado.

Su ejecución seria la siguiente: