Trabajo Práctico Número 3: Funciones – Punteros - Recursividad

Aquí vas a encontrar algunos ejercicios de Funciones o rutinas muy importantes en la modularidad de un codificado. Además encontrarás la utilidad a Punteros y Recursividad en C.
  • * Validar una fecha

Leer una fecha en formato dia-mes-año, averiguar si es correcta e indicar el día siguiente.
#include <stdio.h>
# include <conio.h>
#define TRUE 1
#define FALSE 0
int correcta_fecha(int,int,int);
int bisiesto(int);
void main()
{
  int dia,mes,anio;
  printf("Dame una fecha:(dd-mm-aaaa)");
  scanf("%d-%d-%d",&dia,&mes,&anio);
  if (!correcta_fecha(dia,mes,anio))
     printf("\nLa fecha no es correcta.");
  getche();
 
}
int correcta_fecha(int dia,int mes,int anio)
{
 int d;
 switch (mes)
 {
   case 4:
   case 6:
   case 9:
   case 11:d=30;
                  break;
   case 1:
   case 3:
   case 5:
   case 7:
   case 8:
   case 10:
   case 12: d=31;
                   break;
   case 2: if (bisiesto(anio))
                    d=29;
                 else
                    d=28;
                 break;
   default: return FALSE;
 }
 if (dia<=d)
  {
    if (dia<d)
       dia++;
    else
    {
      dia=1;
      if (mes==12)
      {
        mes=1;
        anio++;
      }
      else
        mes++;
    }
    printf("\nEl proximo dia sera:%2d-%2d-%d.",dia,mes,anio);
    return TRUE;
  }
 
  else
    return FALSE;
}
/* Un ano es bisiesto cuando es multiplo de 4 pero no de 100
 o multiplo de 400. */
int bisiesto(int anio)
{
if ((anio%4==0 && anio%100!=0) || (anio%400==0)) return TRUE;
return FALSE;
}
  • * Generación de números aleatorios

Programa en C que pide 2 numeros enteros, obtiene un numero aleatorio comprendido entre ellos y muestra dicho numero en pantalla. Usará la funcion obtener_numero_aleatorio para obtener dicho numero, la cual ordena los 2 numeros enteros que toma como parametros y devuelve el
numero entero aleatorio comprendido entre ellos.
#include<stdio.h> // printf, gets
#include<stdlib.h> // randomize, random
#include<time.h> // Lo usa randomize
#include<conio.h> // getch
int obtener_numero_aleatorio(int n1, int n2);
void main(){
int numero1, numero2;
printf("Introduzca un numero entero: ");
scanf(%d”, &numero1);
printf("Introduzca otro numero entero: ");
scanf(%d”, &numero2);
printf("Un numero aleatorio seria: %d \n", obtener_numero_aleatorio(numero1,numero2));
getch();
}
int obtener_numero_aleatorio(int n1, int n2){
int resultado;
randomize();
if(n1<n2)
resultado=n1+random(n2-n1+1); //n1 es el minimo y n2 el maximo
else
resultado=n2+random(n1-n2+1); //n2 es el minimo y n1 el maximo
return(resultado);
}
  • * Funciones en las que usamos Menú

En la práctica, muchas veces debemos diseñar programas, que nos permitan elegir la acción o acciones a realizar, es decir haciendo uso de un menú. El cual, no es más ni menos que la aplicación de un selector múltiple. Un switch.

Diseñe un programa, que dado un ángulo, muestre su seno, coseno o tangente; según lo desee el usuario.
#include <stdio.h>
#include <conio.h>
#include <math.h>
void seno (float angulo);
void coseno (float angulo);
void tangente (float angulo);
void main()
    {
       float angulo;
       int opcion, ban=1;
       clrscr();
       while(ban==1)
       {
           printf("\t\tBIENVENIDO/A\n\n");
           printf("Introduzca el valor del angulo, por favor:\n");
           scanf("%f", &angulo);
           printf("¨Que desea hacer?:\n\n");
           printf("********************************************\n");
           printf("****        1. seno del angulo          ****\n");
           printf("****        2. coseno del angulo        ****\n");
           printf("****        3. tangente del angulo      ****\n");
           printf("********************************************\n");
           scanf("%d", &opcion);
           while(opcion<0 || opcion>3)
          {
           printf("ERROR, la opcion debe estar entre 0 y 3:\n");
           scanf("%d", &opcion);
           }
           clrscr();
           switch(opcion)
          {
            case 1: seno (angulo);
                break;
            case 2: coseno (angulo);
                break;
            case 3: tangente (angulo);
                break;
          }
           printf("¨Hay mas datos? (si=1 y no=0)\n");
           scanf("%d",&ban);
       }
       getch();
       }
       void seno (float angulo)
       {
      float y;
      y=sin (angulo);
      printf("El seno de %f es %f\n\n", angulo, y);
       }
       void coseno (float angulo)
       {
      float y;
      y=cos(angulo);
      printf("El coseno de %f es %f\n\n", angulo, y);
       }
       void tangente (float angulo)
       {
       float y;
       y=tan(angulo);
       printf("La tangente de %f es %f\n\n", angulo, y);
       getch();
       }
  • * Suma en forma recursiva.

Hallar la suma de los N primeros números enteros impares en forma recursiva. En este caso, la función se puede basar en la fórmula recursiva siguiente:
suma(n) = (2*n−1) + suma(n−1)

#include <stdio.h>
double suma(int);
void main( ) {
    int n;
    printf("Teclea un numero entero positivo: \n");
    scanf("%d", &n);
    printf("La suma de los %d primeros impares es %lf\n", n, suma(n));
}
 
double suma(int n) {
    if(n<=1)
        return 1.0;
    return ((2*n-1)+suma(n-1));
}