viernes, 15 de octubre de 2010

Que es un vector en programación


Los vectores son una forma de almacenar datos que permiten contener una serie de valores del mismo tipo, cada uno de los valores contenidos tiene una posición asociada que se usará para accederlos. Está posición o índice será siempre un número entero positivo.

En C la cantidad de elementos que podrá contener un vector es fijo, y en principio se define cuando se declara el vector.
. Los vectores se pueden declarar de la siguiente forma:


 tipo_elemento nombre[largo]; 


Esto declara la variable nombre como un vector de tipo_elementos que podrá contener largo cantidad de elementos, y cada uno de estos elemento podrá contener un valor de tipo tipo_elemento.

Por ejemplo:


 double valores[128]; 


En este ejemplo declaramos un vector de 128 elementos del tipo double, los índices de los elementos irían entre 0 (para el primer elemento y 127 para el último).

De la misma forma que con las otras declaraciones de variables que hemos visto se le puede asignar un valor iniciar a los elementos.

O también se pueden declarar:


tipo_elemento nombre[largo]={valor_0, valor_1, valor_2};



En caso estamos asignadole valores a los primeros 3 elementos del vector nombre. Notar que largo debe ser mayor o igual a la cantidad de valores que le estamos asignando al vector, en el caso de ser la misma cantidad no aporta información, por lo que el lenguaje nos permite escribir:


 tipo_elemento nombre[]={valor_0, valor_1, valor_2}; 



Que declarará nombre como el vector de largo 3.

Para acceder a un elemento accederemos a través de su posición. Es decir:


 tipo_elemento elemento;  ...  elemento = nombre[2]; 


Asumiendo que tenemos el vector anterior definido estaríamos guardando valor_2 en elemento.




miércoles, 8 de septiembre de 2010

CICLO WHILE


En este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezca como verdadera en el momento en que la condición se convierte en falsa el ciclo termina.

Su formato general es :

cargar o inicializar variable de condición;

while(condición)

{

grupo cierto de instrucciones;

instrucción(es) para salir del ciclo;

};

Un error muy comun con el while, es poner un punto y coma(;) despues de la (condición) ejemplo while(condicion); ←-esto es y causa un error


Ejemplo:

#include 


#include <conio.h>


void main()

{

clrscr();

int x=1;

while(x<=10);// instruccion while

{ printf("%d PATO",x); x++; };

getchar();

}







CICLO FOR EN C++

Instrucciones para ciclos resuelven el problema de repetir todo el programa o cierta parte del programa mas de una vez.

Este ciclo es uno de los mas usados para repetir una secuencia de instrucciones, sobre todo cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una instrucción simple o compuesta.

Su formato general es:

for (inicialización; condición; incremento)

En su forma simple la inicialización es una instrucción de asignación que carga la variable de control de ciclo con un valor inicial.

La condición es una expresión relacional que evalúa la variable de control de ciclo contra un valor final o de parada que determina cuando debe acabar el ciclo.

El incremento define la manera en que la variable de control de ciclo debe cambiar cada vez que el computador repite un ciclo.

Se deben separar esos 3 argumentos con punto y coma (;)


EJEMPLO

#include

#include <conio.h>

void main()
{
clrscr();
int x;
for(x=1;x<=10;x=x+1)//instruccion for//
{printf("%d MAMA",x);
};
getchar();

}






jueves, 26 de agosto de 2010

Ciclo repetitivo







Las computadoras están especialmente diseñadas para ejecutar tareas repetidamente. Los cálculos simples o la manipulación de pequeños conjuntos de datos se pueden realizar fácilmente a mano, pero las tareas grandes o repetitivas son realizadas con mayor eficiencia por una computadora. Las estructuras de control repetitivas son aquellas en las que una sentencia o grupos de sentencias se repiten muchas veces. Este conjunto de sentencias se denomina bucle o lazo, y puede presentarse de varias formas, una de las formas es el lazo condicionado, en el cual el proceso de repetición se controla mediante una condición previamente establecida.


LIBRERIA stdio.h

Es la biblioteca estándar del lenguaje de programación C, el archivo de cabecera que contiene las definiciones demacros, las constantes, las declaraciones de funciones y la definición de tipos usados por varias operaciones estándar de entrada y salida. Por motivos de compatibilidad, el lenguaje de programaciónC++ (derivado de C) también tiene su propia implementación de estas funciones, que son declaradas con el archivo de cabecera cstdio.

Las funciones declaradas en stdio.h son sumamente populares.

LIBRERIA conio.h

Aunque se trate de una librería no estándar, conio se ha convertido para muchos programadores educados o acostumbrados a compiladores de Borland® en una herramienta imprescindible para crear programas de consola.

Adicionalmente, cuando se crean aplicaciones de consola usando compiladores para Windows, como Dev-C++, a menudo necesitamos compilar programas escritos originalmente para compiladores Borland®. O sencillamente, queremos dotar a nuestros programas de consola de una apariencia más amigable y agradable.

Por supuesto, podemos recurrir a las funciones de consola del API de Windows, pero a menudo la conversión entre funciones de conio y sus equivalentes en el API no son tan sencillas, y en cualquier caso requiere cierto tiempo.

Este documento incluye una emulación de conio para el compilador Mingw, usado por el entorno de programación Dev-C++.

Es cierto que Dev-C++ incluye una emulación de conio, pero a nuestro juicio no es lo bastante fiel en cuanto a comportamiento a la original de Borland®. Sobre todo en funciones de ventanas, lecturas sin eco en pantalla, y en funciones como "kbhit", que o bien no se emulan, o se hace de forma incompleta.

Por supuesto, no todas las funciones y macros se han emulado, hay algunas con las que no es posible hacerlo, concretamente las que relacionadas con entrada y salida de puertos: "inp", "inport", "inportb", "inpw", "outp", "outport", "outportb" y "outpw"; ya que estas macros colisionan con el control del hardware de Windows.

Además de estas macros, la única función que no se emula es "cscanf", debido a las dificultades que entraña su implementación. En futuras versiones intentaremos incluirla. En su lugar se usa "scanf" directamente.

miércoles, 25 de agosto de 2010

Clases de librerias

Cada fichero de cabecera se denomina librería. En la siguiente lista mostraremos la Librería junto con la Descripción:
assert.h Contiene una macro para el diagnóstico dentro de los programas.
ctype.h Contiene varias funciones para comprobación de tipos y transformación de caracteres.
errno.h Contiene varias macros usadas para informar de errores.
limits.h Contienen varias macros que definen constantes para el tamaño de tipo enteros.
float.h Contienen varias macros que definen constantes para el tamaño de tipo flotante.
locale.h Contienen varias macros, funciones y tipos para unidades locales, como unidad monetaria, tiempo, dígitos, etc.
math.h Contiene una macro y varias funciones matemáticas.
setjmp.h Contienen declaraciones que proporcionan una forma de evitar la secuencia normal de llamada y regreso de funciones.
signal.h Contiene un tipo, dos funciones y varias macros para manejar condiciones excepcionales que aparecen durante la ejecución, tal como una señal de interrupción de una fuente externa o un error en la ejecución.
stdarg.h Contiene un tipo y tres macros que proporcionan recursos para recorrer una lista de argumentos de función de tamaño y tipo desconocido.
stddef.h Contiene varios tipos y macros que también están definidas en otras librerías, como size_t.
stdio.h Contiene tipos, macros y funciones para la realización de tareas de E/S.
stdlib.h Contiene tipos, macros y funciones para la conversión numérica, generación de números aleatorios, búsquedas y ordenación, gestión de memoria y tareas similares.
string.h Contiene tipos, macros y funciones para la manipulación de cadenas de caracteres.
time.h Contiene tipos, macros y funciones para la la manipulación de información sobre fechas y horas.

LIBRERIAS ?

En lo que respecta al lenguaje C++, existen dos tipos fundamentales de librerías: estáticas y dinámicas, que aunque comparten el mismo nombre genérico "librería", utilizan mecanismos distintos para proporcionar su funcionalidad al ejecutable.

En ambos casos es costumbre, que junto a las librerías propiamente dichas (ficheros .lib, .a, .dll etc), se incluya un fichero .h denominado "de cabecera", porque es tradición utilizar las primeras líneas del programa para poner las directivas #include que los incluirán en el fuente durante la fase de preproceso. Este fichero contiene las declaraciones de las entidades contenidas en la librería, así como las macros y constantes predefinidas utilizadas en ella, de forma que el programador solo tiene que incluir el correspondiente fichero .h en su aplicación para poder utilizar los recursos de la librería en cuestión (recuerde que en C/C++ es imprescindible incluir la declaración de cualquier función o clase antes de su utilización. Este sistema tiene la ventaja adicional de que proporciona al usuario la información mínima para su uso. Es decir, la "interfaz" de las funciones o clases que utilizará. En el caso de funciones esto se concreta en el prototipo; en el caso de clases, en la especificación de sus métodos y propiedades públicas.


Librerías estáticas

Denominadas también librerías-objeto, son colecciones de ficheros objeto (compilados) agrupados en un solo fichero de extensión .lib, .a, etc. junto con uno o varios ficheros de cabecera (generalmente .h).

Una posición extrema la constituyen aquellas librerías en las que toda la funcionalidad se ha incluido en el fichero de cabecera .h, en cuyo caso no existen los módulos compilados .lib, .a, etc. Es el caso de la Librería Estándar de Plantillas STL que está compuesta casi exclusivamente por ficheros de cabecera. No obstante, lo anterior representa un caso extremo que suele ser evitado, ya que por lo general, los autores incluyen en los ficheros de cabecera la información mínima indispensable para utilizar la librería (la interfaz), incluyendo la operatoria en forma de ficheros compilados. La razón no suele ser otra que proteger la propiedad intelectual (el "know how").

Durante la construcción de la aplicación, el preprocesador incluye en los fuentes los ficheros de cabecera. Posteriormente, durante la fase de enlazado, el linker incluye en el ejecutable los módulos correspondientes a las funciones y clases de librería que hayan sido utilizadas en el programa, de forma que el conjunto entra a formar parte del ejecutable. De ahí su nombre: Librerías enlazadas estáticamente.

Dejando aparte consideraciones de comodidad y rapidez, el resultado de utilizar una de tales librerías no se diferencia en nada al que puede obtenerse escribiendo en al fuente las funciones o clases correspondientes y compilándolas como un módulo más de nuestra aplicación.



Librerías dinámicas

Otra forma de añadir funcionalidad a un ejecutable son las denominadas librerías de enlazado dinámico (repasar en el significado de "enlazado dinámico"), generalmente conocidas como DLLs, acrónimo de su nombre en inglés ("Dynamic Linked Library"). Estas librerías se utilizan mucho en la programación para el SO Windows. Este Sistema contiene un gran número de tales librerías de terminación .DLL, aunque en realidad pueden tener cualquier otra terminación .EXE, .FON, .BPI, .DRV etc. Cualquiera que sea su terminación, de forma genérica nos referiremos a ellas como DLLs, nombre por el que son más conocidas.

domingo, 1 de agosto de 2010

ERGONOMIA

La ergonomía es la ciencia que estudia la economía del rendimiento humano. Aplicando esta ciencia al ámbito laboral, nos ayuda a encontrar las posiciones más adecuadas, de nuestro cuerpo respecto al mobiliario de oficina, para el ahorro energético de nuestro cuerpo.

Este ahorro se consigue a través de unos apropiados equipamientos de oficina que proporcionan comodidad e intentan evitar lesiones en el trabajo. A continuación pondremos algunos ejemplos de cómo colocar el mobiliario adecuadamente y de cómo posicionarnos nosotros para evitar posibles lesiones:

  • La silla debe ser cómoda y debe permitirnos tener una posición relajada pero no descuidada, de tal manera que estemos relativamente rectos y apoyemos en el respaldo la zona lumbar.
    Por otro lado los muslos deben ir paralelos al suelo y tenemos que apoyar los pies en el suelo.
  • El teclado del ordenador debe estar paralelo al suelo y a una altura en la que queden alineados la muñeca, la mano y el antebrazo.
    No debe estar muy alejado de nosotros ya que si tuviésemos que acercarnos a él forzaríamos la posición lumbar hacia delante.
  • El monitor del ordenador debería estar a 75-80 cm de los ojos, ligeramente inclinado hacia arriba para que coincida con nuestra mirada.
  • No debe estar directamente delante de la cara sino un poco más abajo, de tal manera que su borde superior esté a la altura de los ojos.

Aunque sigamos estos consejos, si pasamos demasiadas horas en una misma postura acabaremos sintiendo dolor y rigideces, por lo que es conveniente hacer estiramientos, moverse y cambiar de postura a la que nos resulte más cómoda en cada momento, levantarse y dar cortos pero frecuentes paseos, mantener el cuerpo a una buena temperatura por que así los músculos trabajan mejor y se evitan posibles lesiones por rigideces.

Además los estiramientos y cambios posturales nos ayudan a retirar la mirada de la pantalla, aunque sólo sea por un par de minutos, y podemos aprovechar para relajar la vista fijándola en un punto lejano.

Como anteriormente he comentado la ergonomía nos ayuda a evitar lesiones laborales, pero es una ciencia a la que aún le queda por evolucionar ya que es relativamente reciente el conocimiento de las lesiones que puede provocar una mala postura mantenida a lo largo de las jornadas laborales.

lunes, 26 de julio de 2010

QUE ES UN PROCESADOR ??

Contenido:

RESUMEN

El transistor actúa entonces como conmutador programable, gracias al electrodo de control. Cuando se aplica una carga al electrodo de control, éste actúa como interruptor cerrado, y cuando no hay carga, actúa como interruptor abierto.
Circuitos Integrados

Una vez combinados, los transistores pueden constituir circuitos lógicos que, al combinarse, forman procesadores. El primer circuito integrado data de 1958 y fue construido por Texas Instruments.

Los transistores MOS se componen, entonces, de láminas de silicona (denominadas obleas), obtenidas luego de múltiples procesos. Dichas láminas de silicona se cortan en elementos rectangulares para formar un "circuito". Los circuitos se colocan luego en carcasas con conectores de entrada-salida, y la suma de esas partes compone un "circuito integrado". La minuciosidad del grabado, expresado en micrones (micrómetros, se escribe µm) define el número de transistores por unidad de superficie. Puede haber millones de transistores en un sólo procesador.

La Ley de Moore, escrita en 1965 por Gordon E. Moore, cofundador de Intel, predijo que el rendimiento del procesador (por extensión del número de transistores integrados a la silicona) se duplicaría cada 12 meses. Esta ley se revisó en 1975, y se cambió el número de meses a 18. La Ley de Moore sigue vigente hasta nuestros días.

Dado que la carcasa rectangular contiene clavijas de entrada-salida que parecen patas, en Francia se utiliza el término "pulga electrónica" para referirse a los circuitos integrados.

Transistor MOS

El transistor actúa entonces como conmutador programable, gracias al electrodo de control. Cuando se aplica una carga al electrodo de control, éste actúa como interruptor cerrado, y cuando no hay carga, actúa como interruptor abierto.
Circuitos Integrados

Una vez combinados, los transistores pueden constituir circuitos lógicos que, al combinarse, forman procesadores. El primer circuito integrado data de 1958 y fue construido por Texas Instruments.

Los transistores MOS se componen, entonces, de láminas de silicona (denominadas obleas), obtenidas luego de múltiples procesos. Dichas láminas de silicona se cortan en elementos rectangulares para formar un "circuito". Los circuitos se colocan luego en carcasas con conectores de entrada-salida, y la suma de esas partes compone un "circuito integrado". La minuciosidad del grabado, expresado en micrones (micrómetros, se escribe µm) define el número de transistores por unidad de superficie. Puede haber millones de transistores en un sólo procesador.

La Ley de Moore, escrita en 1965 por Gordon E. Moore, cofundador de Intel, predijo que el rendimiento del procesador (por extensión del número de transistores integrados a la silicona) se duplicaría cada 12 meses. Esta ley se revisó en 1975, y se cambió el número de meses a 18. La Ley de Moore sigue vigente hasta nuestros días.

Dado que la carcasa rectangular contiene clavijas de entrada-salida que parecen patas, en Francia se utiliza el término "pulga electrónica" para referirse a los circuitos integrados.

Señales de Control

Las señales de control son señales electrónicas que orquestan las diversas unidades del procesador que participan en la ejecución de una instrucción. Dichas señales se envían utilizando un elemento denominado secuenciador. Por ejemplo, la señal Leer/Escribir permite que la memoria se entere de que el procesador desea leer o escribir información.
Unidades Funcionales

El procesador se compone de un grupo de unidades interrelacionadas (o unidades de control). Aunque la arquitectura del microprocesador varía considerablemente de un diseño a otro, los elementos principales del microprocesador son los siguientes:

* Una unidad de control que vincula la información entrante para luego decodificarla y enviarla a la unidad de ejecución:La unidad de control se compone de los siguientes elementos:
o secuenciador (o unidad lógica y de supervisión ), que sincroniza la ejecución de la instrucción con la velocidad de reloj. También envía señales de control:
o contador ordinal, que contiene la dirección de la instrucción que se está ejecutando actualmente;
o registro de instrucción, que contiene la instrucción siguiente.
* Una unidad de ejecución (o unidad de procesamiento), que cumple las tareas que le asigna la unidad de instrucción. La unidad de ejecución se compone de los siguientes elementos:
o la unidad aritmética lógica (se escribe ALU); sirve para la ejecución de cálculos aritméticos básicos y funciones lógicas (Y, O, O EXCLUSIVO, etc.);
o la unidad de punto flotante (se escribe FPU), que ejecuta cálculos complejos parciales que la unidad aritmética lógica no puede realizar;
o el registro de estado;
o el registro acumulador.
* Una unidad de administración del bus (o unidad de entrada-salida) que administra el flujo de información entrante y saliente, y que se encuentra interconectado con el sistema RAM.

Memoria Cache


La memoria caché (también memoria buffer) es una memoria rápida que permite reducir los tiempos de espera de las distintas informaciones almacenada en la RAM (Random Access Memory o Memoria de Acceso Aleatorio). En efecto, la memoria principal del ordenador es más lenta que la del procesador. Existen, sin embargo, tipos de memoria que son mucho más rápidos, pero que tienen un costo más elevado. La solución consiste entonces, en incluir este tipo de memoria local próxima al procesador y en almacenar en forma temporal la información principal que se procesará en él. Los últimos modelos de ordenadores poseen muchos niveles distintos de memoria caché:

* La Memoria caché nivel 1 (denominada L1 Cache, por Level 1 Cache) se encuentra integrada directamente al procesador. Se subdivide en dos partes:
o la primera parte es la caché de instrucción, que contiene instrucciones de la RAM que fueron decodificadas durante su paso por las canalizaciones.
o la segunda parte es la caché de información, que contiene información de la RAM, así como información utilizada recientemente durante el funcionamiento del procesador.


El tiempo de espera para acceder a las memorias caché nivel 1 es muy breve; es similar al de los registros internos del procesador.

* La memoria caché nivel 2 (denominada L2 Cache, por Level 2 Cache) se encuentra ubicada en la carcasa junto con el procesador (en el chip). La caché nivel 2 es un intermediario entre el procesador con su caché interna y la RAM. Se puede acceder más rápidamente que a la RAM, pero no tanto como a la caché nivel 1.
* La memoria caché nivel 3 (denominada L3 Cache, por Level 3 Cache) se encuentra ubicada en la placa madre.


Todos estos niveles de caché reducen el tiempo de latencia de diversos tipos de memoria al procesar o transferir información. Mientras el procesador está en funcionamiento, el controlador de la caché nivel 1 puede interconectarse con el controlador de la caché nivel 2, con el fin de transferir información sin entorpecer el funcionamiento del procesador. También, la caché nivel 2 puede interconectarse con la RAM (caché nivel 3) para permitir la transferencia sin entorpecer el funcionamiento normal del procesador.

Código de Operación Campo de Operación




El número de bits en una instrucción varía de acuerdo al tipo de información (entre 1 y 4 bytes de 8 bits).
Las instrucciones pueden agruparse en distintas categorías. A continuación presentamos algunas de las más importantes:

* Acceso a Memoria: acceso a la memoria o transferencia de información entre registros.
* Operaciones Aritméticas: operaciones tales como suma, resta, división o multiplicación.
* Operaciones Lógicas: operaciones tales como Y, O, NO, NO EXCLUSIVO, etc.
* Control: controles de secuencia, conexiones condicionales, etc.

Registros

Cuando el procesador ejecuta instrucciones, la información almacena en forma temporal en pequeñas ubicaciones de memoria local de 8, 16, 32 o 64 bits, denominadas registros. Dependiendo del tipo de procesador, el número total de registros puede variar de 10 a varios cientos.

Los registros más importantes son:

* el registro acumulador (ACC), que almacena los resultados de las operaciones aritméticas y lógicas;
* el registro de estado (PSW, Processor Estado: Word o Palabra de Estado del Procesador), que contiene los indicadores de estado del sistema (lleva dígitos, desbordamientos, etc.);
* el registro de instrucción (RI), que contiene la instrucción que está siendo procesada actualmente;
* el contador ordinal (OC o PC por Program Counter, Contador de Programa), que contiene la dirección de la siguiente instrucción a procesar;
* el registro del búfer, que almacena información en forma temporal desde la memoria.







Procesador Intel 4004



El procesador (denominado CPU, por Central Processing Unit) es un circuito electrónico que funciona a la velocidad de un reloj interno, gracias a un cristal de cuarzo que, sometido a una corriente eléctrica, envía pulsos, denominados "picos". La velocidad de reloj (también denominada ciclo), corresponde al número de pulsos por segundo, expresados en Hertz (Hz). De este modo, un ordenador de 200 MHz posee un reloj que envía 200.000.000 pulsos por segundo. Por lo general, la frecuencia de reloj es un múltiplo de la frecuencia del sistema (FSB, Front-Side Bus o Bus de la Parte Frontal), es decir, un múltiplo de la frecuencia de la placa madre.

Con cada pico de reloj, el procesador ejecuta una acción que corresponde a su vez a una instrucción o bien a una parte de ella. La medida CPI (Cycles Per Instruction o Ciclos por Instrucción) representa el número promedio de ciclos de reloj necesarios para que el microprocesador ejecute una instrucción. En consecuencia, la potencia del microprocesador puede caracterizarse por el número de instrucciones por segundo que es capaz de procesar. Los MIPS (millions of instructions per second o millones de instrucciones por segundo) son las unidades que se utilizan, y corresponden a la frecuencia del procesador dividida por el número de CPI.
Instrucciones

Una instrucción es una operación elemental que el procesador puede cumplir.. Las instrucciones se almacenan en la memoria principal, esperando ser tratadas por el procesador. Las instrucciones poseen dos campos:

* el código de operación, que representa la acción que el procesador debe ejecutar;
* el código operando, que define los parámetros de la acción. El código operando depende a su vez de la operación. Puede tratarse tanto de información como de una dirección de memoria.