Bitácora del desarrollo de mi clase de C++, en el que publicaré el material de la clase y recibiré comentarios y sugerencias de mis alumnos.

viernes, 26 de enero de 2007

1.3. Secuencia para la creación de un programa (flujo)


1.3.1. Organización de un programa

Enseguida se presenta un programa sencillo escrito en Turbo C++.

/* Un programa sencillo en C*/
#include (stdio.h)
main( )
{
printf(“Suerte a todos en este curso.\n”);
}

La primera línea: /* Un programa sencillo en C*/ Es un comentario. Las líneas de comentario no contienen instrucciones de lenguaje C, sino que sirven al programador para documentar o explicar los programas para mejorar su legibilidad. Los comentarios en C comienzan con /* y terminan con */. Todo lo escrito entre estos símbolos es ignorado por el compilador de C. En este caso el comentario simplemente explica de qué se trata el programa.

La siguiente línea #include especifica una directiva del preprocesador, en este caso se le indica al compilador que incluya una biblioteca.

La línea: main( ), forma parte de todo programa de C. Los paréntesis después de main indican que main es un bloque constructivo del programa (función. Los programas en C contienen una o más funciones, una de las cuales deberá de ser main. Todos los programas empiezan a ejecutarse en la función main.

La llave izquierda { debe iniciar el cuerpo de cada función. Una llave derecha correspondiente debe dar por terminada cada función. Este par de llaves y la porción existente entre ambas se conoce como bloque. El bloque es una unidad importante de programa.

La línea printf(“Suerte a todos en este curso.\n”); Instruye a la computadora para que ejecute una acción. A toda la línea se le llama enunciado. Todo enunciado debe terminar con un punto y coma (terminador de enunciado. En este caso el enunciado instruye a la computadora de que imprima la cadena de caracteres “Suerte a todos en este curso”.

1.3.2 Entradas y salidas simples
C es prácticamente único en su tratamiento de las operaciones de entrada/salida. Esto se debe a que el lenguaje C no define ninguna palabra clave para realizar entrada/salida, sino que se realizan a través de funciones de biblioteca.

En el ejemplo anterior utilizamos la función printf(), la cual está incluida en la biblioteca stdio.h y sirve para tener salida en pantalla de lo que se le indique como argumentos, es decir, lo que se incluya dentro de los paréntesis enseguida de printf()

Cuando un programa utiliza funciones de biblioteca, se debe especificar al compilador cuál o cuáles bibliotecas se utilizarán. Esto se hace mediante la directiva del preprocesador #include indicando cuál es la biblioteca a utilizar. Se requiere una línea #include por cada biblioteca.

En el ejemplo anterior se utilizó el enunciado:
printf(“Suerte a todos en este curso.\n”);

Que instruye a la computadora a que imprima en pantalla lo que se encuentra entre comillas. Sin embargo en este ejemplo los caracteres \n no son mostrados en pantalla, esto se debe a que la función printf cuando encuentra una diagonal invertida dentro del texto a imprimir lo toma como “carácter de escape” y lee el siguiente carácter formando una “secuencia de escape”, es decir una combinación de caracteres que indica que printf debe ejecutar algo extraordinario. En el caso de \n significa un salto de línea, esto es que después de imprimir en pantalla Suerte a todos en este curso. El cursor saltará una línea y quedará en la línea siguiente.

Las secuencias de escape que se pueden utilizar se muestran a continuación:

Secuencia de escape Descripción
\n Nueva línea. Coloca el cursor al principio de la siguiente línea.
\t Tabulador horizontal. Mueve el cursor al siguiente tabulador.
\r Retorno de carro. Coloca el cursor al principio de la línea actual; no avanza a la siguiente línea.
\a Alerta. Hace sonar la campana del sistema.
\\ Diagonal invertida. Imprime un carácter de diagonal invertido.
\” Doble comilla. Imprime un carácter de doble comilla.

Si se necesitara imprimir el mensaje del ejemplo Suerte a todos en este curso en tres líneas el programa quedaría de este modo.

/* Un programa sencillo en C*/
#include (stdio.h)
main()
{
printf(“Suerte\n”); /* Un salto de línea por cada printf */
printf(“a todos en\n”);
printf(“este curso.\n”);
}

Aunque se podría hacer exactamente lo mismo con una sola línea:

/* Un programa sencillo en C*/
#include (stdio.h)
main()
{
printf(“Suerte\na todos en\neste curso.\n”);
/* Se realizan tres saltos de línea dentro de la misma cadena */
}

El siguiente ejercicio mostrará otros ejemplos de esto:

Instrucciones Salida
printf(“me siento \”super\”\n”); me siento “super”
printf(“Si aprendo lenguaje C\n”);
printf(“compraré una computadora.\n”); Si aprendo lenguaje C
compraré una computadora.
printf(“Quiero saber cómo se utiliza \\n\n”); Quiero saber como se utiliza \n
printf(“\”5/4\” es una división\n”); “5/4” es una división
printf(“Son nombres compuestos:\n”);
printf(“José\tAntonio\nJuan\tCarlos\n”);
printf(“Fátima\tYumiko\n”); Son nombres compuestos:
José Antonio
Juan Carlos
Fátima Yumiko

Función scanf()
La función scanf() se utiliza para obtener un valor del usuario. Es una función de entrada que también forma parte de la biblioteca stdio.h. La función scanf() normalmente utiliza dos argumentos, aunque pueden ser más como se verá en algunos ejemplos. El primer argumento es la cadena de control de formato, que indica el tipo de dato que deberá ser escrito por el usuario. El segundo argumento le indica a scanf dónde debe almacenar el valor tecleado por el usuario.

Ejemplo:

#include (stdio.h)
main()
{
int entero1;
printf(“Introduzca un número entero: “);
scanf(“%d”, &entero1);
printf(“El número introducido es: %d\n”, entero1);
}

El resultado de la ejecución es:
Introduzca un número entero: 10
El número introducido es: 10

A continuación se describe la línea:
scanf(“%d”, &entero1);

En la cadena de control de formato el especificador de conversión %d indica que el dato debe ser de un número entero. El signo % es tratado por scanf () y también por printf() como un carácter de escape (como \) y la combinación %d como una cadena de escape (como \n). La letra d significa “entero decimal”.

En el segundo argumento el símbolo & (ampersand) al ser combinado con el nombre de una variable, le indica a scanf() la posición de memoria en la cual está almacenada la variable entero1. La computadora almacena el valor de entero1 en dicha posición. En las llamadas a la función scanf() hay un salto de línea automático, ya que el usuario debe teclear el número y después la tecla ENTER, conocida también como “entrada”, para que scanf() acepte el número tecleado.

Por otro lado debe notarse la línea al inicio del programa:
int entero1;

Lo que hace este enunciado es declarar una variable de tipo entero (sólo podrá contener números enteros) llamada entero1.

En el enunciado
printf(“El número introducido es: %d\n”, entero1);

se están enviando a printf() dos argumentos: el primero es la cadena de control de formato, con la que se indica que además del texto “El número introducido es:”, se está indicando que se imprimirá en pantalla un número entero mediante la cadena de control %d. El número entero que se imprimirá será el valor que haya tomado la variable entero1, que es el mismo que tecleó el usuario y fue asignado con el enunciado scanf().

Es posible introducir mas de un número en una sola llamada a la función scanf(), como se verá en el siguiente ejemplo:

#include (stdio.h)
main()
{
int entero1, entero2;
printf(“Introduzca dos números enteros:\n“);
scanf(“%d%d”, &entero1,&entero2);
printf(“Los números introducidos son:\n%d\ny %d”, entero1, entero2);
}

Salida:
Introduzca dos números enteros:
10
20
Los números introducidos son:
10
20


La visión del usuario al tener que introducir dos números enteros después de un solo mensaje puede resultar confusa. En este caso se envían tres parámetros a la función scanf(), en la cadena de control de formato se incluyen dos secuencias de escape %d, cada una corresponde a un número entero diferente. Los siguientes parámetros &entero1 y &entero2, indican a printf() las variables que almacenarán los valores tecleados por el usuario: entero1 almacena el primer valor introducido por el usuario y entero2 almacena el segundo.

Por otro lado, en el último enunciado se envían tres parámetros también a la función printf(), en la cadena de control de formato tenemos también dos secuencias de escape %d, cada una correspondiente a un valor entero. De este modo el valor de entero1 se mostrará en la línea que sigue a “Los números introducidos son:” y el valor de entero2 se mostrará en la siguiente línea.

Conceptos de memoria
/* Programa de suma */
#include (stdio.h)
#include (conio.h)
main()
{
int entero1, entero2, suma;
printf(“Introduzca un número\n”);
scanf(“%d”, &entero1);
printf(“Introduzca otro número\n”);
scanf(“%d”, &entero2);
suma=entero1+entero2;
printf(“La suma es %d\n”,suma);
getch ();
return 0;
}

La línea int entero1, entero2, suma, es una declaración. Las palabras entero1, entero2 y suma son los nombres de variables. Una variable es una posición de memoria donde se puede almacenar un valor para uso de un programa. Estas variables contendrán valores enteros. Todas las variables deben declararse con un nombre y un tipo de dato enseguida de la llave izquierda que inicia el cuerpo de main antes de que puedan ser utilizadas por el programa.

Los nombres de variables corresponden a localizaciones o posiciones en la memoria de la computadora. Cada variable tiene un nombre, un tipo y un valor.

En el ejemplo, cuando se ejecuta el primer enunciado scanf el valor escrito por el usuario se coloca en la posición entero1. Suponga que el usuario tecleó el 13.

entero1 13
entero2
suma

Para el segundo enunciado scanf, en la dirección entero2 será colocado el segundo número introducido por el usuario. Supongamos un 15.

entero1 13
entero2 15
suma

Mediante el enunciado suma = entero1 + entero2, el valor correspondiente a la suma de los dos enteros es colocado en la dirección de memoria suma.

entero1 13
entero2 15
suma 28

Siempre que se coloca un valor en una posición de memoria, este valor sustituye al valor anterior existente en dicha posición. En el ejemplo los dos enunciados scanf provocaron que un nuevo valor fuera colocado en las posiciones de memoria respectivas o, dicho de otra manera, fueron asignados a las variables correspondientes. En el enunciado que realiza la suma, un nuevo valor es asignado a la variable suma, sin importar si tenía o no otro valor anterior, sin embargo las variables entero1 y entero2 solo fueron leídas y no se les asignó ningún otro valor. Por lo que al final de la ejecución del programa conservan sus valores originales.



0 comentarios:

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio