Lenguaje C, tercer bloque: Funciones

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

Elementos de un programa en C

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

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

Las clases como tipos de datos definidos por el usuario

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

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

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

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

Procesos e Hilos en C

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

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

Apuntadores en C y C++

LENGUAJE. Tema 2 Elementos de un programa

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

media = ( temp0 + temp1 + temp2 + temp3 + temp temp23 ) / 24; printf( "\nla temperatura media es %f\n", media );

Fundamentos de programación

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

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

EXAMEN PARCIAL TRABAJO INTEGRADOR (TI) EVALUACIÓN CONTINUA PESO PORCENTUAL PESO PORCENTUAL 1 30% 06-MAY-14 30% 03-MAY-14 20% 20%

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

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

Tema 2. El lenguaje JAVA

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

Apuntadores (Punteros)

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

Las plantillas permiten definir funciones genéricas.

LENGUAJE. Tema 1 - Introducción

Informática I para Bachillerato

Definición de Memoria

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

PROGRAMACION ORIENTADA A OBJETOS EN C++

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

El lenguaje C. 1. Identificadores, constantes y variables

Tema: Introducción al IDE de Microsoft Visual C#.

Principios de Computadoras II

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

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

Procesadores de lenguaje Tema 6 La tabla de símbolos

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

Guía práctica de estudio 05: Diagramas de flujo

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

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

2.2 Nombres, Ligado y Ámbito

Tema 6. Gestión dinámica de memoria

Instituto Tecnológico de Celaya

Lenguaje C [Apuntadores y arreglos]

E/S POR CONSOLA DE C++ Parte I. Elementos Básicos Dr. Oldemar Rodríguez R.

Generador de analizadores léxicos FLEX

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

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

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

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

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

Tema 3 Constantes, Variables y Tipos

Curso de Programación Avanzada en C

Java para programadores

Java Avanzado Facultad de Ingeniería. Escuela de computación.

La sintaxis básica para definir una clase es la que a continuación se muestra:

Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.

Prof. Dr. Paul Bustamante

Funciones como Subprogramas en C++

PROGRAMACION / Clave: 11214

Funciones. Parámetros por valor

Tema 2 Introducción a la Programación en C.

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

OPERADORES Y EXPRESIONES

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

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

Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015

Preliminares. Tipos de variables y Expresiones

Tema 8 Gestión de la memoria en tiempo de ejecución.

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

<tipo> Tipo de dato de los elementos del vector

Expresiones y sentencias

Modulo 11. Clases y Objetos en Java

Práctica 3: Vectores y matrices en C.

TEMA 3: EL LENGUAJE C: PRESENTACIÓN

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

GUÍA DE ESTILO EN JAVA

Algoritmos y Programación I

Funciones básicas del depurador

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

CAPITULO 2. COMPRENDER LAS DEFINICIONES DE CLASE

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

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

Bloque 4. La descomposición funcional y el diseño descendente

Estatutos de Control C# Estatutos de Decisión (Selección)

Estructura de Datos: Archivos

Tabla de Símbolos. Programación II Margarita Álvarez

Programación. Ejercicios Tema 3. Elementos Básicos del Lenguaje C

Programación Estructurada

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

FUNDAMENTOS DE INFORMÁTICA 1º Ingeniería Industrial

Transcripción:

Lenguaje C, tercer bloque: Funciones José Otero 1 Departamento de informática Universidad de Oviedo 28 de noviembre de 2007

Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Tipo puntero Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Tipo puntero Concepto de puntero Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Tipo puntero Concepto de puntero Las variables se almacenan en la memoria. La posición dentro de la memoria se identifica con un número. Los distintos tipos de datos: Se codifican de forma distinta. Ocupan distinta cantidad de memoria. Si se quiere acceder a los datos almacenados en la memoria directamente, mediante su dirección, es necesario saber cual es el tipo del objeto. Por eso existe el tipo de dato puntero a int, char, float,... Declaración: //nombre es un puntero a tipo tipo *nombre;

Tipo puntero Concepto de puntero En este curso casi siempre vamos a utilizar punteros en la forma de variables. En general, un puntero a int/float/char/... puede decirse que es una expresión cuyo valor es la dirección de memoria en donde se guarda una variable del tipo correspondiente.

Tipo puntero Operador dirección Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Tipo puntero Operador dirección No es posible decidir dónde se va a almacenar un dato en la memoria de un ordenador, lo gestiona el sistema operativo. Si se puede averiguar en donde está almacenado un dato. El operador dirección es &. Aplicado a una variable, devuelve la dirección de memoria dónde se ha almacenado dicha variable. Su valor es de tipo puntero al tipo de la variable. //a es int, pa es puntero a int int a=707,*pa; //&a es puntero a int, se puede guardar en pa pa=&a;

Tipo puntero Operador dirección 666 666 707 a 707 a 669 pa 669 pa 670 670 int a=707,*pa; pa=&a;

Tipo puntero Operador indirección Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Tipo puntero Operador indirección Es posible utilizar y/o modificar el valor almacenado en una posición de memoria mediante un puntero. El operador indirección es *. Aplicado a una expresión de tipo puntero es un sinónimo de la variable contenida en esa posición. int a=7,*pa; //pa es la direccion de memoria //en donde se almacena a pa=&a; *pa=44;//*pa es lo mismo que a printf("\n%d",a);//muestra 44 a=; printf("\n%d",*pa);//muestra

Tipo puntero Operador indirección 666 666 666 666 7 a 7 a 44 a a 669 pa 669 pa 669 pa 669 pa 670 670 670 670 int a=7,*pa; pa=&a; *pa=44; a=;

Concepto de función Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Concepto de función Una función es una colección independiente de declaraciones y sentencias, generalmente enfocadas a realizar una tarea específica. Un programa en C consta al menos de una función, main(). El problema general se puede descomponer en funciones, más fáciles de codificar y de mantener. La ejecución de un programa comienza por la función main.

Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Como cualquier objeto en C, una función debe declararse y definirse antes de ser utilizada. La declaración y/o definición no tiene por que hacerse en el mismo fichero fuente de main. En este curso ya se han utilizado funciones: printf, scanf, sqrt, system... Esas funciones estaban declaradas en los ficheros de cabeceras que se incluían al principio de los programas.

Definición de funciones Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Definición de funciones La definición de una función consta de: Tipo de retorno. Alguno de los vistos: void, int, float, char,... Nombre. Es un identificador, al igual que el nombre de una variable. Lista de parámetros formales, entre (). Variables en las que se almacenan los datos con los que operará la función. Se especifica su tipo y nombre. Una lista vacía se representa por void. Cuerpo. Encerrado entre {}, código fuente que reúne las instrucciones que realizan el cálculo correspondiente. Además, si la función no es void, incluye la sentencia return que representa la acción de devolver el resultado calculado.

Definición de funciones Esquema: tipof nombref(tipo1 nombre1, tipo2 nombre2,...) { //declaraciones locales... //sentencias... return expresion_tipof; }

Definición de funciones Importante: Las variables que se declaran en el cuerpo de la función son locales. Los parámetros formales también son locales a la función. Se crean cada vez que se ejecuta la función y se destruyen cuando finaliza la función. Pueden escribirse varias sentencias return. Sólo se puede devolver un valor, el de la expresión que se escribe después de return. La función termina cuando se ejecuta la primera de ellas. Si no hay return la función termina cuando se alcanza la } final.

Declaración de funciones Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Declaración de funciones La declaración de una función (prototipo) sirve para que el compilador compruebe si se usa correctamente. Consta de: NOTA: Tipo de retorno. Alguno de los vistos: void, int, float, char,... Nombre. Es un identificador, al igual que el nombre de una variable. Tipo de los parámetros formales, encerrados entre (), separados por comas. Aunque se especifique el nombre el compilador lo ignora. Se termina con un ;. Si la definición de una función se escribe antes (en el mismo fuente) de ser usada, no hace falta declararla.

Uso de funciones Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Uso de funciones Cuando una función se usa, se está realizando una llamada a esa función. La llamada puede hacerse: Desde la función principal main. Desde otras funciones. Incluso desde la misma función. Una función puede ser llamada varias veces. La llamada consiste en: Nombre de la función. Lista de parámetros reales, separados por comas, entre (). Expresiones iguales en tipo, número y orden a los parámetros formales. Si está vacía no se escribe nada entre los ()....nombref(param1, param2,...)...

Uso de funciones Importante: Si la función no es void, la llamada se puede escribir en cualquier parte del programa en donde se pueda escribir una expresión del tipo que devuelve. Si la función es (devuelve) void la llamada forma una única sentencia acabada en ;. Si la función no recibe ningún parámetro, se escriben los () sin contenido dentro de los mismos.

Uso de funciones El tipo de retorno no es void y la lista de parámetros no está vacía. tipof nombref(tipo1 arg1, tipo2 arg2,...) {... //al menos un return return exp_tipo; } int main() {......nombref(exp_tipo1, exp_tipo2,...)...... }

Uso de funciones El tipo de retorno es void y la lista de parámetros no está vacía. void nombref(tipo1 arg1, tipo2 arg2,...) {... //sin return } int main() {... nombref(exp_tipo1, exp_tipo2,...);... }

Uso de funciones El tipo de retorno no es void y la lista de parámetros está vacía. tipof nombref(void) {... //al menos un return return exp_tipo; } int main() {......nombref()...... }

Uso de funciones El tipo de retorno es void y la lista de parámetros está vacía. void nombref(void) {... } int main() {... nombref();... }

Impacto del orden de las definiciones/declaraciones Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Impacto del orden de las definiciones/declaraciones No siempre es adecuado definir y declarar las funciones simultáneamente, las funciones tienen que definirse en orden. #include<stdio.h> //esta se define primero void muestra_mensaje(void) { printf("\nentero positivo?"); } //porque se usa aqui int lee_positivo(void) { int n; do{ muestra_mensaje(); scanf("%d",&n); }while(n<0); return n; } int main() { int a; a=lee_positivo(); printf("\n%d",a); } #include<stdio.h> //declaramos las funciones en //en cualquier orden void muestra_mensaje(void); int lee_positivo(void); int main() { int a; a=lee_positivo(); printf("\n%d",a); } //las definimos en cualquier orden int lee_positivo(void) { int n; do{ muestra_mensaje(); scanf("%d",&n); }while(n<0); return n; } void muestra_mensaje(void) { printf("\nentero positivo?"); }

Paso por valor Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Paso por valor Cuando los parámetros formales son de alguno de los tipos: int, float, char,... se están pasando los parámetros por valor. Los parámetros reales pueden ser expresiones (del mismo tipo que el correspondiente parámetro formal). Su valor se copia en el correspondiente parámetro formal. Aunque se modifiquen los parámetros formales, dentro de la función, no se modifican los parámetros reales.

Paso por valor 146?? 666 x s??? 669 670 671

Paso por valor 146?? 666 x s 146?? 669 670 671 a

Paso por valor 146?? 666 x s 146 669 a 0 670 suma? 671

Paso por valor 146?? 666 x s 146,14, 14,1,0 6,9,1,14? 669 670 671 a suma

Paso por valor 146 14? 666 x s??? 669 670 671

Paso por referencia Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Paso por referencia Cuando alguno de los parámetros formales de una función es de tipo puntero, se está utilizando el paso por referencia. La función puede modificar el valor almacenado en las posiciones de memoria que se pasan como punteros. Se usa el paso por referencia cuando: Se desea que algún parámetro sea de entrada y salida. No se desea hacer copias de algún parámetro, por cuestiones de eficiencia (tiempo y/o espacio). De forma implícita, cuando los datos que maneja la función son punteros.

Paso por referencia 666 x 7 y 81 82 8

Paso por referencia 666 x 7 y 666 81 82 8 a b

Paso por referencia 666 x 7 y 666 81 82 a b 8 tmp

Paso por referencia 666 x 7 y 666 81 82 a b 8 tmp

Paso por referencia 7 666 x 7 y 666 81 82 a b 8 tmp

Paso por referencia 7 666 x y 666 81 82 a b 8 tmp

Paso por referencia 7 666 x y 81 82 8

Llamadas a funciones desde funciones Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección 2 Concepto de función Definición de funciones Declaración de funciones Uso de funciones Impacto del orden de las definiciones/declaraciones Paso por valor Paso por referencia Llamadas a funciones desde funciones

Llamadas a funciones desde funciones Se pueden hacer llamadas a funciones desde otras funciones (además de desde main). Se pueden hacer varias llamadas a la misma función. Desde el mismo bloque. Desde otros bloques. Los parámetros formales van tomando el valor de los parámetros reales de cada llamada. Los parámetros formales y las variables locales se crean al principio de la llamada y se destruyen al finalizar esta.

Llamadas a funciones desde funciones 666 669 670 671 672 67 674 675 676 677 a b c

Llamadas a funciones desde funciones 5 666 669 670 671 672 67 674 675 676 677 a b c El usuario teclea 5 y

Llamadas a funciones desde funciones 5 5 666 669 670 671 672 67 674 675 676 677 a b c n m

Llamadas a funciones desde funciones 5 5 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm

Llamadas a funciones desde funciones 5 5 5 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm num

Llamadas a funciones desde funciones 5 5 5 1 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm num f i

Llamadas a funciones desde funciones 5 5 5 2,6,24,120 2,,4,5 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm num f i

Llamadas a funciones desde funciones 5 5 120 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm

Llamadas a funciones desde funciones 5 5 120 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm num

Llamadas a funciones desde funciones 5 5 120 1 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm num f i

Llamadas a funciones desde funciones 5 5 120 2,6 2, 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm num f i

Llamadas a funciones desde funciones 5 5 120 6 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm

Llamadas a funciones desde funciones 5 5 120 6 2 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm num

Llamadas a funciones desde funciones 5 5 120 6 2 1 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm num f i

Llamadas a funciones desde funciones 5 5 120 6 2 2 2 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm num f i

Llamadas a funciones desde funciones 5 5 120 6 2 666 669 670 671 672 67 674 675 676 677 a b c n m fn fm fnm

Llamadas a funciones desde funciones 5 10 666 669 670 671 672 67 674 675 676 677 a b c