Programación I Funciones

Documentos relacionados
Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

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

Esquema de un programa en C: bloques básicos

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

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

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

Guía práctica de estudio 11: Funciones

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

Uso avanzado de punteros

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Examen Principios de Programación Febrero 2012

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

TEMA 4. ESTRUCTURAS DE CONTROL

Sistemas Operativos Práctica 3

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

SOLUCION EXAMEN junio 2006

Introducción a C++ y Code::Blocks

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

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Reglas básicas de la programación en lenguaje C

Elementos de un programa en C

Paso de Borland Turbo C (bajo DOS) a Anjuta (Linux) 1.

1. Cuestiones. Ejercicios resueltos de C. Diego Rodríguez-Losada 1. //a) #include <stdio.h> main( ) { int x = 0, y = 0; //b) #include <stdio.

Fundamentos de programación

Programación Estructurada

Prueba de Laboratorio Modelo B01 Semáforos y Memoria Compartida

Instituto Politécnico Nacional

Lenguaje C [Apuntadores y arreglos]

Programación I Instrucciones de control - bucles

PRÁCTICA DE LABORATORIO 3 Tipo Abstrato de Dato

Programación en C. (Segunda Parte) DATSI, FI, UPM José M. Peña. Programación en C

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Java para programadores

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

El lenguaje C. 1. Estructuras. Principios de Programación Definicion de estructuras

TEMA 4. ELEMENTOS BÁSICOS DE PROGRAMACIÓN

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C

Lenguaje C. Tipos de Datos Simples y Estructuras de Control

Sistemas Operativos I Manual de prácticas

GL-PCS2201-L05M FUNCIONES Y LA ESTRUCTURA DEL PROGRAMA EN LENGUAJE C

Lenguaje C. Enrique Vicente Bonet Esteban

Procesos e Hilos en C

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

Lenguaje C. Lenguaje C. Erwin Meza Vega

ARCHIVOS. 1. Introducción. 2. Definición de archivo. 3. Archivos de acceso secuencial. 4. Gestión de un archivo secuencial de estructuras

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

Introducción al Lenguaje de Programación C

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Algoritmos y Programación I

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

EDITRAN/TR. Windows/Unix. Manual de referencia

Contenido. Capítulo 1. Introducción a lenguaje C 1

INTRODUCCIÓN AL LENGUAJE C++

Tema 9. Vectores y Matrices

Parámetros y Argumentos en el Lenguaje de Programación C++

LENGUAJE ANSI C Guía de referencia

Estructuras de Control

Tema: Arreglos de Objetos en C++.

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

LENGUAJE. Tema 1 - Introducción

OPERADORES Y EXPRESIONES

CURSO de C++ Ignacio López

5. Sentencias selectivas o condicionales

El lenguaje C: Elementos básicos del lenguaje

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Tema 2. El lenguaje JAVA

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Funciones como Subprogramas en C++

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Apuntadores (Punteros)

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

Programación. Ejercicios Tema 4 Estructuras de Control Repetitivas

2. Se puede aplicar a la representación intermedia un optimizador de código independiente de la máquina.

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria.

Programación en C++/Funciones

PROGRAMACION / Clave: 11214

Generador de analizadores sintácticos BISON

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

2.2 Nombres, Ligado y Ámbito

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Programación estructurada (Introducción a lenguaje C)

FUNDAMENTOS DE PROGRAMACIÓN

Estructuras de control

Resumen de Sintaxis en C

!! Identificar las señales que llegan a la consola.

Apuntadores en C y C++

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

UNIVERSIDAD DR. JOSE MATIAS DELGADO

Arrays y Cadenas en C

Generador de analizadores léxicos FLEX

Transcripción:

1 Funciones Iván Cantador 2 Funciones: definición, sintaxis, ejemplos (I) Una funciónes un bloque de sentencias identificado con un nombre que se ejecutan de manera secuencial ofreciendo una funcionalidad dada Ejemplo de definición de función // Función que devuelve la suma de dos números enteros: a, b Una función es como un programa, al poseer argumentos de entrada, sentencias (algoritmo), y retorno de salida De hecho, en C todo programa está constituido por una función principal: main a b sumarenteros 3 a+b

Funciones: definición, sintaxis, ejemplos (II) En C la declaraciónde una función es: tiporetorno nombrefuncion(tipoarg1 arg1, tipoarg2 arg2,...) En C una función puede: devolver 0 ó1 variable de retorno En caso de 0, la declaración de la función es con retorno void: void funcion(...) recibir 0 ó más argumentos de entrada void main(int argc, char *argv[]) int rand() double sqrt(double x) int strlen(char *s) int strcmp(char *s1, char *s2) char *strcat(char *s1, char *s2) int sumarenteros(int a, int b) char *titulolibro(libro l) 4 Funciones: definición, sintaxis, ejemplos (III) A la ejecución de una función también se le denomina invocación de la función Ejemplo de definición e invocación de función // Definición de función int n1, n2, r; r = sumarenteros(n1, n2); // Invocación de función printf("la suma de %d y %d es %d.\n", n1, n2, r); 5 Funciones: definición, sintaxis, ejemplos (IV) 6 Funciones: definición, sintaxis, ejemplos (IV) 7 int multiplicarenteros(int x, int y) { int i, producto = 0; for ( i = 0; i < y; i++ ) { producto = sumarenteros(producto, x); return producto;

Funciones: definición, sintaxis, ejemplos (IV) 8 Funciones: definición, sintaxis, ejemplos (IV) 9 int multiplicarenteros(int x, int y) { int i, producto = 0; for ( i = 0; i < y; i++ ) { producto = sumarenteros(producto, x); return producto; int n1, n2, r; int multiplicarenteros(int x, int y) { int i, producto = 0; for ( i = 0; i < y; i++ ) { producto = sumarenteros(producto, x); return producto; int n1, n2, r; main multiplicarenteros sumarenteros scanf printf r = multiplicarenteros(n1, n2); r = multiplicarenteros(n1, n2); printf("el producto entre %d y %d es %d.\n", n1, n2, r); printf("el producto entre %d y %d es %d.\n", n1, n2, r); Funciones: definición, sintaxis, ejemplos (V) Un programa C está constituido por una función principal, llamada main, que es la que se invoca al ejecutar el programa El valor de retorno de mainpuede ser: ninguno, indicado como void un entero, normalmente usado para devolver un código de ejecución correcta o incorrecta del programa Los argumentos de entrada de mainpueden ser: ninguno un entero argcque es el número de parámetros del programa + 1, y un arrayde cadenas de caracteres argvque contiene en argv[0] el nombre del programa, en argv[1] el primer parámetro del programa, en argv[2] el segundo parámetro de entrada,, en argv[argc 1] el último parámetro de entrada void main(int argc, char *argv[]) 10 Funciones: definición, sintaxis, ejemplos (VI) Un programa C está constituido por una función principal, llamada main, que es la que se invoca al ejecutar el programa #include <stdlib.h> void main(int argc, char *argv[]) { int i, n; printf("los argumentos del programa %s se listan abajo.\n", argv[0]); for ( i = 1; i < argc; i++ ) { printf("argumento %d: %s.\n", i, argv[i]); // Asumiendo que el 1er parámetro es un entero hacemos su conversion a int if ( argc >= 2 ) { n = atoi(argv[1]); printf("primer parámetro: %d.\n", n); 11

12 Alcance de variables (I) En C los argumentos de entrada y las variables (internas) de una función son locales, esto es, son accesibles sólo dentro de la función // Variable "suma" sólo accesible en sumarenteros int n1, n2; suma = sumarenteros(n1, n2); // ERROR! Variable "suma" NO declarada en main 13 printf("la suma de %d y %d es %d.\n", n1, n2, suma); Alcance de variables (II) En C los argumentos de entrada y las variables (internas) de una función son locales, esto es, son accesibles sólo dentro de la función // Variable "suma" sólo accesible en sumarenteros int n1, n2, suma; // Variable "suma" sólo accesible en main suma = sumarenteros(n1, n2); // Variable "suma" de main, no de sumarenteros printf("la suma de %d y %d es %d.\n", n1, n2, suma); 14 Alcance de variables (III) En C se pueden usar variables globales, que se declaran fuera de las funciones de un programa y que pueden ser accesibles desde cualquiera de estas últimas NO SE RECOMIENDA EL USO DE VARIABLES GLOBALES!!! // Variable "suma" global, accesible desde todas las funciones void sumarenteros(int a, int b) { int n1, n2; sumarenteros(n1, n2); printf("la suma de %d y %d es %d.\n", n1, n2, suma); 15

16 Paso de argumentos de entrada por valor En C los argumentos de entrada de las funciones se pasan por valor; esto es, al invocar una función ésta: recibe los valores de las variables con los que tiene que ejecutarse no modifica las variables cuyos valores se le pasaron como entrada void incrementar(int x) { // Se recibe valor 2 x = x + 1; main x 2 printf("el valor de x en incrementar es %d.\n", x); // x es 3 int x = 2; // x es 2 incrementar(x); // Se pasa el valor 2 incrementar x 3 printf("el valor de a en main es %d.\n", x); // x es 2 17 18 Paso de argumentos de entrada por referencia (I) En C se pueden pasar los argumentos de entrada de una función por referencia: esto es, al invocar una función ésta: recibe las direcciones (referencias, punteros) a las variables con los que tiene que ejecutarse modifica las variables cuyos punteros se le pasaron como entrada incrementar void incrementar(int *x) { // Se recibe la dirección de x (la del main) *x = *x + 1; // *x = "el contenido de x" printf("el valor de x en incrementar es %d.\n", *x); // x es 3 int x = 2; // x es 2 incrementar(&x); // Se pasa &x, la "direccion" (puntero) de x main x 3 19 printf("el valor de a en main es %d.\n", x); // x es 3

Paso de argumentos de entrada por referencia (II) Ejemplo: paso de argumentos de entrada por palor y por referencia int sumarenterosporvalor(int a, int b) { int r; r = a + b; return r; void sumarenterosporreferencia(int a, int b, int *r) { *r = a + b; 20 Paso de argumentos de entrada por referencia (III) 21 Al comienzo de una función se deben comprobar que los argumentos de entradason correctos,especialmente si son punteros int sumarenterosporreferencia(int a, int b, int *r) { // Control de argumentos de entrada if ( r == NULL ) { return -1; *r = a + b; sumarenteros r int n1 = 2, n2 = 6; s; return 0; main s 8 // Llamadas a función equivalentes s = sumarenterosporvalor(n1, n2); int n1 = 2, n2 = 6; s; sumarenterosporreferencia(n1, n2, &s); sumarenterosporreferencia(n1, n2, &s); 22 Paso de arrays de entrada (I) 23 En C una variable array [] es equivalente a un puntero Por ello, las variables array se pasan por referencia sin precederlas con & int medialistaenteros(int *lista, int longitud) { int m, i; // Control de argumentos de entrada if ( lista == NULL ) { return -1; m = 0; for ( i=0; i<longitud; i++ ) { m += lista[i]; m /= longitud; return m; int l1[] = {1, 2, 3; int *l2 = {4, 5, 6, 7, 8; // Declaraciones de l1 y l2 analogas int m1, m2; m1 = medialistaenteros(l1, 3); // No se pasa &l1 m2 = medialistaenteros(l2, 5); // No se pasa &l2

Paso de arrays de entrada (II) 24 25 En C una variable array [] es equivalente a un puntero Por ello, las cadenas de caracteres (es decir, char[] o char*) se pasan por referencia sin precederlas con & int longitudcadena(char *cadena) { int longitud; // Control de argumentos de entrada if ( cadena == NULL ) { return -1; longitud = 0; while ( cadena[i]!= '\0' ) { longitud++; return longitud; char s1[] = "Hola"; // Declaraciones de s1 y s2 analogas char *s2 = "mundo"; int l1, l2; l1 = longitudcadena(s1); // No se pasa &s1 l2 = longitudcadena(s2); // No se pasa &s2 Paso de estructuras de entrada Paso de estructuras por valor y por referencia Los atributos de una estructura se acceden mediante. cuando se pasa por valor y mediante > cuando se pasa por referencia 26 typedef struct { char titulo[256]; char autor[256]; int anio; Libro; void imprimirlibroporvalor(libro libro) { printf("título: %s\n", libro.titulo); printf("autor: %s\n", libro.autor); printf("año: %d\n", libro.anio); Libro l; leerlibro(&l); imprimirlibroporvalor(l); imprimirlibroporreferencia(&l); void imprimirlibroporreferencia(libro *libro) { // Ésta es la forma que se suele usar printf("título: %s\n", libro->titulo); printf("autor: %s\n", libro->autor); printf("año: %d\n", libro->anio); void leerlibro(libro *libro) { // Se pasa por referencia para modificar la variable scanf("%s", libro->titulo); scanf("%s", libro->autor); scanf("%d", &libro->anio); // Atención al uso de & por leer un int