Funciones Computación. Definición una función es un bloque de código reconocido por un...

66
Funciones Computación

Transcript of Funciones Computación. Definición una función es un bloque de código reconocido por un...

Page 1: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Funciones

Computación

Page 2: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Definición

una función es un bloque de código reconocido por un identificador que realiza un trabajo específico.

Su propósito es dividir los programas en módulos manejables separados (divide y vencerás).

El formato para la declaración de funciones es:

tipo-devuelto nombre-de-función(lista-de-parámetros)

{

declaraciones e instrucciones

}

Page 3: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Declaración de funciones

Tradicionalmente en C se declaran como prototipos al inicio del programa. Después se declara la función main, y después se hace la declaración formal de las funciones.

También pueden declararse las funciones al inicio del programa y después declarar la función main sin declarar prototipo.

Page 4: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Ejemplo de función

#include <iostream>

int cuadrado( int ); // prototipo de la función

int main(){ // repite 10 veces, calcula e imprime el cuadrado de x for ( int x = 1; x <= 10; x++ ) cout << cuadrado( x ) << " "; cout << endl; return 0;}

// definición de la función cuadradoint cuadrado( int y ) //y es una copia del argumento de la función{ return y * y; // devuelve el cuadrado de y como un int

} // fin de la función cuadrado

Prototipo de la función (puede omitirse)

Llamada a la función

Definición de la función

Parámetro no necesita nombre

Nombre de la función

Parámetro con nombre

Valor que regresa la función

Page 5: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Mayor de 3 númerosdouble maximo( double x, double y, double z ){ double max = x; // asume que x es el mayor if ( y > max ) // si y es mayor, max = y; // asigna y a max if ( z > max ) // si z es mayor, max = z; // asigna z a max return max; // max es el mayor}int main(){ double numero1; double numero2; double numero3;

cout << "Introduzca tres numeros de punto flotante: "; cin >> numero1 >> numero2 >> numero3;

// numero1, numero2 y numero3 son argumentos // de la función maximo cout << "El maximo es: " << maximo( numero1, numero2, numero3 ) << endl;

return 0;}

No se especifica el prototipo

Variable local

Page 6: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Ejemplos

Función para calcular el área de una esfera:

float areaEsfera(float radio){ float PI = 3.14159265358979; return 4*PI*radio*radio;}

Función para calcular el área de un triángulo (usar math.h)

float areaTriangulo(float a, float b, float c){ float s = (a+b+c)/2; return sqrt(s*(s-a)*(s-b)*(s-c));}

Variables locales

parámetro

parámetros

Page 7: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Ejemplos de llamas a funciones#include <iostream.h>

float areaEsfera(float);

main(){

float r;

cout << “teclee el valor del radio: ”;

cin >> r;

cout << “el area de la esfera es “<<

areaEsfera(r)<<endl;

system(“pause”);

}

float areaEsfera(float radio){ float PI = 3.14159265358979; return 4*PI*radio*radio;}

prototipo

Page 8: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

#include <iostream.h>#include <math.h>float areaTriangulo(float,float,float);main(){ float a,b,c; cout << "teclee el valor de los lados del triangulo: "; cin >> a >> b >> c; cout << "el area del triangulo es "<< areaTriangulo(a,b,c)<<endl; system("pause");}

float areaTriangulo(float a, float b, float c){ float s = (a+b+c)/2; return sqrt(s*(s-a)*(s-b)*(s-c));}

prototipo

Page 9: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función para dibujar una línea de asteriscos

void linea(int longitud){

for(int i=0;i< longitud;i++)

cout <<‘*’;

cout << ‘\n’;

}

Ejemplo:

main(){

int i;

for(i=1;i<10;i++)

linea(i);

system(“pause”);

}

Variable local

Función sin tipo (no regresa valor)

Page 10: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

TareaEscriba una función que calcule el volumen de una caja con lados a, b y c.

Escriba dos programas para probar su función, uno que defina el prototipo de la función, la función main y después defina la función y otro que defina la función antes de la función main sin usar el prototipo.

Page 11: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Tarea caseraEn los siguientes problemas haga 2 versiones de los programas, una con prototipos y otra sin prototipos.

Escriba una función que calcule el área de un cilindro. Los parámetros deben ser el radio y la altura del cilindro. Haga un programa que lea el radio y la altura del cilindro y calcule el área utilizando la función definida.

Escriba una función que calcule la raíz cúbica de un número real. Utilice la función pow de la biblioteca math.h. Haga un programa para desplegar una tabla con las raíces cuadradas y cúbicas de los números de 1 a 20 para probar su función.

Page 12: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Generación de números aleatorios

Para programas de juegos o de simulación existe la función rand() en la biblioteca stdlib.h para generar números aleatorios.

rand() – genera un número aleatorio entre 0 y 32767.

Ejemplos:

rand() % 6 - genera números aleatorios entre 0 y 5

rand() % 6 +1 - genera números aleatorios entre 1 y 6

rand() % 2 - genera números aleatorios entre 0 y 1

Page 13: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función para tirar un dado

La siguiente función genera un valor aleatorio entre 1 y 6 que corresponde a tirar un dado.

int dado(){

return rand()%6+1;

}

No lleva parámetro

Page 14: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Ejemplo de tirar dados#include <iostream.h>#include <iomanip.h>#include <stdlib.h>//contiene el prototipo de la función randint dado(){ return rand()%6+1;}

int main(){ // ciclo de 20 repeticiones for ( int contador = 1; contador <= 20; contador++ ) { // recoge un número aleatorio entre 1 y 6 y lo imprime cout << setw( 10 ) << dado(); //si el contador es divisible por 5, comienza nueva línea if ( contador % 5 == 0 ) cout << endl; } // fin de la estructura for system(”pause”); return 0; // indica terminación exitosa} // fin de main

Page 15: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

El programa anterior siempre genera la misma secuencia de valores.

La función srand(semilla), permite establecer la semilla de los números aleatorios para generar diferentes secuencias aleatorias.

El parámetro para la función srand en un valor de tipo unsigned.

Page 16: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Ejemplo de srand()#include <iostream.h>#include <iomanip.h>// contiene prototipos para las funciones srand y rand#include <stdlib.h>int main(){ unsigned semilla; cout << "Introduzca semilla: "; cin >> semilla; srand( semilla ); // establece la semilla // ciclo de 10 repeticiones for ( int contador = 1; contador <= 10; contador++ ) { // toma un número aleatorio entre 1 y 6 y lo imprime cout << setw( 10 ) << ( 1 + rand() % 6 );//si contador es divisible entre 5, inicia una nueva línea if ( contador % 5 == 0 ) cout << endl; } // fin de for return 0; // indica terminación exitosa} // fin de main

Page 17: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Como generar semillasPara generar semillas se utiliza algún mecanismo que no dependa del usuario y que permita siempre generar una secuencia diferente.

Una posible solución es usar la hora actual como semilla.

time(entero) – con argumento 0 regresa la hora actual en segundos.

srand(time(0)) – inicia la semilla de los números aleatorios.

La función time se encuentra en la biblioteca <time.h>.

Page 18: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Juego de dados (craps)

Se lanzan dos dados. Si la suma de los puntos es 7 o 11 el jugador gana, si es 2, 3 o 12 el jugador pierde. Cualquier otro número se convierte en el número del jugador y sigue tirando.

Si el jugador saca primero su número antes de sacar un 7, el jugador gana, sino pierde.

Page 19: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Algoritmo1. Tirar dados

2. Si la suma es 7 o 11

3 Gana

4. Sino, si la suma es 2, 3 o 12

5. pierde

6. sino, su numero es suma

7. Mientras no gane o pierda

8. Tirar dados

9. Si suma = su numero

10. gana

11. Sino si suma = 7

12. pierde

13. Fin ciclo

El jugador esta en uno de tres posibles estados: gana, pierde, continua.

Podemos definir un nuevo tipo para registrar el estado mediante la sentencia:

enum Status {CONTINUA, GANA, PIERDE};

Status estadoJuego;

Para las pruebas de los posibles resultados es conveniente usar una sentencia switch.

Page 20: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

#include <iostream.h>// contiene los prototipos de las funciones srand y rand#include <stdlib.h>#include <ctime>//contiene el prototipo de la función time

int tiraDados( void ); // prototipo de la función

int main(){

//enumeración que represeta el estado del juego enum Status { CONTINUA, GANA, PIERDE };

int suma; int miPunto;

Status estadoJuego;//puede contener CONTINUA, GANA o PIERDE

//randomiza el generador de números aleatorios srand( time( 0 ) ); suma = tiraDados(); // primer tiro de dados

Page 21: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

// determine el estado del juego y la puntuación en base a la suma de puntos del dado switch ( suma ) { // gana en el primer tiro case 7: case 11: estadoJuego = GANA; break; // pierde en el primer tiro case 2: case 3: case 12: estadoJuego = PIERDE; break; // recuerda puntos default: estadoJuego = CONTINUA; miPunto = suma; cout << "El punto es " << miPunto << endl; break; // opcional } // fin de switch

Page 22: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

while ( estadoJuego == CONTINUA ) { suma = tiraDados(); // tira dados nuevamente // determina el estado del juego if ( suma == miPunto ) // gana por puntos estadoJuego = GANA; else if ( suma == 7 ) // pierde por obtener 7 estadoJuego = PIERDE; } // fin de while

// despliega mensaje de ganador o perdedor if ( estadoJuego == GANA ) cout << "El jugador gana" << endl; else cout << "El jugador pierde" << endl; return 0; // indica terminación exitosa} // fin de main

Page 23: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

int tiraDados( void ){ int dado1; int dado2; int sumaTrabajo; dado1=1+rand() % 6;//obtiene valor aleatorio del dado1 dado2=1+rand() % 6;//obtiene valor aleatorio del dado2 sumaTrabajo = dado1 + dado2;//suma dado1 y dado2 // despliega los resultados del tiro cout << "El jugador tiro " << dado1 << " + " << dado2 << " = " << sumaTrabajo << endl; return sumaTrabajo;// devuelve suma de los dados} // fin de la función tiraDados

Page 24: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Tarea

Escriba una función que genere números aleatorios entre dos límites cualesquiera. Los límites deben ser los parámetros de la función.

Escriba un programa que utilice la función anterior y genere 10 números aleatorios entre 30 y 50, 10 números aleatorios entre 100 y1000 y 10 números aleatorios entre -45 y -10. Asegúrese que el programa genere siempre números aleatorios distintos.

Page 25: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Reglas de alcanceLas variables tiene un alcance dentro del bloque en que son declaradas.

Esto permite que las variables dentro de funciones tengan el mismo nombre que las variables fuera de ellas.

Page 26: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

#include <iostream.h>void usoLocal( void ); // prototipo de funciónvoid usoStaticLocal( void ); // prototipo de funciónvoid usoGlobal( void ); // prototipo de funciónint x = 1; // variable globalint main(){ int x = 5; // variable local a main cout << "x local en el alcance externo de main es " << x << endl; { // inicia nuevo alcance int x = 7; cout << "x local en el alcance interior de main es " << x << endl; } // finaliza nuevo alcance cout << "x local en el alcance externo de main es " << x << endl; usoLocal(); // usoLocal tiene x local usoStaticLocal(); // usoStaticLocal tiene x static local usoGlobal(); // usoGlobal utiliza x global usoLocal(); // usoLocal reinicializa su x local usoStaticLocal(); // static local x retiene su valor previo usoGlobal(); // x global retiene también su valor cout << "\nx local en main es " << x << endl; return 0; // indica terminación exitosa} // fin de main

Page 27: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

// usoLocal reinicializa la variable local x durante cada llamadavoid usoLocal( void ){ int x = 25; // inicialia cada vez que se llama a usoLocal cout<<endl<< "x local es "<<x<<" al entrar a usoLocal"<<endl; ++x; cout <<"x local es " << x<< " al salir de usoLocal" << endl;} // fin de la función usoLocal//usoStaticLocal inicializa a la variable static local x sólo la // primera vez que se llama a la función; el valor de x se guarda// entre las llamadas a esta funciónvoid usoStaticLocal( void ){ // se inicializa la primera vez que se llama a usoStaticLocal. static int x = 50; cout<<endl<<"local static x es "<<x<<" al entrar a usoStaticLocal" << endl; ++x; cout<<"local static x es "<<x<<" al salir de usoStaticLocal"<<endl;} // fin de la función usoStaticLocal// usoGlobal modifica la variable global x durante cada llamadavoid usoGlobal( void ){ cout<<endl<< "x global es "<<x<< " al entrar a usoGlobal" << endl; x *= 10; cout<<"x global es "<<x<< " al salir de usoGlobal" << endl;} // fin de la función usoGlobal

Page 28: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.
Page 29: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Variables de tipo arreglo

Un arreglo es una colección de elementos del mismo tipo que se reconocen por un solo identificador.

Para acceder a los elementos individuales de un arreglo se utiliza un subíndice que debe ser un número entero.

5656910

-32241006212

a[0]

a[1]

a[2]

a[3]

a[4]

a[5]

a[6]

a[7]

Arreglo con nombre “a”

Número de la posición de cada elemento

Page 30: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Ejemplosint a[5];a[0] = 4; a[1] = 0; a[2] = 5; a[3] = -2; a[4] = 8;también se puede int a[] = {4, 0, 5, -2, 8};

double m[8] = {3, 4, 6, 1}// m[4] a m[7] son cero

int x[100], i;for(i = 0; i<100 ; i++) x[i] = 2*i + 1;

int x[100], i;for(i = 0; i<100 ; i++) x[i] = rand()%50 + 25;

int x[100], i;for(i = 0; i<100 ; i++) if(i%2==0) x[i] = 3*i; else x[i] = 4*i;

Page 31: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

int x[30], i;x[0] = 1;x[1] = 1;for(i = 2; i<30 ; i++) x[i] = x[i-1]+x[i-2];1,1,2,3,5,8,13,21,34,..char v[]={’a’,’e’,’i’,’o’,’u’};char c[]={’b’,’c’,’d’,’f’,’g’,’h’,’j’,’k’,’l’,’m’,’n’,’p’,’q’,’r’,’s’,’t’,’v’,’w’,’x’,’y’,’z’};cout << c[5] << v[3] << c[8] << v[0] << endl;

int i;float x[20],y[20];for(i=0; i<20;i++) x[i] = i+1;for(i=0; i<20;i++) y[j]=2*x[i]+1;

Page 32: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Ejemplo: Histograma

int main(){ const int tamanoArreglo = 10; int n[tamanoArreglo] = {19,3,15,7,11,9,13,5,17,1}; cout << "Elemento" << setw( 13 ) << "Valor" << setw( 17 ) << "Histograma" << endl; //para cada elemento del arreglo n, muestra una barra //en el histograma for ( int i = 0; i < tamanoArreglo; i++ ) { cout << setw( 7 ) << i << setw( 13 ) << n[ i ] << setw( 9 ); //despliega una barra for ( int j = 0; j < n[ i ]; j++ )

cout << '*'; cout << endl; // inicia la siguiente línea de salida } // fin de la estructura for externa return 0; // indica terminación exitosa} // fin de main

Page 33: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.
Page 34: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Tarea

¿Cuál es la salida del siguiente programa?

#include <iostream.h>int m;void a(int x){ cout << x << enld; m += x; x = 10; cout << m << enld;}main(){ int x = 6; cout << x << endl; m = 5; a(x); cout << x << endl; cout << m << endl;}

Page 35: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

EjemploPrograma para calcular el promedio y la desviación estándar de los elementos de un vector.

La función main es la siguiente:

#include <iomanip.h>#include <math.h>

double x[50];//arreglo (vector) de 50 elementos, del 0 al 49int max;

main(){ saludo(); LeerDatos(); resultados(); system("pause");}

n

xx

n

xx

n

iI

n

ii

1

1

2

1

Page 36: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

void linea(){ int i; for(i = 0; i<80; i++) cout << '*'; cout << endl;}

void saludo(){ linea(); cout << "\tPROMEDIO Y DESVIACION ESTANDAR DE N VALORES" << endl; linea();}

Page 37: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

void LeerDatos(){//lee los elementos del arreglo int i=0; double num; do{ cout << "Teclee un numero (-1 = terminar):"; cin >> num; if(num>0){ x[i] = num; i++; } }while(num>0); max = i;}

Page 38: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

double promedio(){ int i; double suma=0; for(i=0;i<max;i++) suma +=x[i]; return suma/max;}

double desviacion(){ int i; double suma=0,prom; prom=promedio(); for(i=0;i<max;i++) suma +=(x[i]-prom)*(x[i]-prom); return sqrt(suma/(max-1));}

Page 39: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

void resultados(){ int i; linea(); cout << "VALORES INTRODUCIDOS"<<endl; for(i=0;i<max;i++){ cout << setw(8) << x[i]; if(i%8==0&&i>0) cout << endl; } cout << endl; cout << "El promedio es: " << promedio() << endl; cout << "La desviacion estandar es: " << desviacion() << endl; linea();}

Page 40: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Arreglos de dos dimensiones

Los arreglos de dos dimensiones se declaran de acuerdo al esquema

tipo variable[renglones][columnas];

Ejemplo

int a [5][4];a[0][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3]

a[2][0] a[2][1] a[2][2] a[2][3]

a[3][0] a[3][1] a[3][2] a[3][3]

a[4][0] a[4][1] a[4][2] a[4][3]

Page 41: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

inicialización

int a[5][4] = {{2,3,4,2},{2,0,6,1},

{3,5,5,0},{2,2,1,1},{3,2,5,6}};

2 3 4 2

2 0 6 1

3 5 5 0

2 2 1 1

3 2 5 6

Page 42: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

inicialización (cont.)

int a[5][4] = {{2,3},{1},

{3,5,5,0},{2},{3}};

2 3 0 0

1 0 0 0

3 5 5 0

2 0 0 0

3 0 0 0

Page 43: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

ejemplovoid despliegaArreglo( int a[][ 3 ] ){ for ( int i = 0; i < 2; i++ ) {// for para cada fila for ( int j = 0; j < 3; j++ )//despliega los valores de columnas cout << a[ i ][ j ] << ' '; cout << endl; // inicia una nueva línea de salida } // fin de la estructura for externa} // fin de la función despliegaArregloint main(){ int arreglo1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }; int arreglo2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }; int arreglo3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } }; cout << "Los valores del arreglo1 por fila son:" << endl; despliegaArreglo( arreglo1 ); cout << "Los valores del arreglo2 por fila son:" << endl; despliegaArreglo( arreglo2 ); cout << "Los valores del arreglo3 por fila son:" << endl; despliegaArreglo( arreglo3 ); return 0; // indica terminación exitosa} // fin de main

Debe especificarse

Page 44: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Juego del gato

El juego del gato consta de un tablero de 3x3.

El tablero se puede representar como un arreglo de enteros de 3x3.

Usaremos el valor de 0 para representar una casilla vacía, 1 para representar las X’s y 2 para los 0’s.

Haremos un juego donde juegue un jugador contra la máquina.

Se elegirá aleatoriamente quien empieza.

Page 45: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función main

La función main solo inicia la semilla de aleatorios y lllama a la función juega().

int tablero[3][3] = {0};

main(){ srand(time(0)); juega(); system("pause");}

Page 46: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función tira()void tira(int quien){ int x,y,JugadaValida=0; do{ if(quien==1){ x = rand()%3; y = rand()%3; } else{ cout << "Tecle tirada (0..2, 0..2):"; cin >> x >> y; } if(x>=0&&x<=2&&y>=0&&y<=2){ JugadaValida = tablero[x][y]==0; } }while(!JugadaValida); if(quien==1) cout <<"Compu tira en " << x << ", " << y << endl; tablero[x][y] = quien;}

Page 47: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función dibujaTablero()void dibujaTablero(){ int i,j; char c; cout << endl; for(i=0;i<3;i++){ for(j=0;j<3;j++){ switch(tablero[i][j]){ case 0:c = ' ';break; case 1:c = 'X';break; case 2:c = '0';break; } cout << " " << c << " "; if(j<2)cout << "|"; } cout << endl; if(i<2)cout <<"---+---+---\n\n"; }}

Page 48: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función juega()

void juega(){ int turno = rand()%2+1,jugada=0; dibujaTablero(); do{ tira(turno); dibujaTablero(); turno = (turno==2?1:2); jugada++; }while(jugada<9);}

Page 49: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Tarea

Escriba una función que determine si en algún momento del juego existe un ganador en el gato.

Page 50: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Versión gráfica del gato

Para utilizar una pantalla gráfica hay que usar la biblioteca graphics.h.

Usar initwindow(ancho,alto) para iniciar los gráficos.

Dibujar: line – lineas, rectangle – rectangulo, circle – circulos, etc.

Se puede leer los botones del mouse.

Page 51: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función tira gráficavoid tira(int quien){ int x,y,JugadaValida=0,x1,y1; char c; do{ if(quien==1){ x = rand()%3; y = rand()%3; } else{ //espera a que se presione el boton izquierdo while(!ismouseclick(WM_LBUTTONDOWN)); //obtiene la coordenada del mouse getmouseclick(WM_LBUTTONDOWN, x1, y1); //0 a 49 =0, 50 a 99=1, 100 a 149=2 x = x1/50; y = y1/50; } if(x>=0&&x<=2&&y>=0&&y<=2){ JugadaValida = tablero[x][y]==0; } }while(!JugadaValida); tablero[x][y] = quien; if(quien==1) c='X';else c='0'; //dibuja la jugada bgiout << c; outstreamxy(50*x+25,50*y+25);}

Page 52: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función dibujaTablero

void dibujaTablero(){ line(50,0,50,150); line(100,0,100,150); line(0,50,150,50); line(0,100,150,100);}

Page 53: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función juega

void juega(){ int turno = rand()%2+1,jugada=0; dibujaTablero(); do{ tira(turno); turno = (turno==2?1:2); jugada++; }while(jugada<9);}

Page 54: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función main

main(){ initwindow(150,150); srand(time(0)); juega(); //espera una tecla getch();}

Page 55: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Paso de arreglos a funciones

Para pasar un arreglo a una función debemos conocer su tamaño para poder saber cuantos elementos se van a procesar.

Para esto declare la función con un parámetro extra para pasar el número de elementos a la función

Page 56: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Ejemplo#include <iostream.h>

double promedio(double a[], int tamanio){ double suma = 0; for(int i=0; i<tamanio; i++) suma += a[i]; return suma/tamanio;}

int main(){ double x[] = {3.5, 6.3, 4.5, 7.5, 5.4}; double y[] = {2,3,4,3,4.5,2,3.5,4.2}; cout <<"Promedio x : "<< promedio(x,5) << endl; cout <<"Promedio y : "<< promedio(y,8) << endl; system("pause"); return 0;}

Page 57: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Modificación de elementos mediante funciones

En C los arreglos siempre se pasan por referencia de tal manera que siempre es posible modificar los elementos dentro de una función.

Ejemplo, inicia un arreglo con valores aleatorios entre 0 y 99.

void inicia(double a[], int tamanio){ for(int i=0; i<tamanio; i++) a[i] = rand()%100;}

Page 58: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

OrdenaciónLa operación de ordenación es de las más comunes en computación.

#include <iostream.h>

void Burbuja(int a[],int tam){ for(int i = 0; i< tam - 1 ; i++) for(int j = i; j< tam;j++) if(a[i]>a[j]){ int temp = a[i]; a[i]=a[j]; a[j]=temp; }}

int main(){ int b[20] = {1,2,3,2,4,3,5,6,3,7,8,9,4,5,3,5,3,4,5,6}; for(int i =0; i<20; i++) cout << b[i] << " "; cout << endl; Burbuja(b,20); for(int i =0; i<20; i++) cout << b[i] << " "; cout << endl; system("pause");; return 0;}

Page 59: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Búsqueda

int BusquedaLineal(int a[],int b,int tam){ for(int i = 0; i< tam; i++) if(a[i]==b) return n; return -1;}

Otra operación importante es la búsqueda del valor de un elemento dentro de un arreglo.

Page 60: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Parámetros por referencia

Una función puede modificar los valores de los parámetros si estos se pasan por referencia.

Los parámetros por referencia se especifican con la siguiente notación

nombre-función(tipo &parametro)

Page 61: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Ejemplo de paso por referencia

#include <iostream.h>void porValor(int x){ x = 5;}void porReferencia(int &x){ x = 5;}int main(){ int a = 8; cout <<“Valor inicial: ”<<a<<endl; porValor(a); cout <<“Por valor: ”<<a<<endl; porReferencia(a); cout <<“Por referencia: ”<<a<<endl; system(“pause”); return 0;}

Page 62: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Solución de la cuadrática con funciones

Algoritmo

1. Leer coeficientes

2. Determinar caso (2 raíces, una raíz doble, raíces complejas) y solución

3. Imprimir resultado de acuerdo con el tipo de solución.

Page 63: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función para leer coeficientes

void leer(double &a, double &b, double &c){ cout << "Tecle coeficientes a,b,c: "; cin >> a >> b >> c;}

Parámetros por referencia

Page 64: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función para calcular las raícesvoid calcularRaices(double a, double b, double c,double &x1, double &x2, int &caso){ double d = b*b-4*a*c; if(d>0){ x1 = (-b+sqrt(d))/2/a;x2 = (-b-sqrt(d))/2/a; caso = 1; }else if(d==0){ x1 = (-b+sqrt(d))/2/a;x2 = (-b-sqrt(d))/2/a; caso = 2; }else{ x1 = -b/2/a; x2 = sqrt(-d)/2/a; caso = 3; }}

Caso:

1 – dos raíces diferentes

2 – una raíz doble

3 – raíces complejas

Parámetros por referencia

Page 65: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función de impresión y función main

void imprime(double x1,double x2,int caso){ switch(caso){ case 1:cout <<"x1 = "<<x1<<" x2 = "<<x2<< endl;break; case 2:cout <<"x1 = x2 =" << x1 << endl;break; case 3:cout <<"re = "<<x1<<" im = "<<x2<< endl;break; }}

int main(){ double a,b,c,x1,x2; int caso; leer(a,b,c); calcularRaices(a,b,c,x1,x2,caso); imprime(x1,x2,caso); system(“pause”);}

Page 66: Funciones Computación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito es.

Función factorialEl factorial se defino por: N! = 1*2*3* ... *(N-1)*N

double fact(int N){

double f =1;

for(int i=2; i<=N; i++)

f *= i;

return f;

}