Cridada al subpr. Definició del subpr.

Documentos relacionados
Funcions en C++ Cridada al subpr. Definició del subpr. Subprogrames en C++

Funciones II. Fundamentos de Programación Fundamentos de Programación I

Funciones: Pasos por Referencia Recursividad

Funciones. Parámetros por valor

Funciones I. Fundamentos de Programación Fundamentos de Programación I

PROGRAMACIÓ 1! 1. Entendre el concepte de recursivitat. 2. Saber dissenyar algorismes recursius senzills i implementar-los en llenguatge C.

Estructuras de repetición

Programación 1 Tema 5. Instrucciones simples y estructuradas

Programación 1 Tema 5. Instrucciones simples y estructuradas

Fundamentos de la programación

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

strings i estructures de dades

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

TEMA 5: Subprogramas, programación modular

Unidad 2 Recursividad. 2.1 Definición 2.2 Procedimientos Recursivos 2.3 Ejemplos de Casos Recursivos

Preliminares: programación con C++

Unidad 2 Recursividad. 2.1 Definición 2.2 Procedimientos Recursivos 2.3 Ejemplos de Casos Recursivos

Estructuras de control. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Fundamentos de programación

Fundamentos de la programación

Ejercicios De Programación De C++ Algoritmos. Lenguaje De Programación C++:

TEMA 4: Programación estructurada

Programación 1 Tema 7. Desarrollo modular y descendente de programas

VGOC"6<"Rtqitcocekôp"guvtwevwtcfc

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Ámbito y Funciones. Lenguaje de Programación Estructurado. Siempre imaginé el Paraíso como algún tipo de biblioteca.

Prof. Dr. Paul Bustamante

Tema 7: Recursividad

Introducción a los Computadores ITTELSI. Curso

Cátedra I Informática Autor I Carlos Bartó

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda. Lenguaje C++ Contadores y Acumuladores

Tema: Plantillas en C++.

Vectores y matrices. Fundamentos de Programación Fundamentos de Programación I

TEMA 5: Subprogramas. Programación modular EJERCICIOS DE TRAZAS

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

PROGRAMACIÓN ESTRUCTURADA

Tipos de datos y operadores en C++

= RETURN =3 7-. ELSE K

Unidad IV: Funciones

Cátedra I Informática Autor I Carlos Bartó

Programación 1 Tema 4. Diseño de programas elementales

TEMA 4: Estructuras de Control

SUBPROGRAMAS FUNCIONES

Recursividad. Dept. Ciencias de la Computación e I.A. Universidad de Granada

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

Laboratorio de Informática GRADO EN FÍSICA

Tema 3. Estructuras de control

ALGORITMO: LENGUAJE C++: # include <iostream.h> # include <math.h> int main () Int num 1=0, num =0, d=0; Cout << ingrese primer numero: ;

Lenguaje de Programación: C++ Repaso de Material C++

6. Visualizar error, ingrese un numero que no sea cero

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

SESIÓN DE EJERCICIOS E1

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Fundamentos de programación

República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda Trayecto II Desarrollo de Software

Unidad 2. La lógica de programación. Tema 4. Arreglos y estructuras de repetición

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

Programación 1. Tema II. Diseño de los primeros programas. Lección 4. Diseño de algunos programas elementales

Problema Master mind. Extracte de solució

Programación de sistemas Recursión

Estructuración del programa en partes más pequeñas y sencillas

Cadenas y Estructuras

Vectores y Matrices. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Un Poco Sobre Programación Recursiva

Programación 1 Problemas del Composición condicional

Facultad de Ciencias de la Computación. Abraham Sánchez López Grupo MOVIS

Tema: Arreglos de Objetos en C++.

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Introducción al lenguaje C

PROGRAMACION MODULAR FUNCIONES

Introducción a C++ Índice

SEGUNDO PARCIAL INFORMATICA II

Introducción al lenguaje C

Fundamentos de la programación

Introduccion a C++ y Fortran 90/95

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

Tema 4: Estructuras de Control Estructura y Contenidos

Elementos de un programa en C

República Bolivariana de Venezuela Aldea Universitaria Fray Pedro de Agreda PNFSI. Introducción a lenguaje C++. Parte IV Ciclos iterativos

Funciones y Parámetros

Estructuras de datos

Sentencias de salto: break, continue, goto Sentencia de Salto: break

Lenguaje de programación C. Introducción

Informática PRÀCTICA 2 Curs

3. Indicar la salida por pantalla (2 puntos-10 minutos)

Cadenas (strings) y Estructuras

Examen escrito de Programación 1

LABORATORIO 6 FUNCIONES

Variables locales y globales. Funciones sin parámetros. Paso de parámetros

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Subrutinas o Funciones

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

TEMA CÁLCULO DE DISTANCIA ENTRE DOS PUNTOS

Laboratorio 4 Tema 6. Procedimientos: Acciones, Funciones y Pase de Parámetros

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

for(i = 0; i <= 45; i+=5) { x = (i*3.1416)/180; printf( seno(%d) = %f\n,i,seno(x));

Transcripción:

Funcions en C++ 1

Cridada al subpr. Definició del subpr. Subprogrames en C++ Funcions 2

Una funció es un subprograma que sempre te un paràmetre d eixida (Ex.: cos(x), pow(2,3),.. ). Tipo nom_func (parámetros) Declaracions Instruccions return valor; // Cabecera de la función // Variables, // Cos de la funció // Valor de tornada Tipo es el tipus de la variable d eixida, nom_func es un identificador que representa el nom de la funció, parámetros es un conjunt de paràmetros separats per comes, on cadascun es declara com una variable normal amb el seu tipus. Mitjançant la instrucció return enviem el valor que tornarà la funció al acabar. Cuan fem una cridada a una funció, lo primer que es fa es una asignació dels paràmetres reals (els del pp) als formals (els de la funció) operació de Paso de paràmetres (valor referencia), i després comencen a ejecutar-se les instruccions de la funció Si volem una funció que no torne cap valor, la declarem de tipo void. 3

#include <iostream.h> //Prototipos de funciones int recta(int x, int m, int b); int main() int m, b; //coeficientes de la ecuacion de la recta int r0,r1; //puntos extremos del intervalo int x, y; //para el bucle for cout << Introducir coeficientes de la recta: y=mx+b\n ; cin >> m >> b; cout << Recta: << y= << m << x + << b ; cout << \trango: [ << r0 << << r1 << ] ; //Calculo los puntos de la recta for (x = r0 ; x <= r1; x++) //Calculo valores de y para cada valor de x Llamada a la función y = recta ( x, m, b); //Muestro resultado cout << Valor de x: << x <<, Valor de y: << y <<endl; return 0; 4

//Función que calcula la coordenada y de la recta (mx + b) int recta(int x, int m, int b) int y; y = m*x + b; return y; La funció es farà una copia de cadascun d ells (ej.: int x, int m, int b) L àmbit d aquestes variables es local (podem gastar el mateix nom dins de la funció sense efectes laterals, ja que modifiquem una copia) Per tant, es consideren paràmetres d entrada a la funció 5

switch ( opcion ) #include <iostream.h> case 1: cout << "Introduce los numeros a sumar" << endl; cin >> n1 >> n2; float sumar ( float a, float b); float restar ( float a, float b); float multiplicar ( float a, float b); Float dividir (float a, float b); int main() float n1, n2, res; int opcion; do Llamadas a funciones cout << " Elige opcion:\n"; cout << " 1. Sumar" << endl; cout << " 2. Restar" << endl; cout << " 3. Multiplicar" << endl; cout << " 4. Dividir" << endl; cout << " 0. Salir" << endl; cin >> opcion; res = sumar(n1,n2); cout << n1 << " + " << n2 << " = " << res << endl; break; case 2: cout << "Introduce los numeros a restar" << endl; cin >> n1 >> n2; res = restar(n1,n2); cout << n1 << " - " << n2 << " = " << res << endl; break; case 3: cout << "Introduce los numeros a multiplicar" << endl; cin >> n1 >> n2; res = multiplicar(n1,n2); cout << n1 << " * " << n2 << " = " << res << endl; break; case 4: cout << "Introduce los numeros a dividir" << endl; cin >> n1 >> n2; res = dividir(n1,n2); Exercici 7: Calculadora cout << n1 << " / " << n2 << " = " << res << endl; break; while( opcion!= 0 ); 6

loat sumar ( float a, float b) int res; //Declaración de variables locales res = a + b; float restar ( float a, float b) int res; //Declaración de variables locales res = a - b; return res; //Valor que devuelve la función return res; //Valor que devuelve la función float multiplicar ( float a, float b) int res; //Declaración de variables locales res = a * b; float dividir ( float a, float b) int res; //Declaración de variables locale res = a / b; return res; //Valor que devuelve la función return res; //Valor que devuelve la funció 7

Recordeu. : funcions problemes independents Definir: Prototip, cridada, i la propia funció: tipus dels parametres: valor (int x), referencia (int &x) Àmbit de les variables i paràmetres. Valor/s d eixida (totes retornen un valor per defecte, po ser void). 8

Exercici 8: Escriure una funció que transforme un punt de coordenades polars a cartesianes Entrades: Un punt amb coordenades polares mòdul, àngul Eixides: Coordenades (x,y) Análisis: sabem la tranformació que cal utilitzar? 9

#include <iostream.h> #include <math.h> //Prototipo de la función void PolaresACartesianas(float modulo, float angulo, float &x, float &y); int main() float m,ang; float posx, posy; cout << Introducir el modulo y el angulo del punto en coordenadas polares:\n ; cin >> m >> ang; //Calculo la posicion x, y PolaresACartesianas(m, ang, posx, posy); cout << Las coordenas cartesianas correspondientes a: <<m <<, << ang << endl; cout << ( << posx <<, << posy<< ) << endl; return; void PolaresACartesianas(float modulo, float angulo, float &x, float &y) x = modulo*cos(angulo); y = modulo*sin(angulo); return; 10

Els canvis realitzats sobre una variable passada per referència en una funció afecten directament la variable int f1(int &b) b = b+1; return 2*b; int main() int x,y; x = 3; cout << x; y = f1(x); cout << x << y; return 0; Que valdrà finalment x e y?... 11

Exercici 7: Mostrar els punts (coordenades x,y) de l elipse centrada en el (0,0) (demanant a i b pel teclat). Fer el mateix amb les circumferències (r = a, r = b). Definir tres funcions que es cridaran desde el programa principal. b = 2.999 (x 2 /a 2 ) + (y 2 /b 2 ) = 1 a = 3 12

#include <iostream> #include <stdlib.h> using namespace std; void elipse(float x, float a, float b, float &y1, float &y2); int main(int argc, char *argv[]) float a, b; float y1, y2; cout << "Coeficients (a, b) :: " ; cin >> a >> b; for (float x=-a; x<=a ; x+=1) elipse(x, a, b, y1, y2); cout << " x: " << x << " " << "y: " << y1 << " y2: " << y2 << endl; //.. Circunferencia system("pause"); return 0; 13

void elipse(float x, float a, float b, float &y1, float &y2) float b2a2, raiz; b2a2 = (b*b)/(a*a); raiz = (b*b) - b2a2*(x*x); if( raiz > 0 ) y1 = sqrt(raiz) ; y2 = y1 * -1; else y1 = 0; y2 = 0; 14

// Tener en cuenta que el radio r = a y r = b // x2 + y2 = r2 void circunferencia(float x, float a, float b, float &y1, float &y2) y1 = sqrt(a*a x*x); y2 = y1 * -1; 15

Exercici 9:Escriure una funció que genere punts 2D aleatoris. Introduir la llavor (semilla) y el rang per teclat. La instrucción srand (semilla) inicializa motor de números pseudo-aleatorios en C++. srand usa el argumento recibido como semilla para una nueva secuencia de números pseudo-aleatorios, que serán retornados en llamadas posteriores a rand(). Si srand es llamada con el mismo valor semilla, la secuencia de números pseudoaleatorios será la misma!. Para evitar esto, la semilla suele inicializarse con valores como la hora del sistema, que siempre será diferente. 16

int main() int x,y, maxrango, minrango, n, semilla, i; srand (semilla) usa el argumento como una semilla para una nueva secuencia de números pseudoaleatorios, que serán retornados en llamadas posteriores a rand( ). cout << "Semilla: "; cin >> semilla; srand(semilla ); cout << "Numero de puntos2d a generar"; cin >> n; do cout << "Rango [min..max]: "; cin >> minrango >> maxrango; while(minrango >= maxrango); for(i=0; i<n; i++) GeneraPunto2D(x, y, minrango, maxrango); cout << "Punto2D: (" << x << ", " << y << ")." << endl; system("pause"); return 0; int Aleatorio(int ini, int fin) int aleat; aleat = ini + rand() % int(fin - ini + 1); // para incluir fin returnaleat; void GeneraPunto2D(int& x, int& y, int rmin, int rmax) x = Aleatorio(rmin, rmax); y = Aleatorio(rmin, rmax); 17

Dins del codi d una funció recursiva hi haurà una sentencia o expresió amb una cridada a la mateixa funció. Per a no generar cridades infinitas (donat que la funció es crida a si mateixa) necesitem considerar el següent: Una funció recursiva resoldrà un problema de talla N, considerant resolt el problema en la seua talla N 1. Per tant, els paràmetres de la funció han de variar : ej: factorial(n) = N * factorial (N-1); // problema_de_talla_n = N *problema_de_talla_n-1 Abans que es produeixi la recursió, deu aparèixer la condició de parada (cas base), que estarà relacionada amb algun dels paràmetres de la funció (ej: factorial(0) = 1). En aquest cas, no es produiran més cridades recursivas i es retornarà el valor corresponent.. 18

Exercici 10: Programar una funció recursiva que calcule el sumatori i productori dels n primers sencers. 19

/************************************************** Funcion que calcula el sumatorio de forma recursiva ***************************************************/ int Sumatorio(int n) int res; if (n == 1) res = 1; else res = n + sumatorio(n 1); return res; /**************************************************** Funcion que calcula el productorio de forma recursiva *****************************************************/ int Productorio(int n) int res; if ( n == 1) res = 1; else res = n * Productorio (n-1); return res; 20

#include <iostream.h> //Prototipo de la funcion int Sumatorio(int n); int Productorio(int n); int main() int num; int suma, producto; Llamada a la función cout << Este programa calcula el sumatorio y productorio de n numeros naturales\n ; cout << Utilizando una función recursiva. Introduce n:\n ; cin >> n; suma = Sumatorio(num); producto = Productorio(num); cout << El productorio es: << producto; cout << El sumatorio es: << suma; return 0; 21

Exemple 11: Realizar una función recursiva que calcule recursivamente la suma de dos números enteros utilizando solamente operaciones de incremento y decremento. Exemple 12: Que fa aquesta funció? int exemple(int x, int y) int res; if (y == 0) res = 1; else res = x * exemple (x, y - 1); return res; 22

/************************************************************************************ * Funcion que suma dos numero enteros * Descripcion: Calcula el cociente y el resto de la division entera * Parámetros: * Nombre: E/S * a E * b E * * Valor devuelto: * int (valor devuelto) ***************************************************************************************/ int Suma(int a, int b) if ( a == 0) res = b; else res = suma(a-1,b+1) return res; 23

Ejercicio 12: Recursividad indirecta. Escribe una función que devuelva cierto si un número entero pasado como parámetro es par y falso en caso contrario. 24

#include <iostream.h> // Prototipos bool par(int n); bool impar(int n); int main() int a; cout << "Introduce un número entero : "; cin >> a ; cin.ignore(); if(par(a)) cout << "... es par " << endl; else cout << "... es impar " << endl; system("pause"); bool par(int n) if (n == 0) return true; else return impar(n-1); bool impar(int n) if (n == 0) return false; else return par(n-1); return 0; 25