Programación en C++/Funciones



Documentos relacionados
Programación en C+ +/ Funciones

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Modulo 1 El lenguaje Java

Lenguaje de Programación: C++ Funciones

Capítulo 6. Introducción a la POO

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

Preliminares. Tipos de variables y Expresiones

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Tema: Sobrecarga de Operadores.

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Examen escrito de Programación 1

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

MATERIAL 2 EXCEL 2007

Unidad 1 Sistemas de numeración Binario, Decimal, Hexadecimal

8. Sentencia return y métodos

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Guía Corta: Alcance y Asociaciones. 1. Preliminares: Nombres y Asociaciones

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO

Se guardan en archivos con extencion c y los cabezales con extension h

La ventana de Microsoft Excel

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Centro de Capacitación en Informática

Introducción a la programación orientada a objetos

Tema 2: La clase string

Examen Principios de Programación Febrero 2012

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION

SISTEMAS DE NUMERACIÓN. Sistema decimal

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Prof. Dr. Paul Bustamante

Cualquier número de cualquier base se puede representar mediante la siguiente ecuación polinómica:

Creación de Funciones de Conducción

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

SOLUCION EXAMEN junio 2006

Prof. Dr. Paul Bustamante

MANUAL DE AYUDA MODULO TALLAS Y COLORES

Introducción al laboratorio de Programación I

SISTEMA DE APARTADO DE SALAS PARA EVENTOS

Clases y Objetos. Informática II Ingeniería Electrónica

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

7. Manejo de Archivos en C.

Arrays y Cadenas en C

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Introducción a la Programación en MATLAB

Introducción al tipo de dato ARRAY

SIIT SISTEMA INFORMÁTICO DE INSPECCIONES DE TRABAJO. Modulo de Planificación Manual de Usuario

Comisión Nacional de Bancos y Seguros

Ecuaciones de primer grado con dos incógnitas

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

Capítulo 9. Archivos de sintaxis

Sistemas de Numeración

Ejemplos de conversión de reales a enteros

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE

Examen Septiembre Curso Programación en C++ Pág. 1

Sistemas de numeración

Entrada y salida de datos en C y C++

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES

UNIDAD EJECUTORA DE CONSERVACION VIAL MANUAL DEL USUARIO DEL SISTEMA INTEGRAL DE CONTROL DE PROYECTOS

El lenguaje de Programación C. Fernando J. Pereda

Manual Oficina Web de Clubes (FBM)

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

Centro de Capacitación en Informática

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Matemáticas Básicas para Computación

Curso PHP Módulo 1 R-Luis

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Base de datos en Excel

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de

GENERACIÓN DE TRANSFERENCIAS

Materia: Informática. Nota de Clases Sistemas de Numeración

Prof. Dr. Paul Bustamante

by Tim Tran:

Manual de Usuario Módulo de Registro de Vehículos

7.- Seleccionando funciones friend o funciones miembro para sobrecarga de operadores.

Segundo Taller Final de PROGRAMACIÓN ORIENTADO A OBJETOS. INGENIERÍA DE SISTEMAS. Docente y Administrativo: Luz Esperanza Espitia Preciado

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

UNIDAD Nº 1: 1. SISTEMAS DE NUMERACION. Formalizado este concepto, se dirá que un número X viene representado por una cadena de dígitos:

Introducción. 1. Lenguajes de máquina 2. Lenguajes de ensamblador 3. Lenguajes de alto nivel

ÍNDICE Paso 1- Acceso Paso 2 - Identificación Paso 3 Datos de la declaración. Paso 4 Selección de tipo de pago

Fundamentos de la Programación

Problema - Votación. Entrada. Salida. Primera Olimpiada de Informática 1

Índice ÍNDICE EJERCICIO 1: CÁLCULO FINANCIERO (5 PTOS.) EJERCICIO 2: AGENCIA DE COLOCACIONES (5 PTOS.)...4

1. Visualización de datos con Octave

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

Contabilidad Tabla de Pagos / Cobros.

Datos del autor. Nombres y apellido: Germán Andrés Paz. Lugar de nacimiento: Rosario (Código Postal 2000), Santa Fe, Argentina

GENERACIÓN DE ANTICIPOS DE CRÉDITO

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Transcripción:

Programación en C++/Funciones 1 Programación en C++/Funciones Estructuras Streams Funciones Definiendo una función Una función es un conjunto de líneas de código que realizan una tarea específica y puede retornar un valor. Las funciones pueden tomar parámetros que modifiquen su funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comúnmente utilizadas durante un programa y de esta manera reducir la cantidad de código. Cuando una función es invocada se le pasa el control a la misma, una vez que esta finalizó con su tarea el control es devuelto al punto desde el cual la función fue llamada. <tipo> [clase::] <nombre> ( [Parámetros] ) cuerpo; Ejemplo de una función Para comenzar, vamos a considerar el caso en el cual se desea crear la función cuadrado(), misma que deberá volver el cuadrado de un número real (de punto flotante), es decir, cuadrado() aceptará números de punto flotante y regresará una respuesta como número flotante. Nota: aunque para la función que veremos el tipo de retorno coincide con el tipo de parámetro pasado, algunas veces las cosas pueden cambiar, es decir, no es obligatorio que una función reciba un parámetro de un tipo y que tenga que regresar una respuesta de dicho tipo. // regresar el cuadrado de un número double cuadrado(double n) return n*n; Parámetros Normalmente, las funciones operan sobre ciertos valores pasados a las mismas ya sea como constantes literales o como variables, aunque se pueden definir funciones que no reciban parámetros. Existen dos formas en C++ de pasar parámetros a una función; por referencia o por valor. El hecho es que si en una declaración de función se declaran parámetros por referencia, a los mismos no se les podrá pasar valores literales ya que las referencias apuntan a objetos (variables o funciones) residentes en la memoria; por otro lado, si un parámetro es declarado para ser pasado por valor, el mismo puede pasarse como una constante literal o como una variable. Los parámetros pasados por referencia pueden ser alterados por la función que los reciba, mientras que los parametros pasados por valor o copía no pueden ser alterados por la función que los recibe, es decir, la función puede manipular a su antojo al parámetro,

Programación en C++/Funciones 2 pero ningún cambio hecho sobre este se reflejará en el parámetro original. Parametros por valor La función cuadrado() (ver arriba) es un clásico ejemplo que muestra el paso de parámetros por valor, en ese sentido la función cuadrado() recibe una copia del parámetro n. En la misma función se puede observar que se realiza un calculo ( n*n ), sin embargo el parámetro original no sufrirá cambio alguno, esto seguirá siendo cierto aún cuando dentro de la función hubiera una instrucción parecida a n = n * n; o n*=n;. Parametros por referencia Para mostrar un ejemplo del paso de parámetros por referencia, vamos a retomar el caso de la función cuadrado, salvo que en esta ocasión cambiaremos ligeramente la sintaxis para definir la misma. Veamos: // regresar el cuadrado de un número double cuadrado2(double &n) n *= n; return n; Al poner a prueba las funciones cuadrado() y cuadrado2() se podrá verificar que la primera de estas no cambia el valor del parámetro original, mientras que la segunda sí lo hace. Llamar a una función para llamar a la función cuadrado() vista anteriormente, podemos emplear: cout << cuadrado(25); cout << cuadrado(x); R = cuadrado(x); // guardar en R el cuadrado de X Funciones void Bajo ciertas circunstancias se deseará escribir funciones que no regresen valor alguno (esto sería algo parecido a escribir procedures en Pascal) y para ello podemos declarar a la función como void. La palabra reservada void es utilizada para declarar funciones sin valor de retorno y también para indicar que una función específica no requiere de parámetros. Por ejemplo, la función pausa() que se verá en seguida, no devolverá valor alguno y la misma no requiere de parámetros. // esta función requiere de la librería iostream void pausa(void) cout << "Por favor presione <Enter> HOLA..."; cin.ignore(255, '\n'); // rechazar caracteres introducidos antes de <Enter> Notas: se debe de aclarar que el uso de la palabra void dentro de los parentesis es opcional al momento de declarar una función. Así, la función pausa() podría haberse declarado como void pausa(), y la misma puede invocarse como: pausa();.

Programación en C++/Funciones 3 Funciones anidadas A diferencia de Pascal, el lenguaje C, C++ no permite anidar funciones, sin embargo, dentro de una funcíon puede existir la llamada a una o más funciones declaradas previamente. Funciones de tipo puntero (*) En muchas ocasiones se desea que ciertas funciones regresen una referencia o puntero hacia un tipo (sea este estructurado o no) específico de dato en lugar de un valor específico. En tales casos, la función se deberá declarar como para que regrese un puntero. Por ejemplo, supongamos que deseamos crear una función para convertir un número entero en notación decimal a una cadena de caracteres en forma de números binarios, luego, la función mencionada podría escribirse para que reciba el número entero como parámetro y regrese un puntero a una cadena de caracteres conteniendo la conversión. Para ser más puntuales, vamos a escribir un programa en donde se verá la función binstr(), y cuyo objetivo será precisamente convertir números decimales en cadenas binarias. Nota: observe que en la sintaxis para declarar funciones tipo puntero se debe de poner el símbolo * despues del tipo y antes del nombre de la función que se está declarando. Esto se puede ver en el programa, ya que la función binstr se declara como: char *binstr(unsigned int); #include <iostream> #include <string.h> using namespace std; // declaración de prototipo char *binstr(unsigned int); // punto de prueba int n = 128; cout << "decimal = " << n << ", binario = " << binstr(n) << endl; // definición de función binstr() // nota: esta funcion requiere de la librería estándar string char *binstr(unsigned int n) static char buffer[65]; int i = 0; strcpy(buffer, "0"); if (n > 0) while (n > 0) buffer[i] = ( n & 1 ) + '0'; i++; n >>= 1;

Programación en C++/Funciones 4 buffer[i] = '\0'; strrev(buffer); // fin (n > 0) return buffer; Variables estáticas y automáticas Dentro de una función, las variables y/o constantes pueden ser declaradas como: auto (por omisión) o como static. Si una variable dentro de una función es declarada como estática significa que la misma retendrá su valor entre las llamadas a la función. Por otro lado, la variables automáticas pierden su valor entre las llamadas. En el programa anterior puede verse que el arreglo de caracteres (buffer[65]) se ha declarado como estático para garantizar que dicho buffer retenga los datos aún despues de que la función termine. En el mismo ejemplo, si el buffer no se declara como estático, el contenido del mismo podría ser destruido al salir de la función y los resultados obtenidos podrían ser no deseados. Parámetros constantes Los parámetros usados por una función pueden declararse como constantes ( const ) al momento de la declaración de la función. Un parámetro que ha sido declarado como constante significa que la función no podrá cambiar el valor del mismo ( sin importar si dicho parámetro se recibe por valor o por referencia ). Ejemplo: int funcionx( const int n ); void printstr( const char *str ); Parámetros con valor por defecto Los parámetros usados por una función pueden declararse con un valor por defecto. Un parámetro que ha sido declarado con valor por defecto es opcional a la hora de hacer la llamada a la función. Ejemplo: Dada la función: void saludo( char* mensaje = "Hola sudafrica 2010" ); la misma puede ser invocada como: saludo(); // sin parámetro saludo("sea usted bienvenido a C++"); // con parámetro Para ver un ejemplo más, vamos a considerar el caso de la función binstr() del programa funciones01. Ahora, vamos modificar dicha función, salvo que esta ocasión nos interesa que la misma sirva para convertir números decimales en cadenas numéricas y cuya base de conversión sea pasada como parámetro. Es decir, la función de la que estamos hablando podrá convertir números decimales a: binario, octal, decimal, hexadecimal, etc.; y la única condición será que la base indicada esté entre el 2 y el 36, inclusive. Nota: Ya que la función servirá para convertir números a cualquier representación la nombraremos como numstr() en lugar de binstr(). Si la función es invocada sin el parámetro base regresará una cadena de digitos decimales. #include <iostream> #include <stdlib.h> using namespace std;

Programación en C++/Funciones 5 // declaración de prototipo char *numstr(unsigned int, const int base = 10); // punto de prueba int n = 128; cout << "decimal = " << n << ", binario = " << numstr(n, 2) << endl; cout << "decimal = " << n << ", octal.. = " << numstr(n, 8) << endl; // definición de función numstr() // nota: esta funcion requiere de la librería stdlib.h char *numstr(unsigned int n, const int base) static char buffer[65]; itoa(n, buffer, base); return buffer; Parámetros de tipo puntero Anteriormente se mencionó que en C++ los parámetros a una función pueden pasarse por valor o por referencia, al respecto, podemos agregar que los parámetros también pueden pasarse como punteros. El paso de parámetros de punteros es bastante parecido al paso de parámetros por referencia, salvo que el proceso de los datos dentro de la función es diferente. Por ejemplo, las funciones: void referencia( int &X ) X = 100; void puntero( int *X ) *X = 100; ambas reciben un puntero o referencia a un objeto de tipo entero, por lo tanto cualquiera de las funciones del ejemplo puede cambiar el valor de la variable entera apuntada por X, la diferencia radica en la forma en que cada una de las mismas lleva cabo la tarea. Si en la función puntero() en lugar de usar *X = 100; se usara X = 100; se le asignaría 100 al puntero X, más no al objeto apuntado por X, y esto podría ser la causa de que el programa se terminara de manera abrupta. Parámetros estructurados Al igual que cualquier otro tipo los parámetros de tipo estruturado pueden pasarse por valor o por referencia, sin embargo, podría ser que si una estructura es pasada por valor el compilador mostrara una advertencia ( warning ) indicando que se pasado por valor una estructura, puesto que el paso de estructuras por valor es permitido usted puede ignorar la advertencia, pero lo mejor es pasar estructuras por referencia. Si una estructura es pasada por valor y si esta es muy grande podria ser que se agotara la memoria en el segmento de pila ( Stack Segment ), aparte de que la llamada a la función sería más lenta. Para ver un ejemplo, consideremos el caso del siguiente tipo estructurado: struct empleado char nombre[32]; int edad;

Programación en C++/Funciones 6 char sexo; ; Ahora, pensemos que deseamos escribir una función para imprimir variables del tipo empleado. Así, la función puede escribirse de las tres maneras siguientes: void ImprimeEmpleadoV( empleado e) cout << "Nombre: " << e.nombre << endl; cout << "Edad: " << e.edad << endl; cout << "Sexo: " << e.sexo << endl; // Parametro empleado pasado por referencia void ImprimeEmpleadoR( empleado &e ) cout << "Nombre: " << e.nombre << endl; cout << "Edad: " << e.edad << endl; cout << "Sexo: " << e.sexo << endl; // Parametro empleado pasado como puntero void ImprimeEmpleadoP( empleado *e ) cout << "Nombre: " << e->nombre << endl; cout << "Edad: " << e->edad << endl; cout << "Sexo: " << e->sexo << endl; Funciones sobrecargadas C++, a diferencia del C estándar, permite declarar funciones con el mismo nombre y a esto se conoce como sobrecarga de funciones. Las funciones sobrecargadas pueden coincidir en tipo, pero al menos uno de sus parámetros tiene que ser diferente. En todo caso, si usted trata de declarar funciones sobrecargadas que coincidan en tipo y número de parámetros el compilador no se lo permitirá. Para poner un ejemplo vamos a considerar el caso de dos funciones cuyo nombre será divide, ambas regresarán el cociente de dos números, salvo que una de ellas operará sobre números enteros y la otra lo hará sobre números reales ( de punto flotante ). Nota: cuando en los programas se hace una llamada a una función sobrecargada, el compilador determina a cual de las funciones invocar en base al tipo y número de parámetros pasados a la función. #include <iostream.h> #include <stdlib.h> using namespace std; // divide enteros int divide(int a, int b)

Programación en C++/Funciones 7 cout << "división entera" << endl; return ( (b!= 0)? a/b : 0); // divide reales double divide(double a, double b) cout << "división real" << endl; return ( (b!= 0)? a/b : 0); // punto de prueba cout << divide(10, 3) << endl; cout << divide(10.0, 3.0) << endl; Número variable de parámetros En C,C++ se pueden crear funciones que operen sobre una lista variable de parámetros, es decir, en donde el número de parámetros es indeterminado. En esta sección se mostrará un ejemplo de la manera en que podemos crear funciones para manejar tales asuntos, y para ello haremos uso de tres macros soportadas por C++: 1. va_list puntero de argumentos 2. va_start inicializar puntero de argumentos 3. va_end liberar puntero de argumentos La sintaxis que usaremos para declarar funciones con lista de parámetros variables es: 1) tipo nombrefuncion(...) 2) tipo nombrefuncion(int num,...) donde: 1. tipo es el tipo regresado por la función 2. nombrefuncion es el nombre de la función 3. int num es el número de parámetros que la función procesará 4.... esta notación se emplea para indicar que el número de parámetros es variable Nota: observe que la primera forma de declaración es realmente variable el número de parámetros a procesar y en estos casos se debe establecer el mecanismo para determinar cuando se ha procesado el último de los argumentos, en el segundo tipo de declaración el número total de parámetros a procesar es igual al valor del parámetro num. En el siguiente programa, por ejemplo, se define una función ( printstr ) que despliega una lista variable de cadenas de caracteres. #include <iostream.h> #include <stdarg.h> // despliega una lista de cadenas, la ultima debe ser NULL void printstr(...)

Programación en C++/Funciones 8 va_list ap; char *arg; va_start(ap, 0); while ( (arg = va_arg(ap, char*) )!= NULL) cout << arg; va_end(ap); printstr("hola, ", "Esta es\n", "una prueba\n", NULL); return 0; En el programa que se listará en seguida, se define la función suma(), misma que operará sobre listas de números enteros, la función devolverá la suma de dichos números. #include <iostream>//entrada y salida #include <stdarg.h> using namespace std; // Esta función opera sobre una lista variable de números enteros int suma( int num,... ) int total = 0; va_list argptr; va_start( argptr, num ); while( num > 0 ) total += va_arg( argptr, int ); num--; va_end( argptr ); return( total ); cout << suma(4, 100, 200, 300, 400) << endl; return 0; Estructuras Arriba Streams

Fuentes y contribuyentes del artículo 9 Fuentes y contribuyentes del artículo Programación en C++/Funciones Fuente: http://es.wikibooks.org/w/index.php?oldid=176234 Contribuyentes: 67wkii, El lobo, Jhalvico, MarcoAurelio, Morza, Muro de Aguas, Nsmlinux, Oleinad, Rutrus, Savh, Zzzu, 52 ediciones anónimas Fuentes de imagen, Licencias y contribuyentes Imagen:Funciones.png Fuente: http://es.wikibooks.org/w/index.php?title=archivo:funciones.png Licencia: GNU Free Documentation License Contribuyentes: El lobo Licencia Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/