Programas en C: Menú modular, interpolación, Euler y Runge-Kutta, y polígonos
Programas en C: menú modular, métodos numéricos y polígonos
Programa modular con menú de opciones
A continuación se muestra un programa modular en C que utiliza estructuras (struct) para gestionar un conjunto de puntos mediante un menú de opciones.
typedef struct
{
double x;
double y;
} tipopunto;
typedef tipopunto tipovector[MAXELE];
typedef struct
{
int n;
tipovector v;
} tipodatos;
void leer_opcion_menu(char *c);
void opcion1(tipodatos *datos);
int buscarpunto (tipodatos datos, tipopunto p);
void opcion2(tipodatos datos);
double interpolar (tipodatos datos, double x);
void opcion3(tipodatos *datos);
void opcion4(void);
int main()
{
char op; /* opcion del menu */
tipodatos datos;
datos.n = 0;
do
{
printf ("\n\n");
leer_opcion_menu(&op);
switch(op)
{
case '1':
opcion1(&datos);
break;
case '2':
opcion2(datos);
break;
case '3':
opcion3(&datos);
break;
case '4':
printf("FIN DE EJECUCION");
getch();
break;
default:
printf("\a");
}
}
while(op!='4');
return 0;
}
void leer_opcion_menu(char *c)
{
printf("MENU DE OPCIONES:\n");
printf("=================\n\n");
printf("\t1.- Insertar un punto en el conjunto\n");
printf("\t2.- Interpolar un punto\n");
printf("\t3.- Eliminar todos los puntos\n");
printf("\t4.- Fin de ejecucion\n");
printf("\n\t\tIntroduzca opcion: ");
*c=getch();
}Programa para calcular soluciones aproximadas de ecuaciones diferenciales
Este programa calcula la solución aproximada de una ecuación diferencial ordinaria mediante los métodos de Euler y Runge-Kutta.
void leerdatos (double *a, double *b, double *y0, int *n);
void calcularvalores (double a, double b, double y0, int n);
double f (double x, double y);
int main()
{
char c;
double a, b, y0;
int n;
do
{
system("cls");
printf("ESCRIBIR AQUI EL TITULO DEL PROGRAMA\n");
printf("====================================\n\n");
leerdatos (&a, &b, &y0, &n);
calcularvalores (a, b, y0, n);
printf("\n\nDesea efectuar una nueva operacion (s/n)? ");
c=toupper(getch());
} while (c!='N');
return 0;
}
void leerdatos (double *a, double *b, double *y0, int *n)
{
do
{
printf ("\nIntroduce valores del intervalo: ");
scanf (" %lf %lf", &*a, &*b);
} while (*a >= *b);
printf ("\nIntroduce valor y0: ");
scanf (" %lf", &*y0);
printf ("\nIntroduce cantidad de terminos: ");
scanf (" %d", &*n);
}
void calcularvalores (double a, double b, double y0, int n)
{
double deltax, x, yeuler, yrunge, yeulerant, yrungeant,
k1, k2, k3, k4;
deltax = (b - a) / n;
yeulerant = y0;
yrungeant = y0;
printf ("\nx=%lf y euler = %lf y runge = %lf",
a, yeulerant, yrungeant);
for (x=a; xLectura de vértices de un polígono por teclado
Este programa lee los vértices de un polígono, comprueba si es regular, determina si es convexo o cóncavo y calcula su área cuando procede.
typedef struct
{
double x;
double y;
} tipopunto2d;
typedef tipopunto2d tipolistavertices[MAX];
typedef struct
{
int n;
tipolistavertices v;
} tipopoligono;
void leerpoligono (tipopoligono *pol);
char comprobarregular (tipopoligono pol);
char comprobarconcavoconvexo(tipopoligono pol);
void calcularvector (tipopunto2d p1, tipopunto2d p2, tipopunto2d *v);
void componentez (tipopunto2d v1, tipopunto2d v2, int *contpos,
int *contneg, int *contcero);
double calculararea (tipopoligono pol);
int main()
{
/* Declaracion de variables */
char c;
tipopoligono pol;
char regular, concavo;
double area;
do
{
system("cls");
printf("ESCRIBIR AQUI EL TITULO DEL PROGRAMA\n");
printf("====================================\n\n");
leerpoligono (&pol);
regular = comprobarregular (pol);
switch (regular)
{
case 'R':
printf ("\nPoligono regular");
concavo = comprobarconcavoconvexo(pol);
switch (concavo)
{
case 'X':
printf ("\nPoligono convexo");
area = calculararea (pol);
printf ("\nEl area es: %lf", area);
break;
case 'C':
printf ("\nPoligono concavo");
break;
case 'L':
printf ("\nPoligono degenerado en una linea");
break;
}
break;
case 'I':
printf ("\nPoligono irregular");
break;
case 'N':
printf ("\nNo es un poligono");
break;
}
printf("\n\nDesea efectuar una nueva operacion (s/n)? ");
c=toupper(getch());
}
while (c!='N');
return 0;
}
void leerpoligono (tipopoligono *pol)
{
int i;
do
{
printf ("\nIntroduce el numero de puntos del poligono (1..%d): ", MAX);
scanf (" %d", &pol->n);
}
while (pol->n < 1 || pol->n > MAX);
for (i=0; in; i++)
{
printf ("\nPunto %d. Introduce coordenadas x e y: ", i+1);
scanf (" %lf %lf", &pol->v[i].x, &pol->v[i].y);
}
}