1. UNIVERSIDAD TÉCNICA DE
AMBATO
FACULTAD DE CIENCIAS HUMANAS Y DE LA EDUCACIÓN
CARRERA DE DOCENCIA EN INFORMÁTICA
TEMA:
FUNCIONES EN LENGUAJE C
NOMBRE:
WILMA CAÑAR
ASIGANTURA:
PROGRAMACIÓN II
ENERO, 2012
1
2. FUNCIONES EN LENGUAJE C
Es una sección de código independiente, con nombre, que ejecuta una tarea específica
y opcionalmente devuelve un valor al programa que la llamó.
En C, se conocen como funciones aquellos trozos de códigos utilizados para dividir un
programa con el objetivo que, cada bloque realice una tarea determinada.
En las funciones juegan un papel muy importe las variables, ya que como se ha dicho
estas pueden ser locales o globales.
Variables Globales: Estas se crean durante toda la ejecución del programa, y son
globales, ya que pueden ser llamadas, leídas, modificadas, etc; desde cualquier
función. Se definen antes del main().
Variables Locales: Estas, pueden ser utilizadas únicamente en la función que hayan
sido declaradas.
SINTAXIS:
La sintaxis de una función es la siguiente:
Tipo_de_datos nombre_de_la_funcion(tipo y nombre de argumentos)
{
acciones
}
2
3. DONDE:
Tipo_de_datos: Es el tipo de dato que devolverá esa función, que puede ser
real, entera, o tipo void(es decir que no devolverá ningún valor).
Nombre_de_la_funcion: Es el identificador que le damos a nuestra función, la
cual debe cumplir las reglas que definimos en un principio para los
identificadores.
Tipo y nombre de argumentos: son los parámetros que recibe la función.
Los argumentos de una función no son más que variables locales que reciben
un valor. Este valor se lo enviamos al hacer la llamada a la función. Pueden
existir funciones que no reciban argumentos.
Acciones: Constituye el conjunto de acciones, de sentencias que cumplirá la
función, cuando sea ejecutada. Entre ellas están:
1. Asignaciones
2. Lecturas
3. Impresiones
4. Cálculos, etc
Una función, termina con la llave de cerrar, pero antes de esta llave, debemos
colocarle la instrucción return, con la cual devolverá un valor específico. Es
necesario recalcar que si la función no devuelve ningún valor, es decir, es tipo void, no
tiene que ir la sentencia return, ya que de lo contrario, nos dará un error.
La Sentencia Return
Fuerza la salida inmediata de la función en que se encuentra.
Se puede utilizar para devolver un valor.
¿Cómo es que funcionan las Funciones?
A menudo, se utiliza el adjetivo de “Subprogramas”, para referirse a las funciones, así
que, el lector debe familiarizarse también con este término.
Los subprogramas se comunican con el programa principal, que es el que contiene a
las funciones, mediante parámetros, que estos pueden ser: Parámetros Formales y
Parámetros Actuales.
3
4. Cuando se da la comunicación los parámetros actuales son utilizados en lugar de los
parámetros formales.
Para qué sirven?.
Sirven para facilitar la resolución de problemas mediante la aplicación del
paradigma “DIVIDIR Y CONQUISTAR”
Funciones: modos de uso.
1.- Funciones diseñadas para realizar operaciones a partir de sus argumentos y
devolver un valor basado en sus cálculos.
2.- Funciones que no reciben argumentos, realizan un proceso y devuelven un valor .
3.- Funciones que no tienen argumentos ni valor de retorno explícito, operan sobre el
entorno de variables globales o atributos del sistema operativo.
Argumentos de funciones
Son variables locales conocidas como parámetros formales y se utilizan
como un medio para entregarle información a la función.
Los parámetros formales reciben sus valores iniciales desde los parámetros
reales, es decir desde los valores que se les pasan a traveś de la llamada.
Ejemplo
4
5. Transferencia de Información
por valor: copia el valor de un argumento de la llamada en el
parámetro formal de la función. Por lo tanto, los cambios en los
parámetros de la función no afectan a las variables que se usan en la
llamada.
por referencia: se copia la dirección del argumento en el parámetro.
Los cambios hechos a los parámetros afectan a las variables usadas en
la llamada a la función.
Funciones Definidas Por El Usuario en C
Una función, como ya se ha dicho, es un bloque de código dentro del programa que se
encarga de realizar una tarea determinada. Por lo tanto un programa en c debe
constar de una o más funciones, y por supuesto no puede faltar la función principal
main().
Un viejo adagio dice: Separa y vencerás, lo cual se acopla perfectamente cuando
tenemos un programa que es bastante grande; podemos separarlos en pequeños
subprogramas (funciones), y concentrarnos en la solución por separados de cada uno
de ellos y así resolver un gran problemas, en unos cuantos problemitas más pequeños.
Si un programa, está constituido por más de una función, las llamadas a la misma,
pueden realizarse desde cualquier parte del programa, y la definición de ellas debe
ser independiente unas de otras.
DECLARACIÓN
Cada función debe ser declarada. Su forma general es: tipo nombre función (lista de
tipos (y nombres) de los argumentos); Si una función va usar argumentos, debe
declarar variables que acepten los valores de los argumentos. Estas variables se
llaman parámetros formales de la función y se comportan como variables locales
dentro de la función, creándose al entrar en la función y destruyéndose al salir. La
declaración de parámetros aparece después del nombre de la función al definirla.
En C, todas las funciones están al mismo nivel, es decir, no se puede definir una
función dentro de otra función. Esto es por lo que C no es técnicamente un lenguaje
estructurado por bloques.
5
6. El código de una función es privado a esa función y sólo se puede acceder a él
mediante una llamada a esa función. Las variables definidas dentro de una función
son locales (a no ser que las definamos globales).
FUNCION VOID
La palabra reservada void es utilizada para declarar funciones sin valor de retorno y
también para indicar que una función específica no requiere de parámetros.
Mediante la sentencia return, el programa puede devolver un código de terminación
al proceso de llamada (Ej.: entero a Shell de comandos en Unix).
El valor devuelto puede ser 0 que indica terminación normal o un valor que identifica
un error detectado por el programa.
El valor devuelto puede ser usado para ejecución condicional de comandos en shell en
Unix.
FUNCIONES ANIDADAS
C++ no permite anidar funciones, sin embargo, dentro de una función puede existir la
llamada a una o más funciones declaradas previamente.
VENTAJAS
1. Facilita el diseño descendente.
2. 2.- Los procedimientos dentro de ellas se pueden ejecutar varias veces.
3. 3.- Facilita la división de tareas.
4. 4.- Se pueden probar individualmente
5. 5.- Con funciones apropiadamente diseñadas, es posible ignorar como se
realiza una tarea, sabiendo qué es lo que hacen.
6. Reduce el código de programación
7. Permite usar menos memoria
8. Reduce la probabilidad de errores.
6
7. EJERCICIOS DE FUNCIONES CON VECTORES:
APLICACIÓN Nº1:
Enunciado
Diseñe un programa en C utilizando funciones que me permitan ingresar datos en 2
vectores con datos enteros entre 3 y 53, recorrer cada vector y formar un solo vector
con datos intercalados tomando un dato del primer y un dato de el segundo,
presentar el vector resultante ordenado en forma ascendente y descendente.
Análisis
En el siguiente programa utilizaremos funciones para el ingreso de los vectores,
también validaremos los vectores entre 3 y 53. Luego en un ciclo for realizamos las
operaciones para la intercalación de los dos vectores.
Codificación
}#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int l,i,v1[25],v2[25],f,x,vt[25],a,aux,j;
void ingvect1()
{
f=15;
for(i=1;i<=l;i++)
{
do{
gotoxy(20,f);printf(" ");
gotoxy(20,f);scanf("%d",&v1[i]);
}
while(v1[i]<3 || v1[i]>53);
f=f+1;
}
}
void ingvect2()
{
f=15;
for(i=1;i<=l;i++)
7
11. APLICACIÓN Nº2 :
Enunciado
Diseñe un programa utilizando vectores y funciones que me permita llenar un vector
en forma intercalada con dos factores leidos desde teclado en donde el primer factor
sea siempre un multiplo de tres y el segundo factor sea siempre un multiplo de 4,
recorra el vector y encuentre todos los n£meros pares, asignelos a un nuevo vector y
presentelos en forma ordenada ascendente y descendente
Análisis
En el siguiente programa utilizaremos funciones y vectores en el cual encontraremos
el intercalar de dicho vector, cuyo vector sea un múltiplo de 3 y múltiplos de 4.
Utilizamos las estructuras do while, for e if para estructurar el programa.
Codificación:
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
int col,f,li,mt,r,mc,r1,i,im,pa,x,v1[20],t,c,a;
clrscr();
gotoxy(27,2);printf("VECTOR CON MULTIPLOS 3 Y 4");
gotoxy(5,5);printf("Ingresar un limite: ");scanf("%d",&li);
do{
gotoxy(36,10);printf(" ");
gotoxy(10,10);printf("Ingrese un multiplo de 3: ");scanf("%d",&mt);
}
while(mt%3>=1);
do{
gotoxy(36,12);printf(" ");
gotoxy(10,12);printf("Ingrese un multiplo de 4: ");scanf("%d",&mc);
}
while(mc%4>=1);
flushall();
11
13. EJERCICIOS DE FUNCIONES CON MATRICES:
APLICACIÓN Nº1 :
Enunciado
Diseñe un programa utilizando funciones y matrices que me permita realizar
las cuatro operaciones básicas
Análisis
El presente programa usa funciones, para ello primeramente declaramos las
variables globales que nos servirán para todo el programa estas variables
globales van colocadas debajo del ingreso de librerías y antes de la declaración
de la primera función. En este caso mi primera función es void borde(), abrimos
llaves y allí esta el detalle del borde que se genera, para terminar la función
cerramos la llave. Luego tenemos la función ingreso, donde van los for que me
ayudan a generar o lectura de la matriz y el ingreso del limite que se caracteriza
por poseer en su sentencia scanf("%d",&l), a través de ello ingreso el límite de
mi vector con el cual se genrará una matriz cuadrátida del orden del limite.
Como requisito para que se imprima la diagonal principal tenemos que los
subíndices i == j, y con dos lazos for se imprime la matriz, con la condición if
(i==j), designamos solo la diagonl principal en la que deben insertarse los
numero pares, en la diagonal secundaria los impares y cerramos el programa al
final con la función principal y haciendo el llamad a cada una de las funciones
insertadas, así como;borde(), ingreso().
Codificación:
#include<stdio.h>
#include<conio.h>
int matriz1[20][20],matriz2[20][20],matriz3[20][20],i,lim,fila,j,col,op,sal,rep;
void borde()
{
int i;
textcolor(5);
for(i=2;i<=24;i++)
{
gotoxy(2,i);cprintf("*");
gotoxy(78,i);cprintf("*");
}
13
16. do{
clrscr();
borde();
gotoxy(20,6);cprintf(" MENU DE OPCIONES ");
gotoxy(10,8);cprintf(" 1.- SUMA ");
gotoxy(10,10);cprintf(" 2ú- RESTA ");
gotoxy(10,12);cprintf(" 3ú- MULTILICACION ");
gotoxy(10,14);cprintf(" 4ú- SALIR ");
gotoxy(10,16);printf(" INGRESE EL LIMITE "); scanf("%d",&lim );
gotoxy(4,18);cprintf(" Ingrese la opcion que desee: ");scanf("%d",&op);
switch (op)
{
//suma
case 1:
clrscr();
borde();
textcolor(9);
gotoxy(35,3);cprintf(" **MATRICES** ");
gotoxy(28,5);printf("SUMA DE DOS MATRICES ");
gotoxy(44,20);cprintf(" WILMA CA¥AR ");
ingreso(lim);
suma(lim);
break;
//resta
case 2:
clrscr();
borde();
gotoxy(30,5);printf(" RESTA ");
gotoxy(25,26);cprintf(" WILMA CA¥AR ");
ingreso(lim);
resta(lim);
break;
//multiplicacion
case 3:
clrscr();
borde();
gotoxy(30,5);printf(" MULTIPLICACION");
gotoxy(25,26);cprintf(" WILMA CA¥AR ");
ingreso(lim);
multiplicacion(lim);
break;
//salir
case4:
clrscr();
exit();
break;
}
16
17. textcolor(7);
gotoxy(5,23);cprintf("Ingrese 0 para elegir una nueva opcion 1 para salir:
");cscanf("%d",&rep);
}
while(rep==0);
textcolor(2);
gotoxy(5,24);cprintf(" Ingrese 1 para continuar 0 para salir: "); cscanf("%d",&sal);
textcolor(3);
}
while(sal==1);
getch();
}
Ejecución del programa
17
18. APLICACIÓN Nº2
Enunciado
Diseñe un programa en el que se genera una matriz de las dimensiones de
límite cuya diagonal principal contenga los números pares y en la diagonal
secundaria contenga los números impares el resto de posiciones de la matriz
sean rellenados con ceros.
Análisis
El presente programa usa funciones, para ello primeramente declaramos las
variables globales que nos servirán para todo el programa estas variables
globales van colocadas debajo del ingreso de librerías y antes de la declaración
de la primera función. En este caso mi primera función es void borde(), abrimos
llaves y allí esta el detalle del borde que se genera, para terminar la función
cerramos la llave. Luego tenemos la función ingreso, donde van los for que me
ayudan a generar o lectura de la matriz y el ingreso del limite que se caracteriza
por poseer en su sentencia scanf("%d",&l), a través de ello ingreso el límite de
mi vector con el cual se genrará una matriz cuadrátida del orden del limite.
Como requisito para que se imprima la diagonal principal tenemos que los
subíndices i == j, y con dos lazos for se imprime la matriz, con la condición if
(i==j), designamos solo la diagonl principal en la que deben insertarse los
numero pares, en la diagonal secundaria los impares y cerramos el programa al
final con la función principal y haciendo el llamad a cada una de las funciones
insertadas, así como;borde(), ingreso().
Codificación
# include<conio.h> //ingreso de librerías
# include<stdio.h>
int i, j, fil, col,x,y,l,f,c,op; //declaración de variables globales y
de matrices
int matriz[10][10];
void borde() //function borde
{
for(i=2;i<=80;i++) //diseño del borde
{
textcolor(11);
gotoxy(i,2);cprintf("*");
gotoxy(i,45);cprintf("*");
}
for(i=2;i<=45;i++)
{
gotoxy(2,i);cprintf("*");
gotoxy(80,i);cprintf("*");
18
19. }
}
void ingreso() //function ingreso
{
clrscr();
textcolor(11);
gotoxy(15,5);cprintf("INGRESO LIMITE: ");scanf("%d",&l); //lee
datos desde teclado
for(f=1;f<=l;f++) //dos lazos for para ingreso de matriz
{
for(c=1;c<=l;c++)
{
matriz[f][c]=0;
gotoxy(f*3+8,c*2+8);cprintf("%d", matriz[f][c]);
//impression de matriz[f][c]
}
}
x=2;
for(f=1;f<=l;f++) //lazos for para la impresión de matriz
{
for(c=1;c<=l;c++)
{
if(f==c) //condición para elegir diagonal primaria
{
matriz[f][c]=x;
x=x+2; //x será el número par que se imprimira en
diagonal principal
}
gotoxy(f*3+8,c*2+8);cprintf("%d", matriz[f][c]);
}
}
x=1; //variables auxiliaries
y=l;
for(f=1;f<=l;f++) //lazo for para impression de diagonal
secundaria
{
matriz[y][f]=x;
gotoxy(y*3+8,f*2+8);printf("%d", matriz[y][f]); //visualización de
valores enteros en diagonal secundaria que son los impares
x=x+2; //determinan el valor impar
y=y-1;
}
}
void main() //Se inicializa el programa principal
{
borde(l); //se llama a la función borde
do
{
clrscr(); //borrado de pantalla
19
20. ingreso(); //se llama a la función ingreso de matriz
gotoxy(20,23);printf("Presione 1 para continuar y 0 para salir:
");scanf("%d",&op); // bucle do/while para elección de salir o no
del programa
}
while(op==1);
getch();
} //cierre del programa general
Ejecución del programa
20
21. APLICACIÓN Nº3 :
Enunciado
Diseñe un programa que realice el producto de matrices, en donde se
visualice las matrices 1 y 2 y la matriz resultante.
Análisis
Ingreso de librerías conocidas, declaración de variables globales y de matrices, primera
función, void borde, se detalla la operación que desplegará el borde. Función void ingreso
donde ingresaremos las matrices y sus elementos por teclado.
Función producto donde se realiza la operación de las mismas, se imprimen tres matrices.
Función main llama a todas las funciones existentes: borde(), ingreso() , producto() y las
titulaciones, se cierra el lazo do/while y se cierra el porgrama principal.
Desarrollo
#include<stdio.h> //inclusion de librerías
#include<conio.h>
int l,c,c1,c2,f,f1,f2,k,i,j,op,a; //declaración de variables globales
int matriz1[10][10],matriz2[10][10],matriz3[10][10];
void borde() //función borde
{
for(i=1;i<=25;i++) //lazos for para desplegra el borde en sus
cuatro lados
{
gotoxy(1,i);printf("@",i);
gotoxy(80,i);printf("@",i);
}
for(i=1;i<=80;i++)
{
gotoxy(i,2);printf("@",i);
gotoxy(i,25);printf("@",i);
}
}
void ingreso() //function ingreso de matrices
{
for(i=1;i<=l;i++)
{
for(j=1;j<=l;j++)
{
gotoxy(c,f);scanf("%d",&matriz1[i][j]); //lectura de datos
ingresados por teclado
c=c+5;
}
c=5;
21
22. f=f+1;
}
for(i=1;i<=l;i++) //lazos for para la impresión de la matriz
{
for(j=1;j<=l;j++)
{
gotoxy(c1,f1);scanf("%d",&matriz2[i][j]); //posicionamiento e
impresión de la matriz
c1=c1+5;
}
c1=25;
f1=f1+1;
}}
void producto() //function que realize el product de las
matrices
{
for(i=1;i<=l;i++) //lazos para la impresión de la matriz
resultante
{
for(j=1;j<=l;j++)
{
matriz3[i][j]=0;
for(k=1;k<=l;k++)
{
matriz3[i][j]=matriz3[i][j]+matriz1[i][k]*matriz2[k][j];
//operación de matrices
}}}
for(i=1;i<=l;i++)
{
for(k=1;k<=l;k++)
{
gotoxy(c2,f2);printf("%d",matriz3[i][k]); //impression de matriz
con dos for
c2=c2+4;
}
c2=42;
f2=f2+1;
}}
void main() //function principal
{
do
{
clrscr(); //borrado de pantalla
borde(); //llamado a la función borde
c=5;
c1=25;
c2=42;
f=10;
f1=10;
22
23. f2=10;
gotoxy(28,3);printf("PRODUCTO DE MATRICES"); //leyendas o
titulaciones
gotoxy(10,5);printf("INGRESE UN LIMITE ");scanf("%d",&l);
gotoxy(5,7);printf("MATRIZ1");
gotoxy(25,7);printf("MATRIZ2");
gotoxy(40,7);printf("MATRIZ RESULTANTE");
ingreso(); //llamado a función ingreso
producto(); //llamado a función producto
gotoxy(8,20);printf("seleccione 1 para continuar y 0 para salir
");scanf("%d",&op);
}
while(op==1); //cierre de lazo do/while
getch();
} //cierre del programa general
Ejecución del programa
23