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

нужно подправить - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
26.12.2011, 21:48     нужно подправить #1
нужно изменить этот код так ,что бы программа смогла "выжить" в разных ситуациях
1 если знаменатель = 0
и не могу никак понять что обозначает
2корень из -х
3 tg
4 ln
и без использования объектно ориентированных средств ввода вывода ,т.е. принф.

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
#define _USE_MATH_DEFINES
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double x1;
double y[20] = {0};
double x2,x;
cout<<"Enter x1 = ";
cin >> x1;
cout << endl << "Enter x2 = ";
cin >> x2;
cout << endl << "Enter the step: ";
double dx;
cin >> dx;
int i = 0;
for(x = x1; x < x2; x+= dx)
{
  y[i] = sqrt(log(x) - pow(M_E,2.3*x))/pow(tan(x * M_PI/180)*tan(x * M_PI/180),(double)1/3);
  i++;
  if(i == 20) break;
}
cout << endl << "The first 20 points is : " << endl;
for(int i = 0; i < 20;i++)
cout << y[i] << endl;
system("pause");
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2011, 21:53     нужно подправить #2
А исходное задание?
Цитата Сообщение от jeka061288 Посмотреть сообщение
1 если знаменатель = 0
При делении на ноль http://ru.wikipedia.org/wiki/NaN
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
26.12.2011, 22:07     нужно подправить #3
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
    double x1;
    double y[20] = {0};
    double x2,x;
    puts("Enter x1 = ");
    scanf("%lf",&x1);
    puts("Enter x2 = ");
    scanf("%lf",&x2);
    puts("Enter the step: ");
    double dx;
    scanf("%lf",&dx);
    int i = 0;
    for(x = x1; x < x2; x+= dx)
   {
        if(x!=0)
        {
          double t2=tan(x * M_PI/180.);
          double t1=pow(t2*t2,1./3.);
          double t3=log(x) - exp(2.3*x);
          if(t1!=0 && t3>=0)
               y[i] = sqrt(t3)/t1;
          else
               y[i]=0;
        }
        if(++i == 20) break;
   }
   printf("\nThe first %d points is :\n",i);
   for(int k = 0; k < i;k++)
        printf("%lf\n",y[k]);
   getch();
return 0;
}
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
26.12.2011, 23:04  [ТС]     нужно подправить #4
задание такое

1. Составить и выполнить программы циклической структуры (см. табл. 5) расчета Y=f(xi), где xi єX, в соответствии с двумя назначенными преподавателем номерами вариантов заданий; при решении в формулах использовать стандартные математические постоянные и функции.
y[] = sqrt(log(x) - pow(M_E,2.3*x))/pow(tan(x * M_PI/180)*tan(x * M_PI/180),(double)1/3);
и Множество значений аргумента X
0,1; 0,2; 0,8
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
27.12.2011, 07:45     нужно подправить #5
Приведенный код соответствует заданию.
Что-нибудь не получается?
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
27.12.2011, 08:03  [ТС]     нужно подправить #6
Цитата Сообщение от zss2 Посмотреть сообщение
Что-нибудь не получается?
Спасибо огромное за помощь ,только вот мне не очень понятно (т.к. я начинающий)как этот код "выживает",хочется понять подробно где чего.

Добавлено через 2 минуты
И еще Ув.ZSS2,вы поняли что значит ,то я не совсем понимаю.?
1 если знаменатель = 0
и не могу никак понять что обозначает
2корень из -х
3 tg
4 ln

И еще вопрос ,почему компилятор говорит что M_PI не объявленый идентификатор?Вроде бы все правильно.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
27.12.2011, 08:11     нужно подправить #7
1. В формуле дробь. При знаменателе равном нулю возникает ошибка исполнения. Поэтому надо это проверить (в Вашей формуле - это выражение присваиваемое переменной t1).
2. Корень из отрицательного числа извлечь нельзя, поэтому проверяем, что выражение t3>=0
3. tg - тангенс (В Си пишется как tan), ln - Натуральный логарифм (в Си пишется log), exp(x) - e в степени x.
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
27.12.2011, 18:59  [ТС]     нужно подправить #8
Спасибо большое ,вот теперь я понял что к чему!Спасибо!А че компилятор у меня говорит что M_PI не объявленный идентификатор?Майкрософт Вижик 2010.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
27.12.2011, 20:01     нужно подправить #9
Чтобы константы типа M_PI были видны, надо добавить
#define _USE_MATH_DEFINES
перед
#include <math.h>
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
27.12.2011, 20:50  [ТС]     нужно подправить #10
Спасибо за помощь ,но вот еще вопрос ,компилятор говорит
error C3861: system: идентификатор не найден
В чем проблема?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
27.12.2011, 20:59     нужно подправить #11
system("PAUSE");
нужна для того, чтобы окно не закрылось сразу.
В какой она библиотеке, точно не знаю.
Добавьте библиотеку
#include <conio.h>
А
system("PAUSE");
замените на
getch();
эта функция ждет нажатие клавиши на клавиатуре.

з.ы. У меня функция system берется из stdlib.h
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
27.12.2011, 21:01     нужно подправить #12
Цитата Сообщение от jeka061288 Посмотреть сообщение
В чем проблема?
Подключи
C
1
#include <stdlib.h>
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
27.12.2011, 21:02  [ТС]     нужно подправить #13
Цитата Сообщение от go Посмотреть сообщение
#include <stdlib.h>
А что она умеет?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
27.12.2011, 21:03     нужно подправить #14
Цитата Сообщение от zss2 Посмотреть сообщение
ystem("PAUSE");
нужна для того, чтобы окно не закрылось сразу.
В какой она библиотеке, точно не знаю.
Добавьте библиотеку
#include <conio.h>
А
system("PAUSE");
замените на
getch();
эта функция ждет нажатие клавиши на клавиатуре.
Это нестандартная функция, если автор использует компилятор под Linux, то скорее всего ее там не будет, и не должно быть
http://ru.wikipedia.org/wiki/Conio.h

Добавлено через 19 секунд
Цитата Сообщение от jeka061288 Посмотреть сообщение
А что она умеет?
Цитата Сообщение от jeka061288 Посмотреть сообщение
error C3861: system: идентификатор не найден
Вот для этого
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
27.12.2011, 21:15  [ТС]     нужно подправить #15
Спасибо вам GO и ZSS2 все заработало!!!

Добавлено через 6 минут
А можно вопрос я читал что в C++ отбрасывается расширение .h (<stdlib.h>),а в начале добовляется с - почему в случае с #include <conio.h> так нельзя ?

Добавлено через 2 минуты
Вопрос к Ув. модераторам,возможно ли чтобы я сам удалил тему ?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.12.2011, 04:01     нужно подправить #16
 Комментарий модератора 
Цитата Сообщение от jeka061288 Посмотреть сообщение
возможно ли чтобы я сам удалил тему ?
Нет, и за вас её тоже удалять никто не будет. Не будьте эгоистом, ваша тема может быть интересна не только вам, так почему после того, как вы получили решение, тему сразу нужно удалять?


Добавлено через 1 минуту
Цитата Сообщение от jeka061288 Посмотреть сообщение
почему в случае с #include <conio.h> так нельзя ?
Потому что conio.h - не стандартный заголовок, а буква стандарта, как ни странно, распространяется только на вещи, имеющие к этому стандарту хоть какое-то отношение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2011, 19:05     нужно подправить
Еще ссылки по теме:

C++ Нужно подправить функцию, не работает
C++ Найдите четырехугольник с максимальной площадью. Нужно подправить
Нужно подправить код C++

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

Или воспользуйтесь поиском по форуму:
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
29.12.2011, 19:05  [ТС]     нужно подправить #17
нужно изменить код.Должно выглядить как то вот так и обязательно вывод в массив.
1 блок -начало
2ввод n
3 i=1:n
4 ввод x[i] возвращается в 3 блок
из блока 3 в блок 5 i=1:n
из 5 в 6 блок y=корень из Xi
c 6 го блока в 7 Xi,y возвращается в 5блок
Между 5 и 6 блоком 4особые ситуации
1 ln x (x>0)
2числ. корень расч. >=0 <0 --->авост
3 tgx=sinx/cosx ---> cosx=0 авост
4 tg*2x-2*x=0 ---> авост
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
#define _USE_MATH_DEFINES
#include <cmath>
#include <cstdio>
#include <stdlib.h>
#include <conio.h>
int main()
{
double x1;
double y[20] = {0};
double x2,x;
puts("Enter x1 = ");
scanf("%lf",&x1);
puts("Enter x2 = ");
scanf("%lf",&x2);
puts("Enter the step: ");
double dx;
scanf("%lf",&dx);
int i = 0;
for(x = x1; x < x2; x+= dx)
{
if(x!=0)
{
double t2=tan(x*M_PI/180);
double t1=pow(t2*t2,1./3.);
double t3=log(x) - exp(2.3*x);
if(t1!=0 && t3>=0)
y[i] = sqrt(t3)/t1;
else
y[i]=0;
}
if(++i == 20) break;
}
printf("\nThe first %d points is :\n",i);
for(int k = 0; k < i;k++)
printf("%lf\n",y[k]);
getch();
system("pause");
return 0;
}
Yandex
Объявления
29.12.2011, 19:05     нужно подправить
Ответ Создать тему
Опции темы

Текущее время: 11:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru