| Volver menú revistas | ![]() Número 2 - NOVIEMBRE 1992 |
Página anterior |
|
CURSO DE LATTICE C (II) By Warlord Si recordáis, en el número anterior, veíamos algunas órdenes del C, así como una breve introducción a los punteros. Hagamos un poco de memoria ... */ Este programa suma 4 números /*
main( ) {
int a, b, c,d, suma;
a = 1; b = 2; c = 3; d = 4;
suma = a + b + c + d;
printf("suma es %d", suma);
}
Fácil, ¿no?. Fijaos un detalle: En la segunda línea hemos escrito ... a = 1; b = 2; c = 3; d = 4; Esto quiere decir que podemos escribir varias órdenes en una sola, siempre y cuando vayan separadas por ";", como solíamos hacer en nuestro querido Basic, aunque esto no es factible en otros lenguajes como el Fortran. Fijaos también que todas las variables deben ser declaradas al principio del programa, al igual que en Pascal. Si utilizamos otra variable no declarada, el programa no funcionará. El nombre de la variable es cualquiera, pero no más de 8 caracteres. Además es una regla común, no escribir nunca el nombre de las variables en mayúscula. Sólo se escriben en mayúscula aquellas variables que no sean variables .... quiero decir, aquellas que representen una cantidad fija, que no varia a lo largo del programa (PI,..)
En el número anterior, ya vimos una orden para escribir caracteres en la pantalla: "printf". No es la única forma. Veamos un ejemplo ... main ()
{
char a;
a=getchar();
putchar(a);
}
Este sencillo programa hace lo siguiente:
Vemos esto un poco más despacio: GETCHAR es una función que toma un sólo carácter del terminal (por defecto) y lo envía al programa, mientras que PUTCHAR hace lo contrario, toma un valor del programa y lo envía a la pantalla (por defecto). La orden putchar puede parecer de poca utilidad, pues parece que printf es mucho más versátil, sin embargo, hay ocasiones en que esto no es así. OPERADORES: Son prácticamente los mismos que en Pascal:
Por su parte, las expresiones lógicas son:
Por ejemplo, supongamos que queremos escribir lo siguiente ...
En BASIC era:
En C es ...
Supongo que no os tengo que explicar lo que "if" significa. De todos modos es una sentencia muy importante en C y merece que nos detengamos un poco.
Lo primero a resaltar es que perdemos el "then". Es decir, un programa en Basic que dijera ... IF a<>0
THEN PRINT "a no es cero":contador=contador+1
ELSE PRINT "a es cero"
En C sería ... if(a<>0)
{
printf("a no es cero\n");
contador++;
}
else
printf("a es cero\n");
(contador++ significa lo mismo que contador=contador+1). ¿Está claro?. Fijaos en un detalle, como en el caso de que a no sea cero, hay que ejecutar más de una orden, se pone un símbolo de "{". Otro ejemplo ... if (a < b) {
t = a;
a = b;
b = t;
}
El manejo tan simple que el C hace de estas expresiones, es una gran ventaja sobre el resto de lenguajes, que requieren mucho más trabajo y complicación que en C. Fijaos en otro detalle, aún no he mencionado la orden "GOTO". En C existe esta orden, pero utilizarla es un pecado (como leer horóscopos) y se castiga con 1 mes en el purgatorio... bromas aparte, aunque esta orden exista en C, es algo que no se debe utilizar, tan sólo en un par de ocasiones especiales que ya explicaré. La existencia de esta orden en C es una lacra del resto de lenguajes y que sus autores no se atrevieron a eliminar. El C es un lenguaje estructurado y nunca tiene "saltos". Para acabar por el momento con este comando, dentro de un ELSE podéis colocar todos los "ifs" que queráis. ¿De acuerdo?... if(....)
{
.....
}
else
if(.....)
{
......
}
else
etc...
Un ejemplo más práctico ... main( ) {
char c;
while( (c=getchar( )) != '\0' )
putchar(c);
}
Supongamos que de alguna forma, que más adelante explicaré, le hemos dicho al ordenador que los datos, en vez de ser tomados del terminal (unidad por defecto), los tome de un fichero. Lo que hace el programa anterior en este caso, es tomar todos los datos del fichero, uno a uno, y mostrarlo en la pantalla. Vayamos por partes:El carácter \0 indica el final de un fichero y la orden "while", como ya habréis adivinado se utiliza para hacer bucles (mientras). Luego la frase: while( (c=getchar( )) != '\0' ) significa: Mientras c, que es el carácter extraido del fichero, sea distinto del carácter que indica el fin del fichero, hacer la siguiente línea, y la siguiente línea lo que hace es mostrar simplemente el carácter en la pantalla Fijaos que a la vez que se ha hecho el test, hemos extraido el carácter del fichero ( c=getchar() ). El siguiente programa, no sería válido ... main( ) {
char c;
c=getchar();
while( c != '\0' )
putchar(c);
}
¿Porqué no?, pues porque la primera vez extráe un carácter y hace el test correctamente, pero a la siguiente ya no extrae ninguno pues la orden que hace que lo extraiga (getchar) está fuera del bucle. Para que funcionara habría que meter la orden dentro del bucle, pero esto lo haría menos elegante. Cuidado también con los paréntesis. Si hubiéramos puesto: c = getchar( ) != '\0' Es decir, lo mismo pero sin paréntesis, el resultado huebiera sido totalmente distinto. Las expresiones se evalúan de derecha a izquiera, luego primero comprobaría: getchar( ) != '\0'. Es decir, toma un carácter y chequea si es el final del fichero o no. El resultado (0=falso, 1=cierto) lo almacena en c. Por lo tanto, c sería 0 o 1. Ante la duda, escribe todos los paréntesis que creas necesarios.
Son la suma(+), resta(-), multipilación (*) y división(/) o el resto (%). Es decir, 5%2 nos dá el resto: 1. (para los matemáticos: a%b = a modulo b). Una cosa a resaltar: Puedes operar aritméticamente con los caracteres, de la siguiente forma: char c; c='P'; Si escribimos la orden c = c + 'A' - 'a'; ahora c contiene 'p' (minúscula) Esto es porque opera a través de su código ASCII. /* Este programa convierte un texto en minúsculas a mayúsculas*/
main( ) {
char c;
while( (c=getchar( )) != '\0' )
if( 'A'<=c && c<='Z' )
putchar(c+'a'-'A');
else
putchar(c);
}
De todos modos, esto depende de cada versión, así que no es conveniente de hacer si queremos que nuestro programa sea lo suficientemente compatible Bueno, pues esto es todo por hoy, continuaremos en otra ocasión... |