Que Idioma? Spanglish?
Estoy tratando de deducir que lenguaje utilizar como nativo para mi blog. Tengo 2 opciones por diferentes razones:
- Ingles: Considero el ingles pues la gran mayoría de la tecnología esta en este idioma y la verdad hay que aceptar que la tecnología en español se oye mal. Me gustaría poder publicar en ingles los temas tecnológicos y profesionales.
- Español: Este es mi idioma natal y por mas que me guste el ingles es en el que mejor me desenvuelvo y el que mejor conozco. Me gustaría publicar información de mi país, opiniones personales de cualquier tipo o ideas relacionadas a mi sociedad.
Ayúdenme a decidir que idioma utilizare en mi blog como idioma principal!. Díganme que consideran
NOTA: Spanglish en el sentido que ciertos posts estaran en Ingles y otros en Español. No es k im gonna hablar like asi…
I’m Back!
Yea, I know… I’ve been back and forth for like 2 years now, changing my blogs location and never starting to post properly, now I hope thats behind me and I hope to start blogging soon. So keep posted! for real this time :S
I've moved!
I moved the blog/site to my personal hosted website… I won’t be updating this blog any more… this is the address…
Straight In-Line Code
Términos Generales
Algoritmos, declaraciones, código fuente, comentarios.
Palabras Clave
Algoritmos, Orden de ejecución.
INTRODUCTION
Straight In-Line Code básicamente lo que nos dice es que el código la mayoría de veces, por no decir todas, tiene un orden especifico de funcionamiento sin el cual no es posible su ejecución satisfactoria. Este capitulo trata todo lo que hay que saber sobre este tema.
Straight In-Line Code
Como literalmente lo indica el titulo del capitulo trata sobre el orden de ejecución de el código. Todos sabemos que para casi todas las operaciones hay un orden especifico que hay que seguir para poder completar la operación y obtener el resultado deseado.
Pero como hemos visto en programación, existen dos partes básicas, la lógica de programación (el orden del algoritmo) y la sintaxis del programa. Esto nos trae un problema pues no siempre se puede saber simplemente por el código, sin usar sentido común, cual seria el orden lógico de cada linea de código
Organizando el Código
Código con un orden especifico
Hay códigos que solo de ver el código se puede deducir el orden de cada declaración pues llevan una nomenclatura la cual da una idea de lo que se hace. Hay otros que es un poco mas difícil saber el orden pues es un orden implícito del algoritmo utilizado. Mas adelante podrá ver ejemplos para estos códigos.
Ejemplo de orden implícito en el código
data = ReadData();
results = CalculateResultsFromData(data);
PrintResults(results);
Codificar para el otro
Las situaciones donde el código por alguna razón no es claro y no permite una deducción del orden de sus declaraciones es un código pobre y mal construido. Se debe tener en cuenta como siempre que alguien mas leerá nuestro código y no podemos hacerlo solo para que nosotros lo entendamos.
Orden Oculto
Nos podemos encontrar conjunto de declaraciones que llevan un orden especifico pero esta oculto. No es deducible por los nombres de las declaraciones.
Ejemplo de orden oculto
ComputeMarketingExpense();
ComputeSalesExpense();
ComputeTravelExpense();
ComputePersonnelExpense();
DisplayExpenseSummary();
Uso de Comentarios
De no ser posible la clara expresión del código por si mismo se debe proceder a utilizar comentarios para documentar el algoritmo y marcar claramente el orden de las declaraciones.
Ejemplo del uso de Comentarios
/*Compute expense data. Each of the routines accesses the
*member data expenseData. DisplayExpenseSummary
*should be called last because it depends on data calculated
*by the other routines.
*/
InitializeExpenseData
ComputeMarketingExpense
ComputeSalesExpense
ComputeTravelExpense
ComputePersonnelExpense
DisplayExpenseSummary
Afectan la misma información
Otra forma de dejar claro que un grupo de declaraciones usa una misma información.
Uso de Parámetros
También se pueden utilizar parámetros para indicar que las declaraciones modifican la misma información por lo que llevan algún tipo de relación entre ellas. Puede indicar por ejemplo que un grupo de declaraciones que modifican o evalúan una información deben de ejecutarse antes de que se ejecute la declaración para imprimir dicha información procesada.
Ejemplo de uso de parámetros
InitializeExpenseData(expenseData);
ComputeMarketingExpense(expenseData);
ComputeSalesExpense(expenseData);
ComputeTravelExpense(expenseData);
ComputePersonnelExpense(expenseData);
DisplayExpenseSummary(expenseData);
Codigo sin un Orden Especifico
Hay también código que en el cual no existe una relación entre alguna o ninguna de sus declaraciones. Dicho código puede ser ejecutado en cualquier orden sin variación de los resultados que el programa arroje. Para este tipo de códigos se utiliza una tecnifica de ordenamiento la cual agrupa las declaraciones por cercanía.
Ordenamiento por Cercanía
Esta técnica para ordenar las declaraciones “cercanas” es bastante lógica en vez de tener un grupo de declaraciones mezcladas se debe buscar las declaraciones comunes o que usan la misma información y ponerlas juntas, esto puede eficientizar el código de varias maneras. Podría hacer un mejor y mas eficiente uso de la memoria, del procesador o simplemente volverlo menos tedioso y complicado de leer para otro programador.
Ejemplo de Ordenamiento por Cercanía
MarketingData marketingData;
SalesData salesData;
TravelData travelData;
travelData.ComputeQuarterly();
salesData.ComputeQuarterly();
marketingData.ComputeQuarterly();
salesData.ComputeAnnual();
marketingData.ComputeAnnual();
travelData.ComputeAnnual();
salesData.Print();
travelData.Print();
marketingData.Print();
Deberia Ser:
MarketingData marketingData;
marketingData.ComputeQuarterly();
marketingData.ComputeAnnual();
marketingData.Print();
SalesData salesData;
salesData.ComputeQuarterly();
salesData.ComputeAnnual();
salesData.Print();
TravelData travelData;
travelData.ComputeQuarterly();
travelData.ComputeAnnual();
travelData.Print();
Ventajas
El ordenamiento de las declaraciones de un código tiene una importancia que abarca todo el ámbito de la programación. Desde eficientizar el código hasta hacerlo mas legible.
Debemos crearnos una mentalidad de trabajo en comunidad y pensar en que ese código lo puede utilizar otra persona. Es bueno pensar bien en el futuro de lo que podria convertirse el programa pues es mejor incluir algo en el durante la fase de diseño y no en la de construcción.
REFERENCES
-
Code Complete, Second Edition, Steve Mcconnell.
El Triangulo de Pascal
El Triangulo de Pascal es una herramienta para calcular coeficientes la cual cuando se calculan todos los coeficientes en orden ascendente se genera un triangulo de la forma siguiente en la cual cada linea es un polinomio de orden n.
![]()
El triangulo de pascal se genera usando una formula de uso relativamente simple. n es el orden del polinomio y k es el termino del cual se desea el coeficiente.

El proposito de este triangulo es para la asignacion de los coeficientes en los polinomios de forma (a+b)^x. De la forma siguiente:

Para generar el triangulo de pascal es bien sencillo y se puede hacer un un programa bastante corto y eficiente.
El siguiente es un pequeno codigo para generar el triangulo de pascal:
pascal.c
#include <stdio.h>
#include <stdlib.h>
// calcula el factorial de un numero
double fact(int x)
{
if (!x) return 1.0;
double r = (double) x;
while (x > 1)
{
r *= --x;
}
return r;
}
int main(int argc, char *argv[])
{
int n;
int i, k, s;
int e;
if (argc > 1)
{
n = atoi(argv[1]);
} else {
n = 10;
}
for (i = 0; i < n; i++)
{
for (s = 1; s < n-i; s++)
{
printf(" ");
}
for (k = 0; k <= i; k++)
{
e = fact(i)/(fact(i-k)*fact(k));
printf("%4d", e);
}
printf("\n");
}
system("PAUSE");
return 0;
}
Tamano de los tipos de datos en diferentes arquitecturas
| Type | Size | Range |
|---|---|---|
| Integral Types | ||
short int , or signed short int |
16 bits | -32768 to 32767 |
unsigned short int |
16 bits | 0 to 65535 |
int or signed int |
32 bits | -2147483648 to 2147483647 |
unsigned int |
32 bits | 0 to 4294967295 |
long int , or signed long int (OpenVMS) |
32 bits | - 2147483648 to 2147483647 |
long int , or signed long int (Digital UNIX) |
64 bits | - 9223372036854775808 to 9223372036854775807 |
unsigned long int (OpenVMS) |
32 bits | 0 to 4294967295 |
unsigned long int (Digital UNIX) |
64 bits | 0 to 18446744073709551615 |
signed __int64 (Alpha) |
64 bits | -9223372036854775808 to 9223372036854775807 |
unsigned __int64 (Alpha) |
64 bits | 0 to 18446744073709551615 |
| Integral Character Types | ||
char and signed char |
8 bits | -128 to 127 |
unsigned char |
8 bits | 0 to 255 |
wchar_t |
32 bits | 0 to 4294967295 |
| Floating- Point Types (range is for absolute value) | ||
float |
32 bits | 1.1 x 10 -38 to 3.4 x 10 38 |
double |
64 bits | 2.2 x 10 -308 to 1.7 x 10 308 |
long double (OpenVMS Alpha) |
128 bits | 3.4 x 10 -49321 to 1.2 x 10 49321 |
long double (OpenVMS VAX, Digital UNIX) |
Same as double |
Same as double |
Referencia:
http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_031.HTM
El Proceso del Compilador de C/C++
El proceso de compilacion se separa en 5 etapas: Preproceso, Parseo, Traduccion, Construccion y Linkeo.
Existen varios compiladores algunos closed otros open source pero todos llevan un estandard al cual siguen. Entre algunos de los compiadores estan el de GNU (gcc, g++).
El Preprocesador
Se encarga de todos los controles antes del proceso de compilacion. Este maneja todas las directivas que comienzan con # las cuales son basicamente opercaiones de copiar y pegar texto como en un include lo que hace es copiar el texto del archivo indicado en la instruccion y colocarlo en el lugar donde se llama la instruccion #include. De este modo tenemos todos los headers de funciones disponibles en el archivo para el uso del compilador.
El Parseo
En esta etapa se lee o interpreta el codigo del programa para saber que se quiere que haga el codigo, los pasos que debe hacer y todo lo relacionado con la ejecucion del codigo.
La Traduccion
En esta etapa se hace una “traduccion” de lo que se parseo o leyo a lo que interpretara el ensamblador el cual constuira nuesto programa. En esta fase se pautan las operaciones que se deben llevar a cabo para la ejecucion del programa.
El Ensamblador
Este crea los archivos de objeto que son los archivos binarios para cada modulo del programa. Ya en esta etapa se puede decir que el programa ya esta “compilado” aunque no es comun que funcione desde esta etapa.
El Linkeador
Este se encarga de juntar o unir los archivos de objeto los cuales ya estan en formato binario para formar un solo archivo binario el cual sera el que se ejecutara finalmente para ejecutar el programa en si.

Metodo Evolucionario de Desarrollo (EVO)
El Metodo Evolucionario de Desarrollo (Evo) es muy util para el manejo de proyectos. Puede ser utilizado para manejar cualquier tipo de proyecto y para desarrollar cualquier tipo de producto. Ha sido usado en una gran variedad de disciplinas como Ingenieria de Sistemas, Ingenieria de Software y Desarrollo Organizacional.
Una caracteristica de Evo, es que se adapta elegantemente de proyectos pequeños, o sub-proyectos hasta proyectos grandes y de gran complejidad. Es util para hacer el trabajo personal y para manejar corporaciones.
Evo consiste en muchos sub-metodos que pueden ser aprendidos y usados por separado, o en cualquier combinacion.
Algunos de estos componentes principales son:
1. una especificacion del lenguaje llamado Planguage.
2. Una forma practica y facil de especificar requerimientos.
3. Diseño y Arquitectura; a travez del uso de Tablas de Estimacion de Impacto (Impact Estimation Tables – IET) y plantillas de especificacion de diseños.
4. Desarrollando y entregando un sistema Evolucionariamente (Evo).
Basicamente Evo es un metodo de desarrollo en el cual no se cierran los ojos despues de planificar y se abren cuando el producto esta terminado para darnos cuenta de lo que ha salido. El Evo usa ciclos pequeños que se utilizan para ir viendo como va el desarrollo y si existe algun problema atraparlo lo mas rapido posible, por esta razon no son necesarias algunas fases de otros metodos como por ejemplo la fase de debug.
Encontre un pdf bastante bueno en internet que explica de una manera clara y directa lo que es el metodo Evo. si tienen algun problema con el link me avisan pues no lo hosteo yo.
Modelo de Datos
Un modelo de datos es aquel que describe de una forma abstracta cómo se representan los datos, sea en una empresa, en un sistema de información o en un sistema de gestión de base de datos. Básicamente consiste en una descripción de algo conocido como contenedor de datos (algo en donde se guarda la información), así como de los métodos para almacenar y recuperar información de esos contenedores.
segun Ullman1999:
“Un modelo de datos es un sistema formal y abstracto que permite describir los datos de acuerdo con reglas y convenios predefinidos. Es formal pues los objetos del sistema se manipulan siguiendo reglas perfectamente definidas y utilizando exclusivamente los operadores definidos en el sistema, independientemente de lo que estos objetos y operadores puedan significar.”
Esto nos explica que un modelo de datos es en cierta forma un estandard para que todo el mundo que trabaje con un sistema pueda conocer, entender y manejar las formas de manejar la informacion y los datos que el contiene.
Su proposito es unificar los metodos y formar un protocolo para poder trabajar con un modelo de datos especifico de modo que las cosas se puedan expresar lo mas facil posbile y no ser mal interpretadas por las personas.
Analisis y Diseno
Es el Proceso de gestión para la creación de un Sistema o software, la cual encierra un conjunto de actividades, una de las cuales es la estimación, estimar es echar un vistazo al futuro y aceptamos resignados cierto grado de incertidumbre. Aunque la estimación, es mas un arte que una Ciencia, es una actividad importante que no debe llevarse a cabo de forma descuidada. Existen técnicas útiles para la estimación de costes de tiempo. Y dado que la estimación es la base de todas las demás actividades de planificación del proyecto y sirve como guía para una buena Ingeniería Sistemas y Software.
Esto se lleva a cabo en lo que se llama el nacimiento del proyecto y plantea por donde ira el desarrollo y crecimiento de este. Esta parte del proyecto es una de las mas importantes pues se decide que se sacrificara y en que cantidades para que se pierda los menores recursos posibles.