[go: up one dir, main page]

0% encontró este documento útil (0 votos)
11 vistas34 páginas

PROGRAMACION2

prpyecto progra

Cargado por

Edgar
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
11 vistas34 páginas

PROGRAMACION2

prpyecto progra

Cargado por

Edgar
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 34

INSTITUTO POLITÉCNICO NACIONAL

Unidad Profesional Interdisciplinaria en Ingeniería y


Tecnologías Avanzadas.

“Introducción a la programación”

Practica 5 “Uso de Funciones”

Profesor: José Luis Cruz Mora

PRESENTA:
PÉREZ RODRÍGUEZ EDGAR

GRUPO 1MV1

17 DE NOVIEMBRE DE 2024.
Objetivo
Desarrollar los programas hechos en las prácticas anteriores aplicando funciones y
desarrollo de aplicaciones utilizando funciones recursivas.

Introducción
En esta práctica se utilizarán funciones para crear todos los programas, las funciones
son secciones de código que se pueden utilizar para acciones específicas reduciendo
el tamaño del código principal y facilitando el mantenimiento a largo plazo de los
códigos ya que permite seccionar los códigos en pequeños problemas a resolver.
Existen dos tipos de “funciones”, int (puede ser cualquier tipo de variable) y void,
aunque propiamente void no es una función porque no devuelve ningún valor al código.
Las funciones deben devolver valores para ser consideras funciones, por lo que void
se desarrollarán códigos que requieran de ambos tipos de funciones.
También se conocerá como utilizar bibliotecas de funciones creadas por el usuario para
de esta forma facilitar la programación de códigos que requieran hacer tareas similares
reutilizando esta función en cada caso y colocando los valores para cada programa.
Por último, el uso de la recursión, que significa que una función se llame a sí misma
dentro de la función, por medio de un contador estático se puede controlar por el
programador cuantas veces se llamará la función, funcionando similar a un operador
cíclico como un for o un while pero hecho con funciones.
Desarrollo
2.1 FUNCIONES
Para desarrollar la práctica con el uso de funciones, con base a los programas de la
práctica anterior deben ser modificados para que el main quede despejado y todo se
haga con funciones que estén dentro de una biblioteca de funciones creada
especialmente para los códigos.
Para hacer una biblioteca de funciones se requieren de tres archivos externos al
programa donde se utilizará esta biblioteca, un .c un .h y un makefile, en los primeros
dos se definirán las funciones que se utilizarán y el ultimo es para ejecutar los
programas y que funcionen correctamente.
El primer programa consta de dos secciones, generar un arreglo y ordenarlo por lo que
estas dos pueden ser funciones que se eliminen del programa y se coloquen en la
biblioteca, en este caso solo se tiene que pasar la sección del código a la función:

Y la función para ordenar el arreglo:


Estas dos funciones ya se encargan de generar el arreglo y posteriormente ordenarlo,
guardando el arreglo en la variable colocada, también es necesario colocar el tamaño
del arreglo para que la función sepa cuantas veces iterar los ciclos for. Ahora debe
crearse una función que muestre arreglos, por lo que se crea otra función que haga
esta tarea, en este caso todas las funciones son void ya que no devuelven valores al
programa.

Dividiendo el programa en estas tres secciones, el main del código se reduce y se ve


más limpio, facilitando la lectura de este y reduciendo el número de líneas de código.
Para incluir estas funciones en una biblioteca de funciones, se crean primero dos
archivos llamados matrixlib.c y matrixlib.h, en estos estarán definidas cada una de las
funciones, en el archivo c debe estar la función definida completa y en el .h solo la
primera sección
Archivo .h:
Archivo .c

Y este proceso debe repetirse con cada una de las funciones requeridas para los
programas, una vez terminados los archivos se debe añadir un #include al inicio del
código con el nombre de la biblioteca y entre comillas para identificar que es una
biblioteca no estandarizada. En este caso #include “matrixlib.h”.
Estos programas no se pueden ejecutar como los demás, se debe crear un makefile
que se encargue de unificar todos estos programas creados anteriormente, el programa
se vería de la siguiente forma:

Este programa define los archivos con los nombres mostrados y posteriormente con el
código run los ejecuta y crea el archivo .o, en caso de no definir al inicio los nombres
de los archivos se puede poner directamente el nombre del archivo y no escribir los
paréntesis ni los signos de peso, pero el definirlo con nombres facilitará el manejo de
múltiples programas como se mostrará.
Una vez que se creó este programa se debe escribir en el panel de comandos el
comando make run1 y el programa se va a ejecutar.
Para los demás programas se realiza lo siguiente y los archivos de funciones .c y .h se
ven de la siguiente forma:
2.2 RECURSIÓN
Programa 1: Incremento de 3
Este programa debe solicitar al usuario un número n y devolver una sucesión de
números desde 1 hasta el número n (en caso de que sea posible con la suma a 3)
sumando de 3 en 3. Para este programa se debe crear una función que no devuelva
nada al programa y que se llame a sí misma n veces, el
número proporcionado por el usuario y para que se
cumpla la suma de 3 en 3, se declara una variable
estática i que se inicializa en 1 para que en este número
comience la cuenta y en cada llamada de la función se le
sumará 3 y se imprimirá su valor.

Por último, en el programa principal solo


se declara una variable n y se solicita al
usuario que proporcione su valor, esta
variable es con la que comenzará el
llamado de la función.
Programa 2: Arreglo Aleatorio
Este programa genera un arreglo de 20 números pseudoaleatorios con valores entre
10 y 100, para desarrollar este programa se creó una función con dos valores de
entrada, el tamaño del arreglo y el arreglo donde se guardarán los valores. Se inicializa
una variable estática en 0 y se crea la condición de que la función se llame a si misma
n veces, n representa el tamaño del arreglo.
En este caso se declara arr[ i ] porque i comenzará
desde los valores de 0 hasta n-1 y de esta forma se
declararán todos los valores del arreglo.
Para imprimir los valores aleatorios se utiliza la
función srand con ayuda de la semilla de time y
genera los valores deseados con el módulo de 91 y
sumándole 10.
Para el programa principal solo se declara el valor
de n=20 y el arreglo de este mismo tamaño y se
llama a la función como se muestra en la siguiente
imagen:
Programa 3: Máximo y Mínimo
Este programa debe generar un arreglo de 20 números con valores entre 50 y 500,
mostrar el arreglo y posteriormente mostrar el valor máximo y mínimo dentro de este
arreglo. Esto permite seccionar el programa en 3 partes, generar el arreglo, encontrar
el máximo y encontrar el mínimo, esto se logra con tres funciones que hagan estas
tareas.
La primera función debe generar el arreglo de 20
números, para esto se utiliza como base los programas
anteriores, pero con las especificaciones de los valores
pseudoaleatorios, en este caso de 50 a 500 y poner una
variable donde se guarde el arreglo.

Para encontrar los valores máximos y mínimos se crean funciones que trabajan de forma
similar, para el máximo se crean dos variables estáticas, la variable i que funcionará
como un contador para indicar las veces que debe recursar la función y la función max
que debe ser declarada como un valor mínimo, en este caso con cualquier valor debajo
de 50 funcionará bien. Con una sentencia de condición se dividirá en dos ramificaciones
la función, si el valor max es mayor que el valor 0 del arreglo, en este caso el nuevo
max será este valor y en caso de no ser así solo se agregará uno al contador y se
volverá a llamar la función. Para el mínimo funciona similar solo con una lógica inversa
y declarando la variable min como un valor mayor de 500 para que funcione de manera
adecuada.
Mayor: Menor:
Programa 4: Número de Dígitos
Este programa debe contar la cantidad de dígitos en un número n ingresado por el
usuario, para hacer esto con una función recursiva se utiliza la división entre 10 del
número ingresado, de esta forma si el dígito dividido entre 10 es mayor o igual que
uno significa que ese número tiene más de 1 dígito y la función se volverá a llamar,
pero ahora con n/10 y el contador aumentará, si esta división es menor a 1 significa
que el número no cuenta con más dígitos y devolverá el valor del contador.

Programa 5: Suma de Dígitos


Este programa debe sumar los dígitos de un número n ingresado por el usuario, esto
se hace con una función que por medio de una variable auxiliar que es igual a n/10 y
una sentencia condicional if, en el caso de que el auxiliar sea menor a 1 se devolverá
solamente el valor de n y si esto no se cumple entonces se devolverá el valor del
módulo de n%10 y se sumará la función con valor iniciar de n/10, de esta forma si el
número cuenta solamente con un dígito se devolverá el valor de este número, si no es
así, se devolverá el la suma del módulo, y se regresará la división para eliminar el
primer dígito que ya fue sumado previamente en el módulo y así hasta que el número
sea de solo un número.
Programa 6: Burbuja
El código debe generar un arreglo de 10,000 números con valores entre 1 y 100,000
y posteriormente ordenar el arreglo de manera descendente por el método de la
burbuja con funciones recursivas, esto se divide en dos problemas, generar el arreglo
y aplicar el método de la burbuja.
Para generar el arreglo se utiliza la
lógica que en los programas
anteriores, pero con un pequeño
cambio, la función rand() genera
números que no superan el
32,765, por lo que para aumentar
el valor de este número es
recomendable que se multiplique
la función por esta misma cantidad
y de esta forma se expande el
rango de alcance y con el operador
módulo se controlará el tamaño de
caracteres deseados.
Para aplicar el método de la burbuja con recursividad se tiene que dividir en dos partes,
el recorrido del número desde arr(0) hasta arr(n) donde n representa el tamaño del
arreglo, y la cantidad de veces que se tiene que recorrer dígitos, en este caso n-1 veces.
El programa indica que el número se debe recorrer cada que n sea menor que n+1, de
esta forma los valores mas pequeños quedaran después de los mas grandes. Para
poder hacer esto se necesitan dos funciones, la que haga el recorrido de n y n+1 hasta
que arr(n) esté en la posición adecuada y otra que llame esta función y se llame a si
misma hasta que todos los números del arreglo estén en su posición adecuada, se ve
de la siguiente manera:
Programa 7: Serie de Hailstone
Este programa debe imprimir la serie de Hailstone a partir de un número n ingresado
por el usuario, la serie de Hailstone consiste en, si el número inicial es par se dividirá
entre 2, si es impar se multiplicará por 3 y se le sumará 1 y este proceso se repetirá
hasta llegar al 1. Por lo que la función que realice esto debe comenzar con una
sentencia de control que haga recursiva esta función hasta que n sea igual a 1. Dentro
de esta sentencia de control debe existir una más para
determinar si el número es par o impar, esto con ayuda
del operador módulo, si el módulo a 2 es cero entonces
se sabe que el número es par, si no es cero entonces es
impar.
En caso de ser par la función se llamará con el valor de
n/2, si es impar la función se llamará con 3*n+1 y este
proceso seguirá hasta que n=1

Programa 8: Serie de Leibniz


𝜋
El programa calcula un valor aproximado de la serie de Leibniz que converge en , la
4
serie está dada por la siguiente ecuación:
𝑚
(−1)𝑛

2𝑛 + 1
𝑛=0

Entre mas grande sea el valor de m, mayor precisión tendrá el programa, para crear
una función que haga esta ecuación y la sume m veces solo se tiene que crear una
variable con la división para llamarla las veces que sea necesario, la operación en
lenguaje C se vería de la siguiente manera:

Ahora con una sentencia condicional se preguntará si m es igual a cero, en caso de ser
así se devolverá el valor de result, en caso de no ser así se devolverá el valor de result
mas el llamado de la función con m-1
Programa 9: Secuencia de Fibonacci
El programa debe calcular una secuencia de Fibonacci con dos números ingresados
por el usuario y el número de términos de la serie. Por lo que la función que se utilizará
debe tener tres valores de entrada, el primer valor, el segundo y la cantidad de
términos.
Con una sentencia if dentro de la función y una variable estática inicializada en cero,
se debe crear una condición para que la función recurse hasta que i deje de ser menor
a n. Dentro de esta condicional se imprime el primer valor de la secuencia, en este caso
determinado por la variable ini, posteriormente con una variable declarada como la
suma de los dos valores iniciales, se iguala el primer valor con el segundo valor y el
segundo valor se iguala a la suma y de esta forma los valores se van recorriendo y se
llama de nuevo a la función.

Programa 10: Número áureo


La secuencia de Fibonacci cuenta con una peculiaridad, es que la razón de sus números
adyacentes se aproxima Phi o número áureo que es igual a:

1 + √5
𝜑= ≈ 1.618033988749894 …
2
Por lo que se debe generar un programa que genere una secuencia de Fibonacci con
dos números ingresados por el usuario y se detenga hasta que el valor absoluto de la
diferencia entre estas razones sea de 0.001, como se muestra en la siguiente ecuación:
𝑓𝑖𝑏[𝑘] 𝑓𝑖𝑏[𝑘 − 1]
| − |
𝑓𝑖𝑏[𝑘 − 1] 𝑓𝑖𝑏[𝑘 − 2]
Tomando como base el código anterior que ya genera una secuencia de Fibonacci, solo
se modifican los parámetros de entrada, ya que solo será el valor inicial y el segundo
valor. También se creará la variable phi que representa la diferencia de razones de los
valores de la secuencia de Fibonacci, para generar esta variable se tiene que utilizar la
función fabs incluida en la biblioteca math.h que genera el valor absoluto de un número
flotanten y todos los valores se deben inicializar como flotantes para que no haya
problema o perdidas de valores en la división.
Ahora la sentencia para que la función se llame a si misma constantemente será que el
valor de phi sea mayor o igual a 0.001, de esta forma la función seguirá recursando
hasta que esta condición no se cumpla.
Resultados
2.1 FUNCIONES
El primer programa modificado con funciones se ve así:

El segundo programa con funciones se ve así:


El tercer programa se ve así:

Todos las funciones se encuentran definidas en el archivo .c y .h de la biblioteca de


funciones y los programas se ejecutan con el comando make en el panel.
El archivo de Makefile se ve así:

Los programas funcionan de la misma manera que en la práctia anterior, lo unico que cambia es la
forma de ejectutarlos

Programa 1:
Porgrama 2:

Programa 3:
2.2 RECURSIÓN
Programa 1: Incremento de 3

El programa solicita un número n y muestra la secuencia con incrementos de 3 en 3


hasta llegar al número o a su aproximación con la suma de 3.
Programa 2: Arreglo Aleatorio
El programa genera un arreglo con 20 números pseudoaleatorio entre 10 y 100 y los
muestra en pantalla, el programa terminado se ve así:

Arreglos aleatorios:
Programa 3: Máximo y Mínimo
Este programa genera un arreglo pseudoaleatorio con 20 números y valores entre 50
y 500 y muestra el valor máximo y mínimo del arreglo, el programa terminado se ve
así:

Ejemplos:
Programa 4: Número de Dígitos
El programa solicita un número de forma educada y posteriormente muestra el número
de dígitos del número ingresado, el código completo se ve así:

Ejemplos:
Programa 5: Suma de Dígitos
El programa solicita al usuario amablemente un número entero positivo, y
posteriormente muestra la suma de los dígitos del número ingresado. El programa
terminado se ve de la siguiente forma:

Ejemplos:
Programa 6: Burbuja
Este programa muestra primero un arreglo de 10,000 números con valores entre 1 y
100,000 y después muestra ese arreglo ordenado, el programa terminado se ve así:
Arreglo desordenado:

Arreglo ordenado:
Programa 7: Serie de Hailstone
El programa solicita un número para calcular la serie de Hailstone y a partir de este
número comienza hasta llegar a 1, el código terminado se ve de esta forma:

Ejemplos:
Programa 8: Serie de Leibniz
𝜋
Este programa muestra una aproximación del valor de 4 , el valor dependerá de la
variable m que puede ser modificada para tener mas precisión, el programa terminado
se ve así:

Ejemplos con distintos valores de m:


m=10

m=500

m=3000

𝜋
Considerando que el valor numérico de 4 ≈ 0.78539816339. .. entonces podemos
observar como en cada aumento de m el valor se acerca poco a poco mas al valor
𝜋
de 4
Programa 9: Secuencia de Fibonacci
Este programa solicita al usuario los valores iniciales de una secuencia de Fibonacci y
el número de términos en la secuecia y muestra una secuencia de Fibonacci con los
valores ingresados, el programa concluido se ve de la siguiente forma:

Ejemplos:
Programa 10: Número áureo
El programa solicita dos números para inicializar una secuencia de Fibonacci hasta
que el valor absoluto de la diferencia de las razones de valores adyacentes sea de
0.001 o menor, el código se ve de la siguiente forma:

Ejemplos:
Conclusión
El uso de funciones en los programas hace que el código principal se vea mucho mas
limpio y sea más fácil de detectar errores, ya que el código está seccionado en
diversas tareas que se hacen por separado y se unen en el main para realizar una
tarea principal. Para usar estas funciones se pueden crear bibliotecas de funciones
que permiten utilizarlas en múltiples programas sin la necesidad de crear estas
funciones en cada uno de estos programas, lo cual facilita aun mas tareas repetitivas,
se pueden crear bibliotecas de funciones para diversas tareas, como en este caso,
operaciones de matrices y arreglos.
La recursividad en las funciones es de suma utilidad ya que permite sustituir a
sentencias cíclicas como for o while, con la diferencia de que no puede iterar de
forma infinita porque la memoria stack se llenará rápidamente.
Existen dos “tipos” de funciones, int (o la variable de c deseada) y void, int devolverá
un valor, ya sea un entero, flotante, carácter, doble etc. Mientras que void
propiamente no devolverá nada, pero si se pueden declarar valores dentro de esta
función, lo que es muy útil para la creación de arreglos e int es útil cuando se
requiere devolver un valor al programa.

También podría gustarte