2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки





Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Си, вычисления
Сообщение14.10.2016, 09:37 


27/08/16
631
letovpowergameisover в сообщении #1159655 писал(а):
Странно, я думал, что inf в консоли и так показывает, что идет деление на нуль.

Я поспешил, но был не вполне прав (вместе с вашим препом). При использовании стандартной плавающей арифметики, действительно, делить на нуль безопасно (почти всегда) и, если нужно, можно просто проверить результат функцией isfinite. При использовании целочисленного деления нужно было бы проверять знаменатель перед делением, так как целочисленное деление на нуль вызывает аварийное завершение процесса.

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 19:49 
Аватара пользователя


10/10/16
22
В общем преподша никак не понимает, что деление при делении на 0 в консоли и так выдается "inf". Говорит мне, что бы я сделал так, что бы при делении на 0 программа так и писала, а не "inf"
Как думаете, возможно ли сделать это с данной программой?
Довольно приятной вышла, и не хочется полностью переписывать
Помогите пожалуйста, если тут ещё кто нибудь есть.
Код:
#include <stdio.h>

double solve(const double a, const int n) {
    double temp = a;
    double result = 1.0 / a;
    for (int i = 1; i <= n; i += 1) {
        temp *= (a + i);
        result += 1.0 / temp;
    }
    return result;
}

int main() {
   int n;
    double a;
    scanf("%lf%i", &a, &n);
    printf("%.4lf\n", solve(a, n));
}

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:25 
Заслуженный участник
Аватара пользователя


02/08/11
3821
letovpowergameisover в сообщении #1161442 писал(а):
Как думаете, возможно ли сделать это с данной программой?
Да. Если точнее, это возможно сделать, не меняя код функции solve.
letovpowergameisover в сообщении #1161442 писал(а):
Помогите пожалуйста
В чём конкретно проблема?

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:28 
Аватара пользователя


10/10/16
22
warlock66613 в сообщении #1161448 писал(а):
letovpowergameisover в сообщении #1161442 писал(а):
Как думаете, возможно ли сделать это с данной программой?
Да. Если точнее, это возможно сделать, не меняя код функции solve.
letovpowergameisover в сообщении #1161442 писал(а):
Помогите пожалуйста
В чём конкретно проблема?

Не поонимаю, как
Опыта очень мало в этом, да и в универе объяснили только как работают циклы for while do while , но требования зато вот такие

Тут же все не так просто на самом деле, не просто при a = 0 происходит деление на 0, а и при а = -3, n = 3 например

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:34 
Заслуженный участник
Аватара пользователя


02/08/11
3821
letovpowergameisover в сообщении #1161449 писал(а):
да и в универе объяснили только как работают циклы
Ну циклы тут без надобности, а вот оператор if очень кстати. Вам надо проверить, получилось ли у вас нормальное число или "inf" - и соответственно вывести либо обычный ответ, либо сообщение об ошибке.

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:36 
Аватара пользователя


10/10/16
22
warlock66613 в сообщении #1161450 писал(а):
Профиль
Отправить личное сообщение

Пожаловаться на это сообщение


Да, я пытался с if else и printf это сделать, но не получилось.
Куда их вставлять? В
Код:
int main() {
   int n;
    double a;
    scanf("%lf%i", &a, &n);
    printf("%.4lf\n", solve(a, n));
}

?

Просто я поочему то пытался в solve это вставить :D
Но, раз вы сказали, что можно не меняя solve сделать, то я ошибался (видимо)

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:51 
Заслуженный участник
Аватара пользователя


02/08/11
3821
Боюсь, я не знаю как вам помочь. Вставлять нужно исходя из здравого смысла и понимания языковых конструкций, а последнего у вас нет. Не знаю как решить эту задачу в таких условиях.

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:55 
Модератор
Аватара пользователя


09/05/12
9122
Кронштадт
letovpowergameisover, какая именно переменная может содержать тот нуль, на который нельзя делить?

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:55 
Аватара пользователя


10/10/16
22
warlock66613 в сообщении #1161453 писал(а):
Боюсь, я не знаю как вам помочь. Вставлять нужно исходя из здравого смысла и понимания языковых конструкций, а последнего у вас нет. Не знаю как решить эту задачу в таких условиях.

Они есть, но их очень мало на самом деле)
Я просто не понимаю, как написать в if, что получается деление на 0, не напишешь же
if результат = inf;
printf....
В гугле ничего нет вообще

-- 20.10.2016, 21:56 --

Pphantom в сообщении #1161458 писал(а):
letovpowergameisover, какая именно переменная может содержать тот нуль, на который нельзя делить?

"a", она же действительная. А "n" - натуральное число, там 0 быть не может.

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:57 


27/08/16
631
Подсказка тут:
http://www.cplusplus.com/reference/cmath/isfinite/

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:07 
Аватара пользователя


10/10/16
22
realeugene в сообщении #1161460 писал(а):

Хм, странно, только одну статью нашел на русском про isfinite и то очень маленькую.
Как я понял, нужно вводить
Код:
double isfinite(a);

А дальше вот хз как сделать, что бы функции друг друга не перекрывали

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:11 
Модератор
Аватара пользователя


09/05/12
9122
Кронштадт
letovpowergameisover в сообщении #1161459 писал(а):
"a", она же действительная.
И все?

Но допустим. Какая именно a - в main() или в solve()?

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:13 
Аватара пользователя


10/10/16
22
Pphantom в сообщении #1161463 писал(а):
letovpowergameisover в сообщении #1161459 писал(а):
"a", она же действительная.
И все?

Но допустим. Какая именно a - в main() или в solve()?

Как я понял, та, что в main, ибо нужно сделать так, что бы если вводишь a = 0 программа не стала вычислять solve

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:14 


27/08/16
631
letovpowergameisover в сообщении #1161462 писал(а):
Как я понял, нужно вводить
Нет

 Профиль  
                  
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:15 
Аватара пользователя


10/10/16
22
realeugene в сообщении #1161467 писал(а):
letovpowergameisover в сообщении #1161462 писал(а):
Как я понял, нужно вводить

Уже понял (просто забыл включить <math.h>)

-- 20.10.2016, 22:23 --

Странно, isfinite теперь просто печатается в консоли в любом случае, даже когда деления на 0 нет
Не понимаю, как заставить её проверять переменную "a"?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Toucan, maxal, Karan, PAV, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group