Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por...

91
Funciones y arreglos Programación

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

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

Funciones y arreglos

Programación

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

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 y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Ejemplo de función

#include <stdio.h>

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++ ) fprintf(“%d ”, cuadrado( x )); fprintf(“\n”); 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 y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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;

printf("Introduzca tres numeros de punto flotante: “); scanf(“%d%d%d”,&numero1,&numero2,&numero3);

// numero1, numero2 y numero3 son argumentos // de la función maximo printf("El maximo es: %f\n“,maximo( numero1, numero2, numero3 ));

return 0;}

No se especifica el prototipo

Variable local

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

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 y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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

#include <conio.h>

float areaEsfera(float);

main(){

float r;

printf(“teclee el valor del radio: ”);

scanf(“%f”,&r);

printf(“el area de la esfera es %f\n“,areaEsfera(r));

getch();

}

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

prototipo

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

#include <stdio.h>#include <conio.h>#include <math.h>float areaTriangulo(float,float,float);main(){ float a,b,c; printf("teclee el valor de los lados del triangulo: “); scanf(“%f%f%f”,&a,&b,&c); printf("el area del triangulo es %f\n“, areaTriangulo(a,b,c)); getch();}

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 y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Función para dibujar una línea de asteriscos

void linea(int longitud){

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

printf(‘*’);

printf(“\n”);

}

Ejemplo:

main(){

int i;

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

linea(i);

getch();

}

Variable local

Función sin tipo (no regresa valor)

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

TareaEscriba una función que acepte tres parámetros el primero representando horas, el segundo minutos y el tercero segundos. La función debe regresar el tiempo en segundos al sumar las horas los minutos y los segundos. Utilice esta función para escribir una función main que lea dos tiempos en horas, minutos y segundos y calcule el tiempo transcurrido entre los tiempos leídos.

Ejemplo:

Teclee primer tiempo en hrs min seg: 4 15 23

Teclee segundo tiempo en hrs min seg: 2 17 12

El lapso de tiempo es: 7091 segundos

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

Modificador staticEl modificador static en una variable permite conservar una variable local en una función en diferentes veces que la función es llamada.

#include <stdio.h>#include <conio.h>

void cuentaLlamadas(){ static int n = 0; n ++; printf("llamada No %d\n",n);}

main(){ cuentaLlamadas(); cuentaLlamadas(); cuentaLlamadas(); getch();}

Solo se ejecuta en la primera llamada

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

Parámetros por referenciaUna 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 *parámetro)

Dentro de la función debe usarse el operador de indirección (*) para hacer referencia a los parámetros.

Los parámetros por referencia se utilizan cuando la función regresa más de un valor.

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

Conversión a hrs, min, segComo ejemplo de parámetros por referencia consideremos una función que convierta un tiempo en segundos a horas, minutos y segundos.

Algoritmo segundos_A_horas, entrada segundos

1. Calcular número de horas

2. Restar horas a la cantidad segundos

3. Calcular número de minutos

4. Restar minutos a la cantidad segundos

5. Asignar segundos a parámetro de salida

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

funciónvoid segundos_A_horas(int seg,

int *horas, int *minutos,int *segundos){

*horas = seg/3600;

seg = seg – *horas*3600;

*minutos = seg/60;

*segundos = seg – *minutos*60;

}

main(){

int h,m,s;

segundos_A_horas(53433,&h,&m,&s);

printf("%d hrs %d min %d seg\n",h,m,s);

getch();

}

Parámetros por referencia

Debe usarse &

Debe usar el operador de indirección

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

Tarea

Escriba una función que convierta un lapso de tiempo en días a años, meses y días. Por ejemplo:

12546 días = 34 años 4 meses 16 días

Suponga que los años son de 365 días y los meses de 30 días.

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

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 17: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 18: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Ejemplo de tirar dados#include <stdio.h>#include <conio.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 printf(“%10d”,dado()); //si el contador es divisible por 5, comienza nueva línea if ( contador % 5 == 0 ) printf(“\n”); } // fin de la estructura for getch(); return 0; // indica terminación exitosa} // fin de main

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

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 20: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Ejemplo de srand()#include <stdio.h>#include <conio.h>// contiene prototipos para las funciones srand y rand#include <stdlib.h>int main(){ unsigned semilla; printf("Introduzca semilla: “); scanf(“%d”,&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 printf(“%10d” , ( 1 + rand() % 6 ));//si contador es divisible entre 5, inicia una nueva línea if ( contador % 5 == 0 ) printf(“\n”); } // fin de for getch();} // fin de main

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

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 22: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 23: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 24: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

#include <stdio.h>// contiene los prototipos de las funciones srand y rand#include <stdlib.h>#include <time.h>//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 25: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

// 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; printf( "El punto es %d\n“, miPunto); break; // opcional } // fin de switch

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

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 ) printf( "El jugador gana\n“); else printf("El jugador pierde\n“); return 0; // indica terminación exitosa} // fin de main

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

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 printf( "El jugador tiro %d+%d=%d\n“,dado1,dado2, sumaTrabajo); return sumaTrabajo;// devuelve suma de los dados} // fin de la función tiraDados

Page 28: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Tarea

Escriba una función que genere 6 números aleatorios entre 1 y 56, asegúrese de que todos sean diferentes. Pase los 6 parámetros por referencia.

Page 29: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 30: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

#include <stdio.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 printf("x local en el alcance externo de main es %d\n“,x); { // inicia nuevo alcance int x = 7; printf("x local en el alcance interior de main es %d\n“,x); } // finaliza nuevo alcance printf("x local en el alcance externo de main es %d\n“,x); 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 printf( "\nx local en main es %d\n“,x); return 0; // indica terminación exitosa} // fin de main

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

// usoLocal reinicializa la variable local x durante cada llamadavoid usoLocal( void ){ int x = 25; // inicialia cada vez que se llama a usoLocal printf(“\nx local es %d al entrar a usoLocal\n“,x); ++x; printf("x local es %d al salir de usoLocal\n“,x) ;} // 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; printf(“\nlocal static x es %d al entrar a usoStaticLocal\n“,x); ++x; printf(“local static x es %d al salir de usoStaticLocal\n“,x);} // fin de la función usoStaticLocal// usoGlobal modifica la variable global x durante cada llamadavoid usoGlobal( void ){ printf(“\nx global es %d al entrar a usoGlobal\n“,x); x *= 10; printf(“x global es %d al salir de usoGlobal\n“,x);} // fin de la función usoGlobal

Page 32: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.
Page 33: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Funciones recursivasUna función es recursiva si dentro del cuerpo de la función se hace una llamada a si misma.

Las funciones recursivas deben cumplir lo siguiente:

1. Debe existir un salida en la que no se haga la llamada recursiva

2. La llamada recursiva debe ser versión más simple que la llamada que la invocó.

Page 34: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Máximo Común Divisor

int gcd(int x, int y){ if((y<=x)&&(x%y == 0)) return y; else if(x < y) return gcd(y,x); else return gcd(y,x % y);}

Definición:

1. el gcd(x,y) = y si y<x y el x mod y = 0

2. el gcd(x,y) = gcd(y,x) si x < y

3. el gcd(x,y) = gcd(y, x mod y)

Salida trivial

Llamadas recursivas

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

Versión no recursiva del gcd

Algoritmo gcd no recursivo, entrada n1 y n2

1. Si n1<n2

2. n = n1

3. Sino

4. n = n2

5. Mientras (n1%n!=0 o n2%n!=0)

6. n--;

7. Regresar n

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

Función gcd no recursiva en C

int gcd(int n1, int n2){ int n; if(n1<n2) n = n1; else n = n2; while(n1%n||n2%n) n--; return n;}

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

Calculo recursivo del factorialDefinición:

1. n! = 1 si n = 0

2. n! = n*(n-1)!

Salida trivial

Llamada recursiva

double fact(int n){ if(n==0) return 1; else return n*fact(n-1);}

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

Factorial no recursivo

double fact(int n){ double f=1; for(int i=2;i<=n;i++) f *=i; return f;}

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

Números de Fibonacci

int fib(int n){ if(n == 0 || n ==1 ) return n; else return fib(n-1)+fib(n-2);}

Los números de Fibonacci forman la secuencia: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … Es decir cada uno es la suma de los dos anteriores.

Definición:

1. Fib(n) = n si n = 0 o 1

2. Fib(n) = fib(n-1) + fib(n-2)

Salida trivial

Llamada recursiva

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

Solución no recursiva a los números de Fibonacci

int fib(int n){ int a = 0; int b = 1; int c = a + b; for(int i=2, i<=n; i++){ c = a + b; a = b; b = c; } return c;}

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

Torres de HanoiSe trata de mover los discos del primer pivote al tercero bajo las reglas:

1. Mover un disco a la vez

2. Colocar discos más pequeños sobre más grandes.

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

Solución

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

Algoritmo

Algoritmo torres1. si numero de discos igual a 12. mover el disco 1 de origen a destino3. sino4. mover N-1 discos al pivote auxiliar usando el pivote destino como auxiliar5. mover el disco N de origen a destino6. mover N-1 discos al pivote destino usando el pivote fuente como auxiliar

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

Algoritmo en C

void torres(int n, int origen, int destino, int auxiliar){ if(n == 1) printf(“mover de %d a %d\n”, origen, destino); else{ torres(n-1, origen, auxiliar, destino); printf(“mover de %d a %d\n”, origen, destino); torres(n-1, auxiliar, destino, origen); }}

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

TareaEl algoritmo no recursivo de los números de Fibonacci puede escribirse utilizando solo dos variables locales. Encuentre la forma de hacerlo.

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

Quiz 2¿Cuales de las siguientes funciones son recursivas y de ellas cuales son correctas, es decir, en algún momento terminan?

a)

void a(int n){

if(n>0) a(n+1);

printf(“%d”,n);

}

b)

void a(int n){

if(n>0) a(n-1);

printf(“%d”,n);

}

c)

void a(int n){

if(n<0) a(n+1);

printf(“%d”,n);

}

c)

void a(int n){

if(n<0) b(n+1);

printf(“%d”,n);

}

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

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 48: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 49: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 50: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Ejemplo: Histograma

int main(){ const int tamanoArreglo = 10; int n[tamanoArreglo] = {19,3,15,7,11,9,13,5,17,1}; printf("Elemento\tValor\tHistograma\n“); //para cada elemento del arreglo n, muestra una barra //en el histograma for ( int i = 0; i < tamanoArreglo; i++ ) { printf(“%d\t\t%d\t”,i,n[ i ]); //despliega una barra for ( int j = 0; j < n[ i ]; j++ )

printf(“*”); printf(“\n”); // inicia la siguiente línea de salida } // fin de la estructura for externa return 0; // indica terminación exitosa} // fin de main

Page 51: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.
Page 52: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

TareaDeclare las variables de tipo arreglo que se piden:

a) 12 elementos de tipo entero

b) 130 elementos de tipo doble precisión

c) 56 elementos de tipo char

Inicie un arreglo de 20 caracteres con las letras ‘h’, ‘o’, ‘l’, ‘a’.

Inicie un arreglo de 20 enteros con números consecutivos de 120 en adelante.

Inicie un arreglo de 50 números flotantes con valores recíprocos de los números de 1 a 50.

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

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 <stdio.h>#include <conio.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 54: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

void linea(){ int i; for(i = 0; i<80; i++) printf("*"); printf("\n");}

void saludo(){ linea(); printf("\tPROMEDIO Y DESVIACION ESTANDAR DE N VALORES\n"); linea();}

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

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

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

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 57: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

void resultados(){ int i; linea(); printf("VALORES INTRODUCIDOS\n"); for(i=0;i<max;i++){ printf("%8.3lf",x[i]); if((i+1)%8==0) printf("\n"); } printf("\n"); printf("El promedio es: %8.3lf\n",promedio()); printf("La desviacion estandar es: %8.3f\n",desviacion()); linea();}

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

Quiz #3

Declare dos arreglos A de tipo entero y B de doble precisión cada uno con 100 elementos.

Escriba sentencias para inicializar el arreglo A con números múltiplos de 5 comenzando en 5 hasta 500.

Escriba sentencias para iniciar el arreglo B con los valores de la función seno de 0 a /2 en 100 pasos iguales.

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

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 60: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Ejemplo#include <stdio.h>#include <conio.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 a[]={3,4.5,6.5,7,5,6,8}; double b[]={5.3,6.2,7.5,6,5,4,5,7,6,9}; printf("Promedio de a es %6.2f\n",promedio(a,7)); printf("Promedio de b es %6.2f\n",promedio(b,10)); getch();}

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

Impresión de un arreglo

void imprimeArreglo(double a[], int n){ int i; for(i = 0; i< n; i++){ printf(“%8.2f”,a[i]); if((i+1)%8==0) printf("\n"); } printf("\n");}

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

Inversión de un arreglo

void invierteArreglo(double a[], int n){ int i; double temp; for(i = 0; i< n/2; i++){ temp = a[i]; a[i] = a[n-i-1]; a[n-i-1] = temp; }}

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

Búsqueda secuencial

int busca(double x, double a[], int n){ int i; for(i = 0; i<n; i++) if(x==a[i]) return i; return -1;}

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

Ordenación

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

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

Tarea

Escriba una función main que utilice las funciones revisadas anteriormente. Defina un arreglo de doble precisión y lo despliegue, luego lo invierta y lo despliegue, después lo ordene y lo despliegue y finalmente que lea un valor de doble precisión y lo busque en el arreglo e informe si lo encontró o no.

Prototipos:

void imprimeArreglo(double a[], int n);

void invierteArreglo(double a[], int n);

int busca(double x, double a[], int n);

void Burbuja(double a[],int tam);

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

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 67: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

inicializaciónint a[5][4] = {{2,3,4,2},{2,0,6,1},

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

o

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 68: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 69: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 printf(“%4d”,a[ i ][ j ]); print¨f(“\n”); // 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 } }; printf( "Los valores del arreglo1 por fila son:\n“); despliegaArreglo( arreglo1 ); printf("Los valores del arreglo2 por fila son:\n“); despliegaArreglo( arreglo2 ); printf("Los valores del arreglo3 por fila son:“); despliegaArreglo( arreglo3 ); return 0; // indica terminación exitosa} // fin de main

Debe especificarse

Page 70: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Otro ejemplovoid imprimeMatriz(int a[][4], int r){ int i,j; for(i = 0; i< r; i++){ for(j = 0; j< 4; j++) printf("%4d",a[i][j]); printf("\n"); } printf("\n");}

main(){ int a[5][4] = {{2,3,4,2},{2,0,6,1},{3,5,5,0},{2,2,1,1},{3,2,5,6}}; int b[6][4] = {2,3,4,2,2,0,6,1,3,5,5,0,2,2,1,1,3,2,5,6,2,2,2,2}; imprimeMatriz(a,5); imprimeMatriz(b,6); getch();}

Page 71: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Leer matriz de Nx4

void leerMatriz(int a[][4], int r){ int i,j; printf("Introduzca los elementos renglon x renglon\n"); printf("Se leeran %d renglones de 4 elementos.\n",r); for(i = 0; i< r; i++){ for(j = 0; j< 4; j++) scanf("%d",&a[i][j]); }}

Lee una matriz renglón por renglón. Debe tener 4 columnas.

Page 72: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Invertir fila de matriz Nx4

void intercambiaFilas(int a[][4], int r){ int i,j,temp; for(i = 0; i< r/2; i++) for(j = 0; j< 4; j++){ temp = a[i][j]; a[i][j] = a[r-i-1][j]; a[r-i-1][j] = temp; }}

Page 73: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Tarea

Declare una matriz de 3x5 e iníciela con los siguientes valores:

3 5 5 1 2

8 9 8 6 3

1 1 5 9 0

Page 74: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Quiz

Diga que errores tienen las siguientes declaraciones:

a) float x[4][3] = {{2,4,5},{1,2,5,6},{2,3},{0}};

b) int y[5][];

c) double m1[3][2]= {3,4,5,6,2,1,4};

d) int t[6] = {{2,3,4},{1,4,7}};

Page 75: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Calificaciones de un grupoUn profesor califica haciendo cinco exámenes parciales los cuales cuentan el 80% de la calificación final y un examen final que cuenta el otro 20%.

main(){ float calificaciones[25][7]; int numAlumnos; printf("Cuantos alumnos?"); scanf("%d",&numAlumnos); leerCalificaciones(calificaciones,numAlumnos); procesaCalificaciones(calificaciones,numAlumnos); imprime(calificaciones,numAlumnos); getch();}

Page 76: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Leer calificaciones

void leerCalificaciones(float cal[][7],int nAlumnos){ int i,j; for(i = 0;i<nAlumnos;i++){ printf("Teclee calificaciones de alumno %i\n",i); for(j=0;j<6;j++){ scanf("%f",&cal[i][j]); } }}

Page 77: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Procesamiento

void procesaCalificaciones(float cal[][7],int nAlumnos){ int i,j; float suma; for(i = 0;i<nAlumnos;i++){ suma=0; for(j=0;j<5;j++) suma+=cal[i][j]; cal[i][6]=suma/5*0.8+cal[i][5]*0.2; }}

Page 78: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Impresión

void imprime(float cal[][7],int nAlumnos){ int i,j; printf("No.\t1\t2\t3\t4\t5\t6\tfinal\n",i); for(i = 0;i<nAlumnos;i++){ printf("%d",i); for(j=0;j<7;j++){ printf("\t%5.1f",cal[i][j]); } printf("\n"); }}

Page 79: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Ejemplo de corrida

Cuantos alumnos?3Teclee calificaciones de alumno 02 4 6 7 8 6Teclee calificaciones de alumno 16 6 7 7 7 7Teclee calificaciones de alumno 27 7 8 8 8 8No. 1 2 3 4 5 6 final0 2.0 4.0 6.0 7.0 8.0 6.0 5.51 6.0 6.0 7.0 7.0 7.0 7.0 6.72 7.0 7.0 8.0 8.0 8.0 8.0 7.7

Page 80: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 81: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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(); getch();}

Page 82: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 83: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Función dibujaTablero()void dibujaTablero(){ int i,j; char c; printf(“\n”); 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; } printf(" %c “,c); if(j<2)printf("|“); } printf(“\n”); if(i<2)printf("---+---+---\n\n“); }}

Page 84: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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

Page 85: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Tarea

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

Page 86: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 87: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 88: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 89: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

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 90: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

Función main

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

Page 91: Funciones y arreglos Programación. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su.

tarea #6

1. Escriba una función que intercambie las columnas de una matriz de Nx4.

2. Escriba una función que inicie un arreglo bidimensional cuadrado de NxN con 1's en la diagonal principal y 0's en las demás posiciones.

3. Escriba una función que acepte como dato un arreglo cuadrado de enteros de NxN y calcule la suma de los elementos cada columna almacenando los resultados en un vector de N componentes.