|
|||||
Número 1 - JULIO 1992 CURSO DE C (c) Warlord, Abril 1992 En esta sección daré un breve curso de C, para una vez finalizado éste, comentar a fondo el Lattice C compiler. Como digo,no entraré demasiado en profundidades sobre el lenguaje C. No seguiré el guión de ningún libro, pero cualquiera que consultéis vendrá mas o menos como yo lo explico. Os recomiendo el de Anaya de Turbo C. Tampoco voy a hacer un artículo introductorio diciendo eso de que el C es muy bonito y útil y todo eso que se suele decir. Iré directamente al grano. De todos modos si queréis enteraros un poco de esto, os remito a cualquier buen libro de C, o sin ir más lejos al primer número de la AMIGA ZETA.
Tipos de caracteres: Entero decimal.Se representa por %d Códigos de control:
¡Ostia!, ¡Que rollo!. Veamos un pequeño ejemplo: main ()
{
printf("Hola.Me llamo %s tengo %d años y vivo en %s\n",JMC,22,CADIZ);
printf("Esta es laa\b segunda linea");
printf("Esta no es la tercera porque no puse \\n \n");
printf("Esta si es la tercera, porque puse \\n");
}
salida: Hola. Me llamo JMC tengo 22 años y vivo en Cádiz Esta es la segunda lineaEsta no es la tercera porque no puse \n Esta si es la tercera, porque puse \n Como veréis,para imprimir los distintos datos hemos utilizado los formatos anteriores: %d para escribir un número entero (22) y %s para pintar dos cadenas de caracteres (JMC y Cádiz). En este ejemplo, podemos observar: main() = Significa que es el bloque principal del programa (y en este caso el único) printf("primera línea \n segunda línea \n tercera línea\n")
Lo que simplificaría bastante lo anterior Anteriormente hemos visto algunos tipos de datos:Enteros,decimales, ... y cómo son representados.Vamos a explicar ahora esto con algo más de detalle: ENTEROS: Son todos los números sin coma decimal: -1, -23, 4, 0 .... short a; es un entero de tan sólo 8 bits es decir: int a; es un entero de -32768 a +32767 Si nos fijamos, todas estas variables enteras admiten recorrido negativo. Si ésto no nos interesara, porque la variable nunca fuera negativa se utiliza lo mismo pero poniendole delante "unsigned", como: unsigned short a.Con esto conseguimos que en vez de -128 a +127,sea de 0 a 255, Se utilizan para números muy grandes o muy pequeños. Su utilidad es manifiesta en el ahorro de memoria. Se precisa de muchos bytes si queremos almacenar una gran cadena de números. Sin embargo, en punto (o coma) flotante, la necesidad de memoria es mínima. Se representan por la mantisa y el exponente. así: -1.5 x E+6, que significa:
\|/
-1.5 x 1000000 (6 ceros)
Se declaran como float. (p.e., float a;)
Para mayor precisión, se utiliza double (o long float) que reservan el doble de bytes (64!) CARACTERES: Cualquier letra o número puede ser un carácter (a,#,3,N,...) se declaran como "char". Ocupan 8 bits. Todo esto es muy bonito, pero.... dame un ejemplo .... Pues bien, ahí va: main()
{
char a;
short b;
float c;
a='H';
b=1000;
c=3.2e-4;
}
¿Creen que está bien?.... ¡No!, se ha asignado b=1000, pero b es del tipo short, por lo tanto sus valores no pueden pasar de 255. Por lo tanto, o se pone b=255, o bien se cambia "short b" por "int b". Supongamos ahora que queremos representar una cadena de caracteres, como por ejemplo, un nombre. ¿Cómo podemos hacer esto, con lo visto hasta ahora?. Evidentemente, como muchos de ustedes ya han pensado, se vuelve a recurrir a la expresión "char". Si queremos asignar una cadena de caracteres como por ejemplo, "Mi mamá me mima" a una variable, bastará hacer ... main()
{
char frase[15];porque tiene 15 letras o caracteres
....
frase="mi mamá me mima";/*¡ojo!: '' para caracteres, "" para frases.*/
De ahora en adelante, llamaremos 'string' a una cadena de caracteres. /* Programa chorra 1*/
#define REVISTA "Fanzine"
main()
{
char nombre[10];
printf("Amigamaniacoadicto, dime tu nombre... ");
scanf("%s",nombre);
printf("Hola, %s, ¿Quieres colaborar en $s\n",nombre,REVISTA);
}
Aquí hay varias cosas nuevas: * Un comentario . Va entre */ y se cierra con */. ¡Nunca equivocarse de orden, os traería funestas consecuencias. Este comentario puede colocarse en cualquier lugar del programa. * El comando define. Lo que hace, es que al ponerlo antes del main(), asignamos a la variable REVISTA la cadena "fanzine" (que REVISTA, esté en mayúsculas no es casual. Este tipo de variables se suelen y se deben poner en mayúsculas). Más adelante volveremos sobre este comando. Todo esto está muy bien... ¿pero cómo puedo hacer un programa? Explicar el funcionamiento del Lattice C, es harto difícil. Pero ahí va una pequeña muestra para que podáis compilar y ejecutar un programa:
Si no tenéis editor, podéis hacerlo con el LSE (Lattice Screen Editor). Es un editor que incluye el propio Lattice C, pero que te permite otras muchas opciones (compilar...). Su manejo, debe ser explicado en otra ocasión. Por ahora, basta saber que se carga escribiendo lse. Escribir el programa y salvarlo a Ram, siguiendo los anteriores pasos. PRINTF Ya hemos visto como va. Su formato es: printf(" <frase+códigos>",variables);
ejemplo: ....
ordenata="amiga";
....
printf("¡Hola!, yo tengo un %s \n",ordenata);
También hemos visto un ejemplo anteriormente. Se utiliza para leer datos desde un dispositivo (entiéndase teclado, disco...). Su formato es muy similar al de printf. Un ejemplo: scanf("%s",nombre);
otro más: scanf("Dame tu nombre %s",nombre);
¡Ooops!, ¡Un momento!, esto no es correcto. Esta función no admite esto. Lo correcto sería: printf("Dame tu nombre\n");
scanf("%s",nombre);
Otro ejemplo más: printf("Dime tu edad");
scanf ("%s",&edad);
¡Espera un momento!, ¿qué es el &? Entender el concepto de puntero es fundamental en C y en cualquier lenguaje de bajo nivel. Cuando definimos ... int edad; ,estamos diciendo que la variable "edad" va a ser un entero. Si asignamos edad=23, este número se guarda en una determinada posición de memoria, por ejemplo en la posición 4444. Entonces: edad=22 &edad=4444 ¿Está claro?. &variable nos da la dirección real de memoria donde se encuentra la variable. Se dirá que &edad es una CONSTANTE PUNTERO. ¡Ok!, ¡ya me enterado!, pero ... ¿y si tenemos lo contrario?. Veamos: memoria =&edad; /*(Ahora memoria=4444)*/ ¿Qué sucede si queremos conocer el contenido de memoria?. Esto nos lleva al operador de indirección "*". Un ejemplo: edad = 22; memoria = &edad; /*ahora memoria=4444*/ años = *memoria; /*ahora años=23*/ Como podemos observar, el operador " * " hace lo contrario que &. Nos da el valor contenido en la dirección de memoria apuntada por memoria. ¡Cuidado!. El manejo de punteros suele crear verdaderos quebraderos de cabeza. Si por error pusiésemos años = *edad, ¿qué pasaría?. Como edad vale 22, ahora años sería el valor que se encontrara almacenado en la dirección 22 y no en la 4444. Bueno colegas AmigaCmaniacoadictos, creo que ya he escrito suficiente por esta vez. Pero no lo olvidéis, en el próximo .... MAS. |
| Envía esta página web a un amigo: Esta opción está desactivada temporalmente, rogamos disculpen las molestias |
|