С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 27.03.2018
Сообщений: 8
1

Задача С++. Почему G = 0?

23.04.2018, 20:25. Показов 689. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Почему G выводит 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
#include <iostream>
#include <cmath>
 
using namespace std;
 
float dob(int s, int e, float a, float b, int p1, int p2){
    int dob1 = 1;
    for (int i=s; i<e; i++){
        dob1 *= (pow(a,p1) + pow(a,p2));
    }
    return dob1;
}
 
float ln(float v){
    float ln1 = log10(abs(1 + pow(cos(v),2)));
    return ln1;
}
 
int main()
{
    float x, z, gA, gB, gC, G;
    float ak[8] = {0, 1, -2, 4, 2, -3.5, 2.1, 4.4};
    float bk[8] = {0.4, -2, 0, -4.4, 3, 1, 6, -0.2};
    x = -0.89;
    z = -0.77;
    for (int i=0; i<8; i++){
        for (int j; j<8; j++){
            gA = ln(pow(x,2))/dob(1, 5, ak[i], bk[j], 2, 1);
            gB = ln(0.21)/dob(6, 9, ak[i], bk[j], 2, 2);
            gC = dob(1, 9, ak[i], bk[j], 1, 2)/ln(z);
        }
    }
    G = gA - gB - gC;
    cout << "G = " << G;
    
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2018, 20:25
Ответы с готовыми решениями:

почему задача валится на контесте?
Хулиганы Первый и Второй очень не любят доску почёта своей школы. Поэтому они решили наглым образом...

Задача о расписании, почему O(n log n)
Почему время выполнения O(n log n)? Имеется ввиду алгоритм который выбирает задания которые...

легкая задача но не могу почему не верно
Материальная точка, находящаяся в покое, начала двигаться по окружности с посто-янным...

Объяснить, почему задача не имеет смысла
Есть такая задача Под горизонтально расположенным прямым проводником с током I1 = 10 А находится...

5
Модератор
Эксперт С++
13710 / 10910 / 6476
Регистрация: 18.12.2011
Сообщений: 29,133
23.04.2018, 21:05 2
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
float dob(int s, int e, float a, float b, int p1, int p2){
// b не используется, зачем тогда передаем
    float dob1 = 1;  //!!!!!!!!!!!!!!!!!!!!!!! было int
    for (int i=s; i<e; i++){
        dob1 *= (pow(a,p1) + pow(a,p2));
    }
    return dob1;
}
 
float ln(float v){
    float ln1 = log10(abs(1 + pow(cos(v),2)));
    return ln1;
}
 
int main()
{
    float x, z, gA, gB, gC, G;
    float ak[8] = {0, 1, -2, 4, 2, -3.5, 2.1, 4.4};
    float bk[8] = {0.4, -2, 0, -4.4, 3, 1, 6, -0.2};
    x = -0.89;
    z = -0.77;
    for (int i=0; i<8; i++){
        for (int j=0; j<8; j++){//  !!!!!!!!!!!!!!!!!! j не было присвоено начальное значение
            gA = ln(pow(x,2))/dob(1, 5, ak[i], bk[j], 2, 1); // dob возвращает 0 -> деление на 0
            gB = ln(0.21)/dob(6, 9, ak[i], bk[j], 2, 2);
            gC = dob(1, 9, ak[i], bk[j], 1, 2)/ln(z);
        }
    }
    G = gA - gB - gC; // используем только последние из 64 раза вычисленных значений gA , gB , gC
    // зачем тогда их считали
    cout << "G = " << G;
    
    return 0;
}
0
0 / 0 / 0
Регистрация: 27.03.2018
Сообщений: 8
23.04.2018, 21:32  [ТС] 3
А как сделать чтобы не было деления на 0?
0
Модератор
Эксперт С++
13710 / 10910 / 6476
Регистрация: 18.12.2011
Сообщений: 29,133
23.04.2018, 21:45 4
Разобраться, почему Ваша функция dob возвращает ноль.
Для этого используйте отладчик
Как пользоваться отладчиком (в Visual Studio)

Я думаю потому, что a[0] равно нулю.
0p1+0p2 дает ноль.
dob1 умножить на ноль будет ноль.
0
0 / 0 / 0
Регистрация: 27.03.2018
Сообщений: 8
23.04.2018, 21:48  [ТС] 5
А почему я не понимаю( Смотрел, пробовал, ничего не получаеться
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
23.04.2018, 21:58 6
YuraBunny, Тебе же сказали:
C++
1
float ak[8] = {0, 1, -2, 4, 2, -3.5, 2.1, 4.4};
-> лучше конечно так:
C++
1
float ak[8] = {0.0, 1.0, -2.0, 4.0, 2.0, -3.5, 2.1, 4.4};
-> a[0] = 0;
Следовательно, при вызове:
C++
1
gA = ln(pow(x,2))/dob(1, 5, ak[i], bk[j], 2, 1);
При i/j = 0 в результате dob будет = 0

Отсюда и эксепшн.
Цитата Сообщение от zss Посмотреть сообщение
float dob1 = 1;
Если уж на то пошло, то:
C++
1
float dob1 = 1.f; //1.0f
0
23.04.2018, 21:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2018, 21:58
Помогаю со студенческими работами здесь

Задача по теории вероятностей, почему то на английском
Привет! Решила все кроме этой, пожалуйста помогите! Заранее спасибо!

Задача про лифт и школьников. Почему z:=5?
Задача про дом с N этажами и К школьниками. Лифт можно поднять только на один этаж. Известно что...

Почему Wrong answer на 6 тесте задача 57 acmp?
Подскажите пожалуйста почему в задаче 57 на 6 тесте Wrong answer? Условие на картинке ...

Почему задача, одинаково решенная на C++ и на Java, работает только на C++?
условие: Даны две строки. Создайте Java-метод, который заменяет все символы первой строки на...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru