2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3  След.
 
 Re: Си, вычисления
Сообщение14.10.2016, 09:37 
letovpowergameisover в сообщении #1159655 писал(а):
Странно, я думал, что inf в консоли и так показывает, что идет деление на нуль.

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

 
 
 
 Re: Си, вычисления
Сообщение20.10.2016, 19:49 
Аватара пользователя
В общем преподша никак не понимает, что деление при делении на 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 
letovpowergameisover в сообщении #1161442 писал(а):
Как думаете, возможно ли сделать это с данной программой?
Да. Если точнее, это возможно сделать, не меняя код функции solve.
letovpowergameisover в сообщении #1161442 писал(а):
Помогите пожалуйста
В чём конкретно проблема?

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

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

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

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

 
 
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:36 
Аватара пользователя
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 
Боюсь, я не знаю как вам помочь. Вставлять нужно исходя из здравого смысла и понимания языковых конструкций, а последнего у вас нет. Не знаю как решить эту задачу в таких условиях.

 
 
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:55 
letovpowergameisover, какая именно переменная может содержать тот нуль, на который нельзя делить?

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

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

-- 20.10.2016, 21:56 --

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

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

 
 
 
 Re: Си, вычисления
Сообщение20.10.2016, 20:57 
Подсказка тут:
http://www.cplusplus.com/reference/cmath/isfinite/

 
 
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:07 
Аватара пользователя
realeugene в сообщении #1161460 писал(а):

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

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

 
 
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:11 
letovpowergameisover в сообщении #1161459 писал(а):
"a", она же действительная.
И все?

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

 
 
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:13 
Аватара пользователя
Pphantom в сообщении #1161463 писал(а):
letovpowergameisover в сообщении #1161459 писал(а):
"a", она же действительная.
И все?

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

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

 
 
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:14 
letovpowergameisover в сообщении #1161462 писал(а):
Как я понял, нужно вводить
Нет

 
 
 
 Re: Си, вычисления
Сообщение20.10.2016, 21:15 
Аватара пользователя
realeugene в сообщении #1161467 писал(а):
letovpowergameisover в сообщении #1161462 писал(а):
Как я понял, нужно вводить

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

-- 20.10.2016, 22:23 --

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

 
 
 [ Сообщений: 44 ]  На страницу Пред.  1, 2, 3  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group