Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pplz
0 / 0 / 0
Регистрация: 02.02.2010
Сообщений: 6
#1

Табулирование функции. - C++

03.02.2010, 00:03. Просмотров 562. Ответов 0
Метки нет (Все метки)

Добрый вечер!

Подскажите как можно обойти ошибку:
Полный текст программы в Паскале (работает)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Program Laba2TabF;
Uses crt;
Label 1,2;
Var h,xn,xk,y,ystpn,A,U,V,F,x,arcsinx,tg,lg,lgg: real;
n,i: integer;
ch: char;
Begin
1:
clrscr;
writeln('Введите начальное и конечное значание х [от -1 до 1]');
writeln('Формат/пример ввода данных: "-1 1","0 1","-1 -0.5"');
readln(xn,xk);
writeln('Введите шаг изменения х');
readln(h);
writeln('Введите y');
readln(y);
clrscr;
Writeln('Значение функции F=A*Lg(|U-V|)+tg(x*x),');
Writeln('где A=y^5/8 + arcSin(x), U=sqrt(2*(x+y))');
Writeln('y=',y:2:2,'; x из интервала: от ',xn:4:2,' до ',xk:4:2 ,', с шагом':3, h:6:2);
Writeln('--------------------------------');
Writeln('|    X       |  F              |');
Writeln('--------------------------------');
x:=xn;
n:=round((xk-xn)/h)+1;
x:=xn;
i:=0;
repeat
i:=i+1;
if x=1 then arcsinx:=pi/2;
if x=-1 then arcsinx:=-pi/2;
if abs(x) <> 1 then arcsinx:=arctan(x/sqr(-x*x+1));
tg:= sin(x*x)/cos(x*x);
ystpn:=exp(5*ln(y)/8);
A:=ystpn+arcsinx;
U:=sqrt(2*(x+y));
V:=Trunc(U);
lgg:=abs(U-V);
 
if lgg= 0 then begin
Writeln('|..............................|');
Writeln('|','при х=',x:5:2,'.':2,'F':7,'|':11);
Writeln('|','  и y=',y:5:2,'.':2,'не существует':15,'|':3);
Writeln('|..............................|');
x:=x+h;
goto 2;
end;
lg:=ln (lgg) / ln (10);
F:=A*lg+tg;
writeln('|',x:8:2,'|':5,F:12:6,'|':6);
x:=x+h;
2:
until i=n;
Writeln('--------------------------------');
writeln('Повторить? y/n');
readln(ch);
If ch='y' then goto 1;
end.
Там есть уязвимое место (вычисление логарифма нуля) и с 40ой строки начинается обход этого действия. Затрудняюсь такой обход на С++ осуществить.

Вот то, что у меня на Си++ получилось набрать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//Табулирование функции
 
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <BCD.h>
void main()
{
  double shagi,V,h,xn,xk,y,ystpn,A,U,F,x,tgK,lgS,lgg;
  int ss,s,n,i;
  char ch;
nachalo:
clrscr();
printf("Введите начальное и конечное значение х [от -1 до 1] ");
scanf("%lf%lf",&xn,&xk);
printf("Введите шаг изменения x: ");
scanf("%lf",&h);
printf("Введите у: ");
scanf("%lf",&y);
clrscr();
printf("Значение функции F=A*Lg(|U-V|)+tg(x^2),");
printf("\nгде A=y^5/8 + arcSin(x), U=sqrt(2*(x+y))");
printf("\ny=%5.2f, x из диапазона: от %5.2f, до %5.2f, с шагом %5.2f",y,xn,xk,h);
printf("\n------------------------------");
printf("\n|    X     |  F              |");
printf("\n------------------------------");
x=xn;
do
{
i=i+1;
A=pow(y,0.625)+asin(x);
U=sqrt(2*(x+y));
V=floor(U);
//lgg=abs(U-V);
 
//if (lgg==0)
//  {
//  printf("\nlgg=0");
//  x=x+h;
// goto metka;
//  }
//printf("\n..............................");
//printf("\n|    X     |  F              |");
//printf("\n..............................");
//x=x+h;
//goto metka;
//}
 
lgS=1*V;
 
tgK=tan(x*x);
F=A*lgS*tgK;
printf("\n|%7.2f   |%11.6f      | ",x,F);
x=x+h;
metka:
}
while(x<=xk);
 
printf("\n..............................");
printf("\nПовторить? y/n");
cin>>ch;
if(ch=='y') goto nachalo;
getch();
;
(lgS ввел чтобы компилятор не ругался на неиспользуемую переменную)
обход на 37строке через if(lgg==0) не работает как нужно: выводит в столбик ряд из одних нулей, а нужно чтобы был "0" только там, где lgg=0, на других же строках - должны быть значения х и F.
Поправьте меня

Добавлено через 1 час 38 минут
песец 5 часов abs от fabs различить не мог...
Разобрался.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2010, 00:03     Табулирование функции.
Посмотрите здесь:

Табулирование функции - C++
Помогите пожалуйста написать программу табулирования функции Y(x)=x*x+1,если заданы: а)Xn(x начальное),Dx(шаг),N-количество шагов; б) M...

Табулирование функции - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; void main()

Табулирование функции - C++
помоги в решении данной задачи п.с не знаю как отобразить здесь фотку http://www.cyberforum.ru/attachments/317973d1382010874

Табулирование функции - C++
Всем привет!помогите пожалуста кто может: протабулировать функцию y=cos*3x-5,23/8,34-2*3,14+модуль sin2x на отрезке с шагом h=0.1*I,где...

Табулирование функции - C++
Кто поможет с решением задачи на табулирование функции,отпиши в лс(буду очень благодарен)

Табулирование функции - C++
1) Используя цикл for, написать программу, которая выводит таблицу значе-ний функции y=-2.4x2+5x-3. При этом пользователь должен ввести...

Табулирование функции - C++
Составить программу для вычисления значений функции F(x) на отрезке с шагом h. Результат представить в виде таблицы, первый столбец...

Табулирование функции - C++
Задали вот это Сделала пока столько. Интеграл пока не трогала, ибо даже это не запустить. Помогите, пожалуйста, завершить и поправить...

Табулирование функции. - C++
Вычислить значение функции с шагом h. Результат представить в виде таблицы, первый столбец которой - значения аргумента, второй-...

Табулирование функции - C++
Мне нужна программа табулирования функции (в общем виде) на С. помогите,пожалуйста=)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru