Новичок
Джуниор
Регистрация: 13.10.2015
Сообщений: 2
|
Ошибка в программе на C#
Вычислить и вывести на экран в виде таблицы значения функции, заданной графически на интервале от 𝑥нач. до 𝑥кон.с шагом dx. Интервал и шаг задать таким образом, чтобы проверить все ветви программы. Таблицу снабдить заголовком и шапкой.
вот моя прога, но в ней ошибка в формуле ( помогите найти
Код:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
float circle (float x0, float y0, float r,float x)
{
float sin_a=0.0, cos_a=0.0;
cos_a= (x - x0) / r;
sin_a= sqrt(1 - pow(cos_a,2));
return (y0 + (r * sin_a) );
}
float line(float x1, float y1, float x2, float y2, float x)
{
return ( ( ( (x - x1) * (y2 - y1) ) / (x2 - x1) ) + y1);
}
float SearchErr()
{
float x = 0;
float def = 0;
rewind( stdin );
def = scanf("%f",&x);
if(!def)
{
printf("It's not a float value. Please try again.\n");
SearchErr();
}
return(x);
}
TableString(float x,float y, float z1, float z2, float f, float g,float k)
{
printf("%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n",x,y,z1,z2,f,g,k);
}
main()
{
int def = 0;
float x1 = 0;
float x2 = 0;
float dx = 0;
float r1 = 0, r2=0 ;
float x = 0;
start:
printf("Start working -1\n");
printf("Exit. - 2\n");
rewind( stdin );
scanf("%i", &def);
switch(def)
{
case 1:
{
goto print1;
break;
}
case 2:
{
exit(0);
}
default:
{
printf("It's not a right value. Please try again.\n");
goto start;
break;
}
}
print1:
printf("Enter R1 value: ");
r1 = SearchErr();
if(r1<3)
{
printf("Please enter abs value!\n");
goto print1;
}
print2:
printf("Enter R2 value: ");
r2 = SearchErr();
if(r2<0 || r2>6)
{
printf("Please enter abs value!\n");
goto print2;
}
writex:
printf("\nEnter [x1;x2]:\n");
x1 = SearchErr();
x2 = SearchErr();
if((x2>9)||(x1<-9)||(x2<x1))
{
printf("Error. Rewrite [x1;x2]");
goto writex;
}
change_dx:
printf("Enter dx: ");
dx = SearchErr();
if(dx <= 0)
{
printf("Please enter abs value, there dx > 0!\n");
goto change_dx;
}
printf("\n\n\n\t\tGreat Table\n");
printf("\nx1\tx2\tr1\tr2\tdx\tx\tf(x)\n\n");
x = x1;
while(x <= x2)
{
float f = 0;
if((x>=(-9))&&(x<=(-6)))
{
f = circle(-6,0,r1,x);
TableString(x1,x2,r1,r2,dx,x,f);
}
if((x>(-6))&&(x<=-3))
{
f = line(-6,-r1,-r2,0,x);
TableString(x1,x2,r1,r2,dx,x,f);
}
if((x>3)&&(x<=0))
{
f = circle(0,0,r2,x);
TableString(x1,x2,r1,r2,dx,x,f);
}
if((x>0)&&(x<=3))
{
f = line(0,r2,3,0,x);
TableString(x1,x2,r1,r2,dx,x,f);
}
if((x>3)&&(x<=9))
{
f = line(3,0,9,r2,x);
TableString(x1,x2,r1,r2,dx,x,f);
}
x += dx;
}
End:
printf("\n\nTry again - 1\n");
printf("Exit - 2\n\n");
printf("Change dx: - 3\n");
scanf("%i",&def);
switch(def)
{
case 1:
{
goto print1;
break;
}
case 2:
{
exit(0);
break;
}
case 3:
{
goto change_dx;
break;
}
default:
{
printf("Please, try again.\n");
goto End;
}
}
}
И если у кого-то есть время, можете переписать эту прогу без goto буду очень благодарен
|