ОС: Windows
Компилятор: Dev,Turbo C
Задача: Вычислить и напечатать таблицу значений функции
и ее максимальное по модулю значение для x [a, b) при дискретном увеличении x с шагом h. Вычисление f(x) для одного значения аргумента определить в отдельной функции.
Сама функция прикреплена. Так же прикрепил что выдают оба компилятора. В Dev ошибок вроде не находит,но не запускается. В Turbo C вроде запустилась, но дальше работать не хочет,тупо зависает.
Код:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define L 300
//Modul
float Modul(float y)
{
if(y>0)
{
return y;
}
else
{
return (-y);
}
}
//Stepen
float Stepen (float x, float y)
{if(x==0)
{
return (0);
}
else
{
if(y==0)
{
return (1);
}
else
{
if(y==1)
{
return (x);
}
else
{
return (x*Stepen(x, y-1));
}
}
}
}
//Koren
float Koren(float x)
{
float eps=1e-4, y=0, z=1;
while(Modul(z)>eps)
{
y+=z;
z=(x/y-y)/2.;
}
return y;
}
//Faktorial
float Faktorial (float x)
{
if(x<0)
{
printf("\nU otritsatelnykh chisel ne sushchestvuet faktoriala! Press any key to exit");
getch();
exit(0);
}
else
{
if((x==0)||(x==1))
{
return 1;
}
else
{
return (x*Faktorial(x-1));
}
}
}
//Sinus
float Sinus (float x)
{
float i, n, eps=1e-6, z=1, y=0;
for(n=1; Modul(z)>eps; n++)
{
i=2*n-1;
z=Stepen(-1, n+1)*Stepen(x, i)/Faktorial(i);
y+=z;
}
return y;
}
//Cosinus
float Kosinus (float x)
{
float i, n, eps=1e-6, z=1, y=0;
for(n=0; Modul(z)>eps; n++)
{
i=2*n;
z=Stepen(-1, n)*(Stepen(x, i)/Faktorial(i));
y+=z;
}
return y;
}
//Tangens
float Tangens (float x)
{
return (Sinus(x)/Kosinus(x));
}
//Arctangens
float Arctan(float x)
{
float i, n=1, eps=1e-6, z=1, y=0;
for(n=0;Modul(z)>eps;n++)
{
i=2*n+1;
z=Stepen((-1), n)*(Stepen(x, i)/i);
y+=z;
}
return y;
}
float f1(float x)
{
return (Stepen(x, 2)*Koren(Modul(x)));
}
int main()
{
int i;
float a, b, h, *Arr1, *Arr2, *Arr3, x, max,razmer; /* a-nachalo
b-konec
h-shag
Arr-ukazatel' na massiv */
printf("Nizhniy Novgorod Technical University\nStudy work number 3.\nPerformed by student Sdobnov Dmitriy\nProgramm Laba4\nPress any key to continue\n");
system("cls");
getch();
printf("Vvedite interval dlya nahozhdeniya X i shag: ");
if(scanf("%f %f %f", &a, &b, &h)==1) //Proveryaem chto vvodyat chisla!
{ printf("Dostupen vvod tolko chisel!\n"); exit(0);}
if(b<a) //Proverka pravilnosti vvoda intervala
{ printf("A ne mozhet byt' bolshe B!!\n"); exit(0);}
if(h>(b-a)) //Proverka shaga
{printf("Shag slishkom bolshoy!\n"); exit(0);}
razmer=(b-a)/h;
//Pervaya funkciya
Arr1=(float *) malloc(razmer * sizeof(float));
if(Arr1==NULL)
{
printf("Oshibka vydeleniya pamyati!\a");
getchar();
exit(0);
}
for(i=0, x=a;i<razmer;i++, x+=h)
*(Arr1+i)=f1(x);
//Vtoraya funkciya
Arr2=(float *) malloc(razmer * sizeof(float));
if(Arr2==NULL)
{
printf("Oshibka vydeleniya pamyati!\a");
getchar();
exit(0);
}
for(i=0, x=a;i<razmer;i++, x+=h)
*(Arr2+i)=Stepen(x, 2)*Arctan(2*x+1);
//Tretya funkciya
Arr3=(float *) malloc(razmer * sizeof(float));
if(Arr3==NULL)
{
printf("Oshibka vydeleniya pamyati!\a");
getchar();
exit(0);
}
for(i=0, x=a;i<razmer;i++, x+=h)
*(Arr3+i)=Sinus(Kosinus(Modul(x)));
max=*(Arr1);
for(i=0, x=a;i<razmer;i++, x+=h)
{
if(*(Arr1+i)>max) max=*(Arr1+i);
if(*(Arr2+i)>max) max=*(Arr2+i);
if(*(Arr3+i)>max) max=*(Arr3+i);
}
printf("\t\tTablica znacheniy funkcii s sahgom %f:\n", h);
printf("________________________________________________________________________\n");
printf("| x | f(x)=x^2+?|x| | f(x)=x^2*arctg(2x+1) | f(x)=sin(cos(|x|)) |\n");
for(i=0, x=a;i<razmer;i++, x+=h)
{
printf("|%6.2f | %-11.6f | %-17.6f | %-14.6f |\n", x, *(Arr1+i), *(Arr2+i), *(Arr3+i));
}
printf("************************************************************************\n");
printf("\n\tMax znachenie x=%f\n", max);
free(Arr1);
free(Arr2);
free(Arr3);
return 0;
}
Подскажите, пожалуйста, что не так?