Podrias enviar la función que utilizas para el calculo, para ver si existe algo raro porahi porque en el resto de codigo por lo pronto no veo fallos. Saludos
Podrias enviar la función que utilizas para el calculo, para ver si existe algo raro porahi porque en el resto de codigo por lo pronto no veo fallos. Saludos
ok, pongo lo q hice hasta ahora:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>
typedef
struct lista
{
int datox;
int datoy;
struct lista* prox;
} nodo;
typedef
nodo* punt;
punt carga()
{
FILE* arch;char letra;punt prim1;char string[2]; punt q; punt t; int i;char caract[10000];
arch = fopen("c:\\datos.txt","rt");
prim1 = NULL;
for (i = 1; i<=3;i++)
letra = fgetc(arch);
while (letra != EOF)
{
q = (nodo*)malloc(sizeof(nodo));
strcpy(caract,"");
while (letra != ';')
{
string[0] = letra;
string[1] ='\0';
strcat(caract,string);
letra = fgetc(arch);
}
q->datox = atoi(caract);
strcpy(caract,"");
letra = fgetc(arch);
while (letra != '}')
{
string[0] = letra;
string[1] = '\0';
strcat(caract,string);
letra = fgetc(arch);
}
q->datoy = atoi(caract);
while ((letra != '{') && (letra != EOF))
letra = fgetc(arch);
if (letra == '{')
letra = fgetc(arch);
if (prim1 == NULL)
prim1 = q;
else
t->prox = q;
q->prox = NULL;
t = q;
}
free(q);
return prim1;
}
float calculo (float k,punt prim)
{
float v;float f;int actual;
punt H;punt T;int h;
v = 1;f = 0;
H = prim; T = prim;
while (H != NULL)
{
actual = H->datox;
while (T != NULL)
{
if (actual == (T->datox))
T = T->prox;
if (T != NULL)
{
v =v * ((k-(T->datox))/(actual - (T->datox)));
T = T->prox;
}
else
break;
}
f=f+(v*(H->datoy));
H = H->prox;
T = prim;
v = 1;
}
return f;
}
void inicio()
{
int gdriver = DETECT,
gmode, codError; /* Modo gráfico, código de error */
initgraph(&gdriver, &gmode, "c:\\Tc\\BGI"); /* Intento pasar a modo gráfico */
codError = graphresult(); /* Miro si hay error */
if (codError != grOk) /* Si lo hay... */
{
printf("Error de gráficos: %s\n", /* Aviso */
grapherrormsg(codError)); /* Muestro el error */
printf("Pulse una tecla para salir...");
getch(); /* Espero */
exit(1); /* y abandono el programa */
}
}
int gra() /* Cuerpo del programa */
{
punt fo;
int xmax, ymax; /* Variables locales: aquí guardaré
las coordenadas máximas de la pantalla */
float x,y; /* x es la primera coordenada de los puntos,
que recorreré con bucle "for"; y es la
segunda coordenada, calculada */
int xPant,yPant; /* Coordenadas que se veran en pantalla, una
vez escaladas y desplazadas */
float xIni, xFin, /* Limites de visualizacion */
escalaX, escalaY, /* Escala en X (calculada) y en Y (fijada) */
despX, despY, /* Desplaz en X (calculado) y en Y (fijado) */
xIncr; /* Incremento en X (inversa de la escala) */
inicio(); /* Paso a modo gráfico */
xmax = getmaxx(); /* Miro cuales son las coordenadas */
ymax = getmaxy(); /* máximas de la pantalla */
xIni = -10; /* Limites a usar en el eje X */
xFin = 10;
escalaX = xmax / (xFin-xIni); /* Escala en X (calculada) */
escalaY = 10; /* Escala en Y (prefijada) */
despX = xmax/2; /* Desplazamiento en pantalla del (0,0) */
despY = ymax/2;
xIncr = 1/escalaX;
/* Dibujo el eje de abcisas (X) */
setcolor(YELLOW);
moveto (0, despY);
linerel (xmax,0);
/* Dibujo el eje de ordenadas (Y) */
setcolor(YELLOW);
moveto (despX, 0);
linerel (0,ymax);
for (x=xIni; x<xFin; x+=xIncr)
{ /* Coordenada x: recorro toda la pantalla */
fo = carga();
y = calculo(x,fo); /* Función a dibujar: Y = X^2 - 2x +10 */
xPant = (int) ( x*escalaX + despX );
yPant = (int) ( - y*escalaY + despY );
putpixel(xPant,yPant,WHITE); /* y muestro cada punto */
}
getch(); /* Espero a que se pulse una tecla */
closegraph(); /* Y termino con el modo gráfico */
return 0;
}
void main ()
{
float x,chebish;float valor;char tecla;float h;float f;punt w;float to;float t1;
char n;
w = carga();
printf("Ingresar el Extremo Inferior del Intervalo\n");
scanf("%f",&to);
printf("Ingresar el Extremo Superior del Intervalo\n");
scanf("%f",&t1);
do
{
printf("1.C lculo del Polinomio de Largange\n");
printf("2.C lculo de la Derivada\n");
printf("3.C lculo de la Integral\n");
printf("4.Ch‚bishev\n");
printf("5.Salir\n");
tecla = getch();
switch(tecla)
{
case '1':
{
printf("Ingresar el punto donde se calcular el Polinomio de Interpolaci¢n\n");
scanf("%f",&x);
valor = calculo(x,w);
printf("El valor del Polinomio de Interpolaci¢n en el punto %f es %f \n\a",x,valor);
getch();
gra();
break;
}
case '2':
{
printf("Ingresar el Incremento\n");
scanf("%f",&h);
f = ((4*calculo((to+h),w))-(3*calculo(to,w))-(calculo((to+(2*h)),w)))/(2*h);
printf("el valor de la derivada en %f es %f\n ",to,f);
getch();
break;
}
}
}
while (tecla != '5');
}
Marcadores