140 likes | 460 Views
FUNCIONES EN C USANDO ARRAYS Y MATRICES. MENU DEL DIA. Repaso rápido.(Diapositivas Profesores Byron Buitrago y Sebastian Villa). Inicialización de arreglos de dos dimensiones. Funciones en C y arreglos. Comparación al trabajar con funciones y sin funciones. Sin funciones. Con funciones.
E N D
MENU DEL DIA • Repaso rápido.(Diapositivas Profesores Byron Buitrago y Sebastian Villa). • Inicialización de arreglos de dos dimensiones. • Funciones en C y arreglos. • Comparación al trabajar con funciones y sin funciones. • Sin funciones. • Con funciones. • Mas anotaciones sobre funciones en C. • Ejercicios.
INICIALIZACION DE ARREGLOS DE DOS DIMENSIONES int i,j,k = 0; int M[3][4]; for(i=0;i<3;i++){ for(j=0;j<4;j++) { M[i][j]=k++; } } • Para barrer matrices se usan ciclos anidados. Hay que prestar atención a tres cosas: • Las dimensiones de la matriz, las cuales definen los limites de los ciclos. • Que índice será usado como filas y cual como columnas. • Que se va a barrer primero, si filas o columnas. El ciclo mas interno define lo que se barre primero (Ojo con las dimensiones). int i,j,k = 0; int M[3][4]; for(j=0;j<4;j++){ for(i=0;i<3;i++) { M[i][j]=k++; } }
FUNCIONES EN C Y ARREGLOS • Es posible usar vectores y matrices como parametros de una funcion. • Para declarar un array como argumento se usa la siguiente sintaxis en la definicion: tipo nombre_parametro[], tipo *nombre_parametro. • Siempre que tengamos un array como parámetro a una función, ésta debe saber hasta donde va el arreglo. Generalmente se envía el tamaño del arreglo #include<stdio.h> voidsumar_array(int [],int [], int); voidrestar_array(int *,int *, int); int main() { int a[] = {2,3,-1,4}; int b[4] = {2,3,-1,4}; c[4]={0,0,0,0}; sumar_array(a,b,4); sumar_array(c,b,4); return 0; } voidsumar_array(int a[],int b[], int len) { int i; for(i=0;i<len;i++) { b[i] = b[i] + a[i]; } } voidrestar_array(int *a,int *b, int len) { int i; for(i=0;i<len;i++) { b[i] = b[i] - a[i]; } } Nota: Complementar con las diapositivas de los profesores Sebastian y Byron.
FUNCIONES EN C Y ARREGLOS • También es posible usar matrices como parámetros en una función. • Cuando se pasa una matriz doublemaximum( int , int , double [][] ) . . . doublemaximum( int nrows, int ncols, doublematrix[nrows][ncols] ) { doublemax = matrix[0][0]; int c,r; for ( r = 0; r < nrows; ++r ) for ( c = 0; c < ncols; ++c ) if ( max < matrix[r][c] ) max = matrix[r][c]; returnmax; } • Nota: Complementar con las diapositivas de Byron y Sebastian.
TRABAJANDO SIN FUNCIONES #include <stdio.h> int a[3],b[3],c[3]; int main() { int i; printf(" Ingrese el primer vector: "); for(i=0;i<3;i++) { scanf("%d",&a[i]); } printf(" vec1 = [%d %d %d]\n\n",a[0],a[1],a[2]); printf(" Ingrese el segundo vector: "); for(i=0;i<3;i++) { scanf("%d",&b[i]); } printf(" vec2 = [%d %d %d]\n\n",b[0],b[1],b[2]); for(i=0;i<3;i++) { c[i]=a[i]+b[i]; } printf(" vec3 = vec1 + vec2 = [%d %d %d]\n\n",c[0],c[1],c[2]); return 0; }
TRABAJANDO CON FUNCIONES #include <stdio.h> int a[3],b[3],c[3]; voidingresar_vector(int []); voidimprimir_vector(int []); voidsumar_vectores(int [],int [],int ); int main() { int i; printf(" Ingrese el primer vector: "); ingresar_vector(a); printf(“vec1 = ”); imprimir_vector(a); printf(“\n\n”); . . . return 0; } voidingresar_vector(int v[]) { for(i=0;i<3;i++) { scanf("%d",&v[i]); } } voidimprimir_vector(int v[]) { printf(“[%d %d %d]”,v[0],v[1],v[2]); } voidsumar_vectores(int v1[],int v2[],int res) { for(i=0;i<3;i++) { res[i]=v1[i]+v2[i]; } } Prototipos de las funciones Función principal Definición de las funciones
MAS ANOTACIONES SOBRE FUNCIONES EN C • Una función puede devolver cualquier tipo de dato simple (char, short, int, long, etc), compuesto (estructura) o un puntero a cualquiera de estos dos tipos. int suma(int a, int b, int c) unsignedposicion(char cadena[],char letra) long potencia(int base,int exponente) char *strchr (char *s, int c) struct estudiante getEstudiante(struct estudiante *a,char *c) getEstudiante strchr • Una función solo puede retornar un solo valor a menos que devuelva un puntero o una estructura. int c char * char *strchr (char *s, int c) char *s struct estudiante *a struct estudiante char *s struct estudiante getEstudiante(struct estudiante *a,char *c)
ANOTACIONES SOBRE FUNCIONES EN C • Una función no puede retornar un array o una matriz. int A[ ] int C[ ] Error!!! int B[ ] int tam sumarVectores sumarVectores int [] sumarVectores(int A[], int B[], int tam) int A[ ] int B[ ] int C[ ] int tam void sumarVectores(int A[], int B[], int C[], int tam)
EJERCICIOS Escribir una lista de funciones que realice las siguientes operaciones sobre una Matriz entera de M filas por N columnas: Mostrar menor elemento. Mostrar el mayor elemento. Realizar la transpuesta. Sumar dos matrices llevando el resultado de la suma primera de las matrices.
EJERCICIOS Los resultados de las ultimas elecciones a alcalde en el pueblo x han sido los siguientes: Escribir un programa que haga las siguientes tareas: Imprimir la tabla anterior con cabeceras incluidas. Calculas e imprimir el numero total de votos recibidos por cada candidato y el porcentaje total de votos emitidos. Así mismo, visualizar el candidato mas votado. Si algún candidato recibe mas del 50% de los votos, el programa imprimirá un mensaje declarándole ganador. Si algún candidato recibe menos del 50% de los votos, el programa debe imprimir el nombre de los dos candidatos mas votados que serán los que pasen a la segunda ronda de las elecciones.