Ámbito y Funciones Lenguaje de Programación Estructurado Siempre imaginé el Paraíso como algún tipo de biblioteca. Jorge Luis Borges 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 1
Recordando algunas funciones en <cmath> Función sqrt(value) pow(base, exp) abs(value) ceil(value) floor(value) log(value) Definición Raíz Cuadrada Elevar una base a un exponente Valor absoluto Redondear hacia arriba Redondear hacia abajo Logaritmo natural log10(value) Logaritmo en base 10 max(value1, value2) min(value1, value2) round(value) sin(value) cos(value) tan(value) Máximo de dos valores Mínimo de dos valores Redondear al entero más próximo Seno / coseno / tangente de un ángulo en radianes 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 2
Lenguaje de Programación Estructurado AMBITO DE VARIABLES 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 3
Ámbito de variables El ámbito de una variable es la sección o parte del programa en el que la variable es válida. El ámbito depende de dónde la variable haya sido declarada. Variables globales: Válidas en todo el programa Variables locales: Válidas en un bloque del programa delimitado por { 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 4
Ámbito de variables #include <iostream> using namespace std; /* Variables globales */ double global = 3; int M[1000][1000]; int main() { /* Variables locales */ double local1 = 7.2; if (global > 2) { /* Variables local de bloque */ double local2 = global / 2; return 0; 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 5
Ámbito de variables: Un ejemplo extremo #include <iostream> using namespace std; double x = 1; int main() { cout << x << endl; double x = 2; cout << x << endl; if (x == 2) { double x = 3; cout << x << endl; cout << x << endl; { double x = 4; cout << x << endl; cout << x << endl; return 0; 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 6
Lenguaje de Programación Estructurado FUNCIONES 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 7
Funciones En C++, una función es una agrupación de instrucciones que, en conjunto, realizan una tarea. Tipo de Retorno Parámetros tipo nombre_func(tipo nombre_param,..., tipo nombre_param ) { instruccion; instruccion;... instruccion; return expresion; 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 8
Algunos ejemplos /* Convertir a minuscula */ char minuscula(char ch) { if (ch >= 'A' && ch <= 'Z') { ch = ch + 32; return ch; /* Determinar si un caracter es vocal */ bool esvocal(char ch) { ch = minuscula(ch); return ch == 'a' ch == 'e' ch == 'i' ch == 'o' ch == 'u'; 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 9
Funciones tiporetorno nombre(parametros) Pueden o no tener parámetros de entrada. Deben retornar un valor. Generalmente los mismos parámetros de entrada generan el mismo valor de salida. Generalmente no dependen de variables externas. #include <iostream> using namespace std; /* Funcion que recibe 2 parametros double y retorna la suma */ double sumar(double a, double b) { double suma; suma = a + b; return suma; int main() { double suma = sumar(5, 4); cout << suma << endl; return 0; 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 10
Procedimientos void nombre(parametros) #include <iostream> using namespace std; Un procedimiento es una función que no retorna ningún valor. Realizan determinadas operaciones en el programa. Puede o no tener parámetros de entrada, así como depender de otras variables externas. char saludo[5] = "hola"; /* Declaramos las funciones antes de usarlas*/ void saludar() { cout << saludo << endl; void saludar(int veces) { for (int i = 0; i < veces; i++) { saludar(); /*No enviamos ningún parámetro*/ int main() { saludar(); saludar(3); return 0; 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 11
Funciones con cadenas #include <iostream> using namespace std; int strlen(char cadena[]) { int i = 0; while (cadena[i]!= '\0') { i += 1; return i; int main() { char s[] = "Hola"; cout << strlen(s) << endl; return 0; Se pueden recibir cadenas como parámetros del siguiente modo: tipo_retorno funcion(, char cadena[],..) No olvidemos que en las cadenas el tamaño se determina de acuerdo a la posición del carácter especial '\0' 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 12
Funciones con arreglos #include <iostream> using namespace std; int suma(int numeros[], int n) { int valor = 0; for (int i = 0; i < n; i++){ valor = valor + numeros[i]; return valor; int main() { int arreglo[5] = {1, 2, 3, 4, 5; cout << suma(arreglo, 5) << endl; return 0; Se pueden recibir arreglos como parámetros del siguiente modo: tipo_retorno funcion(, int x[], int n,..) Se debe incluir un parámetro adicional que indique el tamaño del arreglo! 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 13
Recursividad Lenguaje de Programación Estructurado Para entender la recursividad, primero hay que entender la recursividad. Anónimo 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 14
Funciones recursivas #include <iostream> using namespace std; int factorial(int n) { if(n <= 1) return 1; return n * factorial(n - 1); int main() { cout << factorial(5) << endl; return 0; Las funciones pueden llamarse recursivamente. Recordemos los conceptos de recursividad: o Casos base o de terminación o Casos generales 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 15
Aplicaciones Básicas Calcular el número de dígitos de un número dado. Calcular la suma de dígitos de un número dado. Calcular el factorial de un número: F(n) = n * F(n - 1) Calcular el número combinatorio: C(n, k) = C(n-1, k-1) + C(n-1, k) Calcular el término n de la serie de Fibonacci: F(n) = F(n-1) + F(n-2) 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 16
Conjetura de Collatz Dado cualquier número, n, se construye una secuencia de números: Si n es par, se divide entre 2. Si n es impar, se multiplica por 3 y se suma 1 al resultado. Se repiten los pasos mientras n sea distinto de 1. La conjetura de Collatz indica que para cualquier n inicial, eventualmente se llega al número 1. 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 17
Lenguaje de Programación Estructurado FRACTALES 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 18
Triangulo de Sierpinski Nivel 1 Nivel 2 Nivel 3 Nivel 4 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * https://en.wikipedia.org/wiki/sierpinski_triangle 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 19
Alfombra de Sierpinski # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # https://en.wikipedia.org/wiki/sierpinski_carpet 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 20
Fractal de Vicsek Nivel 1 Nivel 2 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # https://en.wikipedia.org/wiki/vicsek_fractal 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 21
Ejercicios para PC2 Este es un test con ejercicios sobre el uso de funciones en C++. Puede resolver el test en forma colaborativa con sus compañeros. No obtendrá puntos adicionales pero reforzará conceptos del curso. Puede revisar la sección de preguntas frecuentes de la plataforma: FAQ. Si tiene alguna consulta por favor envíe un correo a rpalaciosr@uni.edu.pe http://hr.gs/st202ejercicios1 http://hr.gs/pc2x 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 22