19 octubre 2006

Problemas con Funciones

  1. Escribir una funcion que realicen una entrada controlada de datos de forma que sólo admita valores enteros positivos.
  2. Escribir una función que tenga como parámetro un número entero y que devuelva 1 si el valor de número es par y 0 si es impar. Construir un programa que pruebe dicha funcíón.
  3. Escribir una función que tenga como parámetro número entero y devuelva si número es primo o no lo es. Construir un programa que pruebe dicha funcion.
  4. Escribir una función que permita elevar un número en coma flotante a una potencia entera, esto es, que resuelva la fórmula y = xn. Construir un programa que pruebe dicha función.
  5. Escribir una función en C que reciba cuatro valores reales representado las coordenadas de dos puntos en el plano (x, y) y devuelva la distancia existente entre los dos puntos.
  6. Escribir una función que devuelva el menor de tres números reales.
  7. Escribir una función que reciba tres números reales y los devuelva ordenados de mayor a menor.
  8. Dado un numero N que filtraremos a que sea positivo, escribir un programa que nos diga cuál es el numero primo más cercano a él por debajo. Hacer este programa usando la función primo construida (problema no. 3).
  9. Dado un numero N leído por teclado encontrar el numero P primo mas cercano a él por exceso. Hacer este programa usando la función primo construida.
  10. Genera un programa que simule un juego de adivinanzas de números del sgte. modo:
• Se genera un número al azar entre 1 y 15(función random)
• El jugador da al programa el número a comprobar y el programa contesta “te pasas” ó “no llegas” según el número esté por encima ó por debajo del numero clave.
• El número máximo de intentos es 7.

Tipos de Funciones o Modulos en C#

En esta sección vamos a ver los 4 tipos principales de Funciones.
  1. Funcion que no recibe y no regresa valor
  2. Funcion que recibe y no regresa valor
  3. Funcion que no recibe y regresa valor
  4. Funcion que recibe y regresa valor
Nuestras Funciones o Modulos las declararemos dentro de la clase Principal (Class1).

class Class1
{
static void Mifuncion()
{
//Elementos de la funcion
}
static void Main()
{
//elementos de la funcion principal
}
}

Ejemplos de los 4 tipos de Funcion


using System;

namespace Ej_Funciones
{
///
/// Summary description for Class1.
///

class Class1
{

//Funcion que no recibe ni regresa valor
static void Mensaje ()
{
for (int x = 0; x<10;x++)
Console.WriteLine (" {0} Hello World",x+1);
}
//Funcion que recibe pero no regresa
static void RecibeMensaje (string msj, int altura, int largo)
{ int area; area = altura*largo;
//Console.WriteLine ("Datos recibidos: "+msj+ " "+area.ToString());
Console.WriteLine ("Datos recibidos: {0} {1}",msj,area);
}
//Funcion que no recibe pero que si regresa variables
static int Regresavalor ()
{ int valorregresado = 100;
Console.WriteLine ("En mi funcion El valor que voy a regresar es una variable del tipo int: {0}",valorregresado);
return valorregresado;
}
//Funcion que recibe y regresa valor
static float Multiplica (float x, float y)
{ float producto;
producto = x*y;
return producto;
}


[STAThread]
static void Main(string[] args)
{
string msjPrin;
int altura = 10, largo =4;
int valorRecibido;
// Mando llamar la funcion que no recibe ni regresa valor
Mensaje ();
Console.WriteLine ("Escribe el Mensaje: ");

// Capturo la variable msjPrin la cual voy a enviar a la funcion para que la imprima en pantalla
msjPrin = Console.ReadLine ();
RecibeMensaje (msjPrin,altura, largo);

//Aqui mando llamar la funcion que regresa valor pero no recibe.
valorRecibido=Regresavalor ();
Console.WriteLine ("en la func principal: Este es el valor que recibo: {0}", valorRecibido);

// Este ejemplo nos permite ver que la funcion que llamamos realiza una operacion a traves de dos valores que le enviamos del tipo float. La funcion realiza una multiplicacion y nos resgresa el resultado y en nuestra funcion principal la mandamos imprimir.
float x, y;
Console.WriteLine ("Dame el primer valor:");
x= float.Parse (Console.ReadLine ());

Console.WriteLine ("Dame el segundo valor:");
y= float.Parse (Console.ReadLine ());

Console.WriteLine ("El producto de la multiplicacion es la siguiente {0}", Multiplica (x,y));
Console.ReadLine ();

}
}
}
Notas: Es importante aclarar que las variables que declaremos dentro de nuestras funciones son independientes de las variables declaradas dentro de la funcion principal main( ). Quiere decir que la vida de las variables solo existiran mientras se esten ejecutando las funciones.

18 octubre 2006

Funciones

Introducción

Una de las formas más adecuadas de resolver un problema de programación consiste en descomponerlo en subproblemas. A cada uno de ellos se le asocia una función que lo resuelve, de tal modo que la solución del problema se obtiene por medio de llamadas a funciones. A su vez, cada función puede descomponerse en subfunciones que realicen tareas más elementales, intentando conseguir que cada función realice una y sólo una tarea.


En Lenguaje C# una función se define de la siguiente forma:

tipo NombreFunción (parámetros formales)
{
...
cuerpo de la función
...
}

Al manejar funciones en C debemos tener en cuenta que a una función sólo se puede acceder por medio de una llamada. Nunca se puede saltar de una función a otra mediante una sentencia goto. Tampoco está permitido declarar una función dentro de otra.

En C, a diferencia de otros lenguajes, como Pascal, no existe distinción entre funciones y procedimientos. Por ello, una función puede estar o no dentro de una expresión. Si la función devuelve un valor, son válidas sentencias del tipo:

a = b * funcion (c, d);

Pero también podemos encontrar funciones solas en una línea de programa,

funcion (a, b, c);

incluso aunque la función devuelva algún valor. En ese caso la función realizaría la tarea encomendada y el valor devuelto se perdería. Esto no provoca ningún error.

Por último, hemos de tener en cuenta que, aunque una función puede formar parte de una expresión compleja, nunca se le puede asignar un valor. Por tanto, es incorrecto escribir sentencias como

funcion () = variable;

que sería tan improcedente como escribir

5 = variable;

El único método para que una función reciba valores es por medio de los parámetros formales.


Argumentos de funciones

Los parámetros formales son variables locales que se crean al comenzar la función y se destruyen al salir de ella. Al hacer una llamada a la función los parámetros formales deben coincidir en tipo y en número con las variables utilizadas en la llamada, a las que denominaremos argumentos de la función. Si no coinciden, puede no detectarse el error. Esto se evita usando los llamados prototipos de funciones que estudiaremos más adelante, en este capítulo.

Los argumentos de una función pueden ser:

• valores (llamadas por valor)
• direcciones (llamadas por referencia)

Llamadas por valor

En las llamadas por valor se hace una copia del valor del argumento en el parámetro formal. La función opera internamente con estos últimos. Como las variables locales a una función (y los parámetros formales lo son) se crean al entrar a la función y se destruyen al salir de ella, cualquier cambio realizado por la función en los parámetros formales no tiene ningún efecto sobre los argumentos. Aclaremos esto con un ejemplo.

static void intercambia (int x, int y)
{
int aux;

aux = x;
x = y;
y = aux;
}



void main ()
{
int a = 3, b = 4;

intercambia (a, b);
printf ("\nValor de a: %d - Valor de b: %d", a, b);
}