El documento define punteros y gestión de memoria dinámica. Específicamente, explica que un puntero es una variable que contiene la dirección de memoria de otra variable, permitiendo acceder a zonas de memoria dinámica. También describe cómo crear variables dinámicas usando el operador new y liberar la memoria asignada con delete una vez que ya no se necesita la variable.
El documento describe las estructuras en C++. Explica que una estructura permite almacenar valores de diferentes tipos de datos bajo un nombre. Luego presenta un ejemplo de estructura para registrar información de circuitos integrados que incluye el número de parte, familia, tipo de función, voltaje y unidades en existencia. Finalmente, muestra cómo declarar e inicializar variables de estructuras en C++.
Este documento describe el entorno de desarrollo Pipeh PSeudo Interprete 1.1. Incluye una descripción de los elementos de la interfaz gráfica como menús y áreas de trabajo. También explica la sintaxis básica del pseudocódigo admitido como asignaciones, entrada/salida, dimensionamiento de arreglos, estructuras de control de flujo como condicionales, repetitivas y de selección múltiple. El documento proporciona instrucciones sobre cómo utilizar el entorno para editar, ejecutar y depurar algoritmos escrit
Este documento describe diferentes formas de representar algoritmos, incluyendo pseudocódigo y diagramas de flujo. Explica que el pseudocódigo se compone de una cabecera, declaraciones y un cuerpo de instrucciones. También cubre expresiones, acciones secuenciales como asignación y entrada/salida, y estructuras de control como si-entonces y según para manejar condiciones lógicas y valores variables. Proporciona ejemplos de cada uno de estos conceptos.
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Kiim Kerrigan
1) El documento presenta 20 algoritmos en lenguaje C con ejemplos de código para calcular diferentes operaciones matemáticas y lógicas como promedios, áreas, conversiones de unidades, comparaciones y más.
2) Los algoritmos van desde cálculos simples como sumas y promedios hasta operaciones más complejas como determinar si un número está en un rango específico o calcular el costo de una llamada telefónica.
3) El documento provee el código completo en C para cada algoritmo junto con explicaciones breves sobre lo que cada programa calcul
Este documento describe los tipos de datos abstractos (TDA), que son tipos de datos definidos por el programador que pueden manipularse mediante operaciones primitivas. Explica que un TDA está formado por un conjunto de elementos válidos y operaciones que se pueden realizar sobre ellos. Además, detalla que un TDA debe tener una interfaz de utilización que defina las operaciones y ocultar la representación interna de los datos.
Este documento describe las propiedades y funcionalidad de las estructuras de datos pilas y colas. Las pilas siguen el orden LIFO (último en entrar, primero en salir) mientras que las colas siguen el orden FIFO (primero en entrar, primero en salir). Se proveen ejemplos de cómo se usan pilas y colas en la vida cotidiana y en programación, y se explican sus estados, acciones, y cómo manipular elementos dentro de cada estructura de datos.
El documento describe las estructuras en C. Una estructura permite agrupar múltiples variables de diferentes tipos bajo un nombre. Las estructuras se definen usando la palabra clave struct y contienen campos que almacenan los datos. Las estructuras permiten manipular conjuntos de datos relacionados como un solo objeto.
La memoria dinámica se reserva en tiempo de ejecución y su tamaño puede variar durante la ejecución del programa. Esto permite asignar memoria de forma precisa según se vaya necesitando. Las funciones malloc, calloc, realloc y free permiten gestionar la memoria dinámica asignando, inicializando, redimensionando y liberando memoria de forma dinámica.
El documento describe las estructuras en C++. Explica que una estructura permite almacenar valores de diferentes tipos de datos bajo un nombre. Luego presenta un ejemplo de estructura para registrar información de circuitos integrados que incluye el número de parte, familia, tipo de función, voltaje y unidades en existencia. Finalmente, muestra cómo declarar e inicializar variables de estructuras en C++.
Este documento describe el entorno de desarrollo Pipeh PSeudo Interprete 1.1. Incluye una descripción de los elementos de la interfaz gráfica como menús y áreas de trabajo. También explica la sintaxis básica del pseudocódigo admitido como asignaciones, entrada/salida, dimensionamiento de arreglos, estructuras de control de flujo como condicionales, repetitivas y de selección múltiple. El documento proporciona instrucciones sobre cómo utilizar el entorno para editar, ejecutar y depurar algoritmos escrit
Este documento describe diferentes formas de representar algoritmos, incluyendo pseudocódigo y diagramas de flujo. Explica que el pseudocódigo se compone de una cabecera, declaraciones y un cuerpo de instrucciones. También cubre expresiones, acciones secuenciales como asignación y entrada/salida, y estructuras de control como si-entonces y según para manejar condiciones lógicas y valores variables. Proporciona ejemplos de cada uno de estos conceptos.
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Kiim Kerrigan
1) El documento presenta 20 algoritmos en lenguaje C con ejemplos de código para calcular diferentes operaciones matemáticas y lógicas como promedios, áreas, conversiones de unidades, comparaciones y más.
2) Los algoritmos van desde cálculos simples como sumas y promedios hasta operaciones más complejas como determinar si un número está en un rango específico o calcular el costo de una llamada telefónica.
3) El documento provee el código completo en C para cada algoritmo junto con explicaciones breves sobre lo que cada programa calcul
Este documento describe los tipos de datos abstractos (TDA), que son tipos de datos definidos por el programador que pueden manipularse mediante operaciones primitivas. Explica que un TDA está formado por un conjunto de elementos válidos y operaciones que se pueden realizar sobre ellos. Además, detalla que un TDA debe tener una interfaz de utilización que defina las operaciones y ocultar la representación interna de los datos.
Este documento describe las propiedades y funcionalidad de las estructuras de datos pilas y colas. Las pilas siguen el orden LIFO (último en entrar, primero en salir) mientras que las colas siguen el orden FIFO (primero en entrar, primero en salir). Se proveen ejemplos de cómo se usan pilas y colas en la vida cotidiana y en programación, y se explican sus estados, acciones, y cómo manipular elementos dentro de cada estructura de datos.
El documento describe las estructuras en C. Una estructura permite agrupar múltiples variables de diferentes tipos bajo un nombre. Las estructuras se definen usando la palabra clave struct y contienen campos que almacenan los datos. Las estructuras permiten manipular conjuntos de datos relacionados como un solo objeto.
La memoria dinámica se reserva en tiempo de ejecución y su tamaño puede variar durante la ejecución del programa. Esto permite asignar memoria de forma precisa según se vaya necesitando. Las funciones malloc, calloc, realloc y free permiten gestionar la memoria dinámica asignando, inicializando, redimensionando y liberando memoria de forma dinámica.
ESTRUCTURA DE DATOS: MEMORIA ESTATICA
La memoria estática es la que no se puede modificar o ejecutar en momento de ejecución. También se debe conocer con anticipo el tamaño de la estructura que está en ejecución.
ITESZ
Este programa C imprime los primeros n números de la serie de Fibonacci. Solicita al usuario que ingrese un número n y luego usa una fórmula recursiva y un bucle for para calcular e imprimir los números de Fibonacci desde 0 hasta el n-ésimo término, separados por comas. Finalmente, devuelve el valor 5.
Ejercicios resueltos en el Laboratorio de estructuras struct registrosrasave
Estructuras struct lenguaje C, declaración de estructuras struct, definición de estructuras struct, asignación de estructuras struct, acceso a los miembros de la estructura struct, operadores para el acceso a estructuras struct, operador punto, operador flecha
Este documento resume las estructuras de control básicas como secuencia, selección y repetición. Explica las estructuras IF-THEN-ELSE, SELECT-CASE, WHILE-DO, REPEAT-UNTIL y FOR para controlar el flujo de un algoritmo. Proporciona ejemplos de pseudocódigo que ilustran el uso de estas estructuras para resolver problemas como determinar si un número es positivo, negativo o nulo, realizar conversiones de unidades y sumar valores repetidamente. Concluye que las estructuras de control son útiles para solucionar problemas inform
Este documento presenta una introducción a Python 3. Explica que Python es un lenguaje de programación interpretado, de alto nivel y orientado a objetos. Resume la historia de Python y sus características principales. Luego, introduce conceptos básicos como variables, tipos de datos, colecciones de datos, operadores y estructuras de control. Finalmente, explica temas más avanzados como funciones, excepciones, programación orientada a objetos y manejo de archivos.
Este documento describe las tuplas en Python. Las tuplas son secuencias inmutables de valores que se agrupan entre paréntesis. Se pueden crear, acceder a sus elementos, comparar y iterar sobre tuplas. Las tuplas se usan comúnmente para representar puntos, fechas y tablas de datos.
El documento contiene 10 ejercicios de programación que resuelven problemas utilizando estructuras condicionales if. Cada ejercicio pide ingresar datos y muestra el resultado de evaluar una o más condiciones sobre esos datos. Los ejercicios incluyen calcular promedios, determinar el mayor o menor número, verificar si un número es par o impar, positivo o negativo, y resolver otros problemas matemáticos y lógicos.
Este documento trata sobre cadenas en C. Explica cómo se representan las cadenas en C como arreglos unidimensionales de caracteres terminados por un carácter nulo. También cubre temas como la lectura de cadenas desde el teclado, las bibliotecas estándar ctype.h y string.h para la manipulación de cadenas, y la conversión de tipos entre cadenas y otros tipos de datos en C. Finalmente, incluye algunos ejercicios de práctica sobre estos temas.
Este documento explica las pilas y colas como tipos abstractos de datos. Detalla que las pilas siguen el orden LIFO (último en entrar, primero en salir), mientras que las colas siguen FIFO (primero en entrar, primero en salir). Describe las operaciones básicas de cada una como apilar/desapilar y encolar/desencolar. También incluye ejemplos de código Java para implementar pilas y colas.
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,Miguel Brunings
Este documento describe diferentes tipos de flip-flops digitales, incluyendo J-K, D, RS, T. Explica sus tablas de verdad y características de funcionamiento, como cómo cambian sus estados de salida en respuesta a las entradas y pulsos de reloj. También muestra diagramas de implementaciones comunes usando compuertas lógicas como NAND y XOR.
El documento presenta 8 ejercicios que utilizan bucles do while para leer números ingresados por el usuario hasta que se ingresa un cero. Los ejercicios incluyen sumar números leídos, calcular promedios, identificar el número mayor, calcular totales de facturas, sumar números impares, e imprimir múltiplos de 3 y de 3 y 5 entre rangos específicos.
Python es un lenguaje de programación dinámico e interpretado que ofrece tipado dinámico, fuerte tipado, flexibilidad y portabilidad. Sus principales características incluyen una sintaxis limpia y legible similar al pseudocódigo, una amplia biblioteca estándar y ser multiplataforma. Python se puede utilizar para el desarrollo web, bases de datos, software, juegos, bioinformática, física y educación.
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...rasave
El programa permite al usuario introducir los nombres, edades y alturas de 10 jugadores. Luego muestra un menú con opciones para listar los nombres, alturas o edades de los jugadores. Usa una estructura para almacenar la información de cada jugador y funciones para recopilar los datos, mostrar el menú y listar la información según la opción seleccionada.
Este documento presenta una guía didáctica para la asignatura de Algoritmos y Estructuras de Datos. Está dividido en 16 semanas que cubren temas como algoritmos, estructuras de datos lineales y no lineales, y aplicaciones. Incluye índice, introducción, y contenido para cada semana sobre conceptos fundamentales como algoritmos, estructuras de datos, tipos abstractos de datos, listas, pilas, colas, árboles y grafos.
Este documento introduce el lenguaje de programación Python. Explica que Python fue diseñado a finales de los años 80 y es un lenguaje de alto nivel, legible y versátil. A continuación, presenta ejemplos de código Python que muestran funciones básicas como imprimir texto, realizar cálculos matemáticos, usar condicionales y bucles.
El documento presenta 6 programas en Java que resuelven problemas matemáticos y financieros comunes. El primer programa calcula el área de un triángulo, el segundo calcula el salario de un vendedor, y el tercero identifica la cantidad de billetes necesarios para una cantidad dada.
La memoria dinámica permite asignar memoria de forma variable durante la ejecución del programa. Se reserva en la zona libre de memoria principal llamada heap. Su principal ventaja es que el tamaño puede variar, solucionando problemas cuando no se conoce el número de datos por adelantado. El programador es responsable de liberar la memoria dinámica cuando ya no se necesite más mediante funciones como free(), malloc(), calloc() y realloc().
Este documento presenta una introducción al lenguaje de programación LPP. Explica cómo instalar LPP, escribir el primer programa "Hola Mundo", declarar variables, usar operadores matemáticos, instrucciones condicionales como si, si anidado, caso, y ciclos como mientras, para, repita, entre otros. También cubre procedimientos, funciones, registros y arreglos unidimensionales y bidimensionales.
El documento presenta ejemplos y ejercicios sobre la estructura repetitiva "mientras" en el lenguaje de programación PSeInt. Incluye tres ejemplos resueltos que calculan salarios de trabajadores, encuentra números primos entre 1 y 100, y suma números de 0 a un valor n. También propone siete ejercicios para practicar con esta estructura de control, como sumar los primeros 100 enteros o imprimir una tabla de multiplicar.
El documento explica los apuntadores en C, los cuales son variables que almacenan direcciones de memoria y permiten acceder indirectamente a los valores almacenados en esas direcciones. Los apuntadores son importantes en C porque a veces son la única forma de expresar ciertos cálculos, permiten generar código más compacto y eficiente, y son una herramienta poderosa pero que requiere cuidado al usar. El documento describe la declaración, inicialización y operadores de los apuntadores, así como su uso con arreglos y funciones.
1.1.5 Gestion de Memoria dinámica con TDA.pptxFernando Solis
Este documento describe los conceptos básicos de la memoria dinámica y los punteros en C++. Explica que las estructuras de datos dinámicas se generan a partir de referencias o direcciones de memoria. Luego divide las estructuras de datos en lineales como pilas, colas y listas enlazadas, y no lineales como árboles y grafos. Finalmente, detalla el uso de punteros mediante operadores como & para direcciones, * para contenido, = para asignación, new para reservar memoria y delete para liberarla.
ESTRUCTURA DE DATOS: MEMORIA ESTATICA
La memoria estática es la que no se puede modificar o ejecutar en momento de ejecución. También se debe conocer con anticipo el tamaño de la estructura que está en ejecución.
ITESZ
Este programa C imprime los primeros n números de la serie de Fibonacci. Solicita al usuario que ingrese un número n y luego usa una fórmula recursiva y un bucle for para calcular e imprimir los números de Fibonacci desde 0 hasta el n-ésimo término, separados por comas. Finalmente, devuelve el valor 5.
Ejercicios resueltos en el Laboratorio de estructuras struct registrosrasave
Estructuras struct lenguaje C, declaración de estructuras struct, definición de estructuras struct, asignación de estructuras struct, acceso a los miembros de la estructura struct, operadores para el acceso a estructuras struct, operador punto, operador flecha
Este documento resume las estructuras de control básicas como secuencia, selección y repetición. Explica las estructuras IF-THEN-ELSE, SELECT-CASE, WHILE-DO, REPEAT-UNTIL y FOR para controlar el flujo de un algoritmo. Proporciona ejemplos de pseudocódigo que ilustran el uso de estas estructuras para resolver problemas como determinar si un número es positivo, negativo o nulo, realizar conversiones de unidades y sumar valores repetidamente. Concluye que las estructuras de control son útiles para solucionar problemas inform
Este documento presenta una introducción a Python 3. Explica que Python es un lenguaje de programación interpretado, de alto nivel y orientado a objetos. Resume la historia de Python y sus características principales. Luego, introduce conceptos básicos como variables, tipos de datos, colecciones de datos, operadores y estructuras de control. Finalmente, explica temas más avanzados como funciones, excepciones, programación orientada a objetos y manejo de archivos.
Este documento describe las tuplas en Python. Las tuplas son secuencias inmutables de valores que se agrupan entre paréntesis. Se pueden crear, acceder a sus elementos, comparar y iterar sobre tuplas. Las tuplas se usan comúnmente para representar puntos, fechas y tablas de datos.
El documento contiene 10 ejercicios de programación que resuelven problemas utilizando estructuras condicionales if. Cada ejercicio pide ingresar datos y muestra el resultado de evaluar una o más condiciones sobre esos datos. Los ejercicios incluyen calcular promedios, determinar el mayor o menor número, verificar si un número es par o impar, positivo o negativo, y resolver otros problemas matemáticos y lógicos.
Este documento trata sobre cadenas en C. Explica cómo se representan las cadenas en C como arreglos unidimensionales de caracteres terminados por un carácter nulo. También cubre temas como la lectura de cadenas desde el teclado, las bibliotecas estándar ctype.h y string.h para la manipulación de cadenas, y la conversión de tipos entre cadenas y otros tipos de datos en C. Finalmente, incluye algunos ejercicios de práctica sobre estos temas.
Este documento explica las pilas y colas como tipos abstractos de datos. Detalla que las pilas siguen el orden LIFO (último en entrar, primero en salir), mientras que las colas siguen FIFO (primero en entrar, primero en salir). Describe las operaciones básicas de cada una como apilar/desapilar y encolar/desencolar. También incluye ejemplos de código Java para implementar pilas y colas.
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,Miguel Brunings
Este documento describe diferentes tipos de flip-flops digitales, incluyendo J-K, D, RS, T. Explica sus tablas de verdad y características de funcionamiento, como cómo cambian sus estados de salida en respuesta a las entradas y pulsos de reloj. También muestra diagramas de implementaciones comunes usando compuertas lógicas como NAND y XOR.
El documento presenta 8 ejercicios que utilizan bucles do while para leer números ingresados por el usuario hasta que se ingresa un cero. Los ejercicios incluyen sumar números leídos, calcular promedios, identificar el número mayor, calcular totales de facturas, sumar números impares, e imprimir múltiplos de 3 y de 3 y 5 entre rangos específicos.
Python es un lenguaje de programación dinámico e interpretado que ofrece tipado dinámico, fuerte tipado, flexibilidad y portabilidad. Sus principales características incluyen una sintaxis limpia y legible similar al pseudocódigo, una amplia biblioteca estándar y ser multiplataforma. Python se puede utilizar para el desarrollo web, bases de datos, software, juegos, bioinformática, física y educación.
Programación II CIP200 Ejercicios resueltos en el Laboratorio de estructuras ...rasave
El programa permite al usuario introducir los nombres, edades y alturas de 10 jugadores. Luego muestra un menú con opciones para listar los nombres, alturas o edades de los jugadores. Usa una estructura para almacenar la información de cada jugador y funciones para recopilar los datos, mostrar el menú y listar la información según la opción seleccionada.
Este documento presenta una guía didáctica para la asignatura de Algoritmos y Estructuras de Datos. Está dividido en 16 semanas que cubren temas como algoritmos, estructuras de datos lineales y no lineales, y aplicaciones. Incluye índice, introducción, y contenido para cada semana sobre conceptos fundamentales como algoritmos, estructuras de datos, tipos abstractos de datos, listas, pilas, colas, árboles y grafos.
Este documento introduce el lenguaje de programación Python. Explica que Python fue diseñado a finales de los años 80 y es un lenguaje de alto nivel, legible y versátil. A continuación, presenta ejemplos de código Python que muestran funciones básicas como imprimir texto, realizar cálculos matemáticos, usar condicionales y bucles.
El documento presenta 6 programas en Java que resuelven problemas matemáticos y financieros comunes. El primer programa calcula el área de un triángulo, el segundo calcula el salario de un vendedor, y el tercero identifica la cantidad de billetes necesarios para una cantidad dada.
La memoria dinámica permite asignar memoria de forma variable durante la ejecución del programa. Se reserva en la zona libre de memoria principal llamada heap. Su principal ventaja es que el tamaño puede variar, solucionando problemas cuando no se conoce el número de datos por adelantado. El programador es responsable de liberar la memoria dinámica cuando ya no se necesite más mediante funciones como free(), malloc(), calloc() y realloc().
Este documento presenta una introducción al lenguaje de programación LPP. Explica cómo instalar LPP, escribir el primer programa "Hola Mundo", declarar variables, usar operadores matemáticos, instrucciones condicionales como si, si anidado, caso, y ciclos como mientras, para, repita, entre otros. También cubre procedimientos, funciones, registros y arreglos unidimensionales y bidimensionales.
El documento presenta ejemplos y ejercicios sobre la estructura repetitiva "mientras" en el lenguaje de programación PSeInt. Incluye tres ejemplos resueltos que calculan salarios de trabajadores, encuentra números primos entre 1 y 100, y suma números de 0 a un valor n. También propone siete ejercicios para practicar con esta estructura de control, como sumar los primeros 100 enteros o imprimir una tabla de multiplicar.
El documento explica los apuntadores en C, los cuales son variables que almacenan direcciones de memoria y permiten acceder indirectamente a los valores almacenados en esas direcciones. Los apuntadores son importantes en C porque a veces son la única forma de expresar ciertos cálculos, permiten generar código más compacto y eficiente, y son una herramienta poderosa pero que requiere cuidado al usar. El documento describe la declaración, inicialización y operadores de los apuntadores, así como su uso con arreglos y funciones.
1.1.5 Gestion de Memoria dinámica con TDA.pptxFernando Solis
Este documento describe los conceptos básicos de la memoria dinámica y los punteros en C++. Explica que las estructuras de datos dinámicas se generan a partir de referencias o direcciones de memoria. Luego divide las estructuras de datos en lineales como pilas, colas y listas enlazadas, y no lineales como árboles y grafos. Finalmente, detalla el uso de punteros mediante operadores como & para direcciones, * para contenido, = para asignación, new para reservar memoria y delete para liberarla.
Este documento explica conceptos básicos de programación como funciones estándar, entrada y salida de datos, funciones definidas por el usuario, paso de parámetros y punteros. Define funciones como printf() y describe cómo se usan funciones estándar y definidas por el usuario, incluido cómo se pasan parámetros y se devuelven valores. También explica la diferencia entre paso por valor y paso por referencia.
El documento describe diferentes conceptos relacionados con la programación, incluyendo qué es un programa, lenguaje de programación, programador, y tipos de datos comunes en C++ como enteros, flotantes, caracteres, cadenas, punteros y tipos de datos de Windows. También discute conceptos como problemas, algoritmos, y fases para resolver problemas.
El documento proporciona una introducción a conceptos básicos de programación como programas, lenguajes de programación, programadores, problemas, algoritmos y fases para la resolución de problemas. También incluye preguntas de diagnóstico sobre estos temas y sobre los tipos de datos y lenguajes de programación que el lector conoce.
El documento proporciona una introducción a conceptos básicos de programación como programas, lenguajes de programación, programadores, problemas, algoritmos y fases para la resolución de problemas. También incluye preguntas de diagnóstico sobre estos temas y sobre los tipos de datos y lenguajes de programación que el lector conoce. Finalmente, presenta tablas sobre tipos de datos en C++ y reglas para el uso de identificadores.
El documento describe los diferentes tipos de memoria y funciones para administrarla en C. La memoria estática se asigna en tiempo de compilación y es más rápida, mientras que la memoria dinámica se asigna en tiempo de ejecución usando funciones como malloc(), calloc() y realloc(). Los apuntadores almacenan direcciones de memoria y son una herramienta poderosa pero deben usarse con cuidado para evitar errores.
El documento proporciona información sobre conceptos básicos de programación como programas, lenguajes de programación, programadores, problemas, algoritmos y fases para la resolución de problemas. También incluye preguntas de diagnóstico sobre estos temas y conocimientos del lector sobre lenguajes de programación.
Este documento describe los diferentes tipos de datos en C++. Incluye tipos fundamentales como int y double, tipos definidos por el usuario como clases y estructuras, y tipos de cadenas como std::string. También cubre punteros, tipos de Windows específicos y más. El sistema de tipos de C++ es estricto y cada variable y expresión debe tener un tipo especificado o inferido.
Este documento describe los diferentes tipos de datos en C++. Incluye tipos fundamentales como int y double, tipos definidos por el usuario como clases y estructuras, y tipos de cadenas como std::string. También cubre punteros, tipos de Windows específicos y más. El sistema de tipos de C++ es estricto y cada variable y expresión debe tener un tipo asignado.
Este documento explica el concepto de código inseguro en C# y el uso de punteros. Para resumir:
1) El código inseguro permite el uso de punteros, los cuales pueden acceder directamente a la memoria de forma más eficiente pero también insegura.
2) Para compilar código inseguro hay que indicar la opción "/unsafe" al compilador.
3) El código inseguro debe marcarse con la palabra "unsafe".
Semana 1-Conceptualización del lenguaje de programación C++luzgaray6
Este documento describe los conceptos básicos del lenguaje de programación C++, incluyendo la estructura de un programa en C++, tipos de datos como enteros, reales y caracteres, constantes y variables, y funciones. Explica elementos como directivas de preprocesador, la función principal main, comentarios, y tipos de datos fundamentales en C++.
Este documento describe la implementación de tipos abstractos de datos en el lenguaje Merlí. Explica que una vez definido un tipo abstracto, se pueden construir diversas implementaciones usando un lenguaje de programación. Luego, detalla los mecanismos que provee Merlí para codificar los tipos de datos, como representar tipos y escribir funciones y acciones. Finalmente, resume los tipos básicos que ofrece Merlí y las sentencias que permite para escribir programas.
El documento presenta una introducción al lenguaje de programación C, describiendo su historia, características, elementos básicos como variables, operadores, sentencias y estructura de un programa en C. Explica conceptos como tipos de datos, constantes, identificadores, comentarios, declaración de variables, funciones, arreglos y cadenas de caracteres.
Este documento presenta una introducción al lenguaje de programación C. Explica la historia y características del lenguaje C, incluyendo sus palabras reservadas, elementos de un programa como comentarios, identificadores, constantes y variables. También describe operadores, sentencias, estructura básica de un programa en C y conceptos como arreglos unidimensionales.
El documento describe los tipos de datos en C++. Explica que cada variable y función debe tener un tipo especificado. Algunos ejemplos de tipos fundamentales son int para enteros y double para números de punto flotante. También describe tipos definidos por el usuario como clases y estructuras. El tipo especifica cómo se almacenan y operan los datos.
Este documento proporciona una introducción a los fundamentos de la programación utilizando PSeint. Explica conceptos básicos como constantes, variables, acumuladores, contadores e identificadores. Describe qué es PSeint y cómo puede usarse para escribir algoritmos en pseudocódigo y crear diagramas de flujo. Concluye que PSeint es una herramienta útil para comprender los principios básicos de la programación de una manera fácil y práctica.
El documento trata sobre lenguajes de programación y estructuras de datos internas. Explica conceptos como punteros, listas enlazadas, gestión de memoria dinámica, constructores y destructores. También menciona que los punteros permiten acceder a posiciones específicas de memoria de forma dinámica y que las listas enlazadas son útiles para implementar estructuras de datos como pilas, colas, árboles y grafos.
Similar a Definición de punteros en C++ en Introducción a la Programación (20)
La Unión Europea ha acordado un embargo petrolero contra Rusia en respuesta a la invasión de Ucrania. El embargo prohibirá las importaciones marítimas de petróleo ruso a la UE y pondrá fin a las entregas a través de oleoductos dentro de seis meses. Esta medida forma parte de un sexto paquete de sanciones de la UE destinadas a aumentar la presión económica sobre Moscú y privar al Kremlin de fondos para financiar su guerra.
La Unión Europea ha acordado un paquete de sanciones contra Rusia por su invasión de Ucrania. Las sanciones incluyen restricciones a las importaciones de productos rusos de alta tecnología y de doble uso, así como la congelación de activos de bancos rusos. Los líderes de la UE también acordaron excluir a varios bancos rusos del sistema SWIFT de mensajería financiera.
Este documento presenta una actividad para que estudiantes fortalezcan sus habilidades de programación en C# incluyendo vectores, arreglos y matrices. Los estudiantes deben completar tres ejercicios ordenando y manipulando datos almacenados en vectores. El documento incluye instrucciones paso a paso y criterios de evaluación de la actividad.
Este documento presenta una guía para que estudiantes fortalezcan sus habilidades de programación en C# incluyendo vectores, arreglos y matrices. La guía incluye 7 pasos para completar la actividad y desarrollar 51 ejercicios sobre vectores. Los ejercicios cubren temas como ingresar y procesar datos almacenados en vectores, ordenar vectores, e imprimir resultados. La guía provee instrucciones claras y ejemplos para que los estudiantes mejoren programando con estructuras de datos en C#.
Este documento presenta una guía para una actividad sobre vectores en C# para estudiantes. La actividad incluye transcribir códigos de ejemplo que involucran arreglos, vectores y matrices, ejecutar los programas y probar diferentes entradas de datos, documentar los resultados y concluir sobre lo aprendido. La actividad debe completarse en 100 minutos y será evaluada en base a la corrección del código, los pasos completados, la creatividad y lógica demostradas.
Este documento presenta una guía para una actividad de programación en C# para estudiantes. La actividad tiene como objetivo que los estudiantes aprendan a programar usando clases y métodos en C#. La guía incluye 8 pasos que los estudiantes deben seguir para completar la actividad así como también incluye 4 ejercicios de programación que involucran el uso de clases. Los estudiantes serán evaluados en base a 6 criterios como la corrección del código y la creatividad en las pruebas.
Este documento presenta una guía para una actividad de programación en C# sobre cadenas de caracteres. La actividad incluye 6 pasos que el estudiante debe completar como transcribir código de muestras, verificar errores, ejecutar programas y documentar resultados. La guía también incluye 5 criterios de evaluación y presenta 33 ejercicios de programación con cadenas de caracteres que involucran ingresar y mostrar datos de personas y puntos geométricos.
Este documento presenta una guía para una actividad en la que los estudiantes codificarán estructuras iterativas en el lenguaje C#. Incluye 6 ejercicios de programación que involucran bucles y promedios. Los estudiantes deberán transcribir y probar el código, documentar los resultados y escribir conclusiones sobre la actividad en menos de 100 minutos. Serán evaluados en base a la corrección del código, los pasos completados, la creatividad y lógica de las pruebas.
El documento presenta una guía para una actividad de programación usando estructuras iterativas en C#. El objetivo es que los estudiantes codifiquen dichas estructuras. La actividad consiste en transcribir códigos de ejemplo en C# y probarlos con diferentes entradas de datos, documentando los resultados. Los criterios de evaluación incluyen la cantidad de errores, los pasos completados, la creatividad y lógica de las pruebas.
Este documento presenta una guía para una actividad en la que los estudiantes codificarán estructuras de programación usando C#. Los estudiantes transcribirán códigos provistos en C# y verificarán que funcionen correctamente. La actividad les tomará 100 minutos y será evaluada en base a la cantidad de errores, los pasos completados, la creatividad y lógica en las pruebas, y la puntualidad en la entrega. La guía incluye ejemplos de ejercicios de programación con estructuras condicionales que los estudiantes deber
El documento presenta una guía para una actividad de programación en C# donde los estudiantes codificarán estructuras de programación. Los estudiantes transcribirán 12 ejercicios de código provistos en C# y verificarán y corregirán errores. Se evaluará la cantidad de errores, los pasos completados, la creatividad en las validaciones, la lógica en las pruebas y la puntualidad en la entrega.
This document discusses various natural language processing techniques in Python, including summarizing and extracting text from PDFs, Word documents, and web pages. It also covers generating n-grams, extracting noun phrases, calculating text similarity, phonetic matching, part-of-speech tagging, named entity recognition, sentiment analysis, word sense disambiguation, speech recognition, text-to-speech, and voice translation. A variety of Python libraries are used such as NLTK, TextBlob, BeautifulSoup, and gTTS. Example code is provided for scraping movie data from IMDB and analyzing it.
Este documento presenta la sesión 1 del curso avanzado de Moodle. La sesión se centrará en grupos e introducirá las actividades de aprendizaje. Cubrirá 14 tipos diferentes de actividades en Moodle como tareas, chats, exámenes, foros y wikis. La sesión durará 3 horas.
El documento proporciona información sobre la gestión de grupos en Moodle. Explica cómo crear grupos en un nuevo curso o en uno existente, asignar estudiantes a grupos, y las ventajas de usar grupos como centralizar la administración del curso y permitir el acceso restringido a actividades y recursos.
This document provides an overview of object-oriented programming in Java. It discusses how Java code is compiled to bytecode that runs on a virtual machine, allowing it to execute on any platform. Key aspects of OOP in Java covered include classes, inheritance, polymorphism, and security features like bytecode verification. Example Java application types like applets, graphical programs, and servlets are also summarized. The document concludes by explaining what is needed to get started with Java development.
El documento explica cómo crear diagramas de clases en tres pasos: 1) identificar las principales clases y sus atributos en el sistema, 2) establecer las relaciones entre clases mediante la cardinalidad, y 3) crear el diagrama de clases completo con las clases, atributos y relaciones. Se usa un ejemplo de un sistema de venta de libros en línea para ilustrar el proceso de creación de un diagrama de clases paso a paso.
El documento describe el diseño de un diagrama de clases para modelar el proceso de dar de alta a personas en una asociación. Se identifican las clases Persona, Socio, NIF, Nombre, Fecha y sus atributos. Se definen las relaciones entre las clases, incluyendo herencia, agregación y composición.
Este documento describe el diseño de un diagrama de clases para modelar los datos de un torneo de tenis de mesa. El diagrama incluye clases como Torneo, Encuentro, Jugador y Fecha, y define sus atributos y relaciones a través de herencia, agregación y composición. El diagrama también especifica interfaces como IJugador para definir las capacidades de las clases.
Business Plan -rAIces - Agro Business Techjohnyamg20
Innovación y transparencia se unen en un nuevo modelo de negocio para transformar la economia popular agraria en una agroindustria. Facilitamos el acceso a recursos crediticios, mejoramos la calidad de los productos y cultivamos un futuro agrícola eficiente y sostenible con tecnología inteligente.
En la ciudad de Pasto, estamos revolucionando el acceso a microcréditos y la formalización de microempresarios informales con nuestra aplicación CrediAvanza. Nuestro objetivo es empoderar a los emprendedores locales proporcionándoles una plataforma integral que facilite el acceso a servicios financieros y asesoría profesional.
2. 2.8 Definición de arreglos unidimensionales y
bidimensionales.
2.9 Búsqueda, ordenación y mezcla de arreglos.
2.10 Estructura de datos.
2.11 Programación modular.
2.12 Definición de
punteros.
2.13 Estructuras dinámicas.
Unidad II: Elementos de Programación
3. 2.12 Definición de punteros.
Objetivos:
Distinguir qué son los apuntadores.
Utilizar apuntadores para pasar argumentos a las
funciones.
Conocer las estrechas relaciones entre los
apuntadores y los arreglos.
Unidad II: Elementos de Programación
6. Bibliografía
Fundamentos de
Programación con el
Lenguaje de Programación
C++. Dpto. Lenguajes y
CC. Computación E.T.S.I.
Informática. 2017. Vicente
Benjumea y Manuel
Roldán. Capítulo 12.
Páginas: 155 – 160.
7. Bibliografía
Apuntes de Fundamentos
de Programación. Curso
2006 / 2007. 1er Curso de
Administración de
Sistemas Informáticos.
2007. Jorge Sánchez
Asenjo. Capítulo 6.
Páginas: 114.
8. Introducción.
Hasta ahora, todos los programas y códigos estudiados
almacenan su estado interno con variables automáticamente
gestionadas por el compilador. Estas son creadas cuando el
flujo de ejecución entra en el ámbito de su definición (se
reserva espacio en memoria y se crea el valor de su estado
inicial), posteriormente se manipula su estado (accediendo o
modificando su valor almacenado), y finalmente se destruyen
cuando el flujo de ejecución sale del ámbito donde fue declarada
la variable (liberando los recursos asociados a ella y la zona de
memoria utilizada). A este tipo de variables gestionadas
automáticamente por el compilador se las suele denominar
variables automáticas (o locales), y residen en una zona de
memoria gestionada automáticamente por el compilador, la
pila de ejecución, donde se alojan y desalojan las variables
locales (automáticas) pertenecientes al ámbito de ejecución de
cada subprograma.
9. Introducción.
Así, el tiempo de vida de una determinada variable está
condicionado por el ámbito de su declaración.
Además, el número de variables automáticas utilizadas
en un determinado programa está especificado
explícitamente en el propio programa, y por lo tanto su
capacidad de almacenamiento está también especificada
y predeterminada por lo especificado explícitamente en el
programa. Es decir, con la utilización única de variables
automáticas, la capacidad de almacenamiento de un
determinado programa está predeterminada desde el
momento de su programación (tiempo de compilación),
y no puede adaptarse a las necesidades reales de
almacenamiento surgidas durante la ejecución del
programa (tiempo de ejecución.)
10. Introducción.
La gestión de memoria dinámica surge como mecanismo
para que el programa, durante su tiempo de ejecución, pueda
alojar y desalojar memoria según las necesidades surgidas
durante una ejecución, dependiendo de las circunstancias
reales de cada momento de la ejecución del programa en un
determinado entorno. Esta ventaja adicional añade un
determinado coste asociado a mayor complejidad de gestión,
ya que en las variables automáticas, era el compilador el
encargado de su gestión, pero en las variables dinámicas es el
programador quien debe, codificar la gestión del tiempo de
vida de cada variable dinámica, cuando debe ser alojada y
creada, como será utilizada, y finalmente cuando debe ser
destruida y desalojada. Además, debe gestionar la memoria
dinámica y se debe preocupar de su alojo y su liberación,
poniendo cuidado y énfasis en no perder recursos (perder
zonas de memoria sin liberar y sin capacidad de acceso.)
11. Puntero.
Es un tipo simple que permite acceder a posiciones
concretas de memoria y específicamente a
determinadas zonas de la memoria dinámica. Así, una
variable de tipo puntero apunta (o referencia) a una
determinada entidad (variable) de un determinado tipo
alojada en la zona de memoria dinámica. Por tanto, para
un determinado tipo puntero, se debe especificar
también el tipo de variable (en memoria dinámica) a la
que apunta, el cual define el espacio que ocupa en
memoria y las operaciones (y métodos) que se le
pueden aplicar. Por ello, cuando un programa gestiona
la memoria dinámica con punteros, debe manejar y
gestionar la propia variable de tipo puntero, y
también la variable dinámica apuntada por éste.
12. Puntero.
Un tipo puntero se define utilizando la palabra
reservada typedef junto al tipo de variable
dinámica apuntada, un asterisco para indicar que
es un puntero a una variable de este tipo, y el
identificador que denomina al tipo. Se trata de
una de las herramientas más importantes de C /
C++. Se trata de una variable cuyo contenido es
la dirección al contenido de otra variable. Son
la base de las estructuras dinámicas. En general
una variable contiene un valor que es con el que
se opera, en el caso del puntero no es un valor
directo sino que es la dirección de memoria en
la que se encuentra el valor.
13. Puntero.
En este sentido, el nombre de una variable hace
referencia directa a un valor, y un apuntador
hace referencia indirecta a un valor. Un
puntero señala a una dirección de memoria. Al
proceso de hacer referencia a un valor a través
de un apuntador se le conoce comúnmente
como indirección. Esa dirección de memoria
contendrá valores de un determinado tipo. Por
ello al declarar un puntero hay que indicar de qué
tipo es el puntero; o, lo que es lo mismo, el tipo
de valores a los que apunta. Ejemplo: int
*ptrSuma; ptrSuma es un puntero a valores
enteros.
14. Puntero.
Los punteros deben declararse antes de
usarse. Ejemplo, la declaración int
*cuentaPtr, cuenta; declara a la variable
cuentaPtr como de tipo int * (es decir, un
apuntador a un valor int ) y se lee:
“cuentaPtr es un apuntador a un valor
int” o “cuentaPtr apunta a un objeto de
tipo int”. Además, cuenta se declara como
int, y no como un puntero a un int. El * en la
declaración se aplica sólo a cuentaPtr. A
cada variable declarada como puntero se le
antepone un asterisco ( * )
15. Puntero.
double *xPtr, *yPtr; indica que xPtr y yPtr
son punteros a valores double. Cuando el *
aparece en una declaración, no es un
operador; en lugar de ello, indica que la
variable que se está declarando es un
puntero. Los punteros se pueden declarar
de manera que apunten a objetos de
cualquier tipo de datos.
16. Puntero.
typedef int* PInt ; // Tipo Puntero a Entero
struct Persona { // Tipo Persona
string nombre; string telefono;
int edad; } ;
typedef Persona* PPersona ;
// Tipo Puntero a Persona
typedef int* PInt ; // Tipo Puntero a Entero
struct Persona { // Tipo Persona
string nombre; string telefono;
int edad; } ;
typedef Persona* PPersona ;
// Tipo Puntero a Persona
PInt es una variable que apunta a una
variable dinámica tipo int. PPersona es el
tipo de variable que apunta a una variable
dinámica tipo Persona.
17. Puntero.
Los punteros deben inicializarse cuando
se declaran, o en una asignación. Un
puntero debe inicializarse con 0, NULL o
una dirección del tipo correspondiente. Un
puntero con valor 0 o NULL no apunta a
nada, y se conoce como apuntador nulo. La
constante simbólica NULL se define en el
archivo de encabezado <iostream> (y en
varios archivos de encabezado más de la
biblioteca estándar) para representar el
valor 0.
18. Puntero.
Inicializar un apuntador con NULL es
equivalente a inicializar un apuntador
con 0 , pero en C++, se utiliza 0 por
convención. Cuando se asigna 0, se
convierte en un apuntador del tipo
apropiado. El valor 0 es el único valor
entero que puede asignarse directamente a
una variable apuntador sin tener que
convertir primero el entero en un tipo
apuntador.
19. Puntero.
typedef int* PInt ;
// Tipo Puntero a Entero
struct Persona
{ // Tipo Persona
string nombre;
string telefono;
int edad; } ;
typedef Persona* PPersona ;
// Tipo Puntero a Persona
#include <cstddef>
int main()
{ PInt p1 = NULL ;
PPersona p2 = NULL ;}
typedef int* PInt ;
// Tipo Puntero a Entero
struct Persona
{ // Tipo Persona
string nombre;
string telefono;
int edad; } ;
typedef Persona* PPersona ;
// Tipo Puntero a Persona
#include <cstddef>
int main()
{ PInt p1 = NULL ;
PPersona p2 = NULL ;}
NULL, constante
especial tipo puntero
que indica a una
variable tipo puntero
que apunte a nada,
es decir, especifica
que la variable tipo
puntero contiene el
valor NULL, o sea no
apunta a ninguna
zona de la memoria
dinámica. Para usarla
incluya <cstddef>.
20. Gestión de Memoria Dinámica.
int main()
{PPersona ptr; ptr = new Persona ;}
int main()
{PPersona ptr; ptr = new Persona ;}
La memoria dinámica la gestionar el programador;
y al crear una variable dinámica, debe solicitar
memoria dinámica con el operador new seguido por
el tipo de variable dinámica a crear. (new), primero
reserva espacio en memoria dinámica para
albergar a la variable, y después crea (invocando al
constructor especificado) el contenido de la variable
dinámica. Finalmente, a la variable ptr se le asigna
el valor del puntero (dirección de memoria) que
apunta a la variable dinámica creada por el operador
new. Ejemplo, para crear una variable dinámica tipo
Persona, sería:
21. Gestión de Memoria Dinámica.
int main()
{ PPersona ptr ;
ptr = new Persona("pepe", "111", 5) ;}
int main()
{ PPersona ptr ;
ptr = new Persona("pepe", "111", 5) ;}
Cuando el tipo de variable dinámica tenga otros
constructores definidos, es posible usarlos en la
construcción del objeto en memoria dinámica. Si el
tipo Persona tuviese un constructor que reciba el
nombre, teléfono y edad de la persona:
Tras manipular adecuadamente la memoria dinámica
alojada, llegará un momento en que dicha variable
dinámica ya no sea necesaria, y su tiempo de vida
terminó. Así, el programador libera explícitamente la
variable dinámica con el operador delete:
22. Gestión de Memoria Dinámica.
int main()
{PPersona ptr;
// Creación automática de la variable PTR
ptr = new Persona ; / * Creación de la
variable dinámica anónima* /
// manipulación ...
delete ptr ;
}
/ * Destrucción de la variable dinámica
anónima * /
/ * Destrucción automática de la variable
PTR * /
int main()
{PPersona ptr;
// Creación automática de la variable PTR
ptr = new Persona ; / * Creación de la
variable dinámica anónima* /
// manipulación ...
delete ptr ;
}
/ * Destrucción de la variable dinámica
anónima * /
/ * Destrucción automática de la variable
PTR * /
23. Gestión de Memoria Dinámica.
La sentencia delete ptr, destruye la variable dinámica
(invoca su destructor), y después libera la
memoria dinámica de dicha variable. Finalmente la
variable local ptr queda con un valor
inespecificado, y será destruida automáticamente
por el compilador cuando el flujo de ejecución salga
de su ámbito de declaración. La operación delete
sobre una variable tipo puntero sin valor NULL,
hará absolutamente nada. Si esta variable es
destruida al terminar su vida y el operador delete no
se usa, la memoria dinámica apuntada por la variable
ptr se pìerde al igual que los recursos disponibles.
24. Operaciones con variables tipo puntero.
El puntero nulo
(NULL) se puede
asignar a cualquier
variable de tipo
puntero. Ejemplo:
int main()
{ PPersona p1 ;
// ...
p1 = NULL ;
// ...
}
Al crear una variable
dinámica con new se
le puede asignar una
variable de tipo
puntero. Ejemplo:
int main()
{ PPersona p1 ;
p1 = new
Persona
("pepe", "111", 5) ;
}
25. Operaciones con variables tipo puntero.
Una variable tipo puntero puede recibir el valor
de otra variable puntero. Así, ambas variables tipo
puntero apuntarán a la misma variable dinámica,
que será compartida por ambas. Si se libera la
variable dinámica apuntada por una de ellas, la
variable dinámica compartida se destruye, su
memoria se desaloja y ambas variables locales tipo
puntero quedan con un valor inespecificado.
int main()
{PPersona p1 = new Persona("pepe", "111", 5) ;
PPersona p2 ;
p2 = p1 ;
delete p1 ;}
int main()
{PPersona p1 = new Persona("pepe", "111", 5) ;
PPersona p2 ;
p2 = p1 ;
delete p1 ;}
26. Operaciones con variables tipo puntero.
En la asignación, el valor anterior de la variable
tipo puntero se pierde, por lo que debe tener
especial cuidado que no se pierda la variable
dinámica que tuviese asignada, si tuviese alguna.
int main()
{ PPersona p1 = new Persona("pepe", "111", 5) ;
p1 = NULL ; // se pierde el valor anterior
delete p1 ; }
int main()
{ PPersona p1 = new Persona("pepe", "111", 5) ;
p1 = NULL ; // se pierde el valor anterior
delete p1 ; }
27. Desreferenciación de este tipo de variables.
El acceso a una variable dinámica apuntada por una
variable de tipo puntero, utiliza el operador unario
asterisco (*) precediendo al nombre de la variable de tipo
puntero a través de la cual es apuntada. Ejemplo: Si ptr
es una variable local de tipo puntero que apunta a una
variable dinámica de tipo Persona, entonces *ptr es la
variable dinámica apuntada, y se trata como cualquier
otra variable tipo Persona.
int main() {PPersona ptr = new Persona("pepe", "111", 5) ;
Persona p = *ptr ; / * Asigna contenido de la variable
dinámica a la variable p * /
*ptr = p ; / * Asigna contenido de la variable p a la variable
dinámica * /
delete ptr ; / * destruye variable dinámica y libera su espacio
de memoria * /
}
int main() {PPersona ptr = new Persona("pepe", "111", 5) ;
Persona p = *ptr ; / * Asigna contenido de la variable
dinámica a la variable p * /
*ptr = p ; / * Asigna contenido de la variable p a la variable
dinámica * /
delete ptr ; / * destruye variable dinámica y libera su espacio
de memoria * /
}
28. Desreferenciación de este tipo de variables.
Si una variable de tipo puntero tiene el valor NULL,
entonces desreferenciar la variable produce un error
en tiempo de ejecución que aborta la ejecución del
programa. Desreferenciar un puntero con valor
inespecificado produce un comportamiento anómalo en
tiempo de ejecución. Es posible, así mismo, acceder a
los elementos de la variable apuntada mediante el
operador de desreferenciación.
int main()
{ PPersona ptr = new Persona ;
(*ptr).nombre = "pepe" ;
(*ptr).telefono = "111" ;
(*ptr).edad = 5 ;
delete ptr ;}
int main()
{ PPersona ptr = new Persona ;
(*ptr).nombre = "pepe" ;
(*ptr).telefono = "111" ;
(*ptr).edad = 5 ;
delete ptr ;}
29. Desreferenciación de este tipo de variables.
Usar paréntesis es obligatorio por que el operador punto
(.) tiene mayor precedencia que el de desreferenciación
(*). Así, en el caso de acceder a los campos de un
registro en memoria dinámica a través de una variable de
tipo puntero, es más adecuado utilizar el operador de
desreferenciación (->)
int main()
{ PPersona ptr = new Persona ;
ptr->nombre = "pepe" ;
ptr->telefono = "111" ;
ptr->edad = 5 ;
delete ptr ;}
int main()
{ PPersona ptr = new Persona ;
ptr->nombre = "pepe" ;
ptr->telefono = "111" ;
ptr->edad = 5 ;
delete ptr ;}
30. Comparando variables tipo puntero.
Variables del mismo tipo
puntero se pueden
comparar entre sí por
igualdad (==) o
desigualdad (!=), para
comprobar si apuntan a la
misma variable dinámica.
También se pueden
comparar por igualdad o
desigualdad con el
puntero nulo (NULL) para
saber si apunta a alguna
variable dinámica, o por el
contrario no apunta a
nada.
int main()
{ PPersona p1, p2 ;
// ...
if (p1 == p2)
{
// ...
}
if (p1 != NULL)
{
// ...
}
}
int main()
{ PPersona p1, p2 ;
// ...
if (p1 == p2)
{
// ...
}
if (p1 != NULL)
{
// ...
}
}
31. Operadores de apuntadores.
El operador dirección (&) es unario y obtiene la
dirección de memoria de su operando. Ejemplo, si
considera:
int y = 5; // declara la variable y
int *yPtr; // declara la variable apuntador yPtr, entonces
yPtr = &y; // asigna la dirección de y a yPtr
asigna la dirección de la variable y a la variable apuntador
yPtr . Entonces, se dice que la variable yPtr “apunta a” y.
Ahora, yPtr hace referencia indirecta al valor de la
variable y. Observe que el uso del signo & en la
instrucción anterior no es el mismo que el uso del & en la
declaración de una variable de referencia, a la cual
siempre se le antepone el nombre de un tipo de datos. Al
declarar una referencia, el & forma parte del tipo. En una
expresión como &y, el & es un operador.
32. Operadores de apuntadores.
El operador * , que se conoce comúnmente como el
operador de indirección u operador de desreferencia,
devuelve “un sinónimo” (es decir, un alias o sobrenombre)
para el objeto al que apunta su operando apuntador. Por
ejemplo cout << *yPtr << endl; muestra el valor de la
variable y (en este caso, 5 ), al igual que la instrucción
cout << y << endl;
Al proceso de utilizar el * de esta manera, se le conoce
como desreferenciar un apuntador. Observe que un
apuntador desreferenciado también se puede usar en el
lado izquierdo de una instrucción de asignación, como en
*yPtr = 9; lo cual asignaría 9 a y.
33. Operadores de apuntadores.
#include <iostream>
using std::cout;
using std::endl;
int main()
{int a; // a es un entero
int *aPtr; // aPtr es un int * -- apuntador a un entero
a = 7; // se asigna 7 a la variable a
aPtr = &a; // se asigna la dirección de a a aPtr
cout << "La dirección de a es " << &a <<
"nEl valor de aPtr es " << aPtr;
cout << "nnEl valor de a es " << a <<
"nEl valor de *aPtr es " << *aPtr;
cout << "ndemostración que * y & son inversos " <<
"uno del otro.n&*aPtr = " << &*aPtr << "n*&aPtr = "
<< *&aPtr << endl;
return 0; // indica que terminó correctamente
} // fin de main
#include <iostream>
using std::cout;
using std::endl;
int main()
{int a; // a es un entero
int *aPtr; // aPtr es un int * -- apuntador a un entero
a = 7; // se asigna 7 a la variable a
aPtr = &a; // se asigna la dirección de a a aPtr
cout << "La dirección de a es " << &a <<
"nEl valor de aPtr es " << aPtr;
cout << "nnEl valor de a es " << a <<
"nEl valor de *aPtr es " << *aPtr;
cout << "ndemostración que * y & son inversos " <<
"uno del otro.n&*aPtr = " << &*aPtr << "n*&aPtr = "
<< *&aPtr << endl;
return 0; // indica que terminó correctamente
} // fin de main
34. Paso de parámetros de variables tipo puntero.
El tipo puntero es un tipo simple, y por tanto se tratará
así. En caso de paso de parámetros de tipo puntero, si es
un parámetro de entrada, entonces se utilizará el paso
por valor, y si es un parámetro de salida o de
entrada/salida, entonces se usa el paso por referencia.
Hay que ser consciente que un parámetro de tipo puntero
puede apuntar a una variable dinámica, y en este caso, a
partir del parámetro se puede acceder a la variable
apuntada.
35. Paso de argumentos a funciones por
referencia mediante apuntadores.
En C++ hay tres formas de pasar argumentos a una
función:
Paso por valor.
Paso por referencia con argumentos tipo referencia.
Paso por referencia con argumentos tipo apuntador.
Puede usarse return para devolver un valor de una
función llamada a la función que la llamó (o puede
devolverse el control de una función llamada sin devolver
un valor). Pueden pasarse argumentos a una función
mediante el uso de argumentos tipo referencia. Dichos
argumentos permiten a la función llamada modificar los
valores originales de los argumentos en la función que
hizo la llamada.
36. Paso de argumentos a funciones por
referencia mediante apuntadores.
Los argumentos tipo referencia también permiten a
los programas pasar objetos de datos grandes a una
función, y evitar la sobrecarga de pasar los objetos por
valor (que, desde luego, requiere de la creación de una
copia del objeto). Al igual que las referencias, los
apuntadores también pueden usarse para modificar
una o más variables en la función que hace la
llamada, o pasar apuntadores a objetos de datos
grandes para evitar la sobrecarga de pasar los objetos
por valor.
37. Paso de argumentos a funciones por
referencia mediante apuntadores.
Puede usar apuntadores y el operador indirección ( * )
para realizar el paso por referencia (en forma idéntica
al paso por referencia en los programas en C, ya que
éste no tiene referencias). Cuando se llama a una función
con un argumento que se debe modificar, se pasa la
dirección del argumento. Para realizar esto se aplica el
operador dirección ( & ) al nombre de la variable cuyo
valor se va a modificar. Los arreglos no se pasan
usando el operador &, ya que el nombre del arreglo es
la ubicación inicial en memoria del mismo (es decir, el
nombre de un arreglo ya es un apuntador.)
38. Paso de argumentos a funciones por
referencia mediante apuntadores.
El nombre de un arreglo, nombreArreglo, es
equivalente a &nombreArreglo[0]. Cuando se pasa la
dirección de una variable a una función, el operador
indirección (*) se puede usar en la función para
formar un sinónimo para el nombre de la variable;
esto a su vez se puede utilizar para modificar el valor de
la variable en esa ubicación en la memoria de la función
que hizo la llamada.
39. Paso de argumentos a funciones por
referencia mediante apuntadores.
Ejemplo: Una función que eleva un entero al cubo:
cuboPorValor y cuboPorReferencia. Se pasa la variable
numero por valor a la función cuboPorValor. La función
cuboPorValor eleva su argumento al cubo y pasa el
nuevo valor de vuelta a main, usando una instrucción
return. El nuevo valor se asigna a numero en main.
Observe que la función que llama tiene la oportunidad de
examinar el resultado de la llamada a la función antes de
modificar el valor de la variable numero. Por ejemplo, en
este programa podría haberse almacenado el resultado
de cuboPorValor en otra variable, para después examinar
su valor y asignar el resultado a numero, sólo después de
determinar que el valor devuelto era razonable.
40. Paso de argumentos a funciones por
referencia mediante apuntadores.
#include <iostream>
using std::cout;
using std::endl;
int cuboPorValor( int ); // prototipo
int main()
{ int numero = 5;
cout << "El valor original de numero
es " << numero;
numero = cuboPorValor( numero );
/ * pasa el numero por valor a
cuboPorValor * /
#include <iostream>
using std::cout;
using std::endl;
int cuboPorValor( int ); // prototipo
int main()
{ int numero = 5;
cout << "El valor original de numero
es " << numero;
numero = cuboPorValor( numero );
/ * pasa el numero por valor a
cuboPorValor * /
41. Paso de argumentos a funciones por
referencia mediante apuntadores.
cout << "nEl nuevo valor de numero es "
<< numero << endl;
return 0;
/ * indica que terminó correctamente * /
} // fin de main
/ * calcula y devuelve el cubo del argumento
entero * /
int cuboPorValor( int n )
{ return n * n * n;
/ * eleva al cubo la variable local n y
devuelve el resultado */
} // fin de la función cuboPorValor
cout << "nEl nuevo valor de numero es "
<< numero << endl;
return 0;
/ * indica que terminó correctamente * /
} // fin de main
/ * calcula y devuelve el cubo del argumento
entero * /
int cuboPorValor( int n )
{ return n * n * n;
/ * eleva al cubo la variable local n y
devuelve el resultado */
} // fin de la función cuboPorValor
42. Paso de argumentos a funciones por
referencia mediante apuntadores.
Ejemplo: Se pasa la variable numero a la función
cuboPorReferencia mediante el uso del paso por
referencia con un argumento tipo apuntador; la
dirección de numero se pasa a la función. La función
cuboPorReferencia especifica el parámetro nPtr (un
apuntador a int) para recibir su argumento. La función
desreferencia el apuntador y eleva al cubo el valor al
que apunta nPtr. Esto modifica directamente el valor de
numero en main.
43. Paso de argumentos a funciones por
referencia mediante apuntadores.
Una función que recibe una dirección como
argumento debe definir un parámetro tipo apuntador
para recibir la dirección. Por ejemplo, el encabezado
para la función cuboPorReferencia especifica que
cuboPorReferencia debe recibir la dirección de una
variable int (es decir, un apuntador a un int) como
argumento, debe almacenar la dirección en forma local
en nPtr y no debe devolver un valor. El prototipo de
función para cuboPorReferencia contiene int* entre
paréntesis. Al igual que con otros tipos de variables, no
es necesario incluir los nombres de los parámetros
tipo apuntador en los prototipos de función.
44. Paso de argumentos a funciones por
referencia mediante apuntadores.
#include <iostream>
using std::cout; using std::endl;
void cuboPorReferencia( int * ); // prototipo
int main()
{ int numero = 5;
cout << "El valor original de numero es " << numero;
cuboPorReferencia( &numero );
// pasa la dirección de numero a cuboPorReferencia
cout << "nEl nuevo valor de numero es "
<< numero << endl;
return 0; // indica que terminó correctamente
} // fin de main
// calcula el cubo de *nPtr; modifica la variable numero en main
void cuboPorReferencia( int *nPtr )
{ *nPtr = *nPtr * *nPtr * *nPtr;
// eleva *nPtr al cubo
} // fin de la función cuboPorReferencia
#include <iostream>
using std::cout; using std::endl;
void cuboPorReferencia( int * ); // prototipo
int main()
{ int numero = 5;
cout << "El valor original de numero es " << numero;
cuboPorReferencia( &numero );
// pasa la dirección de numero a cuboPorReferencia
cout << "nEl nuevo valor de numero es "
<< numero << endl;
return 0; // indica que terminó correctamente
} // fin de main
// calcula el cubo de *nPtr; modifica la variable numero en main
void cuboPorReferencia( int *nPtr )
{ *nPtr = *nPtr * *nPtr * *nPtr;
// eleva *nPtr al cubo
} // fin de la función cuboPorReferencia
45. Temas de debate:
Dos apuntadores que apuntan a distintos arreglos no
se pueden comparar de una forma que tenga sentido.
Como el nombre de un arreglo es un apuntador al
primer elemento del arreglo, los nombres de los arreglos
se pueden manipular precisamente de la misma forma
que los apuntadores.
46. Ejercicios:
1. Declarar un apuntador vPtr que apunte a un objeto del
tipo unisgned int.
2.Declarar la variable fPtr para que sea un apuntador a un
objeto de tipo double.
3.Asignar la dirección de la variable numero1 a la variable
apuntador fPtr.
4.Escribir el encabezado para una función llamada
intercambiar, que reciba dos apuntadores a los números
de punto flotante con precisión doble x y y como
parámetros, y no devuelva un valor.
5.Escribir el prototipo para la función anterior.
6.Escribir el encabezado para una función llamada evaluar,
que devuelva un entero y reciba como parámetros el
entero x y un apuntador a la función poly. Esta función
debe recibir un parámetro entero y devolver un entero.
7.Escribir el prototipo para la función anterior.
47. Puntero a una función:
Un puntero a una función que no tiene argumentos y
no retorna nada, sería void (*funcPtr)(); Para
entenderla empiece en el medio y vaya hacia
afuera, es decir significa empezar con el nombre de
la variable, que es funPtr. Ir hacia afuera es mirar al
elemento inmediatamente a la derecha (nada en
este caso; el paréntesis derecho marca el fin de ese
elemento), después mirar a la izquierda (un puntero
denotado por el *), después mirar de nuevo a la
derecha (lista de argumentos vacía que indica que
no toma argumentos), después a la izquierda (void,
indica que retorna nada). Este movimiento derecha-
izquierda-derecha funciona con la mayoría de las
declaraciones.
48. Puntero a una función:
*funcPtr necesita paréntesis para “tener contra
qué chocar” cuando vaya hacia la izquierda y
encuentre el *, en lugar de continuar hacia la
derecha y encontrar la lista de argumentos vacía.
Una vez ha definido un puntero a función, debe
asignarle la dirección de una función antes de
poder usarlo. La dirección de una función func() se
obtiene con el nombre de la función sin lista de
argumentos (func). También puede usar una
sintáxis más explícita: &func(). Para invocar la
función, debe dereferenciar el puntero de la misma
forma que lo ha declarado (recuerde que C y C++
siempre intentan hacer que las definiciones se
parezcan al modo en que se usan).
49. Puntero a una función:
#include <iostream>
using namespace std;
void func()
{ cout << "func() called..." << endl; }
int main()
{ void (*fp)(); // Define a function pointer
fp = func; // Initialize it
(*fp)();
// Dereferencing calls the function
void (*fp2)() = func; // Define and initialize
(*fp2)(); }
#include <iostream>
using namespace std;
void func()
{ cout << "func() called..." << endl; }
int main()
{ void (*fp)(); // Define a function pointer
fp = func; // Initialize it
(*fp)();
// Dereferencing calls the function
void (*fp2)() = func; // Define and initialize
(*fp2)(); }
50. Puntero a una función:
Una vez definido el puntero a función fp, se le asigna
la dirección de una función func() usando fp = func
(fíjese que la lista de argumentos no aparece junto al
nombre de la función). El segundo caso muestra una
definición e inicialización simultánea.