Logo Studenta

FUNCIONES PRINCIPALES PROGRA

¡Este material tiene más páginas!

Vista previa del material en texto

FUNCIONES.
1.1.-DEFINICIONES.
Para resolver un problema cuya solución es demasiado tediosa, y que se puede dividir en pequeñas partes que después se integren para resolver el mismo se emplean, funciones.
El uso de funciones nos da varias ventajas entre las que podemos contar las siguientes:
1. Facilitan la lectura y escritura de los programas.
2. Permiten el trabajo en paralelo –se asigna a una persona el desarrollo de una función en específico- , por lo que se divide la responsabilidad.
3. El código para funciones se escribe una vez y se emplea las que sea necesario.
4. Facilitan el mantenimiento de los programas.
Un programa puede contener una o varias funciones las cuales interactúan por medio de:
· Parámetros por valor.
· Parámetros por referencia.
· Variables globales.
1.1.1.-Tipos de Variables.
Hasta este momento hemos utilizado variables que se declaran en forma indistinta antes o después de la función principal, sin embargo para tratar el tema de funciones es importante diferenciar el tipo de variables que existen y la forma en que estas se declaran, así como la posición que guardan dentro del desarrollo de un programa.
Primero mencionaremos que las variables son objetos que pueden cambiar su valor durante la ejecución de un programa, las variables se dividen en:
a) Variables Locales.- Son objetos definidos tanto en el programa principal como en las funciones, su alcance está limitado por el programa principal o por la función en la cual están definidas, es decir una variable local comienza a existir en una función cuando se llama a dicha función, y desaparece cuando el control regresa al programa principal.
b) Variables Globales.-Son objetos definidos antes del inicio del programa principal, su alcance es amplio ya que tienen influencia tanto en el programa principal como en todas sus funciones.
c) Variables Estáticas.-Son similares a las locales pero conservan su valor durante la ejecución del programa, es decir comienzan a existir cuando se llama a la función y conservan su valor aún cuando el control regresa al programa principal.
1.2.-SINTAXIS PARA LAS FUNCIONES.
Tipo de resultado Nombre de la función (parámetros)
{
Instrucciones; /*Cuerpo de la función*/
}
Donde:
Tipo de resultado.-Tipo de resultado que devuelve la función (entero, real, carácter, cadena de caracteres, etc).
Nombre de la función.-El cual se recomienda sea uno que tenga relación con lo que realiza dicha función.
Parámetros.-Se utiliza para indicar la lista de parámetros que recibe la función.
Instrucciones.-Son las instrucciones que pertenecen a la función.
Ejemplo 1.1.-La siguiente función calcula el cuadrado de los primeros 20 números.
#include <stdio.h>
#include <conio.h>
int cuadrado(void); /*Prototipo de función*/
int i; /*Variable global*/
int main()
{
int cua;
for(i=1;i<=2 Ø;i++)
{
cua=cuadrado(); /*llamada a la función cuadrado*/
printf(“\nEl cuadrado de %d es: \t%d”.i,cua);
}
getch();
}
int cuadrado(void) /*Declaración de la función*/
{ /*La función calcula el cuadrado de la variable global i */
return (i*i);
}
Al ejecutar el programa desplegará la pantalla el siguiente resultado.
El cuadrado de 1 es: 1
El cuadrado de 2 es: 4
El cuadrado de 3 es: 9
El cuadrado de 4 es: 16
El cuadrado de 5 es: 25
El cuadrado de 6 es: 36
El cuadrado de 7 es: 49
El cuadrado de 8 es: 64
El cuadrado de 9 es: 81
El cuadrado de 10 es: 100
El cuadrado de 11 es: 121
El cuadrado de 12 es: 144
El cuadrado de 13 es: 169
El cuadrado de 14 es: 196
El cuadrado de 15 es: 225
El cuadrado de 16 es: 256
El cuadrado de 17 es: 289
El cuadrado de 18 es: 324
El cuadrado de 19 es: 361
El cuadrado de 20 es: 400
Ejemplo 1.1.-Resolver el ejercicio anterior, pero declarando una variable local con el mismo nombre que una variable local.
#include <stdio.h>
#include <conio.h>
int cuadrado(void); /*Prototipo de función*/
int i; /*Variable global*/
int main()
{
int cua;
for(i=1;i<=2 Ø;i++)
{
cua=cuadrado(); /*llamada a la función cuadrado*/
printf(“\nEl cuadrado de %d es: \t%d”.i,cua);
}
getch();
}
int cuadrado(void) /*Declaración de la función*/
{ /*La función calcula el cuadrado de la variable global i */
Int i=4; /*La variable local tiene el mismo nombre */
return (i*i); /*Regresa el resultado obtenido al programa principal*/
}
Al ejecutar el programa se desplegara el siguiente resultado
El cuadrado de 1 es: 16
El cuadrado de 2 es: 16
El cuadrado de 3 es: 16
El cuadrado de 4 es: 16 
El cuadrado de 5 es: 16
El cuadrado de 6 es: 16
El cuadrado de 7 es: 16
El cuadrado de 8 es: 16
El cuadrado de 9 es: 16
El cuadrado de 10 es: 16 
El cuadrado de 11 es: 16
El cuadrado de 12 es: 16 
El cuadrado de 13 es: 16
El cuadrado de 14 es: 16 
El cuadrado de 15 es: 16
El cuadrado de 16 es: 16 
El cuadrado de 17 es: 16
El cuadrado de 18 es: 16 
El cuadrado de 19 es: 16
El cuadrado de 20 es: 16
Como notaras el programa da resultados que no concuerdan con el cálculo que se realiza previamente, esto se debe a que la variable local tiene preferencia sobre la global y solo considera este valor para realizar la operación, por lo tanto siempre dará como resultado 16 (El cuadrado de 4).
Como puedes ver al trabajar con funciones debemos diferenciar entre el uso de variables locales y variables globales, sin embargo a veces es necesario emplear variables con el mismo nombre en un proceso, y para lograrlo utilizaremos el símbolo :: como predecesor de la variable global, lo que permitirá al programa diferenciar entre una variable global ::i y una variable local i como veremos a continuación.
Ejemplo 1.2.-Aplicacón de variables globales y variables locales.
#include <stdio.h>
#include <conio.h>
int funcion1(void); /*Prototipo de función*/
int i=3; /*Variable global*/
int main()
{
int con;
for(con=1;con<=5;con++)
funcion1();
getch ();
}
void funcion1(void)
{
int i=7;
i+=i;
printf(“\nEl valor de la variable local es : \t%d”,i);
::i=::i+i;
printf(“\nEl valor de la variable global es : \t%d”,::i);
}
Al ejecutar el programa lograras ver la diferencia de resultados con el ejemplo donde se genero el conflicto entre variables locales y globales.
Ejemplo 1.3.-A continuación se muestra otra Aplicacón de variables globales y variables locales.
#include <stdio.h>
#include <conio.h>
int funcion1(void); /*Prototipo de función*/
int funcion2(void);
int funcion3(void);
int funcion4(void);
int a=4; /*Variable global*/
int main()
{
int i;
for(i=1;i<=5;i++)
{
printf(“\nEl resultado de la función 1 es: %d”,funcion1());
printf(“\nEl resultado de la función 2 es: %d”,funcion2());
printf(“\nEl resultado de la función 3 es: %d”,funcion3());
printf(“\nEl resultado de la función 4 es: %d”,funcion4());
}
getch ();
}
Int funcion1(void);
{
a+=a;
return (a);
}
int funcion2(void)
{
int a=2;
a++;
return (a);
}
int funcion3(void)
{
static int a´=6;
a+=2;
return (a);
}
Int funcion4(void);
{
Int a= 3;
a=a+::a;
return (a);
}
1.3.-PARAMETROS POR VALOR Y POR REFERENCIA
Como ya mencionamos anteriormente la comunicación entre las funciones y el programa principal, o bien entre las mismas funciones, se lleva a cabo mediante variables globales y parámetros por valor ó parámetros por referencia, como ya vimos la comunicación por variables ahora veremos la comunicación por parámetros.
PARAMETROS POR VALOR.-Permiten pasar datos entre el programa principal y las funciones, incluso entre las mismas funciones. En el parámetro se escribe una copia de la variable original, si el parámetro sufre una alteración en la función que lo recibe, la variable original no se ve afectada.
Ahora veamos un ejemplo de su uso tomando como base el primer ejercicio que realizamos en el tema de funciones, y advertiremos la diferencia éntrelasllamadas por variables y por parámetros por valor.
Ejemplo 1.1.-La siguiente función calcula el cuadrado de los primeros 20 números, utilizando parámetros por valor.
#include <stdio.h>
#include <conio.h>
int cuadrado(int); /* Prototipo de función que informa al compilador que el 
 parámetro que se utilizara será por valor y de tipo entero*/
int main(void)
{
int i;
for(i=1;i<=2Ø;i++)
{
printf(“\nEl cuadrado de %d es: \t%d”,i,cuadrado(i)); /* escribe el resultado de la 
 función, observa que el parámetro que se utiliza es 
 una copia de la variable i.*/
}
getch();
}
int cuadrado(int a) /*Declaración de la función*/
{ 
 return (a*a); /*Regresa el resultado obtenido a la función principal*/
}
Ejemplo 1.1.-La siguiente función emplea parámetros por referencia, observa las diferencias en su estructura, y corre el programa para analizar los resultados.
#include <stdio.h>
#include <conio.h>
int f1(int*); /* Prototipo de función. El parámetro es entero y por referencia 
 –observa que existe el símbolo de indirección *- */
int main(void)
{
int I, k=4;
for(i=1;i<=3;i++)
{
printf(“\nValor de k antes de llamar a la función es %d es: \t%d”,++k);
printf(“\nValor de k después de llamar a la función es %d es: \t%d”,f1(&k));
}
getch();
}
void f1(int *r) /*Declaración de la función*/
{
*r+=*r;
}
Ejemplo 1.5.-Ahora resolvamos el mismo problema pero empleando parámetros por valor.
#include <stdio.h>
#include <conio.h>
int f1(int); /* Prototipo de función. El parámetro es entero y por valor. */
int main(void)
{
int I, k=4;
for(i=1;i<=3;i++)
{
printf(“\nValor de k antes de llamar a la función es %d es: \t%d”,++k);
printf(“\nValor de k después de llamar a la función es %d es: \t%d”,f1(k));
}
getch();
}
int f1(int r) /*Declaración de la función*/
{
r+=r;
return (r)
}
Ejemplo 1.6.-El programa combina variables locales y globales, así como parámetros por valor y por referencia.
#include <stdio.h>
#include <conio.h>
Int a,b,c,d; /* Variables globales */
int f1(int*, int*); /* Prototipo de función.
 Los dos parámetros son por referencia */
int f2(int, int*); /* Prototipo de función.Aqui un parámetro es por valor y el
 Otro por referencia */
int main(void)
{
int a;
a=1;
b=2;
c=3;
d=4;
printf(“\n%d %d %d %d”,a,b,c,d);
f1(&b, &c);
printf(“\n%d %d %d %d”,a,b,c,d);
a=f2((c,&d);
printf(“\n%d %d %d %d”,a,b,c,d);
}
int f1(int b*, int c*)
{
int d;
a=5;
d=3;
(*b)++;
(*c)+=2;
printf(“\n%d %d %d %d”,a,*b,*c,d);
}
Int f2(int c, int*d);
{
int b;
a++
b=7;
c+=3;
(*d)+=2;
printf(“\n%d %d %d %d”,a,b,c,d);
return ( c );
}
1.1.-PASO DE FUNCIONES COMO PARAMETROS.
Muchos de los problemas que se resuelven por medio de la programación en lenguaje C pueden resolverse de manera más sencilla si una función es empleada dentro de otra como si se tratara de una variable, estas llamadas se realizan por medio de un apuntador, el cual no es más que una variable que contiene a otra variable o en su caso una función, y se representa por los signos de dirección (&) e indirección (*).
Ejemplo 1.7.-El siguiente programa muestra la forma en que una función es empleada dentro de otra como variable (paso de una función como parámetro).
#include <stdio.h>
#include <conio.h>
int suma (int X, int Y) /* Prototipo de función.
 Los dos parámetros son por referencia */
{
return (X+Y);
}
int resta (int X, int Y) /* Prototipo de función.
 Los dos parámetros son por referencia */
{
return (X-Y);
}
int control(int (*apf)(int,int), int X,int Y) /* Prototipo de función.
 Los dos parámetros son por referencia */
{
res;
res=(*apf)(X,Y);
return (res);
}
int main(void)
{
int r1,r2;
r1=control(suma,15,5);
r2=control(resta,10,4);
printf(“\n%d %d %d %d”,a,b,c,d);
f1(&b, &c);
printf(“\nResultado 1 : %d”,r1);
printf(“\nResultado 2 : %d”,r2);
}
EJERCICIOS DE REFORZAMIENTO
I.-Utilizando funciones desarrolle los siguientes programas. 
1. Dado el radio y la altura calcule el volumen y el área superficial de un cono.
2. Calcule el factorial de un número cualquiera.
3. Desplegar los enteros entre 30 y 50 acompañados de su potencia cuadrada y raíz cúbica respectivamente (revisar el tema de operadores aritméticos).
4. Desplegar la tabla de multiplicar que el usuario indique.
5. Evaluar la función Y=5X2 + 3X + 8 CUANDO X--> -3...10 (rango de -3 hasta 10) 
6. Calcule el binomio de Newton para un número cualquiera.
7. Determina los parámetros eléctricos para un circuito eléctrico con resistencias conectadas en serie.
8. Determina los parámetros eléctricos para un circuito eléctrico con resistencias conectadas en serie.
9. Al ingresarle el día y mes de nacimiento determine el signo zodiacal del usuario.
10. Al ingresar una serie de números el programa determinara si son primos o no y en caso de serlo los imprimirá al final.
11. Capturar un número cualesquiera e informar si es o no es mayor de 100.
12. Capturar los cinco datos más importantes de un Empleado, incluyendo el sueldo diario y los días trabajados , desplegarle su cheque semanal solo si ganó más de $500.00 en la semana, en caso contrario desplegarle un bono de despensa semanal de $150.00.
13. Capturar los datos más importantes de un estudiante incluyendo tres calificaciones, una página que contiene una boleta de calificaciones es llamada si el estudiante es de la carrera de medicina, en caso contrario otra pagina despliega un oficio citando a los padres del estudiante a una plática amistosa con los maestros de la escuela.
14. Capturar 3 números y ordenarlos de manera descendente y ascendente.

Continuar navegando

Otros materiales