FUNCIONES EN LENGUAJE C

2,534 views

Published on

Desarrollo de para qué sirven y como funcionan las funciones

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,534
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
146
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

FUNCIONES EN LENGUAJE C

  1. 1. UNIVERSIDAD TÉCNICA DE AMBATO FACULTAD DE CIENCIAS HUMANAS Y DE LA EDUCACIÓN CARRERA DE DOCENCIA EN INFORMÁTICATEMA: FUNCIONES EN LENGUAJE CNOMBRE: WILMA CAÑARASIGANTURA: PROGRAMACIÓN II ENERO, 2012 1
  2. 2. FUNCIONES EN LENGUAJE CEs una sección de código independiente, con nombre, que ejecuta una tarea específicay opcionalmente devuelve un valor al programa que la llamó.En C, se conocen como funciones aquellos trozos de códigos utilizados para dividir unprograma 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 dichoestas pueden ser locales o globales.Variables Globales: Estas se crean durante toda la ejecución del programa, y songlobales, ya que pueden ser llamadas, leídas, modificadas, etc; desde cualquierfunción. Se definen antes del main().Variables Locales: Estas, pueden ser utilizadas únicamente en la función que hayansido 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. 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, etcUna función, termina con la llave de cerrar, pero antes de esta llave, debemoscolocarle la instrucción return, con la cual devolverá un valor específico. Esnecesario recalcar que si la función no devuelve ningún valor, es decir, es tipo void, notiene 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 alas funciones, mediante parámetros, que estos pueden ser: Parámetros Formales yParámetros Actuales. 3
  4. 4. Cuando se da la comunicación los parámetros actuales son utilizados en lugar de losparámetros formales.Para qué sirven?.Sirven para facilitar la resolución de problemas mediante la aplicación delparadigma “DIVIDIR Y CONQUISTAR”Funciones: modos de uso.1.- Funciones diseñadas para realizar operaciones a partir de sus argumentos ydevolver 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 elentorno 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. 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 CUna función, como ya se ha dicho, es un bloque de código dentro del programa que seencarga de realizar una tarea determinada. Por lo tanto un programa en c debeconstar de una o más funciones, y por supuesto no puede faltar la función principalmain().Un viejo adagio dice: Separa y vencerás, lo cual se acopla perfectamente cuandotenemos un programa que es bastante grande; podemos separarlos en pequeñossubprogramas (funciones), y concentrarnos en la solución por separados de cada unode 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 debeser independiente unas de otras.DECLARACIÓNCada función debe ser declarada. Su forma general es: tipo nombre función (lista detipos (y nombres) de los argumentos); Si una función va usar argumentos, debedeclarar variables que acepten los valores de los argumentos. Estas variables sellaman parámetros formales de la función y se comportan como variables localesdentro de la función, creándose al entrar en la función y destruyéndose al salir. Ladeclaració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 unafunción dentro de otra función. Esto es por lo que C no es técnicamente un lenguajeestructurado por bloques. 5
  6. 6. El código de una función es privado a esa función y sólo se puede acceder a élmediante una llamada a esa función. Las variables definidas dentro de una funciónson locales (a no ser que las definamos globales).FUNCION VOIDLa palabra reservada void es utilizada para declarar funciones sin valor de retorno ytambié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ónal 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 identificaun error detectado por el programa.El valor devuelto puede ser usado para ejecución condicional de comandos en shell enUnix.FUNCIONES ANIDADASC++ no permite anidar funciones, sin embargo, dentro de una función puede existir lallamada 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. 7. EJERCICIOS DE FUNCIONES CON VECTORES:APLICACIÓN Nº1:  EnunciadoDiseñe un programa en C utilizando funciones que me permitan ingresar datos en 2vectores con datos enteros entre 3 y 53, recorrer cada vector y formar un solo vectorcon datos intercalados tomando un dato del primer y un dato de el segundo,presentar el vector resultante ordenado en forma ascendente y descendente.  AnálisisEn 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 lasoperaciones 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; 7
  8. 8. for(i=1;i<=l;i++){ do{ gotoxy(40,f);printf(" "); gotoxy(40,f);scanf("%d",&v2[i]); } while(v2[i]<3 || v2[i]>53); f=f+1; }}void vectaltern(){a=1;for(i=1;i<=(l*2);i++){ vt[a]=v1[i]; a=a+1; vt[a]=v2[i]; a=a+1;}f=25;for(i=1;i<=(l*2);i++){gotoxy(20,f);printf("%d",vt[i]); f=f+1;}}void orden(){for(i=1;i<=(l*2);i++){for(j=1;j<=(l*2);j++){gotoxy(17,24);printf("Alternado"); if(vt[i]<vt[j]) { 8
  9. 9. aux=vt[i]; vt[i]=vt[j]; vt[j]=aux; } }}}void ordasc(){f=25;j=1;for(i=1;i<=(l*2);i++){gotoxy(30,24);printf("Ascendente");gotoxy(35,f);printf("%d",vt[i]); f=f+1;j=j+1;}}void ordesc(){f=25;for(i=j-1;i>=1;i--){gotoxy(44,24);printf("Descendente");gotoxy(50,f);printf("%d",vt[i]); f=f+1;}}void main(){int op;do{clrscr();gotoxy(10,10);printf("Ingrese el L¡mite :");scanf("%d",&l);gotoxy(14,14);printf("<<<VECTOR 1>>>");gotoxy(34,14);printf("<<<VECTOR 2>>>"); 9
  10. 10. ingvect1();ingvect2();vectaltern();orden();ordasc();ordesc();gotoxy(19,48);printf("Oprima 1 para continuar o 0 para cancelar:");scanf("%d",&op);}while(op==1);getch();} Ejecución del Programa 10
  11. 11. APLICACIÓN Nº2 : EnunciadoDiseñe un programa utilizando vectores y funciones que me permita llenar un vectoren forma intercalada con dos factores leidos desde teclado en donde el primer factorsea 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 ypresentelos en forma ordenada ascendente y descendente  AnálisisEn el siguiente programa utilizaremos funciones y vectores en el cual encontraremosel 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); 11
  12. 12. }while(mc%4>=1);flushall();f=20; a=1;for(i=1;i<=(li*2);i++){ t=i*mt; v1[a]=t; a=a+1; c=i*mc; v1[a]=c; a=a+1;}f=25;for(i=1;i<=(li*2);i++){gotoxy(20,f);printf("%d",v1[i]); f=f+1;}getch();}  Ejecucón del programa: 12
  13. 13. EJERCICIOS DE FUNCIONES CON MATRICES:APLICACIÓN Nº1 : EnunciadoDiseñe un programa utilizando funciones y matrices que me permita realizarlas cuatro operaciones básicasAná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
  14. 14. for(i=2;i<=78;i++) { gotoxy(i,2);cprintf("*"); gotoxy(i,24);cprintf("*"); } } void ingreso(int lim) { col=9;fila=10; for(i=1;i<=lim;i++) { for(j=1;j<=lim;j++) { gotoxy(7,8);printf(" MATRIZ 1 "); gotoxy(col,fila);scanf("%d",&matriz1[i][j]);col=col+2; } fila=fila+2; col=9; } textcolor(10); col=25;fila=10; for(i=1;i<=lim;i++) { for(j=1;j<=lim;j++) { gotoxy(22,8);printf(" MATRIZ 2 "); gotoxy(col,fila);scanf("%d",&matriz2[i][j]); col=col+2; } fila=fila+2; col=25; } } void suma(int lim) { fila=10; col=45; for(i=1;i<=lim;i++) { for(j=1;j<=lim;j++) { textcolor(8); gotoxy(43,8);cprintf(" RESPUESTAS "); matriz3[i][j]=matriz1[i][j]+matriz2[i][j]; 14
  15. 15. gotoxy(col,fila);cprintf("%d",matriz3[i][j]); col=col+3; } fila=fila+3; col=45; } } void resta(int lim) { col=45;fila=10; for(i=1;i<=lim;i++) { for(j=1;j<=lim;j++) { gotoxy(43,8);printf("RESPUESTA "); matriz3[i][j]=matriz1[i][j]-matriz2[i][j]; gotoxy(col,fila);printf("%d",matriz3[i][j]); col=col+3; } fila=fila+3; col=45; } } void multiplicacion(lim) { col=45;fila=10; for(i=1;i<=lim;i++) { for(j=1;j<=lim;j++) { gotoxy(43,8);printf("RESPUESTAS"); matriz3[i][j]=matriz1[i][j]*matriz2[i][j]; gotoxy(col,fila);printf("%d",matriz3[i][j]); col=col+3; } fila=fila+3; col=45; } } void main() { int lim,i,j;do{ 15
  16. 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. 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 programaAPLICACIÓN Nº2 : EnunciadoDiseñe un programa en el que se genera una matriz de las dimensiones delímite cuya diagonal principal contenga los números pares y en la diagonalsecundaria contenga los números impares el resto de posiciones de la matrizsean rellenados con ceros. 17
  18. 18.  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("*"); } } 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 { 18
  19. 19. 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 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 19
  20. 20. 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 20
  21. 21. Ingreso de librerías conocidas, declaración de variables globales y de matrices, primerafunción, void borde, se detalla la operación que desplegará el borde. Función void ingresodonde 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 lastitulaciones, 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; 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; } 21
  22. 22. c1=25;f1=f1+1;}}void producto() //function que realize el product de lasmatrices{for(i=1;i<=l;i++) //lazos para la impresión de la matrizresultante{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 matrizcon dos forc2=c2+4;}c2=42;f2=f2+1;}}void main() //function principal{do{clrscr(); //borrado de pantallaborde(); //llamado a la función bordec=5;c1=25;c2=42;f=10;f1=10;f2=10;gotoxy(28,3);printf("PRODUCTO DE MATRICES"); //leyendas otitulacionesgotoxy(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 ingresoproducto(); //llamado a función producto 22
  23. 23. 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

×