Hola gente.
Desde el último comentario hecho aquí, he agregado lentamente los siguientes posts a las notas de "Dictado":
* ¿Cómo lograr que todo funcione? Partes I y II: Son unas estupideces que conté acerca de cómo veo la programación hoy en día. Una actividad no sólo tecnológica, computacional, sino también social, comunitaria. Para que un programa funcione bien, a veces necesitamos de otras personas...
* Pare de sufrir: Alternativas a la consola, Parte II: En esta ocasión lo que hago es instarles a reemplazar la consola estándar de Windows por otra que se consigue en Internet:
ConEmu. Hay dos razones básicas por las cuales hago esto: (i) La consola
ConEmu tiene al menos las mismas características que CMD, pero tiene una visualización más clara y agradable, además de poderse configurar con facilidad. (ii) ¡En la consola
ConEmu se puede poner una imagen de fondo, que además se actualiza automáticamente!
Esto de tener una imagen de fondo que se actualiza al mismo tiempo que la imagen misma... nos será muy útil para futuros proyectos de programación gráfica. Es decir, vamos a poder realizar programación gráfica en
C, sin necesidad de aprender o instalar librerías ajenas a las librerías que el estándar especifica de entrada.
(Aunque, eso sí, habrá que aprender un poco de formatos de imagen, al menos el más sencillo de todos:
BMP, mapas de bits).
* Caracteres en Lenguaje C, Partes I, II, III, IV y V.
He abodardo allí el complicadísimo y durísimo tema de los caracteres.
Es un asunto tedioso de estudiar, difícil de comprender, y extenuante de explicar.
He intentado ser lo más preciso posible, procurando no cometer errores de ninguna índole en la exposición. Sin embargo, los recovecos de este tema son tantos, que lo más probable es que algo se me haya escapado.
** En la parte I hago una brevísima recorrida histórica sobre los conjuntos de caracteres y sus métodos de codificación. El recorrido no está completo, y he dejado cabos sueltos (por ahora) respecto a
Unicode. Esto lo completaré en otro momento, pero lo que sigue puede "sobrevivir" sin ello. Para una exposición más detallada sobre la historia de los caracteres en computación, he estado escribiendo un artículo separado en la revista del foro (que también adolece por el momento de no tener la parte de
Unicode):
Codificación de caracteres** En la parte II introduzco de lleno toda una discusión técnica acerca de cuáles y cuántos son los caracteres que el estándar C admite. Se separa de entrada entre el "lugar" donde los programas compilan y el "lugar" donde ejecutan. En cada "lugar" puede haber distintos juegos de caracteres, o con codificaciones distintas.
La intención de analizar en detalle ese tema es, principalmente, comprender cuáles son los caracteres admitidos cuando estamos escribiendo un programa en C que se supone "válido" sintácticamente. ¿Podemos usar caracteres especiales, de otros idiomas, de Unicode, de otros juegos de caracteres exóticos, o que funcionan con algún método multibyte?
El estándar C habla de todo eso con detalle, y luego esos detalles se vuelven importantes si pretendemos conocer los límites del lenguaje, los caracteres que podemos usar, y el significado que tienen.
Una lección importante de este tema es que los caracteres que escribimos como cadenas de caracteres en nuestro programa, puede que no luzcan igual, o que no tengan la misma codificación cuando llevemos nuestro programa fuente de un sistema a otro, o cuando lo compilemos para ejecutarse en sistemas distintos al nuestro.
En todo caso, aprendemos de esto que si aparecen resultados extraños en la visualización de caracteres, es que "algo de todo este asunto" está involucrado ahí.
Prestando la debida atención, varios problemas relacionados a los caracteres en nuestros programas se pueden ir solucionando.
** En la parte III nos preocupamos por un tema más concreto: las constantes de caracter, constantes de caracter ancho, constantes de cadena y constantes de cadena de caracteres anchos.
Allí aprendemos sin lugar a dudas que el tipo de datos de una constante de caracter es un
int (en el caso de caracteres "normales") o bien
wchar_t (en el caso de caracteres "anchos").
Esto parece contradecir el sentido común, porque creeríamos que lo más "lógico" es que las constantes de caracter tengan tipo
char.
Esto no es así, sin embargo, se puede asegurar que el numerito que codifica el código de un caracter en
C será un valor "en el rango de valores" del tipo
char.
Esto abre la puerta a la posibilidad de que haya caracteres con códigos ¡negativos!
Pero también el estándar
C se previene a tiempo, y decide que los caracteres fundamentales del lenguaje (que llama
básicos) siempre tienen un código
positivo.
** En la parte IV sólo hago un resumen relajado de las cosas discutidas en las partes I, II y III.
** En la parte V se estudia el modo en que actúan los caracteres de control que el estándar
C adopta, cuando se los envía a la pantalla (saltos de línea, tabulaciones, retrocesos, etc.). Para ello se usa una terminología algo técnica, y pongo como ejemplos mi propio sistema, a ver qué es lo que pasa ahí.
Lo importante de esta parte V es llegar a entender que en realidad tenemos muy poco control de lo que pasa cuando enviamos información a la consola desde un programa en
C.
Podemos estar seguros de pocas convenciones y detalles, siempre y cuando se den determinadas condiciones.
Pero en general tenemos que estar preparados para entender lo que el programa que elegimos como "consola" se supone que hace cuando se le solicita enviar o recibir información.
Me llevó muchos meses superar esta etapa de los caracteres.
A tal punto que tuve que desviarme escribiendo un artículo aparte sobre el tema, en la revista del foro.
Pero ahora que ya terminé (salvo posibles detalles adicionales que algún día quizás agregue),
puedo al fin seguir con las cuestiones mismas de programación.
Si se fijan, he seguido un plan algo aburrido, pero con una intención determinada:
* Definir primero las cuestiones más básicas del lenguaje, a saber: las constantes literales.
Las constantes literales son de 3 tipos: aritméticas (enteras y de punto flotante), de caracter (que son de nuevo números enteros), y de cadena (éstas son arrays de caracteres).
Terminé de especificar en detalle ese "asuntito" que parecía tan simple.
En el interín, estudiamos también los tipos de datos aritméticos asociados a esas constantes, y con qué reglas esas constantes promocionan de un tipo a otro.
Para lo que sigue, planeo explicar los tipos de datos predefinidos en
C, primero los básicos, y luego los estructurados. Junto con esto más o menos iría el tema de "evaluar expresiones en C", y en particular los "casts" (u operadores de promoción).
Este tema puede estudiarse... ¡sin declaraciones de variables!
Quiero postergar eso para después...
Cuando estudiemos las declaraciones de variables, previamente necesitaremos las reglas para definir identificadores, y en particular es allí cuando cobran relevancia las palabras reservadas del lenguaje (que están prohibidas para usos definidos por el usuario).
Por supuesto, es importante luego explicar en profundidad el tema de las funciones.
Y finalmente vendrá el tema de las librerías estándar... y las no estándar.
Saludos.