domingo, 22 de mayo de 2016

Capítulo 23: Variables en C.


Diario de un programador día 67 (2da. clase)

Variables en C.

Al igual que en java, en C las variables deben ser declaradas y se hacen de la misma forma que en java (más info mirar acá)., excepto para declarar cadenas de caracteres, ya que en C no existe el tipo String. Ya hablaremos de eso más tarde. Entonces, siguiendo la misma línea que se aprendió en java, declararemos una variable como entero y la mostraremos en pantalla. Luego se explicará la sintaxis.
EL siguiente programa simplemente mostrará una variable en pantalla.

#include<stdio.h>
int main(void)
{
  int num = 5;
  printf("%d", num);
  return 0;
}


Como dije, este programa lo que hace es mostrar un valor, en este caso el valor de la variable “num” en pantalla. Como se puede apreciar, la forma de declarar una variable entera es similar a como lo hicimos en java. En la línea siguiente está la función printf(“%d”, num); Para poder mostrar el contenido de una variable en una función printf, se debe utilizar lo que se conoce como modificador de formato. Por ejemplo, para poder mostrar el contenido de una variable entera, se debe utilizar el modificador de formato %d, como alternativa también se puede utilizar %i, ambos son válidos para mostrar valores enteros. El  modificador de formato, será reemplazado por la variable ubicada después de la coma. Un nuevo ejemplo de esto sería lo siguiente

#include<stdio.h>
int main(void)
{
  int num = 5;
  printf("El valor de la variable es %d", num);
  return 0;
}

Esto mostrara como resultado “El valor de la variable es 5”.



Se pueden agregar tantos modificadores como queramos.

#include<stdio.h>
int main(void)
{
  int num = 5;
  int num2 = 10;
  printf("El valor de la variable num es %d y el num2 es %d", num, num2);

  return 0;
}

Esto muestra “El valor de la variable num es 5 y el num2 es 10"


Como se puede apreciar, el orden en que aparecen las variables, dependen del orden en que se agreguen después de la coma.
Ya que tenemos dos variables, podemos operar con ellas, ya sea realizando la operación en el lugar donde se encuentran...

printf("La suma de ambas variables es %d", num + num2);

O, crear una variable donde almacenar dicho resultado

int num3 = num + num2;
printf("La suma de ambas variables es %d", num3);

Los modificadores de formato comúnmente utilizados son:


%d, %i = Para números enteros
%f = Para decimales
%c = Para caracteres
%s = Para cadena de caracteres

Del mismo modo, los tipo de datos básico comúnmente utilizados son

int = enteros
float = decimal
double = decimal de doble precisión
char = carácter
char variable[] = cadena de caracteres

Las variables con cadenas son un caso especial. Veamos algunos ejemplos.

#include<stdio.h>
int main(void)
{
  char letra = 'a';
  printf("%c", letra);

  return 0;
}


Lo que hace este programa es mostrar por pantalla la letra a. El tipo de dato char, solamente puede almacenar un carácter, en este caso la letra a. Como se puede apreciar, el contenido de la variable va encerrado en comillas simples y su modificador de formato es %c
Para poder mostrar una palabra, lo que se conoce como cadena de caracteres, se debe utilizar un arreglo de caracteres de esta forma

#include<stdio.h>
int main(void)
{
  char palabra[] = "hola";
  printf("%s\n", palabra);

  return 0;
}


En este caso,  para poder crear la cadena, la variable debe ir acompañada de corchetes []. El contenido de la variable va encerrado en comillas dobles y su modificador de formato es %s. En algunos tutoriales indican que se usa el corchete vacío (como en el ejemplo), mientras que en otros, indican que el corchete va con un número de igual cantidad más uno, que el número de letras que tenga la palabra. Por ejemplo, en este caso, la variable palabra, tiene escrita la palabra “hola” que tiene 4 letras, por lo tanto, en los corchetes debería ir un 5, creando un arreglo de caracteres de esta forma:

char palabra[5] = “hola”;//4 letras + 1

Otro ejemplo puede ser este:

char palabra[6] = “tango”;// 5 letras + 1

¿Qué pasa si tiene menos números de los indicados? Pues entonces, el programa empezará a mostrar caracteres extraños, debido a que  no es capaz de mostrar la palabra completa al no tener suficiente memoria asignada en el arreglo.


Esto es un ejemplo de que el hecho de que un programa compile, no siempre significa que está bien o que mostrará los resultados que esperamos.
¿Y qué pasa si el arreglo es mucho más grande?, pues, nada a la vista, ya que se puede imprimir la palabra, pero se desperdiciaría memoria al crear un arreglo más grande de lo que se necesita. Si algún día encuentro alguna diferencia entre usar un arreglo vacío y otro asignado, colocaré aquí mismo una actualización. Mientras tanto, seguiré asignando con arreglos vacíos por un tema de comodidad, ya que es algo incómodo tener que estar contando letra por letra para saber de qué tamaño será el arreglo.
Ya que hemos visto números y palabras, entonces aquí un ejemplo (que para algunos podría parecer obvio, pero para otros no) de ambos mostrados en una función printf

#include<stdio.h>
int main(void)
{
  char animal[] = "perro";
  int cachorros = 5;
  printf("Tengo un %s con %d cachorros", animal, cachorros);

  return 0;
}

Y el resultado sería:
Tengo un perro con 5 cachorros.





Algo que debo mencionar sobre estas variables, es que de momento no se podrán crear variables de tipo cadena de caracteres vacías para luego asignarle un valor. O sea que, si alguien quiere hacer lo siguiente no va a funcionar:

char animal[];
animal[] = "perro";

Ni siquiera funcionará si asignan números a los corchetes. Para lograr que funcione este tipo de asignación, se tendrán que usar punteros, pero esa es una clase que se verá mucho más adelante. 

Esto es todo por ahora. Nos vemos para la próxima, no olviden practicar y mucho, que C a veces se puede complicar.


Gustavo J. Cerda Nilo
Diciembre 2015, Mayo 2016




No hay comentarios:

Publicar un comentario

C++ El apuntador This

El apuntador This En C++, cada objeto tiene acceso a su propia dirección a través de un puntero o apuntador denominado This. Lo...