Introducción A La Programación, 2022-1 Nota de Clase 05: Programas Secuenciales
Introducción A La Programación, 2022-1 Nota de Clase 05: Programas Secuenciales
Introducción A La Programación, 2022-1 Nota de Clase 05: Programas Secuenciales
23 de febrero de 2022
Colegio de Ciencia y Tecnología UACM
Ahora que hemos estudiado un método de solución de problemas, podemos desarrollar programas de
forma tal que puedan ser automatizados por una computadora. En esta nota, revisaremos el concepto
de programa estructurado y estudiaremos los principales componentes del lenguaje de programación C
tales como la sintaxis, la estructura básica de un programa, interacción con el usuario, aritmética y los
aplicaremos para resolver problemas sencuenciales.
En las notas pasadas, mencionamos que los lenguajes de programación pueden clasificarse de acuerdo al
nivel de abstracción: mientras más cercano esté un lenguaje al hardware de la computadora, más bajo será
el nivel. Sin embargo no existe como tal un esquema de clasificación único.
Podemos clasificar a los lenguajes por su forma de traducción, por el propósito con el cual fueron creados,
por la forma en que son implementados, pero la más común es la de clasificarlos de acuerdo al estilo de
programación también llamado paradigma.
Existen una gran cantidad de estilos de programación, sin embargo, suelen clasificarse en dos grandes
grupos.
Estilo imperativo
La principal estructura de control son los ciclos: while, for, do-while, etc.
1
Las estructuras de control permiten seguir paso a paso las acciones que debe realizar un programa.
Estilo declarativo
El cómo es irrelevante.
Durante el desarrollo de estas notas estaremos trabajando con el lenguaje de programación C que se basa
en una subcategoría del estilo imperativo llamada Programación Estructurada.
Repetición: ejecución de una instrucción (o conjunto) mientras una variable booleana sea
verdadera. Esta estructura lógica también se conoce como ciclo o estructura de iteración.
La demostración a este teorema se realizó usando diagramas de flujo y tomando como base al lenguaje P 00
diseñado por Corrado Böhm un teórico de los Lenguajes de Programación. La demostración queda fuera
de los objetivos de este curso y por lo tanto se omite.
2
5.2.1. Secuencias
Una secuencia es la ejecución de las instrucciones dadas a un programa, una después de otra. Se llaman
programas secuenciales a aquellos programas que sólo hacen uso de estas estructuras [3].
Decisiones monádicas. Dada una pregunta, cuestión, regularmente llamada condición, ejecuta un
fragmento de código si ésta es verdadera. Si la condición es falsa, no se ejecuta nada.
Decisiones diatónicas. Dada una condición, si ésta es verdadera ejecuta un fragmento de código, si
no, ejecuta otro fragmento de código.
Decisiones múltiples. Se tienen múltiples condiciones, cada una con un fragmento a ejecutar en caso
de que alguna sea verdadera.
3
5.2.3. Estructuras de repetición
También llamadas estructuras iterativas, al igual que en las de decisión, se tienen varios tipos:
Controladas al inicio. Se tiene una condición al inicio, si ésta se cumple se ejecuta el código corres-
pondiente y se repite el proceso hasta que la condición sea falsa.
Controladas al final. Se ejecuta un código y se valida una condición, si ésta es verdadera se repite el
proceso hasta que la condición sea falsa.
Continuas. No se tiene una condición de salida, se ejecutan continuamente para mantener un proceso
en ejecución constante, por ejemplo un servidor.
4
5.2.4. Programación en C
De acuerdo con TIOBE1 , en febrero de 2022, es el segundo lenguaje de programación más usado en
el mundo.
Es un lenguaje de programación de propósito general, es decir, se pueden resolver una gran variedad
de problemas con él.
Se ha usado como base para escribir la mayoría de los sistemas operativos existentes debido la
flexibilidad que proporciona de manipular la memoria. Debido a esto, muchos autores lo consideran
un lenguaje de bajo nivel.
En abril de 1985, Brian Kernighan y Dennis Rictchie publicaron un libro llamado The C Programming
Language, que sirvió como documentación del lenguaje durante varios años. En este libro, los autores
mencionan que El primer programa que se debe escribir en cualquier lenguaje es ¡Hola Mundo!. Así que
continuando con esta tradición, escribiremos dicho programa y analizaremos detenidamente cada uno de
los elementos.
1
Comunidad dedicada a estudiar y generar índices acerca de la popularidad de los lenguajes de programación.
https://www.tiobe.com/tiobe-index/
5
5.3.1. Bibliotecas
Los lenguajes de programación, incluyen una serie de operaciones, funciones y comandos definidos en su
núcleo. Sin embargo, existen paquetes con funciones particulares para resolver problemas específicos, por
ejemplo, funciones matemáticas, de manejo de texto, diseño de interfaces gráficas, inteligencia artificial,
análisis de datos, entre otras.
La línea de código
muestra la importación de la biblioteca stdio.h que incluye funciones para comunicarse con el exterior,
llamadas funciones de entrada y salida. En general, para importar cualquier biblioteca se usa la sintaxis:
Mencionaremos más bibliotecas conforme las vayamos requiriendo en ésta y en futuras notas.
5.3.2. Comentarios
Los comentarios se utilizan para documentar el programa y son escritos en el idioma del programador.
Estos comentarios son útiles cuando se trabaja en un equipo de programadores y no se entiende lo que un
fragmento de código realiza.
De una línea. Inician con los símbolos // y al finalizar la línea se cierra el comentario. Todo lo que
esté en la siguiente línea, deja de ser un comentario.
De varias líneas. Se delimitan por los símbolos /* y */. Todo lo que se encuentre dentro de dichos
delimitadores se considera un comentario.
En matemáticas, una función es básicamente una relación que asocia una elementos de un conjunto con
elementos de otro. En programación también se tienen funciones que se definen para cero, uno o más
valores (entradas) y devuelven un único valor (salidas). El comportamiento de las funciones en C difiere
un poco de las funciones matemáticas, discutiremos estas diferencias más adelante en otra nota.
6
int main ( void )
Esta función debe aparecer en todo programa ejecutable y se encarga de controlar el flujo de ejecución (el
orden en que ejecutamos las instrucciones). En su forma más simple, main no recibe nada como entrada,
indicamos esto con void y debe regresar un número entero como salida que indica el estado del programa
al finalizar su ejecución. Usamos el número cero para indicar que todo terminó correctamente.
Adicional a las entradas y salida, toda función debe definir un proceso. Dicho proceso se coloca entre llaves
({ }) que delimitan el cuerpo de la función.
Los símbolos ... pueden ser reemplazados por una o más instrucciones.
5.3.4. Instrucciones
Dentro de main y en general, dentro de cualquier función se incluyen instrucciones que le indican a la
computadora qué acción realizar. Una instrucción puede ser, la declaración de una variable, la modificación
del estado de una variable, la llamada a una función, entre otras. Todas las instrucciones deben terminar
con un punto y coma (;).
La instrucción return, le indica a la función main que debe devolver 0 como resultado.
En todo nuestro hola mundo se han incluido palabras especiales como include, int, void y return y que
están marcadas de color azul. Este tipo de palabras son llamadas palabras reservadas y como su nombre lo
dice, están reservadas para uso exclusivo del lenguaje, es decir, no las podemos usar para definir variables,
nombres de funciones, estructuras, etc.
7
5.3.6. Operaciones de salida
La cadena “¡Hola Mundo!\n” incluye la pareja de símbolos \n que definen una secuencia de escape. Las se-
cuencias de escape sirven para indicarle a las operaciones de salida que deben mostrar un carácter especial:
saltos de línea, tabuladores, entre otras. Algunas secuencias de escape de C se muestran a continuación.[5]
Secuencia Descripción
de escape
\n Salto de línea. Posiciona el cursor al inicio de la
siguiente línea.
\t Tabulador. Mueve el cursor a la siguiente
posición del tabulador.
\\ Diagonal invertida. Inserta una diagonal
invertida en la cadena.
\” Comilla doble. Inserta una comilla doble en la
cadena.
1. Antes que nada, debemos escribir el programa, por ejemplo el código, en un editor de textos o un
ambiente de desarrollo integrado (IDE) por ejemplo, DevC++. Al terminar de escribir el programa,
lo almacenamos en un archivo con extensión .c.
8
¡Hola Mundo !
5.4. Aritmética
Para continuar explicando los elementos básicos de C, veamos otro programa. Este programa pide dos
números al usuario y muestra su suma. La implementación se muestra en el siguiente código.
// Mostrar resultados
printf ( " \ nLa suma de los números es : %d \ n " , suma );
return 0;
}
int a ;
int b ;
int suma ;
9
Definición 5.2. (Variable) Una variable es una ubicación en la memoria de la computadora,
en donde se puede guardar un valor para utilizarlo después en un programa.
Tipo. Un tipo de dato que indica el cómo será el valor que almacenará la variable. Los tipos de datos
básicos son:
Tipo de dato Descripción
short Números enteros de 16 bits
int Números enteros de 32 bits
long Números enteros de 64 bits
float Números flotantes de 32 bits
double Números flotantes de 64 bits
char Caracteres de 8 bits
Identificador. Es el nombre con el cual nos referimos a la variable. Los identificadores son secuencias
de caracteres alfanuméricos y símbolos de guión bajo. La única restricción es que estos no deben
iniciar con un número.
También se dice que C es sensible a mayúsculas, esto quiere decir que identificadores como Variable
y variable representan variables diferentes. Adoptaremos la convención de nombrar las variables
siembre con letras minúsculas.
hacen uso de la función scanf de la biblioteca stdio.h y permite leer valores desde el teclado. Recibe dos
cosas como parámetro:
Un especificador de formato que indica el tipo de dato que se va a recibir y la forma que éste tendrá.
Estos especificadores pueden usarse tanto en las operaciones de entrada como en las de salida y se
tienen los siguientes tipos:
10
Una dirección en memoria dónde almacenar el valor que se ingrese. Para obtener la dirección de
memoria de una variable se usa el símbolo &, por ejemplo con &a obtenemos la dirección en memoria
de la variable a.
La línea de código
suma = a + b ;
muestra una asignación de variable. Las asignaciones se hacen especificando un lado izquierdo y un lado
derecho y éstos son separados mediante el símbolo =.
El lado izquierdo representa el nombre de la variable y el lado derecho el valor que se le asigna a la variable.
En este caso, estamos asignando a la variable suma el resultado de sumar a con b.
<nombre_variable> = <valor>
En la línea de código
suma = a + b ;
Todos estos operadores, son binarios es decir requieren de dos expresiones aritméticas. La división con
números enteros produce un resultado entero. Por ejemplo 7/4 regresa 1. Cualquier parte fraccionaria en
una división de enteros se descarta; no ocurre un redondeo. C proporciona el operador módulo, el cuál
obtiene el residuo después de la división. Por lo tanto 7 %4 produce 3.
Precedencia de operadores
Se pueden usar paréntesis para agrupar los términos en las expresiones de C. Una expresión es un fragmento
de código que se reduce a un valor. Por ejemplo, podemos usar paréntesis para representar el producto de
a con b + c de la siguiente manera:
a * (b + c)
11
Si una expresión contiene paréntesis anidados (paréntesis dentro de paréntesis), como
((a + b) * c)
C aplica los operadores aritméticos en un orden preciso determinado por la llamada precedencia de opera-
dores que dicta el orden de evaluación de los operadores. A continuación se muestra la precedencia de los
operadores aritméticos.
Cuando decimos que se asocian de izquierda a derecha, nos referimos a que se evalúan en el orden en que
van apareciendo, de izquierda a derecha, es decir, a su asociatividad.
Solución
1. y = 2 * 5 * 5 + 3 * 5 + 7
2. y = 10 * 5 + 3 * 5 + 7
3. y = 50 + 3 * 5 + 7
4. y = 50 + 15 + 7
5. y = 65 + 7
6. y = 72
También podríamos usar paréntesis redundantes para hacer que el orden de evaluación de la expresión
sea más claro, recordando que los paréntesis se resuelven de lo más interno a lo más externo.
y = ((((2 * 5) 5) + (3 * 5)) + 7)
12
5.4.5. Impresión con formato
En la línea de código
se muestra una impresión con formato. Las impresiones con formato, requieren que la función printf reciba
varios parámetros, utilizando comas para separarlos. El primer parámetro es una cadena con especificadores
de formato, cada especificador de formato espera un valor a colocar en esa posición y especifica el tipo de
dato de dicho valor. A partir del segundo parámetro se indica el valor a colocar ahí.
En nuestro código, se usa el especificador de formato %d que indica que en esa posición de la cadena se
debe colocar un valor entero y como segundo parámetro se indica la variable suma que le dará valor a ese
especificador.
Para hacer cálculo más sofisticados se puede hacer uso de la biblioteca math.h Algunas funciones de la
biblioteca math.h son:
13
Referencias
[1] Favio E. Miranda, Lourdes del C. González, Notas d e clase del curso de Programación Funcional y
Lógica, Facultad de Ciencias UNAM, Revisión 2012-1.
[2] C. Böhm and G. Jacopini. Flow diagrams, Turing machines and languages with only two formation
rules. Communications of the ACM, 1966.
[3] Jon Maces, Structued Progamming, Notas de Clase, National Center for Computer Animation.
[5] Paul Deitel, Harvey Deitel, C: How to Program, Person Education, Octava edición, 2016.
14