Vous êtes sur la page 1sur 7

FUNDAMENTOS DE PROGRAMACIN PRCTICA 10: Funciones y Arreglos

Objetivos El alumno disear funciones aplicando arreglos como parmetros para resolver problemas de ingeniera en Lenguaje C Introduccin Un arreglo o array es una coleccin ordenada de objetos, llamados elementos del arreglo, todos del mismo tipo. As el arreglo se puede considerar como un conjunto de variables agrupadas del mismo tipo. Declaracin de arreglos Los arreglos se declaran indicando el tipo de datos del arreglo, seguido por un nombre y la dimensin entre corchetes.
float a[10];

En la lnea anterior, se define un arreglo a de tipo float con 10 elementos. En C el ndice inicia en 0, entonces el arreglo tiene espacios disponibles desde a[0] hasta a[9]. Las siguientes definiciones son equivalentes. En la primera, se indica el tamao del arreglo; y en la segunda se deja vaco, en este caso el compilador completar la definicin con el tamao adecuado.
float a[3] = {10.1,10.2,10.3}; float a[] = {10.1,10.2,10.3};

Los arreglos bidimensionales se declaran como sigue:


int a[3][3], b[2][3];

En este ejemplo, a es una matriz 3x3, y b una matriz 2x3. Los elementos se almacenan por filas y columnas. Para inicializar una matriz como b se realiza de la siguiente forma:
int b[2][3] = { {1,2,3}, {4,5,6} };

En la definicin anterior, se reserva un espacio de 2x3, esto es, 6 elementos de tipo entero. El primer subndice vara entre 0 y 1, y el segundo vara entre 0 y 2. Usualmente, el primer subndice indica la fila y el segundo indica la columna. Los sitios para los elementos de b estn contiguos en el orden fila por fila, o sea, b[0][0],
b[0][1], b[0][2], b[1][0], b[1][1], b[1][2].

1 Elaborado por: Sabino Miranda Jimnez

FUNDAMENTOS DE PROGRAMACIN PRCTICA 10: Funciones y Arreglos

Paso de arreglos como parmetros de una funcin


El paso de arreglos a funciones es una de las operaciones ms comunes en la programacin. Arreglos unidimensionales Para que una funcin pueda recibir un arreglo unidimensional, se especifica su tipo, seguido del identificador (nombre del arreglo), y corchetes vacos, lo cual indica que es un arreglo de una dimensin. Por ejemplo en el siguiente prototipo de funcin:
float promedio(float x[], int n) // Prototipo de funcin

float promedio(float x[], int n) { ... }

// declaracin de la funcin

El compilador reconoce que el primer argumento que la funcin va a recibir es un arreglo de una dimensin. El segundo argumento es una cantidad entera, representa el nmero de elementos del arreglo que ser procesado. Tambin se puede especificar el tamao del arreglo que recibe, generalmente no se usa. Por ejemplo, si se va pasar un arreglo de 10 elementos la declaracin sera la siguiente:
float promedio(float x[10], int n) float promedio(float x[10], int n) { ... } // Prototipo de funcin // declaracin de la funcin

Arreglos bidimensionales Para que una funcin pueda recibir un arreglo bidimensional no es necesario especificar el tamao de todas las dimensiones, pero si es obligatorio indicar al menos el tamao de la ltima dimensin. Por ejemplo en el siguiente prototipo de funcin:
float promedioGrupos(float x[][40], int n); // Prototipo de funcin float promedioGrupos(float x[][40], int n) { ... } // declaracin de la funcin

Nota: Tmese en cuenta que al pasar una variable de tipo arreglo a una funcin, sta se pasa por referencia, esto es, que si hacemos un cambio a los elementos del arreglo dentro de

2 Elaborado por: Sabino Miranda Jimnez

FUNDAMENTOS DE PROGRAMACIN PRCTICA 10: Funciones y Arreglos

la funcin, en realidad se efectuarn las modificaciones al arreglo y sern permanentes incluso si salimos de la funcin, y se hace referencia a dicho arreglo.

Ejemplos de arreglos como parmetros de funciones


En el siguiente ejemplo (Ejemplo1), se imprime una matriz de dos dimensiones (num de 3x4) la cual se para a la funcin imprimeArreglo. La funcin recibe la matriz num y el nmero de filas y columnas mximo de la matriz. Estos nmeros se usan como ndices para recorrer el arreglo. Ntese que un ndice es para recorrer las filas del arreglo (variable filas) y otro para las columnas (variable columnas). El recorrido requiere de dos ciclos anidados: el externo para las filas y el interno para las columnas, por lo tanto el ciclo interno se repetir ms veces que el externo. Ejemplo1
#include <stdio.h> #include <conio.h> void imprimeArreglo(int num[][4],int filas,int columnas); int main() { int num[][4] = {{1 ,3 ,5,7}, {2 ,4 ,6,9}, {10,11,12,88} }; imprimeArreglo(num,3,4); getche(); return 0; } void imprimeArreglo(int num[][4],int filas,int columnas) { for (int i=0;i<filas;i++) for (int j=0;j<columnas;j++) printf("Fila:%d Columna:%d -> %d\n",i,j,num[i][j]); }

En el siguiente programa (Ejemplo2) se permite al usuario capturar un texto, el cual se almacena en un arreglo de dos dimensiones (docTxt) que representa un conjunto de lneas. La funcin LeeTexto acepta el arreglo bidimensional como parmetro en el cual se almacenarn las lneas de texto, adems de un valor entero que representa el total de lneas por capturar. La funcin imprimeTexto acepta el arreglo capturado por la funcin LeeTexto y lo imprime en pantalla. Ntese que al imprimir el texto se hace referencia al arreglo doc[i] ya que es un arreglo de dos dimensiones esta expresin indica que hace referencia al arreglo en la primera posicin el cual est formado por un conjunto de caracteres (representa a una lnea) y es lo que espera printf para imprimir. 3 Elaborado por: Sabino Miranda Jimnez

FUNDAMENTOS DE PROGRAMACIN PRCTICA 10: Funciones y Arreglos

Ejemplo2
#include <stdio.h> #include <conio.h> #define MAX_CARS 100 #define MAX_LIN 5 void LeeTexto(char doc[][MAX_CARS],int lineas); void imprimeTexto(char doc[][MAX_CARS],int lineas); int main() { char docTxt[MAX_LIN][MAX_CARS]; printf("\n<< \t\tEscriba un documento mximo 5 lneas>>\n"); LeeTexto(docTxt,MAX_LIN); printf("\n\n\n<< \t\t----DOCUMENTO CAPTURADO---->>\n"); imprimeTexto(docTxt,MAX_LIN); getche(); return 0; } void LeeTexto(char doc[][MAX_CARS],int Totlin) { int i=0; do { printf("\nlinea%d: ",i+1); gets(doc[i]); i++; } while(i<Totlin); } void imprimeTexto(char doc[][MAX_CARS],int Nlin) { for(int i=0; i<Nlin ;i++) { printf("%s\n",doc[i]); } }

Funciones para el manejo de cadenas A continuacin se muestran algunas funciones tiles para la manipulacin de cadenas. Estas funciones se encuentran en la librera string.h cad1, cad2: representan un arreglo de caracteres Funcin strcmp(cad1, cad2) Descripcin Retorna un entero (i) 0, si son iguales cad1 y cad2 Menor a cero , si cad1 es menor a cad2 Mayor a cero, si cad1 es mayor que cad2 Regresa el tamao de la cadena de caracteres (entero) Ejemplo
If (strcmp("juan","pedro")>0) If (strcmp("juan","juan")==0) If (strcmp("pedro","juan")<0) i= strcmp("pedro","juan"); F V F

strlen(cad1)

x= strlen(pedro); // x=5 4

Elaborado por: Sabino Miranda Jimnez

FUNDAMENTOS DE PROGRAMACIN PRCTICA 10: Funciones y Arreglos

Funcin strcpy(cad1,cad2)

Descripcin Ejemplo Copia la cadena cad1 (incluyendo el strcpy( cad1, cad2 ); carcter nulo) a la cadena cad2. Aade la cadena cad2 al final de la strcat( cad1,cad2 ); strcat(cad1,cad2) cadena cad1 i = strncmp( s1, s2, 3 ); strncmp(cad1,cad2,nCarac) Compara los n caracteres de la cadena cad1 con la cadena cad2. La funcin retorna un nmero entero (i) mayor, igual, o menor que cero, segn la cadena apuntada por cad1 es mayor, igual, o menor que la cadena cad2

Ejemplos del manejo de cadenas El siguiente ejemplo copia la cadena s2 a s1


#include <stdio.h> #include <string.h> int main() { char s2[8] = "abcdefg"; char s1[8]; strcpy( s1, s2 ); printf( "s2=%s\n", s2 ); printf( "s1=%s\n", s1 ); getchar(); return 0; }

El siguiente ejemplo compara los primeros tres caracteres de las la cadenas s2 y s1


#include <stdio.h> #include <string.h> int main() { char s1[9] = "artesano"; char s2[8] = "artista"; int i; printf( "s1=%s\t", s1 ); printf( "s2=%s\n", s2 ); i = strncmp( s1, s2, 3 ); printf( "Las 3 primeras letras de s1 son " ); if( i < 0 ) printf( "menores que" );

5 Elaborado por: Sabino Miranda Jimnez

FUNDAMENTOS DE PROGRAMACIN PRCTICA 10: Funciones y Arreglos


else if( i > 0 ) printf( "mayores que" ); else printf( "iguales a" ); printf( " s2\n" ); getchar(); return 0; }

EJERCICIOS PROPUESTOS Capturar y probar los ejercicios resueltos. Resolver nicamente tres ejercicios de los siguientes: Para cada ejercicio realizar: Tablas de Entradas y Salidas Algoritmo (Pseudocdigo) Programa en C 1. Desarrollar un programa que calcule el promedio de 10 nmeros capturados por el usuario y calcule su promedio. Desarrollar dos funciones: una que permita al usuario capturar los 10 nmeros depositndolos en un arreglo, y otra que promedie los datos capturados, los cuales se pasan como parmetro. 2. Desarrollar un programa que imprima la interseccin de dos conjuntos de nmeros positivos, los conjuntos son capturados por el usuario. Definir una funcin que capture un conjunto cualquiera de nmeros y retorne la cantidad de nmeros capturados, la captura se termina cuando el usuario teclea un -1 (menos uno). Tambin definir otra funcin que realice la interseccin de dos conjuntos capturados, la interseccin la deposita en un arreglo. Por ltimo, desarrollar una funcin que imprime un conjunto de nmeros, la cual imprimir la interseccin mencionada. x=Lectura(Arreglo) x: define el total de nmeros capturados Arreglo: se depositan los nmeros capturados, definirlo lo suficientemente grande. intersecta(Arreglo1, Arreglo2, ArregloInterseccion) imprime(Arreglo)

Sean A={5,6,7,3,12,67} y B={6,7,9,12,45,34,56} AB={6,7,12} 3. Desarrollar un programa que imprima la unin dos conjuntos de nmeros positivos. Similar al punto2, slo que la funcin es una union 6 Elaborado por: Sabino Miranda Jimnez

FUNDAMENTOS DE PROGRAMACIN PRCTICA 10: Funciones y Arreglos

union (Arreglo1, Arreglo2, ArregloUnion) Arreglo1: es el primer conjunto de nmeros Arreglo2: es el segundo conjunto de nmeros ArregloUnion: es el resultado de la unin de los dos conjuntos capturados, definirlo lo suficientemente grande. 4. Desarrollar un programa permita capturar varias palabras (mximo 10), para posteriormente hacer bsquedas de repeticiones de palabras dentro de dicho texto. Implemente una funcin que permita capturar el texto y otra que calcule la frecuencia de las palabras a esta funcin se le pasar el texto representado en un arreglo bidimensional. Ejemplo: Texto: juan pelota raqueta computadora pelota comutadora pelota pelota resultado: juan:1 raqueta:1 computadora:2 pelota:4

7 Elaborado por: Sabino Miranda Jimnez

Vous aimerez peut-être aussi