Fundamentos de la Informática Primero de Ingeniería Técnica Industrial Mecánica, Química, Electricidad y Electrónica Departamento de Tecnologías de la Información PRÁCTICA 3.PRIMEROS PROGRAMAS EN C. 1. De dónde venimos, a dónde vamos, y qué queremos conseguir. A estas alturas de curso usted ya debe saber qué pasos tiene que seguir para resolver un problema computable. Recuerde: 1. Analizar el problema. 2. Encontrar un algoritmo que lo resuelva. 3. Especificar ese algoritmo utilizando alguna técnica formal: pseudocódigo o diagrama de flujo. 4. Implementar el algoritmo especificado en un lenguaje determinado. En nuestro caso en el lenguaje C. También debe entender ya plenamente que un ordenador sólo entiende unos y ceros y que es imprescindible la utilización de un compilador (o un intérprete) que nos permita traducir el lenguaje de Alto Nivel en el cual implementamos nuestro algoritmo a un lenguaje entendible por el ordenador. El paso siguiente en su andadura para aprender a resolver determinados problemas mediante el uso de un ordenador es aprender un lenguaje de programación concreto mediante el cual podamos escribir nuestros programas, es decir, aprender a programar. A la hora de aprender a programar es necesario que entienda que debe aprender tres cosas distintas: 1. Por un lado, deberá aprender una serie de conceptos nuevos que no ha visto hasta ahora en su formación técnica (como son los conceptos de tipo, sentencias de control, etc.) y que por tanto necesitará de un esfuerzo importante para asimilarlos. 2. Además de aprender conceptos nuevos, deberá aprender la sintaxis de un lenguaje de programación. Aprender la sintaxis de un lenguaje de programación es como aprender cualquier otro idioma (inglés, italiano, etc.), usted necesita conocer qué palabras existen en el lenguaje, qué significan y cómo se pueden combinar. 3. Y por último necesita conocer las opciones del entorno de programación que utilizará para escribir programas, sobre todo aquella parte del entorno que le permite depurar el código de un programa, es decir, que le ayuda a encontrar los fallos. Podemos decir que esto no ha hecho más que empezar. A partir de esta práctica usted aprenderá la sintaxis del lenguaje C, pero nunca olvide que el fin de esta asignatura no es aprender a escribir programas en C (que es una condición sine qua non) sino que la función de esta asignatura en su aprendizaje como técnico es aprender una serie de conceptos de programación (1) y aplicarlos con un lenguaje concreto (2) utilizando una herramienta determinada (3). Una vez centrada nuestra evolución y aclarada nuestra finalidad, veamos lo que trataremos en esta práctica. Fundamentos de la Informática Primero de Ingeniería Técnica Industrial Mecánica, Química, Electricidad y Electrónica Departamento de Tecnologías de la Información 2. Introducción a la práctica 3. En esta práctica comprobará si ha entendido plenamente los conceptos vistos en el Tema 4 de teoría, de modo que antes de asistir a las clases de prácticas o de realizar los ejercicios que se proponen debería repasar dicho tema, siguiendo las tres vertientes antes apuntadas: nuevos conceptos, nuevas funciones del lenguaje C y nuevos características del entorno. 3. Conceptos nuevos Los conceptos nuevos introducidos son: 1) 2) 3) 4) 5) 6) Variables y constantes Tipos de datos Módulos o funciones. Tipos de funciones (definidas por el usuario o predefinidas) Biblioteca de funciones Expresiones y operadores 4. Lenguaje C Las nuevas características de C que ha aprendido necesita saber para la realización de esta práctica son: 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) Existencia de palabras reservadas Cómo crear un identificador de variable o constante en C Cómo crear y manejar variables Cómo crear y manejar constantes Qué tipos de datos existen en C Qué calificadores de tipos de datos existen en C Problemas de conversión de tipos en expresiones y asignaciones en C Qué operadores existen en C y su precedencia Significado de la función main( ) Significado y uso de los ficheros de cabeceras en C, en particular stdio.h Cómo introducir comentarios en un programa Funciones de entrada: getch( ), getche( ), gets( ) y printf( ). Funciones de salida: putch( ), putchar( ), puts( ), scanf( ). 5. Entorno Dev-C++. Obviamente en las clases de teoría no recibirá nueva información sobre el entorno de programación, excepto casos excepcionales. En cualquier caso, aconsejamos que investigue las opciones de depuración de Dev-C++, bien a través de la ayuda que ofrece el propio entorno, o bien mediante un libro, o a través de la Web como por ejemplo: http://c.conclase.net/devcpp.php?art=depurar. Eso le ayudará a ejecutar el programa paso a paso y ver el contenido de las variables durante la ejecución del programa, lo que le ayudará a entender los nuevos conceptos. Fundamentos de la Informática Primero de Ingeniería Técnica Industrial Mecánica, Química, Electricidad y Electrónica Departamento de Tecnologías de la Información 6. Ejercicios propuestos Con todo lo que ha visto en el Tema 4 de teoría, usted ya puede comenzar a hacer programas en C. A continuación le ofrecemos una serie de ejercicios que debería usted intentar hacer: 1) Realizar un programa que pida dos números enteros por teclado y a continuación calcule su suma, su diferencia, su producto y su cociente y los muestre por pantalla 2) Realizar un programa que halle la longitud, la superficie y el volumen de la circunferencia. El programa deberá pedir el radio de la circunferencia. Fórmulas: Longitud = 2 * PI * R; Superficie = PI * R2 ; Volumen = 4 * PI * R3 / 3. 3) Realizar un programa que pida el año de nacimiento del usuario y el año actual y calcule el número de días que lleva viviendo (puede suponer que cada año tiene 365 días, y que no existen los años bisiestos). 4) Determine cuáles de los siguientes identificadores son válidos. Si son inválidos explique por qué (pruébelos en el Dev-C++ si tiene dudas): a) registro 1 b) 1registro1 c) archivo_3 d) float e) $impuesto f) _nombre g) nombre A h) 123_opcion i) Belen j) Resultado_total i) N_pasaje3 j) Float 5) A continuación se muestra la sección de declaración de variables de un programa mal escrito en C. Explique cada una de las líneas que componen el siguiente programa con fallos (para explicar cada línea, imagine que el programa no tiene fallos): #include <stdio.h> #define PI = 3.1415 #define EDAD 34 //Función principal int main (void) { /*Ejemplo de un programa en C*/ int a; Int b,c=10,d; short int edad = 39; long int habitantes = 123421; millas = 42341; unsigned char A; char f = ‘w’, opcion = ‘S’, nombre = ‘edo’; char b = 93; char sexo = “M”; float pi = 3.1416; double ganancias; return 0; } Este programa contiene 5 fallos. Encuéntrelos y explique qué es lo que ocurre. Para asegurarse compruébelo de manera práctica, compilándolo con el Dev-C++. Fundamentos de la Informática Primero de Ingeniería Técnica Industrial Mecánica, Química, Electricidad y Electrónica Departamento de Tecnologías de la Información 6) Indique los valores de las variables num1,num2 y num3 en cada una de las líneas de la función principal del siguiente programa. Responda a la pregunta que se formula en el comentario del programa. #include <stdio.h> #define PI 3.1416 //Función principal int main (void ) { //Declaración de variables int num1 = 10; int num2, num3; //Sentencias del programa num2 = 23 ; /*Pregunta: ¿Cuánto vale num3 en este momento? */ num3 = num1 + num2; num1 = num1 + num3; num2 = 3 + num2 ; num3= 0; num1= PI + num2 + num3 + 1; return 0; } Si tiene algún tipo de dudas codifique el programa, compílelo, ejecútelo y utilice la instrucción printf( ) para averiguar el valor de cada variable en cada línea. 7) Corrija el siguiente programa. Para salir de dudas, intente compilarlo. main ( ) /* Este programa es perfecto { // Declaración de variables vacas, patas int; //Programa principal printf (“¿Cuántas patas has contado? \n); scanf (“%c %c”, patas); vacas = patas / 4; printf (“Me parece que debe haber %d vacas |n”, &vacas); getch ( ); } 8) ¿Qué imprimiría este programa? Asegúrese de ello compilándolo. #include <stdio.h> #include <conio.h> int main (void ) { int num = 0; printf (“%i \n”, ++num); printf (“%i \n”, num++); printf (“%i \n”, num--); printf (“%i \n”, num); getch ( ); return 0; } Fundamentos de la Informática Primero de Ingeniería Técnica Industrial Mecánica, Química, Electricidad y Electrónica Departamento de Tecnologías de la Información 9) Escriba un programa que lea cinco notas de exámenes por teclado y calcule la nota media obtenida. Los datos de entrada deben leerse en la misma línea y el resultado deberá mostrarse por pantalla 10) Realice un programa que pida una cantidad en pesetas y devuelva su equivalente en dólares americanos y en euros. Nota: Utilice constantes para guardar el valor cambio en pesetas del dólar y del euro. 11) Realice un programa que calcule el área del triángulo, siguiendo el diagrama de flujo que se muestra a continuación: Base Altura Area = (Base * Altura) / 2 Area 7. Conocimientos mínimos Después de haber realizado esta práctica usted debería responder sin dilación a las siguientes preguntas. Si no es así es que no ha aprendido lo suficiente, de modo que deberá repasar algunos conceptos. • • • • • • • • • • • ¿Qué es un programa? ¿Qué es un lenguaje de programación? Qué diferencias existen entre: Lenguaje C, Compilador de C y Entorno Integrado de Desarrollo Dev-C++ Qué diferencia existe entre una constante y una variable. Formas de definir una constante en C. Ponga ejemplos. ¿Qué es un identificador? ¿y un tipo de datos? Indique cuántos tipos de datos existen en C y por qué se caracteriza cada uno. Ponga ejemplos Qué es una declaración de variable. ¿Qué información se especifica en una declaración de variable? ¿Cómo se declara una variable en C? Ponga ejemplos. ¿Qué es una palabra clave en C? Ponga ejemplos. ¿Puede un identificador en C llamarse igual que una palabra clave? ¿Qué es una expresión? ¿Cuáles son sus componentes? ¿Es obligatorio inicializar las variables con algún valor cuando se definen? ¿y las constantes? ¿Se pueden utilizar variables en un programa en C sin haberlas declarado previamente? ¿Dónde deben ser declaradas las variables? ¿Se puede declarar más de una variable en una misma declaración? En caso afirmativo indicar qué deben cumplir dichas variables. Qué es una sentencia de asignación. ¿Para qué sirve? Fundamentos de la Informática Primero de Ingeniería Técnica Industrial Mecánica, Química, Electricidad y Electrónica Departamento de Tecnologías de la Información • • • • • • • • • • • • • • • ¿Qué es un cualificador de tipo? ¿Para que sirve? Enumere los cualificadores existentes en C y explique su significado. ¿Cómo se determina el tipo de una expresión aritmética cuando los operandos son de tipos diferentes? Ejemplo: Dada una variable entera a y otra flotante f de qué tipo sería a + f. Explicar qué ocurriría en el ejemplo. Explicar que ocurriría de forma genérica fuese cual fuese los tipos de las variables a y f. ¿Cómo funciona la conversión de tipos cuando en una sentencia de asignación se intenta almacenar en una variable una expresión que no es de su tipo? Ejemplo: Dada una variable entera a y otra flotante f inicializada con valor 5.24 ¿cómo funciona la conversión de tipos en expresiones como a = f ? ¿Qué valor se almacena en a? Explicar que ocurriría en el ejemplo. Explicar que ocurriría de forma genérica fuese cual fuese los tipos de las variables a y f. ¿Cómo se puede cambiar el valor de una expresión a un tipo de datos diferentes? ¿Cómo se llama a esto? ¿Qué es una biblioteca, referida a un leguaje de programación? ¿Qué se entiende por biblioteca estándar de C? ¿Por qué si todas las instrucciones en C acaban en punto y coma (;), la instrucción #define no lo lleva? Averigüe para qué sirve la opción del Dev-C++: - Depurar Æ Añadir Watch Cree un programa sencillo donde se use un par de variables e introduzca el nombre de la variable en la ventana Depurar: ¿qué ocurre? ¿Para qué sirve esa ventana? ¿Qué utilidad cree usted que puede darle? Pruebe, con la ventana Depurar visible, a situarse sobre el código del programa e ir pulsando la tecla F7 ¿qué ocurre? Fíjese en la ventana Depurar. ¿Qué valor tiene una variable en C inicialmente en el momento de crearla? (Puede averiguar esta pregunta usando el Dev-C++, basándose en lo visto en las preguntas anteriores) La función system(“cls”) es un función predefinida que nos permite borrar la pantalla ¿ha probado a llamar a esta función antes de crear las variables?, ¿qué ocurre?, ¿y si la llama justo después de la última declaración de variables qué ocurre? ¿por qué? (Puede averiguar esta pregunta usando el Dev-C++) ¿Cuándo utiliza la directiva #define para crear una constante: es necesario utilizar el símbolo de igual (=) para asignarle un valor a la constante? (Puede averiguar la respuesta a esta pregunta usando el Dev-C++) Para qué sirve el operador & Para qué sirve la función scanf( ) Qué ocurre cuando en una función scanf( ) no precedemos a las variables donde guardaremos los valores que se lean por teclado del operador &. Pruebe un par de ejemplo (con y sin &) utilizando la ventana Depurar y la tecla F7. 8. La Frase.... “Su computadora, su compilador y la ayuda de su entorno son buenos maestros. Si no está seguro de cómo funciona una característica de C, escriba un programa de muestra con dichas características, compile y ejecute el programa, y vea qué es lo que ocurre.” H.M. Deitel & P.J. Deitel. Practicas sanas de programación. Cómo programar en C/C++.