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

Решение куб. уравнения. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Файл: В текстовом файле подсчитать количество непустых строк. http://www.cyberforum.ru/cpp-beginners/thread560506.html
В текстовом файле подсчитать количество непустых строк.
C++ Вычислить по формуле помогите, очень надо решить..... http://www.cyberforum.ru/cpp-beginners/thread560504.html
C++ Зашифровать текст
Зашифровать текст методом Гронсфельда. Ключом является конечная последовательность цифр, которую записывают подряд над символами шифруемого текста. Цифра, стоящая над литерой, является величиной смещения (т.е. говорит о том, на сколько надо продвинуться вперед по таблице кодировки от текущего символа, чтобы получить от него замену). Протестировать программу.
MonoDevelop Console could not be created C++
Если я скомпилирую код кнопкой F5 то снизу появляется панель "вывод приложения", если ее закрыть появляется 2 окна Object reference not set to an instance of an object в деталях написано System.NullReferenceException: Object reference not set to an instance of an object at MonoDevelop.Debugger.Gdb.GdbSession.RunCommand (System.String command, System.String args) in...
C++ таймер http://www.cyberforum.ru/cpp-beginners/thread560486.html
извините , я знаю что уже миллион раз спрашивали это но подскажите обычный таймер в С++ не винапи а просто в С++ и как чтобы обнавлялась страница к примеру чтобы таймер стоя на месте менял цифры в последовательности какую задам спасибо !
C++ Избежание конфликтов с другими процессами. Как при условии того, что есть процесс, имя которого равно имени исполняемого файла, уведомить пользователя об этом? Добавлено через 14 часов 58 минут Цель: Пользователь активировал программу -> Может быть она затормозила и нетерпеливый пользователь включит ещё раз, а дальше я незнаю что сделаю : Либо выключу старый(вдруг заглючило программу) и включу новый запущенный, либо просто уведомлю. подробнее

Показать сообщение отдельно
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.04.2012, 21:59     Решение куб. уравнения.
решение кубического уравнения.
Программа работает слишком медленно. (Не знаю в каком месте медленно, как по мне - так нормально)
Есть кубическое уравнение вида A*X3 + B*X2 + C*X + D = 0. все корни уравнений – целые числа и находятся на отрезке [-100, 100]. написать программу, которая поможет ему найти корни кубических уравнений!
Я пишу так.
Как известно, целочисленные корни уравнения являются делителями свободного члена (или что-то в этом роде, не помню). Так вот.
Если D=0, сначала вывожу 0 и отбрасываю нулевые корни. Затем беру в качестве свободного члена последний ненулевой коэффициент.
В цикле нахожу все его делители j, меньшие или равные корню из свободного члена (while (j*j<=N)){if(N%j==0){...}j++;}
заношу их в массив d[].
парные им делители будут N/d[]
И, наконец, в цикле проверяю числа -N/d[i], -d[i], d[i], N/d[i] , нет ли среди них корней уравнения.
Разве это не оптимальный алгоритм? Но мне сказали, что не проходит какой-то "тест" по времени.
Есть идеи в чём проблема? Считает всё правильно и шустро.
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
#include <stdio.h>
int i, N, sz, j;
int a[4]={0};
int d1[10], d2[10];
inline int test(int x){
    return x*x*x*a[0]+x*x*a[1]+x*a[2]+a[3];
}
 
int main(){//19:02 27.04 not shown
    freopen("INPUT.TXT", "r", stdin);
    freopen("OUTPUT.TXT", "w", stdout);
    scanf("%d %d %d %d", a, a+1, a+2, a+3);
    i=3;
    if (!a[3]){
        printf("0 ");
        while((!a[i])&&i)
            i--;
        if (!i) 
            return 0;
    }
    N=(a[i]>0)?a[i]:-a[i];
    sz=0; j=2;
    d1[0]=1; 
    while((j*j<=N)&&(j<=100)){
        if ((N%j)==0){
            sz++;
            d1[sz]=j;//root
            d2[sz]=N/j;
        }
        j++;
    }
    if ((j-1)*(j-1)==N){d2[sz]=N+1;}
    for(j=0; j>=sz; j++){
        if(test(-d2[j])==0)
            printf("%d ", -d2[j]);
    }
    for(j=sz; j>=0; j--){
        if(test(-d1[j])==0)
            printf("%d ", -d1[j]);
    }
    for(j=0; j<=sz; j++){
        if(test(d1[j])==0)
            printf("%d ", d1[j]);
    }
    for(j=sz; j>=0; j--){
        if(test(d2[j])==0)
            printf("%d ", d2[j]);
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru