Mado 17 Fpv3
Mado 17 Fpv3
Mado 17 Fpv3
Versión: 03
Manual de prácticas del
Página 1/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Índice de prácticas
No Nombre
2 GNU/Linux
4 Diagramas de flujo
5 Pseudocódigo
7 Estructuras de selección
8 Estructuras de repetición
9 Arreglos unidimensionales
10 Arreglos multidimensionales
11 Funciones
Actividades:
▪ Crear un repositorio de almacenamiento en línea.
▪ Realizar búsquedas avanzadas de información especializada.
Introducción
Control de Versiones
En estos sistemas, el registro de los cambios de los archivos se almacena en una base de
datos local. (Figura 1)
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 6/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Estos sistemas están pensados para poder trabajar con colaboradores, por lo que un
servidor central lleva el control de las versiones y cada usuario descarga los archivos
desde ese servidor y sube sus cambios al mismo. (Figura 2)
En estos sistemas, los usuarios tienen una copia exacta del proyecto, así como todo el
registro de las versiones, de esta manera si el servidor remoto falla o se corrompe, los
usuarios pueden restablecer el servidor con sus propias copias de seguridad, además los
usuarios pueden obtener los cambios en los archivos directamente del equipo de otros
usuarios. (Figura 3)
Git
Es un sistema de control de versiones de código libre, escrito en C, multiplataforma
creado en 2005 por Linus equipo Torvalds, desarrollado por la necesidad de tener un
sistema de control de versiones eficiente para el desarrollo del Kernel de Linux. Hoy en
día es el sistema de control de versiones más usado y adoptado en el mundo.
Repositorio
Repositorio Local
Es aquel que se encuentra en nuestro propio equipo y solo el dueño del equipo tiene
acceso a él.
Repositorio Remoto
Es aquel que está alojado en la nube, esto quiere decir, que se encuentra en un servidor
externo, el cual puede ser accedido desde Internet y que nos va a permitir tener siempre
a la mano nuestros archivos. Algunos de estas plataformas son: github.com,
bitbucket.org o gitlab.com, todos ofreciendo diferentes características.
Github
Operaciones en un repositorio
Agregar
Esta operación agrega archivos en nuestro repositorio para ser considerados en el nuevo
estado guardado del proyecto. Por lo general son los archivos creados o que tienen
nuevas modificaciones.
Commit
Esta operación se encarga de registrar los archivos agregados para generar un nuevo
estado (o versión) en nuestro repositorio, un commit puede registrar uno o más archivos,
y van acompañados de una explicación de lo que agregamos o cambiamos.
Ramas (Branches)
Nuestro repositorio se puede ver como un árbol, donde la rama principal (generalmente
llamada master) contiene nuestro trabajo revisado y funcionando. Una rama es una
bifurcación de otra rama en la cual podemos realizar nuevas modificaciones y pruebas
sin afectar los archivos que ya funcionan, una vez que hayamos terminado las nuevas
modificaciones sobre esa rama, se puede fusionar (merge) con la rama padre y ésta
tendrá los nuevos cambios ya aprobados.
Almacenamiento en la nube
Este tipo de herramientas hace posible editar un documento y compartirlo con uno o
varios contactos, de tal manera que todos pueden trabajar grupalmente en un solo
documento.
Por lo tanto, los documentos creados puedan ser vistos, editados, compartidos y
descargados en cualquier sistema operativo, ya sea Windows, Mac OS o Linux, y en
cualquier dispositivo con capacidad de procesamiento como teléfonos inteligentes,
tabletas y computadoras. (Figura 4)
Google Forms
Google Drive cuenta con una aplicación para recolectar información usando formularios
(Forms), una particularidad de la hoja de cálculo.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 10/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Se puede generar una serie de preguntas que pueden ser mandadas y contestadas por
un grupo de personas. También proporciona un resumen con gráficas de los datos
obtenidos del formulario.
OneNote
Por otro lado, a través de OneDrive de Microsoft se puede utilizar la aplicación OneNote.
El editor OneNote es muy amigable para realizar apuntes como si se ocupara una libreta
de papel, pero con la diferencia de que todo se queda guardado en la nube.
Dropbox
Dropbox es una herramienta que sirve para almacenar cualquier tipo de archivo digital
en Internet.
Para utilizarlo es necesario contar con una cuenta de correo para darse de alta en el sitio.
Una vez realizado el registro se puede acceder al sitio, ya sea por medio de su interfaz
web o descargando la aplicación que puede ser instalada en cualquier sistema operativo
(teléfonos inteligentes, tabletas y computadoras).
Dropbox cuenta con aplicaciones de Microsoft Office Online para editar documentos.
Los documentos también pueden ser compartidos con otros usuarios, ya sea
compartiendo la carpeta que los contiene o por medio de un enlace.
Buscadores de Internet
▪ Yahoo utiliza WebRank, a partir de una escala del 1 al 10, mide la popularidad de
una página web.
▪ Bing utiliza un algoritmo que analiza diversos factores, como son el contenido de
una página, el número y calidad de los sitios web que han enlazado la página, así
como las palabras clave contenidas en el sitio.
Figura 6. Comando or
Nota: no es necesario agregar acentos en la búsqueda.
2. Para encontrar todos los datos pertenecientes sólo a la jornada del futbol
mexicano:
Las comillas dobles ("<oración>") al inicio y al final de la búsqueda indican que sólo se
deben buscar páginas que contengan exactamente dichas palabras. En este caso se
agregó el conector del a la búsqueda para encontrar exactamente la frase.
Figura 8. Comando +
Calculadora
Convertidor de unidades
El buscador de Google también se puede utilizar para obtener la equivalencia entre dos
sistemas de unidades. (Figura 13)
Gráficas en 2D
Es posible graficar funciones, para ello simplemente se debe insertar ésta en la barra de
búsqueda. También se puede asignar el intervalo de la función que se desea graficar.
(Figura 14)
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 16/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Google académico
Google imágenes
Actividad en casa
Creación de cuenta en github.com
En la sección de Commit new file, haremos una explicación del archivo creado,
posteriormente damos click al botón de Commit new file. (Figura 26)
Con esto habremos creado un nuevo archivo en nuestro repositorio, la acción de hacer
commit es indicarle al Control de versiones que hemos terminado una nueva
modificación, dando una breve explicación Al momento de hacer el commit, nuestro
proyecto se encuentra en un nuevo estado. En la pantalla principal del repositorio se
puede ver la lista de archivos en nuestro repositorio con la explicación del commit que
agregó o modificó a ese archivo. (Figura 27)
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 25/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Seleccionamos los dos archivos de nuestro equipo y hacemos el commit, explicando los
archivos agregados. (Figura 28)
Modificando un archivo
Agregamos en la siguiente línea nuestro número de cuenta y en una línea nueva nuestro
correo. Hacemos el commit explicando qué cambios hicimos. (Figura 29)
En la página principal del repositorio dar click a los commits, en este momento debe ser
4.
En esta sección se pueden revisar los cambios y estados en nuestro repositorio, Analizar
qué pasa al darle click al nombre de cada commit.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 27/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividad Final
Referencias
1. http://rypress.com/tutorials/git
2. https://git-scm.com/book/es/v1/Empezando-Acerca-del-control-de-
versiones
3. https://www.google.com.mx/
4. http://scholar.google.es/
5. http://www.google.com/imghp
6. http://www.youtube.com/watch?v=wKJ9KzGQq0w
7. http://www.youtube.com/watch?v=nxi9c6xBb0U
8. https://www.dropbox.com/
9. http://bc.unam.mx/cultural/inicio/vis_virt/main.html
10. http://www.inah.gob.mx/index.php/catalogo-paseos-virtuales
11. https://www.google.com/maps/views/home
12. https://maps.google.com/
13. http://translate.google.com/
14. http://www.google.com/earth/
15. http://news.google.com/
16. https://adwords.google.com/
17. http://books.google.com/
18. https://groups.google.com/
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 29/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividades:
▪ Iniciar sesión en un sistema operativo GNU/Linux y abrir una “terminal”
▪ Utilizar los comandos básicos para navegar por el sistema de archivos.
▪ Emplear comandos para manejo de archivos.
Introducción
En cuanto a la Interfaz con el usuario, las hay de tipo texto y de tipo gráfico. En la
actualidad, es común trabajar con la interfaz gráfica ya que facilita mucho seleccionar la
aplicación a utilizar; inclusive esta selección se hace “tocando la pantalla” (técnica
touch).
Software libre
Un software libre es aquel que se puede adquirir de manera gratuita, es decir, no se tiene
que pagar algún tipo de licencia a alguna casa desarrolladora de software por el uso de
éste.
Además, que un software sea libre implica también que el software viene acompañado
del código fuente, es decir, se pueden realizar cambios en el funcionamiento del sistema
si así se desea.
Linux se distribuye bajo la Licencia Pública General de GNU por lo tanto, el código
fuente tiene que estar siempre accesible y cualquier modificación o trabajo derivado debe
tener esta licencia.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 32/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Licencia GNU
La Licencia Pública General de GNU o GNU General Public License (GNU GPL) es una
licencia creada por la Free Software Foundation en 1989 y está orientada principalmente
a proteger la libre distribución, modificación y uso de software.
Su propósito es declarar que el software cubierto por esta licencia es software libre y
protegerlo de intentos de apropiación que restrinjan esas libertades a los usuarios.
Kernel de GNU/Linux
El kernel o núcleo de linux se puede definir como el corazón del sistema operativo. Es el
encargado de que el software y el hardware del equipo se puedan comunicar. Sus
componentes son los que se mencionaron en la introducción de esta práctica.
De la Figura 1, se puede observar que entre el kernel y las aplicaciones existe una capa
que permite al usuario comunicarse con el sistema operativo y en general con la
computadora, a través de programas que ya vienen instalados con la distribución de
Linux (Debian, Ubuntu, Fedora, etc.) y trabajan ya sea en modo gráfico o en modo texto.
Uno de estos programas es el Shell.
Comandos básicos
Para trabajar en Linux utilizando comandos, se debe abrir una “terminal” o “consola”
que es una ventana donde aparece la “línea de comandos” en la cual se escribirá la orden
o comando. La terminal permite un mayor grado de funciones y configuración de lo que
queremos hacer con una aplicación o acción en general respecto a un entorno gráfico.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 34/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
El proceso de abrir una terminal varía dependiendo del entorno gráfico. Por lo general
hay un área de “aplicaciones” donde se selecciona terminal o consola. (Figura 3)
Una vez teniendo una terminal abierta, ya podemos introducir comandos. (Figura 4)
Figura 4: Terminal
Esto es, el nombre del comando, seguido de algunas banderas (opciones) para modificar
la ejecución de este y, al final, se puede incluir un argumento (ruta, ubicación, archivo,
etcétera) dependiendo del comando. Tanto las opciones como los argumentos son
opcionales.
El comando ls permite listar los elementos que existen en alguna ubicación del sistema
de archivos de Linux. Por defecto lista los elementos que existen en la ubicación actual;
Linux nombra la ubicación actual con un punto (.) por lo que
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 36/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
ls
ls .
El comando ls realiza acciones distintas dependiendo de las banderas que utilice, por ejemplo,
si se utiliza la opción l se genera un listado largo de la ubicación actual:
ls –l
Es posible listar los elementos que existen en cualquier ubicación del sistema de archivos, para
ello hay que ejecutar el comando especificando como argumento la ubicación donde se desean
listar los elementos. Si queremos ver los archivos que se encuentran en la raíz, usamos:
ls /
Para ver los usuarios del equipo local, revisamos el directorio home que parte de la raíz (/):
ls /home
Tanto las opciones como los argumentos se pueden combinar para generar una ejecución más
específica:
ls –l /home
man ls
ls /usr
Esto es, el argumento se inicia con / indicando que es el directorio raíz, seguido de usr
que es el nombre del directorio. Cuando especificamos la ubicación de un archivo
partiendo de la raíz, se dice que estamos indicando la “ruta absoluta” del archivo.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 37/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Si bien el punto (.) es para indicar la ubicación actual, el doble punto (..) se utiliza para
referirse al directorio “padre”. De esta forma si deseamos listar los archivos que
dependen de mi directorio padre se escribe el siguiente comando:
ls ..
o
ls ../
Se pueden utilizar varias referencias al directorio padre para ir navegando por el sistema
de archivos, de tal manera que se realice la ubicación de un archivo a través de una ruta
relativa. De la Figura 2, si nuestra cuenta depende de home, la ruta relativa para listar los
archivos del directorio usr es:
ls ../../usr
Con los primeros dos puntos se hace referencia al directorio home, con los siguientes dos
puntos se refiere al directorio raíz, y finalmente se escribe el nombre del directorio usr.
touch nombre_archivo[.ext]
mkdir nombre_carpeta
Para crear una carpeta en nuestra cuenta, que tenga como nombre “tareas” se escribe el siguiente
comando:
mkdir tareas
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 38/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
cd nombre_carpeta
cd tareas
Ahora, si deseamos situarnos en la carpeta de inicio de nuestra cuenta, que es la carpeta padre,
escribimos el comando:
cd ..
pwd
El comando find permite buscar un elemento dentro del sistema de archivos, su sintaxis es la
siguiente:
Al comando find hay que indicarle en qué parte del sistema de archivos va a iniciar la búsqueda.
En el ejemplo anterior la búsqueda se inicia en la posición actual (uso de . ). Además, utilizando
la bandera –name permite determinar la cadena a buscar (comúnmente es el nombre de un
archivo).
clear
cp archivo_origen archivo_destino
Si queremos una copia del archivo datos.txt con nombre datosViejos.txt en el mismo directorio,
entonces se escribe el comando
cp datos.txt datosViejos.txt
Ahora, si requerimos una copia de un archivo que está en la carpeta padre en la ubicación actual
y con el mismo nombre, entonces podemos emplear las rutas relativas de la siguiente forma:
cp ../archivo_a_copiar .
Es muy importante indicar como archivo destino al punto (.) para que el archivo de copia se
ubique en el directorio actual.
mv ubicación_origen/archivo ubicación_destino
Si queremos que un archivo que está en la carpeta padre, reubicarlo en el directorio actual y
con el mismo nombre, entonces podemos emplear las rutas relativas de la siguiente forma:
mv ../archivo_a_reubicar .
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 40/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Este comando también puede ser usado para cambiar el nombre de un archivo, simplemente se
indica el nombre actual del archivo y el nuevo nombre:
mv nombre_actual_archivo nombre_nuevo_archivo
rm nombre_archivo
rm nombre_carpeta
Cuando la carpeta que se desea borrar contiene información, se debe utilizar la bandera –f para
forzar la eliminación. Si la carpeta contiene otras carpetas, se debe utilizar la opción –r, para
realizar la eliminación recursiva.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 41/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Bibliografía
M.C. Edgar E. García Cano M.C. Cintia Quezada Reyes M.C. Laura Sandoval
Ing. Jorge A. Solano Gálvez Ing. Maricela Castañeda Montaño
Perdomo
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 43/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividades:
• A partir del enunciado de un problema, identificar el conjunto de entrada y el
conjunto de salida.
• Elaborar un algoritmo que resuelva un problema determinado (dado por el
profesor), identificando los módulos de entrada, de procesamiento y de salida.
Introducción
La Ingeniería de Software provee métodos que indican cómo generar software. Estos
métodos abarcan una amplia gama de tareas:
“Un marco de referencia que contiene las actividades y las tareas involucradas en el
desarrollo, la explotación y el mantenimiento de un producto de software, abarcando
desde la definición hasta la finalización de su uso”
La Figura 1 muestra las actividades, también nombradas etapas, que se realizan en el ciclo
de vida del software.
DEFINICIÓN DE
NECESIDADES
MANTENIMIENTO
ANÁLISIS
Y EVOLUCIÓN
VALIDACIÓN DISEÑO
PRUEBAS CODIFICACIÓN
Solución de problemas
Dentro del ciclo de vida del software, en el análisis se busca comprender la necesidad,
es decir, entender el problema.
El análisis es el proceso para averiguar qué es lo que requiere el usuario del sistema de
software (análisis de requisitos). Esta etapa permite definir las necesidades de forma
clara y concisa (especificación de requisitos).
Por lo tanto, la etapa del análisis consiste en conocer qué es lo que está solicitando el
usuario. Para ello es importante identificar dos grandes conjuntos dentro del sistema: el
conjunto de entrada y el conjunto de salida. En la Figura 2 se muestra de manera
esquemática los componentes del sistema.
El conjunto de entrada está compuesto por todos aquellos datos que pueden alimentar
al sistema.
El conjunto de salida está compuesto por todos los datos que el sistema regresará como
resultado del proceso. Estos datos se obtienen a partir de los datos de entrada.
La unión del conjunto de entrada y el conjunto de salida forman lo que se conoce como
el dominio del problema, es decir, los valores que el problema puede manejar.
Figura 2. Sistema
Ejemplo 1
E ⊂ R1 , donde
num ∈ E de (−∞, ∞) − {0}
Un posible conjunto de salida son los valores enteros 0 o 1, donde 0 indica que el valor
es positivo y 1 indica el valor es negativo.
Otro posible conjunto de datos de salida son los valores booleanos o lógicos Verdadero o
Falso, donde Verdadero indica que el valor es positivo y Falso indica que el valor es
negativo; o viceversa, Verdadero indica que el valor es negativo y Falso indica que el valor
es positivo.
Figura 3. Ejemplo 1
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 47/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Ejemplo 2
E, E ′ ⊂ R1 , donde
num1 ∈ E de (−∞, ∞),
num2 ∈ E ′ de (−∞, ∞) − {num1}
S ⊂ R1 , donde 𝑟 ∈ S de (−∞, ∞)
Figura 4. Ejemplo 2
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 48/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Ejemplo 3
RESTRICCIONES: El número de entrada debe ser entero positivo o cero. No puede ser
negativo.
E ⊂ N1 , donde
num ∈ E de [1, ∞) ⋃ {0}
S ⊂ N1 ; donde
res ∈ S de [1, ∞)
Figura 5. Ejemplo 3
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 49/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Algoritmos
Una vez realizado el análisis, es decir, ya que se entendió qué es lo que está solicitando
el usuario y ya identificado el conjunto de entrada y el conjunto de salida, se puede
proceder al diseño de la solución, esto es, a la generación del algoritmo.
Las principales características con las que debe cumplir un algoritmo son:
• Preciso: Debe indicar el orden de realización de paso y no puede tener
ambigüedad.
• Definido: Si se sigue dos veces o más se obtiene el mismo resultado.
• Finito: Tiene fin, es decir tiene un número determinado de pasos.
• Correcto: Cumplir con el objetivo.
• Debe tener al menos una salida y ésta debe de ser perceptible
• Debe ser sencillo y legible
• Eficiente: Realizarlo en el menor tiempo posible
• Eficaz: Que produzca el efecto esperado
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 50/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Por tanto, un buen algoritmo debe ser correcto (cumplir con el objetivo) y eficiente
(realizarlo en el menor tiempo posible), además de ser entendible para cualquier
persona.
Módulo de Entrada
•Representa los datos que se requieren para resolver el problema. Estos datos se
pueden solicitar al usuario, leer de un archivo, consultar de una base de datos, etc.
Módulo de Procesamiento
•Representa las operaciones necesarias para obtener un resultado a partir de los
datos de entrada.
Módulo de Salida
•Permite mostrar los resultados obtenidos a partir del módulo de
procesamiento de datos. Los resultados pueden mostrarse en diversos sitios: en la
pantalla, en un archivo, en una base de datos, etc.
Variables
Ejemplos de algoritmos
Ejemplo 1
SOLUCIÓN:
1. Solicitar un número real y almacenarlo en una variable
2. Si el número ingresado es cero, se regresa al punto 1.
3. Si el número ingresado es diferente de cero, se validan las
siguientes condiciones:
3.1 Si el número ingresado es mayor a 0 se puede afirmar que
el número es positivo.
3.2 Si el número ingresado es menor a 0 se puede afirmar que
el número es negativo.
Prueba de escritorio
Una prueba de escritorio es una matriz formada por los valores que van adquiriendo
cada una de las variables del algoritmo en cada iteración. Una iteración es el número de
veces que se ejecuta una parte del algoritmo y permite ver los valores que van
adquiriendo las variables en cada repetición.
Iteración X Salida
1 5 El número es positivo
Iteración X Salida
1 -29 El número es negativo
Iteración X Salida
1 0 -
2 0 -
3 0 -
4 100 El número es positivo
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 53/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Ejemplo 2
SOLUCIÓN:
1. Solicitar un primer número real y almacenarlo en una variable.
2. Solicitar un segundo número real y almacenarlo en otra variable.
3. Si el segundo número real es igual al primer número real, se regresa al
punto 2.
4. Si el segundo número real es diferente al primer número real, se validan
las siguientes condiciones:
4.1 Si se cumple con la condición de que el primer número es mayor al
segundo número, entonces se puede afirmar que el primer número es el
mayor de los números.
4.2 Si se cumple con la condición de que el segundo número es mayor al
primer número, entonces se puede afirmar que el segundo número es el
mayor de los números.
Iteración X Y Salida
1 5 6 El segundo número es el mayor de
los números
Iteración X Y Salida
1 -99 -222.2 El primer número es el mayor de los
números
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 54/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Iteración X Y Salida
1 15 15 -
2 15 15 -
3 15 15 -
4 15 10 El primer número es el mayor de los
números
Ejemplo 3
SOLUCIÓN:
1. Solicitar un número entero y almacenarlo en una variable.
2. Si el número entero es menor a cero regresar al punto 1.
3. Si el número entero es mayor o igual a cero se crea una variable entera
contador que inicie en 2 y una variable entera factorial que inicie en 1.
4. Si la variable contador es menor o igual al número entero de entrada se
realiza lo siguiente:
4.1 Se multiplica el valor de la variable contador con el valor de la
variable factorial. El resultado se almacena en la variable
factorial.
4.2 Se incrementa en uno el valor de la variable contador.
4.3 Regresar al punto 4.
5. Si la variable contador no es menor o igual al número entero de entrada se
muestra el resultado almacenado en la variable factorial.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 55/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Prueba de escritorio. (La variable X almacena el número entero del que se calculará el
factorial)
Ejercicio 1
Algoritmo
1. Dibuja una V invertida. Empieza desde el lado izquierdo, sube, y baja hacia el
lado derecho, no levantes el lápiz.
2. Ahora dibuja una línea en ángulo ascendente hacia la izquierda. Debe cruzar la
primera línea más o menos a 1/3 de la altura. Todavía no levantes el lápiz del
papel.
3. Ahora, dibuja una línea horizontal hacia la derecha. Debe cruzar la V invertida
más o menos a 2/3 de la altura total. Sigue sin levantar el lápiz.
4. Dibuja una línea en un ángulo descendente hasta el punto de inicio. Las líneas
deben unirse.
5. Ahora ya puedes levantar el lápiz del papel. Has terminado la estrella de 5
puntas.
Ejercicio 2
Algoritmo
1. Empieza dibujando un círculo con un compás. Coloca un lápiz en el compás.
Coloca la punta del compás en el centro de una hoja de papel.
2. Ahora gira el compás, mientras mantienes la punta apoyada en el papel. El lápiz
dibujará un círculo perfecto alrededor de la punta del compás.
3. Marca un punto en la parte superior del círculo con el lápiz. Ahora, coloca la
punta del compás en la marca. No cambies el radio del compás con que hiciste el
círculo.
4. Gira el compás para hacer una marca en el propio círculo hacia la izquierda. Haz
una marca también en el lado derecho.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 57/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
5. Ahora, coloca la punta del compás en uno de los puntos. Recuerda no cambiar el
radio del compás. Haz otra marca en el círculo.
6. Continúa moviendo la punta del compás a las otras marcas, y continúa hasta que
tengas 6 marcas a la misma distancia unas de otras. Ahora, ya puedes dejar tu
compás a un lado.
7. Usa una regla para crear un triángulo que empiece en la marca superior del
círculo. Coloca el lápiz en la marca superior. Ahora dibuja una línea hasta la
segunda marca por la izquierda. Dibuja otra línea, ahora hacia la derecha,
saltándote la marca de la parte más baja. Complementa el triángulo con una línea
hacia la marca superior. Así completarás el triángulo.
8. Crea un segundo triángulo empezando en la marca en la base del círculo. Coloca
el lápiz en la marca inferior. Ahora conéctala con la segunda marca hacia la
izquierda. Dibuja una línea recta hacia la derecha, saltándote el punto superior.
Completa el segundo triángulo dibujando una línea hasta la marca en la parte
inferior.
9. Borra el círculo. Has terminado de dibujar tu estrella de 6 puntos.
Referencias
• Raghu Singh (1995). International Standard ISO/IEC 12207 Software Life Cycle
Processes. Agosto 23 de 1996, de ISO/IEC. Consulta: Junio de 2015. Disponible en:
http://www.abelia.com/docs/12207cpt.pdf
• Carlos Guadalupe (2013). Aseguramiento de la calidad del software (SQA). [Figura
1]. Consulta: Junio de 2015. Disponible en:
https://www.mindmeister.com/es/273953719/aseguramiento-de-la-calidad
delsoftware-sqa
• Andrea S. (2014). Ingeniería de Software. [Figura 2]. Consulta: Junio de 2015.
Disponible en: http://ing-software-verano2014.blogspot.mx
• Michael Littman. (2012). Intro to Algorithms: Social Network Analysis. Consulta
Junio de 2015, de Udacity. Disponible en:
https://www.udacity.com/course/viewer#!/c-cs215/l-48747095/m-48691609
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 58/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
M.C. Edgar E. García Cano M.C. Cintia Quezada Reyes M.C. Laura Sandoval
Ing. Jorge A. Solano Gálvez M.C. Laura Sandoval Montaño
Montaño
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 59/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividades:
• Elaborar un diagrama de flujo que represente la solución algorítmica de un
problema, en el cual requiera el uso de la estructura de control condicional.
• Elaborar la representación gráfica de la solución de un problema, a través de un
diagrama de flujo, en el cual requiera el uso de la estructura de control iterativa.
Introducción
2. Las líneas utilizadas para indicar la dirección del flujo del diagrama deben ser
rectas, verticales u horizontales, exclusivamente (Figura 2).
3. Todas las líneas utilizadas para indicar la dirección del flujo del diagrama deben
estar conectadas a un símbolo (Figura 3).
8. A cada símbolo solo le puede llegar una línea de dirección de flujo (Figura 4).
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 62/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Las estructuras de control secuenciales son las sentencias o declaraciones que se realizan
una a continuación de otra en el orden en el que están escritas (Figura 6).
Ejemplo
La Figura 8 muestra el diagrama de flujo que usa la estructura de control condicional
simple donde, dados dos números enteros asignados a dos variables, revisa si el valor
asignado a la variable a es el mayor.
Prueba de escritorio:
Instrucción a b salida
a←3 3
b←2 2
a>b
a es mayor
Ejemplo
La Figura 10 muestra el diagrama de flujo que usa la estructura de control condicional
SI-DE LO CONTRARIO donde, dados dos números enteros asignados a dos variables,
muestra la variable que almacena el valor mayor.
Prueba de escritorio:
Instrucción a b salida
a←3 3
b←2 2
a>b
a es mayor
Ejemplo
La Figura 12 muestra el diagrama de flujo que usa la estructura de control condicional
SELECCIONAR-CASO donde, de acuerdo con el valor de la variable a, escribe un
mensaje.
Prueba de escritorio:
Instrucción a salida
a←1 1
Iniciar sesión
Ejemplo
Figura 14. Diagrama de flujo que usa la estructura de control iterativa MIENTRAS
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 72/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Prueba de escritorio:
Esta estructura asegura que, por lo menos, se realiza una vez el bloque de la estructura,
ya que primero las realiza y después pregunta por la condición.
Ejemplo
La Figura 16 muestra el diagrama de flujo que usa la estructura de control iterativa
HACER- MIENTRAS el cual escribe el valor de la variable enteroValorInicial y luego
realiza el incremento de esta variable para posteriormente evaluar la condicional, esto
se repite mientras la condición sea verdadera.
Figura 16. Diagrama de flujo que usa la estructura de control iterativa HACER-
MIENTRAS
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 74/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Prueba de escritorio:
Bibliografía
M.C. Edgar E. García Cano M.C. Cintia Quezada Reyes M.C. Laura Sandoval
Ing. Jorge A. Solano Gálvez M.C. Laura Sandoval Montaño
Montaño
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 77/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividades:
• Elaborar un pseudocódigo que represente la solución algorítmica de un
problema en el cual requiera el uso de la estructura de control de flujo
condicional.
• A través de un pseudocódigo, representar la solución algorítmica de un
problema en el cual requiera el uso de la estructura de control iterativa.
Introducción
Una vez que un problema dado ha sido analizado (se obtiene el conjunto de datos de
entrada y el conjunto de datos de salida esperado) y se ha diseñado un algoritmo que lo
resuelva de manera eficiente (procesamiento de datos), se debe proceder a la etapa de
codificación del algoritmo.
Para que la solución de un problema (algoritmo) pueda ser codificada, se debe generar
una representación de éste. Una representación algorítmica elemental es el
pseudocódigo.
Sintaxis de pseudocódigo
1. Alcance del programa: Todo pseudocódigo está limitado por las etiquetas de
INICIO y FIN. Dentro de estas etiquetas se deben escribir todas las instrucciones
del algoritmo.
2. Palabras reservadas con mayúsculas: Todas las palabras propias del pseudocódigo
deben de ser escritas en mayúsculas.
4. Lectura / escritura: Para indicar lectura de datos se utiliza la etiqueta LEER. Para
indicar escritura de datos se utiliza la etiqueta ESCRIBIR.
Ejemplo
ESCRIBIR "Ingresar la altura del polígono"
LEER altura
<nombreVariable>:<tipoDeDato>
Ejemplo
contador: ENTERO
producto: REAL
continuar: BOOLEANO
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 79/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
<nombreVariable>[cantidad]:<tipoDeDato>
Ejemplo
Existe un tipo de dato compuesto, es decir, que puede contener uno o más tipos de
datos simples diferentes. Este tipo de dato se conoce como registro o estructura y su
sintaxis es la siguiente:
<nombreRegistro>:REG
<nombreVariable_1>:<tipoDeDato>
...
<nombreVariable_N>:<tipoDeDato>
FIN REG
Para crear una variable tipo registro se debe indicar el nombre del registro y el
nombre de la variable. Para acceder a los datos del registro se hace uso del operador
punto (.).
Ejemplo
domicilio:REG
calle: CADENA
número: ENTERO
ciudad: CADENA
FIN REG
Es posible crear variables constantes con la palabra reservada CONST, la cual indica
que un identificador no cambia su valor durante todo el pseudocódigo. Las
constantes (por convención) se escriben con mayúsculas y se deben inicializar al
momento de declararse.
Ejemplo
Operadores aritméticos: suma (+), resta (-), multiplicación (*), división (/), división
entera (div) esto ya es en programación hay que omitirla , módulo (mod),
exponenciación (^), asignación (:=).
Operadores lógicos: igualdad (=), Y-lógica o AND (&), O-lógica u OR (|), negación
o NOT (!), relaciones de orden (<, >, <=, >=) y diferente (<>).
En la notación de camello (llamada así porque parecen las jorobas de un camello) los
nombres de cada palabra empiezan con mayúscula y el resto se escribe con
minúsculas. Existen dos tipos de notaciones de camello: lower camel case que en la
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 81/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
cual la primera letra de la variable inicia con minúscula y upper camel case en la cual
todas las palabras inician con mayúscula. No se usan puntos ni guiones para separar
las palabras (a excepción de las constantes que utilizan guiones bajos). Además, para
saber el tipo de variable se recomienda utilizar un prefijo.
Ejemplo
realAreaDelTriangulo: REAL → lower camel case
EnteroRadioCirculo: REAL → upper camel case
calcularArea()
obtenerPerimetro()
Las estructuras de control secuenciales son las sentencias o declaraciones que se realizan
una a continuación de otra en el orden en el que están escritas.
Ejemplo
INICIO
x : REAL
x := 5.8
x := x * 2
FIN
SI condición ENTONCES
[Acciones]
FIN SI
Ejemplo
INICIO
a,b: ENTERO
a := 3
b := 2
SI a > b ENTONCES
ESCRIBIR "a es mayor"
FIN SI
FIN
Prueba de escritorio:
Instrucción a b salida
a := 3 3
b := 2 2
a>b
a es mayor
SI expresión lógica
ENTONCES
[Acciones ENTONCES]
DE LO CONTRARIO
[Acciones DE LO CONTRARIO]
FIN DEL SI
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 83/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Ejemplo
INICIO
a,b:ENTERO
a := 3
b := 5
SI a > b
ENTONCES
ESCRIBIR "a es mayor"
DE LO CONTRARIO
ESCRIBIR "b es mayor"
FIN DEL SI
FIN
Prueba de escritorio:
Instrucción a b salida
a := 3 3
b := 2 5
a>b
b es mayor
SELECCIONAR (variable) EN
CASO valor1 ->
[Acciones]
CASO valor2 ->
[Acciones]
CASO valor3 ->
[Acciones]
DEFECTO ->
[Acciones]
FIN SELECCIONAR
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 84/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Ejemplo
INICIO
a :ENTERO
a := 1
SELECCIONAR (a) EN
CASO 1 ->
ESCRIBIR "Iniciar sesión."
CASO 2 ->
ESCRIBIR "Registrarse."
CASO 3 ->
ESCRIBIR "Salir."
DEFECTO ->
ESCRIBIR "Opción inválida."
FIN SELECCIONAR
FIN
Prueba de escritorio:
Instrucción a salida
a := 1 1
Iniciar sesión
Ejemplo
INICIO
valorInicial,valorFinal:ENTERO
valorInicial:=0
valorFinal:=3
MIENTRAS valorInicial < valorFinal
ESCRIBIR valorInicial
valorInicial := valorInicial + 1
FIN MIENTRAS
FIN
Prueba de escritorio:
Instrucción valorInicial valorFinal salida
valorInicial := 0 0
valorFinal := 3 3
valorInicial < valorFinal
0
valorInicial := valorInicial +1 1
valorInicial < valorFinal
1
valorInicial := valorInicial +1 2
valorInicial < valorFinal
2
valorInicial := valorInicial +1 3
valorInicial < valorFinal
HACER
[Acciones]
MIENTRAS condición
Ejemplo
INICIO
valorInicial,valorFinal:ENTERO
valorInicial:=0
valorFinal:=3
HACER
ESCRIBIR valorInicial
valorInicial := valorInicial + 1
MIENTRAS valorInicial < valorFinal
FIN
Prueba de escritorio:
Instrucción valorInicial valorFinal salida
valorInicial := 0 0
valorFinal := 3 3
0
valorInicial := valorInicial +1 1
valorInicial < valorFinal
1
valorInicial := valorInicial +1 2
valorInicial < valorFinal
2
valorInicial := valorInicial +1 3
valorInicial < valorFinal
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 87/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Bibliografía
Actividades:
● Crear un archivo de texto (utilizando algún editor) y escribir un programa en
lenguaje C que contenga variables de diferentes tipos, asignación de valores
(por lectura desde la entrada estándar o asignación directa) y escritura del
valor de las variables en la salida estándar
● Compilar un código fuente y ejecutarlo.
● Modificar y actualizar un programa usando un editor.
● Elaborar expresiones relacionales/lógicas en un programa en C y mostrar el
resultado de su evaluación.
Introducción
Una vez que un problema dado ha sido analizado (se identifican los datos de entrada y
la salida deseada), que se ha diseñado un algoritmo que lo resuelva de manera eficiente
(procesamiento de datos), y que se ha representado el algoritmo de manera gráfica o
escrita (diagrama de flujo o pseudocódigo) se puede proceder a la etapa de codificación.
Entorno de C
Una característica importante del lenguaje C es que es muy poderoso ya que combina
las características de un lenguaje de alto nivel (facilidad de programación), con uno de
bajo nivel (manejo más preciso de una máquina); por lo que se han creado variantes
que permiten programar miles de dispositivos electrónicos en el mundo con sus
respectivos compiladores.
Editores
vi nombre_archivo[.ext]
Es el modo por defecto de vi cuando se abre. Las teclas presionadas ejecutan diversas
acciones predeterminadas y no se puede editar el texto libremente. Los comandos son
sensitivos a las mayúsculas y a las minúsculas. Algunos ejemplos son:
● ↑ o k mueve el cursor hacia arriba.
● ↓ o j mueve el cursor hacia abajo.
● ← o h mueve el cursor hacia la izquierda.
● → o l mueve el cursor hacia la derecha.
● 1G lleva el cursor al comienzo de la primera línea.
● G lleva el cursor al comienzo de la última línea.
● x borra el carácter marcado por el cursor.
● dd borra o corta la línea donde está el cursor.
● ndd donde n es la cantidad de líneas que se borrarán o cortarán después del
cursor.
● D borra o corta desde la posición de cursor hasta el final de la línea.
● dw borra o corta desde la posición del cursor hasta el final de una palabra.
● yy copia la línea donde está el cursor.
● p pega un contenido copiado o borrado.
● u deshace el último cambio.
GNU nano
nano nombre_archivo[.ext]
Una vez en el editor, en la parte inferior se pueden observar los comandos básicos. Si
se presiona la tecla F1 es posible visualizar la ayuda con la lista de todos comandos que
existen.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 94/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Otros
Existen otros editores actualmente como: Visual Studio Code, Atom, Sublime Text,
Notepad, entre otros.
Compiladores
Una vez codificado un programa en C en algún editor de texto, éste debe ser leído por
un programa que produzca un archivo ejecutable. A este programa se le conoce como
compilador. Para el caso del lenguaje C el compilador traduce el código fuente del
programa a código ejecutable.
Un programa en C tampoco puede ser escrito de manera arbitraria debe respetar una
serie de reglas para que el compilador pueda entenderlas y realizar su función. Un
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 95/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
estándar muy común es ANSI C y existen diferentes extensiones como ISOC99 y GNU
C que representan mejoras para el estándar original. Realizar un programa en dicho
estándar garantiza que puede ejecutarse en cualquier máquina siempre y cuando exista
un compilador hecho para ella. A veces, el programador no sigue un estándar o lo
desconoce, usando características no estándar que, a la hora de usar el mismo
programa para otra máquina no funciona, teniendo que realizar adaptaciones que se
reflejan en costos. Por ejemplo, es muy común empezar a desarrollar programas en C
en plataforma Windows en procesadores x86 usando características propias. Al
trasladar, por alguna necesidad, dicho programa a plataforma GNU/Linux con
procesador ARM, el programa no funcionará porque no se siguió el estándar que
garantiza universalidad para el lenguaje C.
Es muy común cometer algún error al elaborar un programa en C como son faltas a la
sintaxis que indica el estándar, usar elementos que no se habían declarado, utilizar
funciones de una biblioteca sin haberla especificado, entre muchos otros que se irán
conociendo en un futuro. La mayoría de estos errores provocan que el compilador no
pueda generar el programa ejecutable y muestre en la línea de comandos de qué error
se trata y en qué línea pudo haberse producido.
Cuando el compilador señala un error no cabe más que invocar algún editor de texto,
revisar cuidadosamente el programa y corregir. Se debe verificar la coherencia total del
programa para evitar tener que repetir este paso de manera continua.
Existe también una versión modificada que puede ejecutar y crear programas para
plataformas Windows en un paquete llamado MinGW (Minimalist GNU for Windows).
gcc calculadora.c
Esto creará un archivo a.out (en Windows a.exe) que es el programa ejecutable
resultado de la compilación.
Si se desea que la salida tenga un nombre en particular, debe definirse por medio del
parámetro -o de gcc. Por ejemplo, para que se llame calculadora.out (en Windows
calculadora.exe), se escribe en la línea de comandos:
Code Blocks: Este es un software libre, multiplataforma. Code Blocks es una alternativa
a Dev-C++ y desarrollada mediante el propio lenguaje C++. Sus capacidades son
bastante buenas y es muy popular entre los nuevos programadores. Se puede encontrar
separado del compilado o la versión “mingw” que incluye g++ (gcc para C++).
Xcode: Este es uno de los mejores IDE para programar en Mac con el compilador gcc
e Interface Builder.
Ejecución
La ejecución es la etapa que sigue después de haber compilado el programa. Una vez
compilado el programa, se puede distribuir para equipos que ejecuten el mismo sistema
operativo y tengan la misma plataforma de hardware (tipo de procesador, set de
instrucciones y arquitectura en general). Los pasos para realizar la ejecución dependen
del sistema operativo y del entorno.
./calculadora.out
Es difícil realizar un programa con interfaz gráfica universal y que respete ANSI C, ya
que el entorno depende del sistema operativo y las herramientas que provee.
Es muy importante tratar de que un programa sea íntegro y optimizado para garantizar
su correcto funcionamiento y en ocasiones, el prestigio de su autor.
Lenguaje de programación C
Un programa en C consiste en una o más funciones, de las cuales una de ellas debe
llamarse main( ) y es la principal.
/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* Authors: Julio A. de León, Jorge A. Solano and Hugo Zuñiga
*/
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 100/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Comentarios
Es una buena práctica en cualquier lenguaje de programación realizar comentarios para
documentar el programa. En C existen dos tipos de comentarios: el comentario por línea
y el comentario por bloque.
El comentario por línea inicia cuando se insertan los símbolos // y termina con el salto
de línea (hasta donde termine el renglón).
El comentario por bloque inicia cuando se insertan los símbolos /* y termina cuando se
encuentran los símbolos */. Cabe resaltar que el comentario por bloque puede abarcar
varios renglones.
Programa1.c
#include <stdio.h>
int main() {
// Comentario por línea
/* Comentario por bloque
que puede ocupar
varios renglones */
// Este código compila y ejecuta
/* pero no muestra salida alguna
debido a que un comentario
ya sea por línea o por bloque */
// no es tomado en cuenta al momento
// de compilar el programa,
/* sólo sirve como documentación en el */
/*
código fuente
*/
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 101/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
NOTA. Al iniciar el programa se deben agregar todas las bibliotecas que se van a utilizar
en el mismo, es decir, funciones externas necesarias para ejecutar el programa. En
lenguaje C la biblioteca estándar de entrada y salida está definida en stdio.h (standard
input(i) output(o)) y provee, entre otras, funciones para lectura y escritura de datos que
se verán a continuación.
El conjunto de caracteres en C
Del mismo modo que en nuestro lenguaje habitual utilizamos un conjunto de caracteres
para construir instrucciones que tengan significado, los programas que se realicen en C
se escriben utilizando un conjunto de caracteres formado por lo siguiente:
• Las 26 letras minúsculas del alfabeto inglés (a b c d e f g h i j k l m n o p q r s t u v
w x y z).
• Las 26 letras mayúsculas (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z).
• Los 10 dígitos (1 2 3 4 5 6 7 8 9 0).
• Los símbolos especiales (@ ^ { } [ ] ( ) & $ % # ~ ‘ “ / ? ; : _ . , = / * - +).
• El espacio en blanco o barra espaciadora.
Palabras reservadas
Las palabras reservadas (Tabla 1) son palabras que tienen un significado predefinido
estándar y sólo se pueden utilizar para su propósito ya establecido; no se pueden utilizar
como identificadores definidos por el programador. En lenguaje C son las siguientes:
Tipos de datos
El lenguaje C ofrece distintos tipos de datos (Tabla 2), cada uno de los cuales se puede
encontrar representado de forma diferente en la memoria de la computadora.
2 bytes o una
palabra (varía de
int Cantidad entera -32 767 a 32 767
un compilador a
otro)
Número en punto
flotante (un
número que
float 1 palabra (4 bytes) 3.4E-38 a 3.4 E38
incluye punto
decimal y/o
exponente)
Número en punto
flotante de doble
precisión (más
2 palabras (8
double cifras significativas 1.7E-308 a 1.7E308
bytes)
y mayor valor
posible del
exponente)
Existen algunos calificadores que se aplican a ciertos tipos de datos básicos. short
(corto) y long (largo), califican a enteros, por ejemplo: short int y long int, en estos casos
se puede omitir la palabra int. Los calificadores signed (con signo) y unsigned (sin signo)
se usan para los tipos entero y carácter, por ejemplo: unsigned char, unsigned long int,
signed short; si se omiten estos calificadores, por defecto se considera signed. Por
último, el calificador long también se puede usar con double: long double.
Los datos de tipo flotante o doble siempre tienen signo, por lo que no se debe usar el
calificador de signo en estos tipos de datos básicos.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 104/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa2.c
#include <stdio.h>
int main() {
short enteroNumero1 = 115;
signed int enteroNumero2 = 55;
unsigned long enteroNumero3 = 789;
char caracterA = 65;
char caracterB = ‘B’;
En donde cadena de control hace referencia a una cadena de caracteres que contiene
información sobre el formato de la salida y argl, arg2, ... , argn son argumentos que
representan los datos de salida.
En la cadena de control contiene dos tipos de objetos: caracteres ordinarios que son
copiados al flujo de salida y especificaciones de conversión; estos últimos causan la
conversión y escritura de los argumentos que le siguen a la cadena de control, de
acuerdo con el orden de aparición.
En su forma más sencilla, cada especificación de conversión estará formado por el signo
de porcentaje, seguido de un carácter de conversión que indica el tipo de dato
correspondiente.
Programa3.c
#include <stdio.h>
int main() {
//Declaración de variables
int entero;
float flotante;
double doble;
char caracter;
//Asignación de variables
entero = 14;
flotante = 3.5f;
doble = 6.8e10;
caracter = ‘A’;
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 108/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Donde cadena de control hace referencia a una cadena de caracteres que contiene
cierta información sobre el formato de los datos y argl,arg2,..., argn son argumentos que
representan los datos (Tabla 5).
Los argumentos pueden ser variables o arreglos y sus tipos deben coincidir con los
indicados por caracteres de conversión correspondientes en la cadena de control.
Cada nombre de variable debe ser precedido por un ampersand (&); sin embargo, los
nombres de arreglos (se verán en lecciones posteriores) no deben ir precedidos por el
ampersand.
Programa4.c
#include <stdio.h>
int main()
{
int entero;
float flotante;
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 110/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa5.c
#include <stdio.h>
int main()
{
int enteroNumero;
char caracterA = 65; // Convierte el entero a carácter ASCII.
double puntoFlotanteNumero;
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 111/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Operadores
Los operadores aritméticos que maneja el lenguaje C se describen en Tabla 6:
/ División 15 / 4 3.75
% Módulo 4%2 0
| Operador OR 3|2 3
~ Complemento ar-1 ~2 1
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 112/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Expresiones lógicas
! No !p
|| O opc == 1 || salir != 0
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 113/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa6.c
#include <stdio.h>
int main()
{
short ocho, cinco, cuatro, tres, dos, uno;
printf("\n");
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 114/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Bibliografía
M.C. Edgar E. García Cano M.C. Cintia Quezada Reyes M.C. Laura Sandoval
Ing. Jorge A. Solano Gálvez Montaño
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 116/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividades:
• Elaborar expresiones lógicas/condicionales utilizadas en las estructuras de
selección y realizar su evaluación.
• Elaborar un programa en lenguaje C para cada estructura de selección.
Introducción
Las estructuras de selección (o condicionales) permiten realizar una u otra acción con
base en una expresión lógica. Las acciones posibles a realizar son mutuamente
excluyentes, es decir, solo se puede ejecutar una a la vez dentro de toda la estructura.
El software presente en esta práctica es libre bajo la licencia GPL de GNU, es decir, se
puede modificar y distribuir mientras se mantenga la licencia GPL.
/*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 117/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
if (expresión_lógica)
{
// bloque de código a ejecutar
}
Programa1.c
#include<stdio.h>
int main ()
{
int a, b;
a = 3;
b = 2;
if (a > b)
{
printf("\ta (%d) es mayor a b (%d).\n",a,b);
}
printf("\t\vEl programa sigue su flujo.\n");
return 0;
}
Programa2.c
#include<stdio.h>
int main()
{
if (0)
{
printf("Esta instrucción nunca se ejecuta\n");
printf("porque la condición siempre es falsa (0).\n");
}
if (-38) // El bloque de código de esta estructura if
// solo consta de una línea porque los comentarios
// no son tomados en cuenta por el compilador.
// La condición siempre es verdadera (diferente de 0)
printf("Esta instrucción siempre se ejecuta.\n");
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 119/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
if (expresión_lógica)
{
// bloque de código a ejecutar
// si la condición es verdadera
}
else
{
// bloque de código a ejecutar
// si la condición es falsa
}
Es posible anidar varias estructuras if-else, es decir, dentro de una estructura if-else tener
una o varias estructuras if-else.
Este programa permite validar si un número es par o impar. El número se lee desde la
entrada estándar (el teclado).
Programa3.c
#include <stdio.h>
int main()
{
int num;
printf("Ingrese un número:\n");
scanf("%d",&num);
if ( num%2 == 0 )
printf("El número %d es par.\n",num);
else
printf("El número %d es impar.\n",num);
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 120/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Este programa ordena en forma descendente tres valores enteros dados. Los valores se
leen desde la entrada estándar (el teclado).
Programa4.c
#include <stdio.h>
int main()
{
int uno, dos, tres;
printf ("Ingrese 3 números separados por espacios:\n");
scanf ("%d %d %d", &uno, &dos, &tres);
if (uno > dos)
{
if (dos > tres)
{
printf("%d es mayor a %d que es mayor a %d\n", uno, dos, tres);
}
else
{
if (uno > tres)
{
printf("%d es mayor a %d que es mayor a %d\n", uno, tres, dos);
}
else
{
printf("%d es mayor a %d que es mayor a %d\n", tres, uno, dos);
}
}
}
else
{
if (dos > tres)
{
if (tres > uno)
{
printf("%d es mayor a %d que es mayor a %d\n", dos, tres, uno);
}
else
{
printf("%d es mayor a %d que es mayor a %d\n", dos, uno, tres);
}
}
else
{
printf("%d es mayor a %d que es mayor a %d\n", tres, dos, uno);
}
}
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 121/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
switch (opcion_a_evaluar)
{
case valor1:
/* Código a ejecutar*/
break;
case valor2:
/* Código a ejecutar*/
break;
case valorN:
/* Código a ejecutar*/
break;
default:
/* Código a ejecutar*/
}
Si la opción a evaluar no coincide dentro de algún caso, entonces se ejecuta el bloque por
defecto (default). El bloque por defecto normalmente se escribe al final de la estructura,
pero se puede escribir en cualquier otra parte. Si se escribe en alguna otra parte el bloque
debe terminar con la palabra reservada break.
Este programa permite elegir una opción del menú a partir del carácter ingresado. La
opción se lee desde la entrada estándar (el teclado).
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 122/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa5.c
#include <stdio.h>
int main(){
char op = '\0';
printf("\tMenú\n\n");
printf("Elegir la opción deseada\n");
printf("a) Ingresar\n");
printf("b) Registrarse\n");
printf("c) Salir\n");
scanf("%c",&op);
switch(op)
{
default:
printf("Opción no válida.\n");
break;
case 'a':
printf("Se seleccionó 'Ingresar'.\n");
break;
case 'b':
printf("Se seleccionó 'Registrarse'.\n");
break;
case 'c':
printf("Se seleccionó 'Salir'.\n");
break;
}
return 0;
}
Este programa permite elegir una opción del menú a partir del entero.
Programa6.c
#include <stdio.h>
int main()
{
int op = 0;
printf("\tMenú\n\n");
printf("Elegir la opción deseada\n");
printf("1) Ingresar\n");
printf("2) Registrarse\n");
printf("3) Salir\n");
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 123/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
scanf("%d",&op);
switch(op)
{
case 1:
printf("Se seleccionó 'Ingresar'\n");
break;
case 2:
printf("Se seleccionó 'Registrarse'\n");
break;
case 3:
printf("Se seleccionó 'Salir'\n");
break;
default:
printf("Opción no válida\n");
}
return 0;
}
Enumeración
Existe otro tipo de dato constante conocido como enumeración. Una variable
enumerador se puede crear de la siguiente manera:
Es posible cambiar el valor de un elemento, para ello solo se le asigna el valor deseado:
Este programa crea diversas variables tipo enum (enumerador) y permite visualizar la
manera en la que se maneja el tipo de dato.
Programa7.c
#include <stdio.h>
int main()
{
// declaración de la enumeración
enum boolean {NO, YES};
return 0;
}
Este programa permite elegir una opción del menú a partir del entero ingresado. La
opción se lee desde la entrada estándar (el teclado).
Programa8.c
#include <stdio.h>
int main()
{
// Los valores de una enumeración son enteros y constantes
enum diasSemana {LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO};
int op;
printf("Ingrese el día de la semana.\n");
printf("1) Lunes\n");
printf("2) Martes\n");
printf("3) Miércoles\n");
printf("4) Jueves\n");
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 125/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
printf("5) Viernes\n");
printf("6) Sábado\n");
printf("7) Domingo\n");
scanf("%d", &op);
switch(op-1)
{
case LUNES:
case MARTES:
printf("Inicio de semana.\n");
break;
case MIERCOLES:
printf("Mitad de semana.\n");
break;
case JUEVES:
printf("¡Casi inicia el fin de semana!\n");
break;
case VIERNES:
case SABADO:
printf("¡Fin de semana!\n");
break;
case DOMINGO:
printf("Día de descanso.\n");
break;
// No se necesita default
}
Consta de tres partes, una condición y dos acciones a seguir con base en la expresión
condicional. Si la condición se cumple (es verdadera) se ejecuta la instrucción que se
encuentra después del símbolo ‘?’; si la condición no se cumple (es falsa) se ejecuta la
instrucción que se encuentra después del símbolo ‘:’.
Programa9.c
#include <stdio.h>
int main()
{
double a, b, res;
printf("Calcular el error matemático E = |a - b|\n\n");
printf("Ingrese el valor de a:\n");
scanf("%lf",&a);
printf("Ingrese el valor de b:\n");
scanf("%lf",&b);
res = a < b ? b-a : a-b;
printf("El error matemático de\n");
printf("| %lf - %lf | es %lf\n", a, b, res);
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 127/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Bibliografía
M.C. Edgar E. García Cano M.C. Cintia Quezada Reyes M.C. Laura Sandoval
Ing. Jorge A. Solano Gálvez Montaño
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 129/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividades:
• Elaborar un programa que utilice la estructura while en la solución de un
problema
• Elaborar un programa que requiera el uso de la estructura do-while para
resolver un problema. Hacer la comparación con el programa anterior para
distinguir las diferencias de operación entre while y do-while.
• Resolver un problema dado por el profesor que utilice la estructura for en lugar
de la estructura while.
Introducción
Las estructuras de repetición son las llamadas también estructuras cíclicas, iterativas o
de bucles. Permiten ejecutar un conjunto de instrucciones de manera repetida (o cíclica)
mientras que la expresión lógica a evaluar se cumpla (sea verdadera).
En lenguaje C existen tres estructuras de repetición: while, do-while y for. Las estructuras
while y do-while son estructuras repetitivas de propósito general.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 130/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
El software presente en esta práctica es libre bajo la licencia GPL de GNU, es decir, se
puede modificar y distribuir mientras se mantenga la licencia GPL.
/*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Jorge A. Solano
*
*/
while (expresión_lógica) {
// Bloque de código a repetir
// mientras que la expresión
// lógica sea verdadera.
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 131/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Si el bloque de código a repetir consta de una sola sentencia, entonces se pueden omitir
las llaves.
Programa1.c
#include <stdio.h>
int main()
{
int num, cont = 0;
printf("\a----- Tabla de multiplicar -----\n");
printf("Ingrese un número: \n");
scanf("%d", &num);
printf("La tabla de multiplicar del %d es:\n", num);
while (++cont <= 10)
printf("%d x %d = %d\n", num, cont, num*cont);
return 0;
}
Programa2.c
#include <stdio.h>
int main()
{
while (100)
{
printf("Ciclo infinito.\nPara terminar el ciclo presione ctrl + c.\n");
}
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 132/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
do-while es una estructura cíclica que ejecuta el bloque de código que se encuentra dentro
de las llaves y después valida la condición, es decir, el bloque de código se ejecuta de
una a un determinado número de veces. Su sintaxis es la siguiente:
do {
/*
Bloque de código que se ejecuta
por lo menos una vez y se repite
mientras la expresión lógica sea
verdadera.
*/
} while (expresión_lógica);
Si el bloque de código a repetir consta de una sola sentencia, entonces se pueden omitir
las llaves. Esta estructura de control siempre termina con el signo de puntuación punto
y coma (;).
Programa3.c
#include <stdio.h>
int main ()
{
char op = 'n';
double sum = 0, calif = 0;
int veces = 0;
do
{
printf("\tSuma de calificaciones\n");
printf("Ingrese la calificación:\n");
scanf("%lf", &calif);
veces++;
sum = sum + calif;
printf("¿Desea sumar otra? S/N\n");
setbuf(stdin, NULL); // limpia el buffer del teclado
scanf("%c",&op);
getchar();
}
while (op == 'S' || op == 's');
printf("El promedio de las calificaciones ingresadas es: %lf\n", sum/veces);
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 133/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
La estructura for ejecuta 3 acciones básicas, dos antes y una después de ejecutar el bloque
de código. La primera acción es la inicialización, en la cual se pueden definir variables e
inicializar sus valores; esta acción solo se ejecuta una vez cuando se ingresa al ciclo y es
opcional. La segunda acción consta de una expresión lógica, la cual se evalúa y, si ésta
es verdadera, ejecuta el bloque de código, si no se cumple se continúa la ejecución del
programa; esta acción es opcional. La tercera acción consta de un conjunto de
operaciones que se realizan cada vez que termina de ejecutarse el bloque de código y
antes de volver a validar la expresión lógica; esta acción también es opcional.
Programa5.c
#include <stdio.h>
int main ()
{
int enteroNumAlumnos = 5;
float realCalif = 0.0, realPromedio = 0.0;
printf("\tPromedio de calificaciones\n");
for (int indice = 0 ; indice < enteroNumAlumnos ; indice++)
{
printf("\nIngrese la calificación del alumn %d\n", indice+1);
scanf("%f",&realCalif);
realPromedio += realCalif;
}
printf("\nEl promedio de las calificaciones ingresadas es: %f\n",
realPromedio/enteroNumAlumnos);
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 135/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Define
Las líneas de código que empiezan con # son directivas del preprocesador, el cual se
encarga de realizar modificaciones en el texto del código fuente, como reemplazar un
símbolo definido con #define por un parámetro o texto, o incluir un archivo en otro
archivo con #include.
define permite definir constantes o literales; se les nombra también como constantes
simbólicas. Su sintaxis es la siguiente:
Al definir la constante simbólica con #define, se emplea un nombre y un valor. Cada vez
que aparezca el nombre en el programa se cambiará por el valor definido. El valor puede
ser numérico o puede ser texto.
Código (define)
Este programa define un valor por defecto para el tamaño del arreglo de tal manera que
si el tamaño de éste cambia, solo se debe modificar el valor de la constante MAX.
Programa5.c
#include <stdio.h>
#define MAX 5
int main ()
{
int arreglo[MAX], cont;
for (cont=0; cont<MAX; cont++)
{
printf("Ingrese el valor %d del arreglo: ", cont+1);
scanf("%i", &arreglo[cont]);
}
Bibliografía
M.C. Edgar E. García Cano M.C. Cintia Quezada Reyes M.C. Laura Sandoval
Ing. Jorge A. Solano Gálvez Ing. María Guadalupe Montaño
Morales Nava
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 138/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividades:
▪ Elaborar programas en lenguaje C que empleen arreglos de una dimensión.
▪ Manipular este tipo de arreglos a través de índices.
Introducción
Un arreglo es un conjunto de datos contiguos del mismo tipo con un tamaño fijo definido
al momento de crearse.
A cada elemento (dato) del arreglo se le asocia una posición particular, el cual se requiere
indicar para acceder a un elemento en específico. Esto se logra a través del uso de índices.
El software presente en esta práctica es libre bajo la licencia GPL de GNU, es decir, se
puede modificar y distribuir mientras se mantenga la licencia GPL.
/*
*
* This program is free software: you can redistribute it and/or
modify
* it under the terms of the GNU General Public License as published
by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
<http://www.gnu.org/licenses/>.
*
* Authors: María Guadalupe Morales, Cintia Quezada and Jorge A.
Solano
*
*/
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 140/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Arreglos unidimensionales
tipoDeDato nombre[tamaño]
Donde nombre se refiere al identificador del arreglo, tamaño es un número entero y define
el número máximo de elementos que puede contener el arreglo. El tipoDeDato es el tipo
de dato de los elementos del arreglo, el cual puede ser tipo entero, real, carácter o
estructura.
Programa1a.c
#include <stdio.h>
int main ()
{
int lista[5] = {10, 8, 5, 8, 7}; // Se declara e inicializa el arreglo unidimensional
int indice = 0;
printf("\tLista\n");
while (indice < 5 ) // Acceso a cada elemento del arreglo unidimensional usando while
{
printf("\nCalificación del alumno %d es %d", indice+1, lista[indice]);
indice += 1; // Sentencia análoga a indice = indice + 1;
}
printf("\n");
return 0;
}
Programa1b.c
#include <stdio.h>
int main ()
{
int lista[5] = {10, 8, 5, 8, 7}; // Se declara e inicializa el arreglo unidimensional
int indice = 0;
printf("\tLista\n");
do // Acceso a cada elemento del arreglo unidimensional usando do-while
{
printf("\nCalificación del alumno %d es %d", indice+1, lista[indice]);
indice += 1; // Sentencia análoga a indice = indice + 1;
}
while (indice < 5 );
printf("\n");
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 142/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa1c.c
#include <stdio.h>
int main ()
{
printf("\n");
return 0;
}
Programa2.c
#include <stdio.h>
int main ()
{
El código anterior también puede realizarse utilizando los ciclos while y do-while; se
invita al lector a que pruebe la implementación de ambos casos.
Apuntadores
Un apuntador es una variable que contiene la dirección de una variable, es decir, hace
referencia a la localidad de memoria de otra variable. Debido a que los apuntadores
trabajan directamente con la memoria, a través de ellos se accede con rapidez a un dato.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 144/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
La declaración de una variable apuntador inicia con el carácter *. Cuando a una variable
le antecede un ampersand (&), lo que se hace es referirse a la dirección de memoria
donde se ubica el valor de dicha variable (es lo que pasa cuando se lee un dato con scanf).
Los apuntadores solo pueden apuntar a direcciones de memoria del mismo tipo de dato
con el que fueron declarados; para referirse al contenido de dicha dirección, a la variable
apuntador se le antepone * (Figura 2).
Código (apuntadores)
Programa3.c
#include <stdio.h>
int main ()
{
char *ap, c = 'a'; // Se declara el apuntador ap de tipo alfanumérico
ap = &c; //Se le asigna al apuntador la dirección de memoria de la variable c
printf("Carácter: %c\n",*ap); /* Se imprime el contenido de la variable a la
que apunta el apuntador ap */
printf("Código ASCII: %d\n",*ap); /*Se imprime el código ASCII del carácter
‘a’ */
printf("Dirección de memoria: %d\n",ap);/*Se imprime la dirección de
memoria que almacena el apuntador*/
return 0;
}
Código (apuntadores)
Programa4.c
#include<stdio.h>
int main ()
{
int a = 5, b = 10, c[10] = {5, 4, 3, 2, 1, 9, 8, 7, 6, 0};
int *apEnt;
apEnt = &a;
printf("a = 5, b = 10, c[10] = {5, 4, 3, 2, 1, 9, 8, 7, 6, 0}\n");
printf("apEnt = &a\n");
/*A la variable b se le asigna el contenido de la variable a la que
apunta apEnt*/
b = *apEnt;
printf("b = *apEnt \t-> b = %i\n", b);
/*A la variable b se le asigna el contenido de la variable a la que
apunta apEnt y se le suma uno*/
b = *apEnt +1;
printf("b = *apEnt + 1 \t-> b = %i\n", b);
//La variable a la que apunta apEnt se le asigna el valor cero
*apEnt = 0;
printf("*apEnt = 0 \t-> a = %i\n", a);
/*A apEnt se le asigna la dirección de memoria que tiene el elemento 0
del arreglo c*/
apEnt = &c[0];
printf("apEnt = &c[0] \t-> apEnt = %i\n", *apEnt);
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 146/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
apEnt = &c[0];
apEnt = c;
Código (apuntadores)
Programa5.c
#include <stdio.h>
int main ()
{
int arr[] = {5, 4, 3, 2, 1};
int *apArr;//Se declara el apuntador apArr
int x;
apArr = arr;
printf("int arr[] = {5, 4, 3, 2, 1};\n");
printf("apArr = &arr[0]\n");
x = *apArr; /*A la variable x se le asigna el contenido del arreglo arr en
su elemento 0*/
printf("x = *apArr \t -> x = %d\n", x);
x = *(apArr+1); /*A la variable x se le asigna el contenido del arreglo arr
en su elemento 1*/
printf("x = *(apArr+1) \t -> x = %d\n", x);
x = *(apArr+2); /*A la variable x se le asigna el contenido del arreglo arr
en su elemento 2*/
printf("x = *(apArr+2) \t -> x = %d\n", x);
x = *(apArr+3); /*A la variable x se le asigna el contenido del arreglo arr
en su elemento 3*/
printf("x = *(apArr+3) \t -> x = %d\n", x);
x = *(apArr+4); /*A la variable x se le asigna el contenido del arreglo arr
en su elemento 4*/
printf("x = *(apArr+2) \t -> x = %d\n", x);
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 147/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa6a.c
#include <stdio.h>
int main ()
{
int lista[5] = {10, 8, 5, 8, 7};
int *ap = lista; //Se declara el apuntador ap
int indice;
printf("\tLista\n");
//Se accede a cada elemento del arreglo haciendo uso del ciclo for
for (indice = 0 ; indice < 5 ; indice++)
{
printf("\nCalificación del alumno %d es %d", indice+1,
*(ap+indice));
}
printf("\n");
return 0;
}
Programa6b.c
#include <stdio.h>
int main ()
{
printf("\tLista\n");
//Se accede a cada elemento del arreglo haciendo uso del ciclo while
while (indice < 5);
{
printf("\nCalificación del alumno %d es %d", indice+1, *(ap+indice));
indice++;
}
printf("\n");
return 0;
}
Programa6c.c
#include <stdio.h>
int main ()
{
int lista[5] = {10, 8, 5, 8, 7};
int *ap = lista; //Se declara el apuntador ap
int indice = 0;
printf("\tLista\n");
//Se accede a cada elemento del arreglo haciendo uso del ciclo do-while
do
{
printf("\nCalificación del alumno %d es %d", indice+1, *(ap+indice));
indice++;
}
while (indice < 5)
printf("\n");
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 149/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa7.c
#include <stdio.h>
int main()
{
char palabra[20];
int i=0;
printf("Ingrese una palabra: ");
scanf("%s", palabra); /* Se omite & porque el propio nombre del arreglo de
tipo cadena apunta, es decir, es equivalente a la dirección de comienzo del
propio arreglo*/
printf("La palabra ingresada es: %s\n", palabra);
for (i = 0 ; i < 20 ; i++)
{
printf("%c\n", palabra[i]);
}
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 150/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Bibliografía
M.C. Edgar E. García Cano M.C. Cintia Quezada Reyes M.C. Laura Sandoval
Montaño
Ing. Jorge A. Solano Gálvez Ing. María Guadalupe
Morales Nava
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 152/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividades:
▪ Resolver problemas que requieran el uso de un arreglo de dos dimensiones, a
través programas en lenguaje C.
▪ Manipular este tipo de arreglos a través de índices.
Introducción
Un arreglo de dos dimensiones es un conjunto de datos contiguos del mismo tipo con
un tamaño fijo definido al momento de crearse. Para acceder a un elemento en este tipo
de arreglos se requiere el uso de dos índices.
Los arreglos se utilizan para hacer más eficiente el código de un programa, ya que la
manipulación de datos del mismo tipo que son agrupados en un arreglo por tener un
significado común, se realiza de una forma más clara y eficaz.
El software presente en esta práctica es libre bajo la licencia GPL de GNU, es decir, se
puede modificar y distribuir mientras se mantenga la licencia GPL.
/*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 153/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Arreglos multidimensionales
Donde nombre se refiere al identificador del arreglo, tamaño es un número entero y define
el número máximo de elementos que puede contener el arreglo por dimensión (el
número de dimensiones está determinado por el número de corchetes). El tipoDeDato es
el tipo de dato de los elementos del arreglo, el cual puede ser tipo entero, real, carácter
o estructura.
Programa1a.c
#include<stdio.h>
int main()
{
int matriz[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i, j;
printf("Imprimir Matriz\n");
for (i=0 ; i<3 ; i++) //Representa al renglón del arreglo
{
for (j=0 ; j<3 ; j++)//Representa a la columna del arreglo
{
printf("%d, ",matriz[i][j]);
}
printf("\n");
}
return 0;
}
Programa2a. c
#include<stdio.h>
int main()
{
int i,j,a[5][5];
for (i=0 ; i<5 ; i++)//Representa al renglón del arreglo
{
for (j=0 ; j<5 ; j++)//Representa a la columna del arreglo
{
a[i][j]=i+j;
printf("\t%d, ",a[i][j]);
}
printf("\n");
}
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 155/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa1b.c
#include<stdio.h>
int main()
{
int matriz[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i, j;
printf("Imprimir Matriz\n");
i=0;
while(i<3) //Representa al renglón del arreglo
{
j=0;
while (j<3)//Representa a la columna del arreglo
{
printf("%d, ",matriz[i][j]);
j++;
}
printf("\n");
i++;
}
return 0;
}
Programa2b.c
#include<stdio.h>
int main()
{
int i,j,a[5][5];
i=0;
while (i<5) //Representa al renglón del arreglo
{
j=0;
while (j<5) //Representa a la columna del arreglo
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 156/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
{
a[i][j]=i+j;
printf("\t%d, ",a[i][j]);
j++;
}
printf("\n");
i++;
}
return 0;
}
Programa1c.c
#include<stdio.h>
int main()
{
int matriz[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i, j;
printf("Imprimir Matriz\n");
i=0;
do //Representa al renglón del arreglo
{
j=0;
do //Representa a la columna del arreglo
{
printf("%d, ",matriz[i][j]);
j++;
}
while (j<3);
printf("\n");
i++;
}
while(i<3);
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 157/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa2c.c
#include<stdio.h>
int main()
{
int i,j,a[5][5];
i=0;
do //Representa al renglón del arreglo
{
j=0;
do //Representa a la columna del arreglo
{
a[i][j]=i+j;
printf("\t%d, ",a[i][j]);
j++;
}
while (j<5);
printf("\n");
i++;
}
while (i<5);
return 0;
}
Programa3.c
#include <stdio.h>
int main ()
{
int lista[10][10]; // Se declara el arreglo multidimensional
int i,j;
int renglon,columna;
printf("\nDa el número de renglones y columnas separados con coma\n");
scanf("%d,%d",&renglon,&columna);
if(((renglon>=1) && (renglon<=10))&&((columna>=1) && (columna<=10)))
{
// Acceso a cada elemento del arreglo multidimensional usando for
for (i= 0 ; i <= renglon-1 ; i++)
{
for(j= 0 ; j <= columna-1 ; j++)
{
printf("\nNúmero para el elemento %d,%d del arreglo", i,j );
scanf("%d",&lista[i][j]);
}
}
printf("\nLos valores dados son: \n");
// Acceso a cada elemento del arreglo multidimensional usando for
for (i= 0 ; i <= renglon-1 ; i++)
{
for(j= 0 ; j <= columna-1 ; j++)
{
printf("%d ", lista[i][j]);
}
printf("\n");
}
}
else printf("Los valores dados no es válido");
printf("\n");
return 0;
}
El código anterior también puede realizarse utilizando los ciclos while y do-while, se invita
al lector a que pruebe la implementación de ambos casos.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 159/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Recordemos que un apuntador es una variable que contiene la dirección de una variable,
es decir, hace referencia a la localidad de memoria de otra variable. Debido a que los
apuntadores trabajan directamente con la memoria, a través de ellos se accede con
rapidez a un dato.
La declaración de una variable apuntador inicia con el carácter *. Cuando a una variable
le antecede un ampersand (&), lo que se hace es referirse a la dirección de memoria
donde se ubica el valor de dicha variable (es lo que pasa cuando se lee un dato con scanf).
Los apuntadores solo pueden apuntar a direcciones de memoria del mismo tipo de dato
con el que fueron declarados; para acceder al contenido de dicha dirección, a la variable
apuntador se le antepone *.
Como se mencionó al inicio de esta práctica, en la memoria cada elemento del arreglo se
guarda de forma contigua, por lo tanto, se puede recorrer un arreglo multidimensional
con apuntadores.
arr[0][0]
arr[0][1] Elementos del renglón 0
arr[1][0]
Elementos del renglón 1
arr[1][1]
arr[2][0]
Elementos del renglón 2
arr[2][1]
Programa4a.c
#include<stdio.h>
int main()
{
int matriz[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i, cont=0, *ap;
ap = *matriz; //Esta sentencia es análoga a: ap = &matriz[0][0];
printf("Imprimir Matriz\n");
for (i=0 ; i<9 ; i++)
{
if (cont == 3) //Se imprimió un renglón y se hace un salto de línea
{
printf("\n");
cont = 0; //Inicia conteo de elementos del siguiente renglón
}
printf("%d\t",*(ap+i));//Se imprime el siguiente elemento de la matriz
cont++;
}
printf("\n");
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 161/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa4b.c
#include<stdio.h>
int main()
{
int matriz[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i, cont=0, *ap;
ap = *matriz;//Esta sentencia es análoga a: ap = &matriz[0][0];
printf("Imprimir Matriz\n");
i=0;
while (i<9)
{
if (cont == 3) //Se imprimió un renglón y se hace un salto de línea
{
printf("\n");
cont = 0; //Inicia conteo de elementos del siguiente renglón
}
printf("%d\t",*(ap+i));//Se imprime el siguiente elemento de la matriz
cont++;
i++;
}
printf("\n");
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 162/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa4c.c
#include<stdio.h>
int main()
{
int matriz[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i, cont=0, *ap;
ap = *matriz;//Esta sentencia es análoga a: ap = &matriz[0][0];
printf("Imprimir Matriz\n");
i=0;
do
{
if (cont == 3) //Se imprimió un renglón y se hace un salto de línea
{
printf("\n");
cont = 0; //Inicia conteo de elementos del siguiente renglón
}
printf("%d\t",*(ap+i)); //Se imprime el siguiente elemento de la matriz
cont++;
i++;
}
while (i<9);
printf("\n");
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 163/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Bibliografía
M.C. Edgar E. García Cano M.C. Cintia Quezada Reyes M.C. Laura Sandoval
Ing. Jorge A. Solano Gálvez Ing. Maricela Castañeda Montaño
Perdomo.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 165/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Objetivo:
Actividades:
▪ Implementar en un programa en C la solución de un problema dividido en
funciones.
▪ Elaborar un programa en C que maneje argumentos en la función principal.
▪ En un programa en C, manejar variables y funciones estáticas.
Introducción
El software presente en esta práctica es libre bajo la licencia GPL de GNU, es decir, se
puede modificar y distribuir mientras se mantenga la licencia GPL.
/*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 166/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Funciones
Una función puede recibir parámetros, los cuales son datos de entrada con los que
trabajará la función; dichos parámetros se deben definir dentro de los paréntesis de la
función, separados por comas e indicando su tipo de dato, de la siguiente forma:
El tipo de dato puede ser cualquiera de los vistos hasta el momento (entero, real, carácter
o arreglo) y el nombre debe seguir la notación de camello. Los parámetros de una función
son opcionales.
El tipo del valor de retorno de una función indica el tipo de dato que va a regresar la
función al terminar el bloque de código de ésta a través de la sentencia return. El valor
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 167/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
de retorno puede ser cualquiera de los tipos de datos vistos hasta el momento (entero,
real, carácter o arreglo), aunque también se puede regresar el elemento vacío (void).
El compilador C revisa que las funciones estén definidas o declaradas antes de ser
invocadas. Por lo que una buena práctica es declarar todas las funciones al inicio del
programa. Una declaración, prototipo o firma de una función tiene la siguiente sintaxis:
La firma de una función está compuesta por tres elementos: el tipo del valor de retorno
de la función, el nombre de la función y los parámetros que recibe la función; finaliza
con punto y coma (;). Los nombres de los parámetros no necesariamente deben ser
iguales a los que se encuentran en la definición de la función. Las funciones definidas en
el programa no necesariamente deberán ser declaradas; esto dependerá de su ubicación
en el código.
Código (funciones)
Programa1.c
#include <stdio.h>
#include <string.h>
NOTA: strlen es una función que recibe como parámetro un arreglo de caracteres y
regresa como valor de retorno un entero que indica la longitud de la cadena. La función
se encuentra dentro de la biblioteca string.h, por eso se incluye ésta al principio del
programa.
Las variables declaradas dentro de un programa tienen un tiempo de vida que depende
de la posición donde se declaren. En C existen dos tipos de variables con base en el lugar
donde se declaren: variables locales y variables globales.
Como ya se vio, un programa en C puede contener varias funciones. Las variables que
se declaren dentro de cada función se conocen como variables locales (a cada función).
Estas variables existen al momento de que la función es llamada y desaparecen cuando
la función llega a su fin.
Programa2.c
#include <stdio.h>
int main()
{
sumar(); // llamado de la función suma
}
void sumar() // función suma
{
int x=5, y=10; //variables locales
z=x+y;
printf(“%i”,z);
}
Las variables que se declaran fuera de cualquier función se llaman variables globales.
Las variables globales existen durante la ejecución de todo el programa y pueden ser
utilizadas por cualquier función.
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 169/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Programa3.c
#include <stdio.h>
int main()
{
multiplicar(); //llamado de la función multiplicar
printf(“%i”,resultado);
return 0;
}
void multiplicar() //función multiplicar
{
resultado = 5 * 4;
return 0;
}
Programa4.c
#include <stdio.h>
#include<stdio.h>
void incremento();
int main()
{
// La variable cont es local a la función main
int cont;
enteraGlobal = 0; // La función main accede a la variable global
for (cont=0 ; cont<5 ; cont++)
{
incremento();
}
return 999;
}
void incremento()
{
// La variable enteraLocal es local a la función incremento
int enteraLocal = 5;
enteraGlobal += 2;
printf("global(%i) + local(%i) = %d\n",enteraGlobal, enteraLocal, enteraGlobal+enteraLocal);
return 0;
}
Como se mencionó, la firma de una función está compuesta por tres elementos: : el tipo
del valor de retorno de la función, el nombre de la función y los parámetros que recibe
la función.
Entonces, la función main también puede recibir parámetros. Debido a que la función
main es la primera que se ejecuta en un programa, los parámetros de la función hay que
enviarlos al ejecutar el programa. La firma completa de la función main es:
• En plataforma Linux/Unix
./nombrePrograma arg1 arg2 arg3 ...
• En plataforma Windows
nombrePrograma.exe arg1 arg2 arg3 ...
Esto es, el nombre del programa seguido de los argumentos de entrada. Estos
argumentos son leídos como cadenas de caracteres dentro del argument vector, donde en
la posición 0 se encuentra el nombre del programa, en la posición 1 el primer argumento,
en la posición 2 el segundo argumento y así sucesivamente.
Programa5.c
#include <stdio.h>
#include <string.h>
int main (int argc, char** argv)
{
if (argc == 1)
{
printf("El programa no contiene argumentos.\n");
return 88;
}
return 88;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 172/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Estático
Lenguaje C permite definir elementos estáticos. La sintaxis para declarar elementos
estáticos es la siguiente:
Es decir, tanto a la declaración de una variable como a la firma de una función solo se le
agrega la palabra reservada static al inicio de estas.
El atributo static en una variable hace que ésta permanezca en memoria desde su
creación y durante toda la ejecución del programa, lo que quiere decir que su valor se
mantendrá hasta que el programa llegue a su fin.
El atributo static en una función hace que esa función sea accesible solo dentro del mismo
archivo, lo que impide que fuera de la unidad de compilación se pueda acceder a la
función.
Programa6.c
#include <stdio.h>
void llamarFuncion();
int main ()
{
for (int j=0 ; j < 5 ; j++)
{
llamarFuncion();
}
}
void llamarFuncion()
{
/* Solo la primera vez que se llame a esta función se creará y se le asignará
el valor de 0 a la variable estática numVeces */
static int numVeces = 0;
printf("Esta función se ha llamado %d veces.\n",++numVeces);
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 173/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Una vez declarada una variable estática, esta permanece en memoria a lo largo de la
ejecución del programa, por lo tanto, la segunda vez que se llama a la función ya no se
vuelve a crear la variable, si no que se utiliza la que está en la memoria y por eso conserva
su valor.
funcEstatica.c
int suma(int,int);
static int resta(int,int);
int producto(int,int);
static int cociente (int,int);
calculadora.c
int suma(int,int);
//static int resta(int,int);
int producto(int,int);
//static int cociente (int,int);
int main()
{
printf("5 + 7 = %i\n",suma(5,7));
//printf("9 - 77 = %d\n",resta(9,77));
printf("6 * 8 = %i\n",producto(6,8));
//printf("7 / 2 = %d\n",cociente(7,2));
}
Cuando se compilan los dos archivos al mismo tiempo con la línea de comandos (gcc
funcEstatica.c calculadora.c –o exe), las funciones suma y producto son accesibles desde
el archivo calculadora y, por tanto, se genera el código ejecutable. Si se quitan los
comentarios y se intenta compilar los archivos se enviará un error, debido a que las
funciones son estáticas y no pueden ser accedidas fuera del archivo funcEstaticas.c.
Bibliografía
M.C. Edgar E. García Cano M.C. Cintia Quezada Reyes M.C. Laura Sandoval
Ing. Jorge A. Solano Gálvez Montaño
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 176/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Actividades:
• A través de programas en C, emplear las funciones para crear, leer, escribir y
sobrescribir archivos de texto plano.
• Manipular archivos empleando los diferentes tipos de acceso a ellos.
Introducción
El software presente en esta práctica es libre bajo la licencia GPL de GNU, es decir, se
puede modificar y distribuir mientras se mantenga la licencia GPL.
/*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Jorge A. Solano
*
*/
Apuntador a archivo
FILE *F;
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 178/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Abrir archivo
La función fopen() abre una secuencia para que pueda ser utilizada y la asocia a un
archivo. Su estructura es la siguiente:
Cerrar archivo
La función fclose() cierra una secuencia que fue abierta mediante una llamada a fopen().
Escribe la información que se encuentre en el buffer al disco y realiza un cierre formal del
archivo a nivel del sistema operativo.
Un error en el cierre de una secuencia puede generar todo tipo de problemas, incluyendo
la pérdida de datos, destrucción de archivos y posibles errores intermitentes en el
programa. La firma de esta función es:
Este programa permite abrir un archivo en modo de lectura, de ser posible ya que el
archivo debe existir o debe tener permiso de lectura.
Programa1.c
#include<stdio.h>
int main()
{
FILE *archivo;
archivo = fopen("archivo.txt", "r");
if (archivo != NULL)
{
printf("El archivo se abrió correctamente.\n");
int res = fclose(archivo);
printf("fclose = %d\n", res);
}
else
{
printf("Error al abrir el archivo.\n");
printf("El archivo no existe o no se tienen permisos de lectura.\n");
}
return 0;
}
Las funciones fgets() y fputs() pueden leer y escribir, respectivamente, cadenas sobre los
archivos. Las firmas de estas funciones son, respectivamente:
La función fputs() permite escribir una cadena en un archivo especifico. La función fgets()
permite leer una cadena desde el archivo especificado. Esta función lee un renglón a la
vez.
Código (fgets)
Programa2.c
#include<stdio.h>
int main()
{
FILE *archivo;
char caracteres[50];
archivo = fopen("gets.txt", "r");
if (archivo != NULL)
{
printf("El archivo se abrió correctamente.");
printf("\nContenido del archivo:\n");
while (feof(archivo) == 0)
{
fgets (caracteres, 50, archivo);
printf("%s", caracteres);
}
fclose(archivo);
}
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 181/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Código (fputs)
Este programa permite escribir una cadena dentro de un archivo, de ser posible, a
través de la función fputs.
Programa3.c
#include<stdio.h>
int main()
{
FILE *archivo;
char escribir[]="Escribir cadena en archivo mediante fputs.\n\tFacultad de
Ingeniería.\n";
archivo = fopen("puts.txt", "r+");
if (archivo != NULL)
{
printf("El archivo se abrió correctamente.\n");
fputs (escribir, archivo);
fclose(archivo);
}
else
{
printf("Error al abrir el archivo.\n");
printf("El archivo no existe o no se tienen permisos de lectura.\n");
}
return 0;
}
Donde apArch es un apuntador al archivo devuelto por una llamada a la función fopen(),
es decir, fprintf() y fscanf() dirigen sus operaciones de E/S al archivo al que apunta
apArch. formato es una cadena que puede incluir texto o especificadores de impresión de
variables. En los puntos suspensivos se agregan las variables (si es que existen) cuyos
valores se quieren escribir en el archivo.
Código (fscanf)
Programa4.c
#include<stdio.h>
int main()
{
FILE *archivo;
char caracteres[50];
archivo = fopen("fscanf.txt", "r");
if (archivo != NULL)
{
while (feof(archivo)==0)
{
fscanf(archivo, "%s", caracteres);
printf("%s\n", caracteres);
}
fclose(archivo);
}
else
{
printf("El archivo no existe.\n");
}
return 0;
}
Código (fprintf)
Programa5.c
#include<stdio.h>
int main()
{
FILE *archivo;
char escribir[] = "Escribir cadena en archivo mediante fprinft. \nFacultad de
Ingeniería.\n";
archivo = fopen("fprintf.txt", "r+");
if (archivo != NULL)
{
fprintf(archivo, escribir);
fprintf(archivo, "%s", "UNAM\n");
fclose(archivo);
}
else
{
printf("El archivo no existe o no se tiene permisos de lectura/escritura.\n");
}
return 0;
}
fread y fwrite son funciones que permiten trabajar con elementos de longitud conocida.
fread permite leer uno o varios elementos de la misma longitud a partir de una dirección
de memoria determinada (apuntador).
fwrite permite escribir hacia un archivo uno o varios elementos de la misma longitud
almacenados a partir de una dirección de memoria determinada.
Código (fread)
Programa6.c
#include <stdio.h>
if(!ap)
{
printf("El archivo %s no existe o no se puede abrir", argv[1]);
return 1;
}
return 0;
}
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 185/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
Código (fwrite)
Este programa realizar una copia exacta de dos archivos. Los nombres de los archivos
(origen y destino) se reciben como argumentos de la función principal.
Programa7.c
#include <stdio.h>
if(!archEntrada)
{
printf("El archivo %s no existe o no se puede abrir", argv[1]);
return 1;
}
// Copia archivos
while (bytesLeidos = fread(buffer, 1, 2048, archEntrada))
fwrite(buffer, 1, bytesLeidos, archivoSalida);
Código: MADO-17
Versión: 03
Manual de prácticas del
Página 186/186
Laboratorio de Fundamentos
Sección ISO 8.3
de programación
Fecha de
26 / agosto / 2021
emisión
Área/Departamento:
Facultad de Ingeniería
Laboratorio de computación salas A y B
La impresión de este documento es una copia no controlada
// Cerrar archivos
fclose(archEntrada);
fclose(archivoSalida);
return 0;
}
Bibliografía