Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390

Посчитать сумму элементов массива, при которых квадратное уравнение имеет решение

04.03.2011, 22:32. Показов 1689. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана матрица a (а1,а2,а3...аn)
Найти сумму тех элементов,при которых уравнение X^2+3a[i]x+5=0
Если таких элементов нет,вывести 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//Trvac e (a1,a2,...an) miachaph zangvac. Gtnel ayn tarreri gumary, voronc depqum
//X2+3aix+5=0 qarakusi havasarumn uni irakan armatner. Ete aydpisi elementner chkan, apa tpel 0.
 
//----------------------------
 
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
using namespace std;
 
void inp(int* y,int n);
void out(int* y,int n);
int calc(int* y,int n,int& x1,int& x2);
bool Dcheck(int a);
void D(int a,int& x1,int& x2);
 
 
void main()
{
    int n;
    int x1,x2;
    cout<<"n=";
    cin>>n;
 
    int* y=new int[n];
    inp(y,n);
    out(y,n);
    int s=calc(y,n,x1,x2);
    
 
    cout<<"x1="<<x1<<endl<<"x2="<<x2<<endl<<"summa="<<s<<endl;
    
}
 
void inp(int* y,int n)
{
    srand(time(0));
    
    for(int i=0;i<n;i++)
        *(y+i)=rand()%10;
}
 
void out(int* y,int n)
{
    for(int i=0;i<n;i++)
        cout<<*(y+i)<<" ";
    cout<<endl;
 
}
 
bool Dcheck(int a)
{
    //X2+3ax+5=0
    bool t;
    double x1,x2;
    double d;
    d=(3*a)*(3*a)-20;
    x1=((-(3*a))-sqrt(d))/2;
    x2=((-(3*a))+sqrt(d))/2;
    if(x1==(int)x1 && x2==(int)x2)
        t=true;
    else
        t=false;
    
    return t;
}
 
void D(int a,int& x1 ,int&x2)
{
    double d;
    d=(3*a)*(3*a)-20;
    x1=((-(3*a))-sqrt(d))/2;
    x2=((-(3*a))+sqrt(d))/2;
}
 
int calc(int* y,int n,int& x1,int& x2)
{
    int s=0;
    int i=0;
    
        for(i=0;i<n;i++)
        {
            s+=*(y+i);
            if(Dcheck(s)==1)
            {
            D(s,x1,x2);
            i=n;
            break;
            }
 
            if(i==n-1)
                i=0;
        }
    return s;
}

что не так я сделал?

PS если что то не так,то не надо код, объясните словами, если никак не пойму,попрошу код.
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.03.2011, 22:32
Ответы с готовыми решениями:

Имеет ли квадратное уравнение хотя бы одно вещественное решение?
Здраствуйте все.Помогите написать программу на паскале. Задача:Для произвольных вещественных чисел a, b и c определить, имеет ли...

Найти все а, при которых уравнение имеет единственное решение
Товарищи математики, простите если не в той теме, но такая ситуация: Готовлюсь к ЕГЭ. Посмотрел варианты досрочников, так С5 просто мозг...

Укажите значения параметра λ, при которых уравнение имеет единственное решение
Задачу почти дорешал. Не пойму ,что дальше. Может быть я где-то ошибся? Укажите значение параметра λ, при которых уравнение имеет...

11
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
04.03.2011, 22:41
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
Найти сумму тех элементов,при которых уравнение X^2+3a[i]x+5=0
Если таких элементов нет,вывести 0.
для этой задачи достаточно посчитать дискриминант

и зачем повторять одни и теже расчеты в D и Dcheck ?
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
04.03.2011, 23:26  [ТС]
Maxwe11, я не знаю...
дискриминант я посчитал
а как посчитать сумму тех,с помощью которых корни- целые числа?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
04.03.2011, 23:58
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
а как посчитать сумму тех,с помощью которых корни- целые числа?
сначала находить корни с плавающей точкой потом преобразовывать в целое и подставлять в уравнение
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
05.03.2011, 00:03  [ТС]
Maxwe11, как?
0
236 / 173 / 25
Регистрация: 13.11.2010
Сообщений: 425
05.03.2011, 02:01
^Tecktonik_KiLLeR, проверяешь дискриминант: D>=0. Так находишь все вещественные корни.
Далее проверяешь целое ли число, вроде так должно работать:
C++
1
if (x1-(int)x1 == 0 && x2-(int)x2 == 0) { }
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
05.03.2011, 11:37  [ТС]
almazsr,ну и что потом?Что то не пойму,отредактировайте мой код пожалуйста с вашими вариантами
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.03.2011, 15:03
Если имеются в виду целые корни, то вот так можно сделать:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/////////////////////////////////////////////////////////////////////////////////////////
//Дан массив a (а1,а2,а3...аn)
//Найти сумму тех элементов,при которых уравнение X^2+3a[i]x+5=0 имеет целые корни.
//Если таких элементов нет, вывести 0.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <functional>
#include <iostream>
#include <numeric>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef int                 T_num;
typedef std::vector<T_num>  T_nums;
/////////////////////////////////////////////////////////////////////////////////////////
T_nums  get_random_arr
    (
        T_num  size,
        T_num  mod
    )
{
    struct  T_gen_num_for_mod
    {
        T_num  mod_;
        //-------------------------------------------------------------------------------
        T_gen_num_for_mod(T_num  mod) : mod_(mod)
        {}
        //-------------------------------------------------------------------------------
        T_num  operator()()
        {
            return  rand() % (mod_ * 2 + 1) - mod_;
        }
    };
 
    T_nums  nums;
    std::generate_n(std::back_inserter(nums), size, T_gen_num_for_mod(mod));
    return  nums;
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print_nums(const T_nums&  nums)
{
    std::copy(nums.begin(), nums.end(), std::ostream_iterator<T_num>(std::cout, "\t"));
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));   
    srand(static_cast<unsigned>(time(0)));
    const T_num ARR_SIZE =  40;
    const T_num ARR_MOD =   10;
 
    T_nums  nums = get_random_arr(ARR_SIZE, ARR_MOD);    
    std::cout << "Исходный массив A: "
              << std::endl;    
    print_nums(nums);
    std::cout << std::endl;
 
    struct  T_root_is_not_int
    {
        bool  operator() (T_num  num)
        {
            T_num  D = (3 * num) * (3 * num) - 4 * 1 * 5;
            if(D < 0) 
            {
                return  true;
            }
            else
            {                
                T_num  sqrt_int_D  = static_cast<T_num>(pow(D, 0.5));
                T_num  d           = 0;
                if(D == sqrt_int_D * sqrt_int_D)
                {
                    d = sqrt_int_D;
                }
                else if(D == (sqrt_int_D + 1) * (sqrt_int_D + 1))
                {
                    d = sqrt_int_D + 1;
                }
                else  return  true;
 
                return (3 * num) % 2 != d % 2;
            }
        }
    };
 
    T_nums  good_nums;
    std::remove_copy_if(nums.begin(), nums.end(), std::back_inserter(good_nums),
                        T_root_is_not_int());
 
    std::cout << "Элементы массива A, для которых уравнение x^2 + 3*A[i]*x + 5 = 0 "
              << std::endl
              << "имеет целые корни:"
              << std::endl;
    print_nums(good_nums);
    std::cout << std::endl
              << "Сумма этих элементов равна "
              << std::accumulate(good_nums.begin(), good_nums.end(), 0)
              << "."
              << std::endl;
}
1
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
05.03.2011, 19:24  [ТС]
Mr.X, пожалуйста,я не знаком с этими типами, или же функциями...нельзя ли просто отредактировать мой код,используя только то что там есть?Дин. память, указатели и т.д.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
08.03.2011, 22:11  [ТС]
Проверьте код пожалуйста,я написал его
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//Trvac e (a1,a2,...an) miachaph zangvac. Gtnel ayn tarreri gumary, voronc depqum
//X2+3aix+5=0 qarakusi havasarumn uni irakan armatner. Ete aydpisi elementner chkan, apa tpel 0.
 
//----------------------------
 
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
using namespace std;
 
void inp(int* y,int n);         //input of matrix
void out(int* y,int n);         //output of matrix
int calc(int* y,int n);         //calc function
bool Dcheck(int a);         //checking for real roots
 
 
 
void main()
{
    int n;          //matrix size
    cout<<"n=";         //input of size
    cin>>n;
 
    int* y=new int[n];      //creating
    inp(y,n);               //input matrix
    out(y,n);           //output
    int s=calc(y,n);        //calling calc function
 
    cout<<"Summa="<<s<<endl;        //result
    
}
 
void inp(int* y,int n)
{
    srand(time(0));
    
    for(int i=0;i<n;i++)
        *(y+i)=rand()%10;
}
 
void out(int* y,int n)
{
    for(int i=0;i<n;i++)
        cout<<*(y+i)<<" ";
    cout<<endl;
 
}
 
bool Dcheck(int a)
{
    //X2+3ax+5=0
    bool t;         //answer
    double x1,x2;       //roots
    double d;           //descriminant
    d=(3*a)*(3*a)-20;       //d=b^2-4ac
 
        if(d<0)         
            return 0;
        if(d==0)        //x=-b+-0/2a
        {
            x1=(-(3*a))/2;
            x2=x1;
        }
 
        else
        {
            x1=((-(3*a))-sqrt(d))/2;        
            x2=((-(3*a))+sqrt(d))/2;
        }
 
    if(x1==(int)x1 && x2==(int)x2)          //ex. 5.0 = 5
        t=true;
    else            //ex 5.1 != 5
        t=false;
    
    return t;
}
int calc(int* y,int n)
{
    int s=0;            //summa
    int i=0;            //index
    
        for(i=0;i<n;i++)
        {
            if(Dcheck(*(y+i))==1)
            {
                cout<<"The number="<<*(y+i)<<endl;          
                s+=*(y+i);
            }
        }
    return s;
}
Добавлено через 55 секунд
В уравнении X2+3aix+5=0 где аi это очередной элемент массива, корни бывают реальные только тогда,когда a[i]==2
Почему же так?В смысле правильно это?

Добавлено через 11 минут
вот написал такой код...
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
bool Dcheck(int a);         //checking for real roots
 
void main()
{
    for(int i=0;i<=9999;i++)
        if(Dcheck(i)==1)
            cout<<i<<endl;
}
bool Dcheck(int a)
{
        //X2+3ax+5=0
        bool t;                 //answer
        double x1,x2;           //roots
        double d;                       //descriminant
        d=(3*a)*(3*a)-20;               //d=b^2-4ac
 
                if(d<0)                 
                        return 0;
                if(d==0)                //x=-b+-0/2a
                {
                        x1=(-(3*a))/2;
                        x2=x1;
                }
 
                else
                {
                        x1=((-(3*a))-sqrt(d))/2;                
                        x2=((-(3*a))+sqrt(d))/2;
                }
 
        if(x1==(int)x1 && x2==(int)x2)                  //ex. 5.0 = 5
                t=true;
        else                    //ex 5.1 != 5
                t=false;
        
        return t;
}
ответ - 2
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
09.03.2011, 05:38
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Если имеются в виду действительные корни, то вот так можно сделать:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/////////////////////////////////////////////////////////////////////////////////////////
//Дан массив a (а1,а2,а3...аn)
//Найти сумму тех элементов,при которых уравнение X^2+3a[i]x+5=0 имеет действительные корни.
//Если таких элементов нет, вывести 0.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <functional>
#include <iostream>
#include <numeric>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef int                 T_num;
typedef std::vector<T_num>  T_nums;
/////////////////////////////////////////////////////////////////////////////////////////
T_nums  get_random_arr
    (
        T_num  size,
        T_num  mod
    )
{
    struct  T_gen_num_for_mod
    {
        T_num  mod_;
        //-------------------------------------------------------------------------------
        T_gen_num_for_mod(T_num  mod) : mod_(mod)
        {}
        //-------------------------------------------------------------------------------
        T_num  operator()()
        {
            return  rand() % (mod_ * 2 + 1) - mod_;
        }
    };
 
    T_nums  nums;
    std::generate_n(std::back_inserter(nums), size, T_gen_num_for_mod(mod));
    return  nums;
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print_nums(const T_nums&  nums)
{
    std::copy(nums.begin(), nums.end(), std::ostream_iterator<T_num>(std::cout, "\t"));
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));   
    srand(static_cast<unsigned>(time(0)));
    const T_num ARR_SIZE =  40;
    const T_num ARR_MOD =   10;
 
    T_nums  nums = get_random_arr(ARR_SIZE, ARR_MOD);    
    std::cout << "Исходный массив A: "
              << std::endl;    
    print_nums(nums);
    std::cout << std::endl;
 
    struct  T_root_is_complex
    {
        bool  operator() (T_num  num)
        {
            T_num  D = (3 * num) * (3 * num) - 4 * 1 * 5;
            return  D < 0;
        }
    };
 
    T_nums  good_nums;
    std::remove_copy_if(nums.begin(), nums.end(), std::back_inserter(good_nums),
                        T_root_is_complex());
 
    std::cout << "Элементы массива A, для которых уравнение x^2 + 3*A[i]*x + 5 = 0 "
              << std::endl
              << "имеет действительные корни:"
              << std::endl;
    print_nums(good_nums);
    std::cout << std::endl
              << "Сумма этих элементов равна "
              << std::accumulate(good_nums.begin(), good_nums.end(), 0)
              << "."
              << std::endl;
}
Корни действительные при |A[i]| >= sqrt(20 / 9), а если значения A[i] целые, то при |A[i]| >= 2.
0
236 / 173 / 25
Регистрация: 13.11.2010
Сообщений: 425
09.03.2011, 11:01
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
bool isroot(double a, double b, double c, double param)
{
    double discriminant=(param*b)*(param*b)-4*c*a;
    if (discriminant>=0)
    {
        double x1=(-(param*b)+sqrt(discriminant))/(2*a), x2=(-(param*b)-sqrt(discriminant))/(2*a);
        if (x1-(int)x1 == 0 && x2-(int)x2 == 0) 
        {
            return true;
        }
    }
    return false;
}
 
void input_array(int* a, int n)
{
    for (int i=0; i<n; i++)
    {
        std::cin>>a[i];
    }
}
 
int main()
{
    int n, k=0;
    double a, b, c;
    std::cout<<"Enter a, b, c constants: ";
    std::cin>>a>>b>>c;
    std::cout<<"Enter count of elements in array: ";
    std::cin>>n;
    std::cout<<"Enter elements in array: ";
    int* arr=new int[n];
    input_array(arr,n);
    for (int i=0; i<n; i++)
    {
        if (isroot(a,b,c,arr[i]))
        {
            std::cout<<arr[i]<<' ';
        }
    }
    _getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.03.2011, 11:01
Помогаю со студенческими работами здесь

Найдите все значения параметра, при каждом из которых уравнение имеет единственное решение
Найдите все значения a, при каждом из которых уравнение (3|x|+x-a)^2=18x^2+2(x-a)^2 имеет единственное решение на интервале (-1;1)

Посчитать сумму элементов массива, значения которых находятся в диапазоне от B до С
Задан вектор А, в котором n элементов (не менее 15), посчитать сумму элементов массива, значения которых находятся в диапазоне от B до С. ...

Посчитать сумму четных элементов массива, абсолютное значение которых превышает 25
Написать программу, которая вводит массив из n случайных чисел (n задаёт пользователь) в диапазоне от -100 до 100, после чего вычисляет...

Найдите все значения параметра, для каждого из которых уравнение имеет единственное решение
4^x+(a-6)*2^x=(2+3*|a|)*2^x+(a-6)(3*|a|+2)

Посчитать сумму элементов массива, порядковый номер которых в матрице будет кратен 3
нужно создать массив размером MxN. заполнить его рандомными числами. программа должна считать сумму элементов, порядковый номер котрых в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru