“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 37
UNIDAD 3 “INTRODUCCIÓN A LA PROGRAMACIÓN DE UN LENGUAJE ESTRUCTURADO ” 3.1.- INTRODUCCIÓN A LA PROGRAMACIÓN Se llama Programación a a la implementación de un algoritmo en un determinado lenguaje de programación, para realizar un programa. es una secuencia no ambigua, finita y ordenada de instrucciones que es Algoritmo han de seguirse para resolver un problema. (Software en inglés) es una secuencia de instrucciones que una Programa computadora puede interpretar y ejecutar. El proceso de creación de software es materia de la i n geni ería del softwar , una soft war e de las ramas propias de la Ingeniería Informática. Según Ni klaus Wir th un programa está formado por algoritmos y estructura de un datos.
Lenguaje de programación es el idioma utilizado para controlar el comportamiento de una máquina, particularmente una computadora. Consiste en un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Hay muchos lenguajes de programación, pero para programar no es necesario conocer todos los lenguajes, es igual que cuando hablamos, podemos comunicarnos en español aunque no sepamos alemán. En la actualidad los lenguajes de programación están escritos para ser comprensibles por el ser humano, a este código se le llama código fuente, pero no es comprendido por la máquina ya que esta solo maneja el lenguaje binario. La compilación es el proceso de traducir un programa en código fuente a programa en código objeto objeto (que usa el lenguaje binario), el programa encargado de compilar se llama compilador. La mayoría de los lenguajes de programación traen su propio compilador. (en inglés Integrated Development Entorno de Desarrollo Integrado Environment 'IDE'): Es un programa compuesto por un conjunto de herramientas para un programador. Estos IDE son programas que sirven para programar, ya sea en un lenguaje de programación o en varios lenguajes. Para esta unidad y el resto de las unidades utilizaremos como lenguaje de programación el lenguaje C y como entorno de desarrollo el Dev-C++.
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 38
3.2.- ESTRUCTURA BÁSICA DE UN PROGRAMA Un programa fuente C es una colección de cualquier número de directrices para el compilador, declaraciones, definiciones, expresiones, sentencias y funciones. Todo programa C debe contener una función nombrada main( ), donde el programa comienza a ejecutarse. Las llaves ({ }) que incluyen el cuerpo de esta función principal, definen el principio y el final del programa. El ejemplo siguiente muestra un programa completo en C, que imprime un texto en pantalla:
1. Comentarios : Los comentarios en C comienzan con la secuencia '/*' y termina con la secuencia '*/'. Todo lo que se encuentre entre estas dos secuencias es omitido por el compilador. 2. Di rectivas al pr eprocesador: La etapa de compilación se realiza en dos fases, una en la que un preprocesador atiende todas las directivas que contiene el código fuente y otra etapa de traducción a código objeto. Todas las directivas al preprocesador comienzan con el caracter '#', en particular la directiva #include instruye al preprocesador para que inserte el contenido del archivo que se pasa como argumento a la directiva para su posterior compilación. 3. Defi ni ción de fu nciones: Se pueden definir cualquier cantidad de funciones, pero al menos debe existir la función main( ). 4. Sentencias: Todas las sentencias terminan en el caracter ';'. El cuerpo de la función main en nuestro caso, consta únicamente de la invocación de la función printf con un "string" constante como argumento. La acción de la función printf es la de imprimir en el dispositivo estándar de salida (en general el monitor)
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 39
3.3.- TIPOS DE DATOS Hay varios tipos fundamentales de datos y se pueden clasif icar en: - Tipos enteros: short, int, long - Tipos carácter: char - Tipos reales: float, double y long double Cada tipo entero y el tipo char puede ser calificado por las palabras clave signed o unsigned, lo que da lugar a tener disponibles los siguientes datos extras: - signed char, unsigned char - signed short, unsigned short - signed int, unsigned int - signed long, unsigned long Un entero calificado signed es un entero con signo, esto es, un número entero positivo o negativo. Un número entero calificado unsigned es un número entero sin signo, el cual es manipulado como un número entero positivo. Tipo char short int long float double long double
Ancho en bytes 1 2 2 ¿? 4 4 8 10
Rango -128 a 127 -32768 a 32767 -32768 a 32767 ¿? -2147483648 a 2147483647 3.4E-38 a 3.4E+38 1.7E-308 a 1.7E+308 1.1E-4932 a 1.1E+4932
3.4.- IDENTIFICADORES Un identificador se utiliza para reconocer o darle nombre a una variable, a una función, etc. - Debe comenzar con una letra minúscula y no deben contener espacios en blanco. - Letras, dígitos y caracteres como el guión bajo ( _ ) están permitidos después del primer carácter. - No puedes usar una palabra reservada como identificador. He aquí la relación de palabras reservadas del lenguaje C: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile y while. - El identificador se debe construir pensando en el dato al que representará o identificará. Por ejemplo, si queremos almacenar la edad de una persona, el identificador edad nos dirá más que usar una x para representar le edad de una persona.
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 40
3.5.- ALMACENAMIENTO, DIRECCIONAMIENTO Y REPRESENTACIÓN EN MEMORIA La memoria es una sucesión de celdas numeradas y una dirección de memoria no es más que un número entero. La declaración de una variable supone la reserva de una zona de memoria lo suficientemente grande para albergar su contenido. Cuando declaramos una variable de tipo int, por ejemplo, se reservan 4 bytes de memoria en los que se almacenará (codificado en complemento a 2) el valor de dicha variable. Modificar el valor de la variable mediante una asignación supone modificar el patrón de 32 bits (4 bytes) que hay en esa zona de memoria. Este programa, por ejemplo,
reserva 8 bytes para albergar dos valores enteros. Imagina que a ocupa los bytes 1000 – 1003 y b ocupa los bytes 1004 – 1007. Podemos representar la memoria así:
Observa que, inicialmente, cuando se reserva la memoria, ésta contiene un patrón de bits arbitrario. La sentencia a = 0 se interpreta como “almacena el valor 0 en la dirección de memoria de a”, es decir, “almacena el valor 0 en la dirección de memoria 1000”. Este es el resultado de ejecutar esa sentencia:
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 41
La asignación b = a + 8 se interpreta como “calcula el valor que resulta de sumar 8 al contenido de la dirección de memoria 1000 y deja el resultado en la dirección de memoria 1004”:
Hemos supuesto que a está en la dirección 1000 y b en la 1004, pero ¿podemos saber en qué direcciones de memoria se almacenan realmente a y b? Sí: el operador & permite conocer la dirección de memoria en la que se almacena una variable:
Al ejecutar el programa tenemos en pantalla el siguiente texto (puede que si ejecutas tú mismo el programa obtengas un resultado diferente):
Normalmente no necesitamos saber en qué dirección de memoria se almacena una variable, así que no recurriremos a representaciones gráficas tan detalladas como las que hemos presentado. Usualmente nos conformaremos con representar las variables mediante cajas y representaremos su valor de una forma más cómodamente legible que como una secuencia de bits. La representación anterior se simplificará, pues, así:
Las direcciones de memoria de las variables se representarán con flechas que apuntan a sus correspondientes cajas:
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 42
Declaración de variables Cada variable de un programa debe declararse antes de ser utilizada. La declaración consiste en enunciar el nombre de la variable y asociarle un tipo. El tipo determina los valores que puede tomar la variable así como las operaciones que con ella pueden realizarse. Ejemplo: int suma, incremento; char caracter;
Una variable puede ser inicializada cuando se declara. Ejemplo: char caracter = ‘a’; int c = 1;
Declaración de constantes Una constante se declara anteponiendo al identificador la palabra const. Ejemplo: const int K = 12; const char LETRA = ‘Z’;
A una constante no se le puede asignar otro valor, es por ello que al declararla debe ser inicializada. Por conveniencia, se recomienda que los nombres de constantes estén integrados por letras mayúsculas.
3.6.- PROPOSICIÓN DE ASIGNACIÓN La operación de asignación está representada por el signo =. En una operación de asignación, el valor de la derecha, es asignado a la variable de la izquierda. Ejemplo: int n, z; n = 8; z = n + 5;
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 43
3.7.- OPERADORES, OPERANDOS Y EXPRESIONES Los operadores son símbolos que indican como son manipulados los datos. Se pueden clasificar en los siguientes grupos: aritméticos, lógicos, relacionales, de asignación y otros.
Oper ador es ar itmé ti cos: Operador + * / %
Operación Suma Resta Multiplicación División Módulo
Ejemplo: int a = 10, b = 3, c; float x = 2.0, y; y = x + a; /* el resultado es 12.0 de tipo float */ c = a / b; /* el resultado es 3 de tipo int */ c = a % b; /* el resultado es 1 de tipo int */ y = a / b; /* el resultado es 3 de tipo int. Se convierte a float para asignarlo a y */
Operador es lógicos: Operador Operación && AND. Da como resultado el valor lógico 1 si ambos operandos son distintos de cero. Si uno de ellos es cero el resultado es el valor lógico 0. Si el primer operando es igual a cero, el segundo operando no es evaluado. || OR. El resultado es 0 si ambos operandos son 0. Si uno de los operandos tiene un valor distinto de 0, el resultado es 1. Si el primer operando es distinto de cero, el segundo operando no es evaluado. ! NOT. El resultado es 0 si el operando tiene un valor distinto de cero, y 1 en caso contrario. Ejemplo: int p = 10, q = 0; p && q da como resultado 0 p || q da como resultado 1 !p da como resultado 0
Operador es de relación: Operador < > <= >= ==
Operación Primer operando menor que el segundo. Primer operando mayor que el segundo. Primer operando menor o igual que el segundo. Primer operando mayor o igual que el segundo. Primer operando igual que el segundo.
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
!=
Pág. 44
Primer operando diferente que el segundo.
Ejemplo: int p, q; float x = 15, y = 18, z = 20; p = x == y; /* resultado p = 0 */ q = (x < y) && (y <= z); /* resultado q = 1 */
Operador es de asignaci ón: Operador ++ -= *= /= %= += -= Ejemplo: x++; x--; i += 2; x *= n – 3;
Operación Incremento. Decremento. Asignación simple. Multiplicación más asignación. División más asignación. Módulo más asignación. Suma más asignación. Resta más asignación.
/* incrementa el valor de x en 1 */ /* decrementa el valor de x en 1 */ /* realiza la operación i = i + 2 */ /* realiza la operación x = x * (n – 3) y no x = x * n – 3 */
Los operandos son las variables, constantes y funciones que intervienen en una expresión. Una expresión es una secuencia de operadores y operandos que especifican una operación determinada. Ejemplo: x = 6 + 7; x = y + 8; x = y + z; x = cantidad * precio; x = 7 * sqrt(a) – b / 2; x = (4 < 5) && (y <= z);
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 45
3.8.- PRIORIDAD DE OPERADORES, EVALUACIÓN DE EXPRESIONES Antes de evaluar expresiones es necesario conocer la j erar quía de los que maneja C: operadores Operador Significado () Paréntesis ! ++ -Not, incremento y decremento * / % Multiplicación, división y módulo + Suma, resta < <= > >= Menor que, menor o igual que, mayor que, menor o igual que == != Igual, diferente && And || Or = *= /= %= Asignación += -=
Ejemplos de evaluación de expresiones (paso a paso):
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 46
3.9.- ELABORACIÓN DE PROGRAMAS (SECUENCIALES) Enunciado: Hacer un programa que permita convertir kilogramos en gramos. 1. Inicie Dev-C++ 2. Elija el menú Archivo – Nuevo – Archivo Fuente:
3. Escriba en zona de comentario los datos ref erentes al programa, el autor y la fecha:
4. Escriba una línea después el código siguiente (sin los números de línea):
Las líneas 6 y 7 le indican a C que “incluya” las librerías stdio y conio, las cuales van a ser utilizadas por nuestro programa. La línea 11 declara dos variables ( kg y gr) de tipo real ( float). La línea 14 imprime un mensaje en la pantalla a través de la sentencia printf . Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 47
La línea 15 lee un valor flotante desde el teclado y lo asigna a la variable kg. Para ello utiliza a la sentencia scanf . La línea 18 contiene la expresión que convierte kilogramos en gramos, colocando el resultado en la variable gr. La línea 21 imprime los gramos convertidos que se localizan en la variable gr. La línea 22 permite hacer una pausa para que el usuario pueda visualizar la pantalla con el resultado. La sentencia getch la proporciona conio. 5. Grabe el programa eligiendo el menú Archivo – Guardar como. En la ventana que aparece seleccione la carpeta en donde desea guardar su programa y proporciónele un nombre, en este caso escriba Secuencial1. 6. Ahora proceda a compilar para que el compilador de C nos indique si todo está bien o si debemos hacer alguna corrección. Para ello elija el menú Ejecutar – Compilar. Si surge algún error corríjalo y vuelva a realizar este paso. 7. Por último, ejecute el programa eligiendo el menú Ejecutar – Ejecutar. Deberá aparecer una ventana en donde le solicita introducir los kilogramos. Escriba 3.5 y pulse enter. El programa calculará los gramos y le dará una salida como esta:
8. Pulse enter para cerrar la ventana anterior y regresar al Dev-C++ 9. Para salir del entorno de desarrollo elija el menú Archivo – Salir. 10. Con el explorador de Windows busque y abra la carpeta en donde grabó el programa. 11. Haga doble click en el archivo Secuencial1 y observe cómo sin necesidad de abrir el entorno de desarrollo podemos ejecutar un programa previamente compilado:
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 48
Tomando como guía el programa anterior construya los siguientes programas: 2. Hacer un programa que calcule e imprima el área de un rectangulo (area = base * altura). 3. Hacer un programa que calcule e imprima la cantidad de dinero que una persona pagará por concepto de predial 2015. El predial aumentó 3.5% respecto del pago hecho en el 2014. 4. Hacer un programa que calcule el promedio obtenido por un alumno sabiendo que cursó las materias de matemáticas, ciencias naturales y español. La calificación de cada materia está en el rango de 0 a 100. 5. Un hospital recibirá el presupuesto de gastos para este año y el director general del hospital desea saber la cantidad de dinero que le otorgará a cada una de las secciones del hospital, sabiendo que a maternidad le otorgará el 22%, a cirugía el 41%, a medicina general el 13% y a medicina interna el resto del presupuesto, respectivamente. 6. Realice un programa que calcule e imprima el área de un círculo (area = pi * radio2) 7. Realice un programa que convierta temperaturas de grados Centígrados a grados Farenheit (farenheit = grados centigrados * 9 / 5 + 32) 8. Realice un programa que calcule el salario semanal final que recibirá un trabajador, sabiendo que el salario se obtiene de lo que ganó diariamente (de lunes a sábado) y un bono correspondiente al 13% de lo que ganó. 9. Hacer un programa que permita calcular e imprimir la tabla de un número entero introducido por el teclado. Ejemplo, si el número introducido fuera un cinco: 5X1=5 5 X 2 = 10 ... 5 X 10 = 50
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 49
APARTADO A “ENTRADA Y SALIDA”
Salida La función de impresión de información en pantalla utilizada habitualmente es printf . printf es una función disponible al incluir stdio.h en el programa. En su forma de uso más simple, printf permite mostrar una cadena por pantalla:
La salida sería:
La función printf no añade un salto de línea automáticamente, si deseas que haya un salto de línea, deberás escribir \n en el lugar que desees hacer el salto, ejemplo:
La salida sería:
Para imprimir números enteros se utiliza el formato %d, para números flotantes %f, para un solo carácter %c y para una cadena %s. Ejemplo:
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 50
La salida sería:
Observe que el valor real se imprime por default con 6 dígitos después del punto decimal. Si gustas puedes indicarle al printf que imprima la cantidad de dígitos después del punto que tu quieras, por ejemplo, 2:
La salida sería:
Observe que inclusive redondea la cantidad. La sentencia printf tiene muchas más prestaciones, por ejemplo, puedes indicar si lo que quieres imprimir quede justificado a la izquierda o a la derecha, que maneje un ancho especificado por ti, que rellene de ceros no significativos, que a los valores numéricos les anteponga el signo + o -, etc. Queda a tu responsabilidad el investigar dichas situaciones.
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 51
Entrada La lectura de datos desde el teclado se realiza a través de la función scanf . La función scanf lee datos, los interpreta de acuerdo con el formato indicado y los almacena en las variables especificadas. Cada variable debe ser del tipo especificado en el formato. Por ejemplo, el siguiente programa lee desde el teclado un entero y un real:
La salida sería:
El formato %c lo utiliza scanf para leer un carácter. Ejemplo:
La salida sería:
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 52
Para leer una cadena scanf utiliza el formato %s. Ejemplo:
NOTA: Como una cadena es un arreglo de caracteres, no es necesario anteponer el símbolo & antes del nombre de la variable, observe que no escribimos &texto, sino solamente, texto. La salida sería:
Observe que aunque el usuario escribió la cadena HOLA MUNDO, scanf solo asignó HOLA a la variable texto. Esto es así porque el formato %s permite tomar de la entrada todos los caracteres hasta encontrar un espacio en blanco. Si desea que scanf tome todo el texto incluyendo los espacios entonces utilice el formato %[^\n]. Ejemplo:
La salida sería:
Algoritmos y lenguajes de programación
Ing. Industrial
“
”
Unidad 3 Introducción a la programación de un lenguaje estructurado
Pág. 53
Existe otra manera de leer cadenas, utilizando la función gets. Ejemplo:
La salida sería:
Otra manera de leer un carácter es utilizando la función getchar. Ejemplo:
La salida sería:
También pueden leer un carácter con las funciones getch y getche pertenecientes a la librería conio.h. getch lee un carácter del teclado sin visualizarlo. getche lee un carácter del teclado visualizándolo.
Algoritmos y lenguajes de programación
Ing. Industrial