Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FUNDAMENTOS DE PROGRAMACIÓN
2024630521
Introducción………………………………………………………………………………04
Marco Teórico…………………………………………………………………………….09
Desarrollo…………………………………………………………………………………12
2.1 Apuntadores……………………………………………...………………..…12
2.3 Funciones………………………………………….…………………………18
2.3.1 Funciones………………………………………..…………………………18
Conclusión………..………………………………………………………………………25
Bibliografía……………………………………………………………………………..…27
Introducción
Los apuntadores son uno de los conceptos más poderosos y, a veces, complicados
en la programación. En esencia, un apuntador es una variable que almacena la
dirección de memoria de otra variable. Esto permite un mayor control sobre los datos
y una gestión más eficiente de la memoria en programas. Los apuntadores se
utilizan para acceder y manipular datos en lugar de copiarlos, lo que ahorra recursos
y mejora el rendimiento de las aplicaciones.
Los apuntadores son una herramienta poderosa, pero también pueden ser fuente
de errores difíciles de depurar, como las referencias a direcciones de memoria
incorrectas (errores de segmentación) o fugas de memoria. Por lo tanto, es esencial
comprender y utilizar los apuntadores con cuidado y seguir prácticas recomendadas
para evitar problemas en el código.
Pasemos ahora a los tipos de datos estructurados. Los tipos de datos estructurados
son aquellos que permiten combinar varios valores en una sola entidad. Ejemplos
comunes de tipos de datos estructurados incluyen estructuras, uniones y clases en
lenguajes orientados a objetos.
Las estructuras permiten a los programadores definir un nuevo tipo de dato que
puede contener múltiples campos o variables de diferentes tipos. Esto es útil para
representar entidades complejas en un programa. Por ejemplo, se puede utilizar
una estructura para definir un tipo de dato "persona" con campos como nombre,
edad y dirección.
Las uniones son similares a las estructuras, pero solo almacenan un valor a la vez.
Esto puede ser útil cuando se necesita representar diferentes tipos de datos en una
sola entidad. Por ejemplo, una unión podría ser utilizada para almacenar una fecha
como día, mes y año, pero solo uno de estos campos estaría ocupado en un
momento dado.
Las clases son el concepto de tipo de dato estructurado más común en lenguajes
de programación orientados a objetos como Java, C# y Python. Las clases permiten
definir objetos con propiedades (campos) y comportamiento (métodos). Esto facilita
la creación de programas más organizados y reutilizables al modelar entidades del
mundo real y su interacción.
Además de los apuntadores y los tipos de datos estructurados, las funciones son
una parte fundamental de la programación. Las funciones permiten dividir un
programa en módulos más pequeños y manejables. Cada función realiza una tarea
específica y puede ser llamada desde otras partes del programa.
Las funciones son esenciales para la reutilización de código, ya que una función
bien diseñada y probada puede ser llamada en múltiples lugares sin duplicar el
código. Esto mejora la legibilidad y el mantenimiento del programa, ya que los
errores solo deben corregirse en un solo lugar.
Al crear una función, se definen sus parámetros y su tipo de retorno. Los parámetros
son valores que se pasan a la función cuando se llama y pueden utilizarse dentro
de la función. El tipo de retorno especifica qué tipo de valor devuelve la función una
vez que ha completado su tarea.
Las funciones pueden ser llamadas de manera recursiva, lo que significa que una
función puede llamarse a sí misma. Esto es útil en algoritmos recursivos, como el
cálculo de números factoriales o la búsqueda en árboles binarios.
Los apuntadores, los tipos de datos estructurados y las funciones son conceptos
esenciales en la programación. Los apuntadores permiten un mayor control sobre
la memoria y la manipulación de datos, mientras que los tipos de datos
estructurados permiten la creación de estructuras de datos complejas y
organizadas. Las funciones dividen el programa en módulos reutilizables y mejoran
la legibilidad y el mantenimiento del código. Comprender y dominar estos conceptos
es fundamental para convertirse en un programador eficiente y competente.
Marco Teórico
Tipos de Datos Estructurados: Los tipos de datos estructurados son una extensión
natural de los tipos de datos simples (enteros, flotantes, caracteres, etc.). Permiten
combinar múltiples valores en una sola entidad, lo que es fundamental para
representar estructuras de datos más complejas. Algunos de los tipos de datos
estructurados más comunes son:
• Estructuras: Las estructuras permiten definir un nuevo tipo de dato que puede
contener múltiples campos de diferentes tipos. Por ejemplo, se puede definir
una estructura "Persona" con campos para el nombre, la edad y la dirección.
• Uniones: Las uniones son similares a las estructuras, pero solo almacenan
un valor a la vez. Esto puede ser útil cuando se necesita representar
diferentes tipos de datos en una sola entidad, como en el caso de una unión
que almacena una fecha o una hora.
• Clases (en lenguajes orientados a objetos): En lenguajes de programación
orientados a objetos como Java y C#, las clases son tipos de datos
estructurados que combinan datos (atributos) y comportamiento (métodos).
Las clases permiten modelar entidades del mundo real y su interacción de
manera más efectiva.
• Enumeraciones: Las enumeraciones son un tipo de datos estructurados que
permiten definir un conjunto de constantes con nombres descriptivos. Esto
mejora la legibilidad y el mantenimiento del código.
• Tipos de Datos Abstractos (ADT): Los ADT son tipos de datos estructurados
definidos por el usuario que encapsulan datos y operaciones relacionadas.
Los ADT son una parte fundamental de la programación orientada a objetos
y permiten la creación de abstracciones más complejas.
Los apuntadores, los tipos de datos estructurados y las funciones son conceptos
fundamentales en la programación que permiten una gestión eficiente de los datos,
la creación de estructuras de datos complejas y la división de un programa en
módulos reutilizables. Comprender estos conceptos es esencial para desarrollar
software eficiente y bien estructurado.
Desarrollo
2.1 Apuntadores
El operador & devuelve la dirección de una variable y se puede recordar con “la
dirección de”.
’&’: este operador es de dirección y se usa para obtener la dirección de una variable.
’*’: este operador es de indirección y se usa para acceder al valor al que apunta un
apuntador. Recuerda que, si queremos modificar el valor del apuntador, ya no
requerimos del operador asterisco.
Operaciones aritméticas:
a[i] es equivalente a decir *(a+i). ‘a’ solo es la dirección de memoria del primer
elemento del arreglo, es decir &a[0].
Los datos definidos por el usuario son tipos de datos personalizados que sedefinen
por el programador. Estos tipos de datos se pueden utilizar para representar datos
que no se pueden representar con los tipos de datos incorporados, comodatos
complejos o estructuras de datos.
Tipos de UDTS:
Las estructuras anidadas en lenguaje C son una forma de organizar datos complejos
en una sola estructura. Una estructura anidada es una estructura dentro de otra
estructura. Esto permite una mayor flexibilidad en la organización de los datos y
facilita el acceso a ellos.
2.3 Funciones
2.3.1 Funciones
Los parámetros son variables definidas en la declaración de una función que actúan
como marcadores de posición para los valores que la función espera recibir. Estos
parámetros permiten que la función sea más flexible y pueda operar en diferentes
datos. Los parámetros son parte de la firma de la función y se especifican cuando
se define la función.
Los argumentos son los valores reales que se pasan a una función cuando se la
llama. Estos valores llenan los marcadores de posición representados por los
parámetros en la función. Los argumentos se proporcionan cuando se llama a la
función y deben coincidir en número y tipo con los parámetros de la función.
En el paso por valor, los argumentos se pasan a la función copiando su valor en una
variable local dentro de la función. Esto significa que cualquier modificación
realizada a la variable dentro de la función no afecta a la variable original en el punto
de llamada. En esencia, la función trabaja con copias de los datos originales.
En el paso por referencia, se pasa a la función una referencia o dirección de
memoria de la variable original en lugar de copiar su valor. Esto significa que
cualquier modificación realizada a la variable dentro de la función afecta
directamente a la variable original en el punto de llamada. El paso por referencia es
común en lenguajes de programación que admiten punteros o referencias explícitas.
Las funciones recursivas tienen similitud con los bucles, pero no están basados en
una declaración condicional. La función se llama siempre que se requiere el mismo
código para ejecutarse de forma reiterada.
2.4.1 Recursión
Es aquella propiedad que posee una función que puede llamarse a sí misma. Sin
que se repita un número infinito de veces
Los pasos recursivos son las llamadas adicionales a la función que se hacen dentro
de la propia función. En estos pasos, la función se llama a sí misma con un conjunto
de datos más pequeño o modificado. La idea es que la función se resuelve de
manera progresiva a través de llamadas recursivas hasta que alcanza un paso base
que detiene la recursión.
La combinación de pasos base y pasos recursivos permite que las funciones
recursivas aborden problemas de manera más simple y eficiente. Los pasos base
garantizan que la recursión se detenga en algún momento, mientras que los pasos
recursivos permiten que la función se aproxime al resultado deseado resolviendo
instancias más pequeñas del problema en cada llamada recursiva.
Los apuntadores son una característica poderosa, pero también pueden ser una
fuente de errores sutiles. Almacenar direcciones de memoria y acceder a datos en
la memoria directamente permite una mayor flexibilidad y eficiencia en la gestión de
datos. Sin embargo, también introduce el riesgo de errores de segmentación y fugas
de memoria si no se manejan adecuadamente. Para evitar estos problemas, es
crucial seguir prácticas recomendadas al trabajar con apuntadores, como
inicializarlos correctamente, liberar la memoria asignada dinámicamente y
garantizar que los apuntadores se utilicen solo para acceder a la memoria a la que
tienen permiso.
Los tipos de datos estructurados, como las estructuras, las uniones y las clases (en
lenguajes orientados a objetos), permiten a los programadores crear abstracciones
más complejas y organizadas. Estos tipos de datos son esenciales para representar
entidades del mundo real y sus relaciones en programas. Las estructuras, por
ejemplo, se utilizan para definir tipos de datos personalizados que contienen
múltiples campos de diferentes tipos, lo que facilita la representación de conceptos
complejos. Las clases llevan esto un paso más allá al permitir la encapsulación de
datos y comportamiento en una sola entidad, promoviendo la reutilización y la
organización del código.
• http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro4/412_relaciones_
entre_apuntadores_y_arreglos.html
• https://lenguajeprogramacionc.wordpress.com/apuntadores-y-arreglos/
• https://es.slideshare.net/diegoandresalvarez/08-punteros
• https://codingornot.com/03-apuntadores-null-y-aritmetica-conapuntadores
• https://www.uv.mx/personal/ermeneses/files/2021/08/Clase3-
AlmacenamientoDinamico-Apuntadores.pdf