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

структура,описание полинома - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.62
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
08.12.2009, 20:31     структура,описание полинома #1
ПЛЗ, помогите ,
надо написать на языке С
Ввести структуру для описания понятия алгебраический полином. Составить и протестировать функции для :
а) ввода полинома;
б) вывода полинома;
в) нормализации полинома;
г) сложения полиномов;
д) вычитания полиномов;
е) умножения полиномов;
ж) деления полиномов;
з) дифференцирования полинома;
и) интегрирования полинома.
Люди, прошу, помогите, я вообще в шоке от этой задачи.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.01.2010, 00:38     структура,описание полинома #21
n - это не степень, это количество коэффициентов

Код
x^3 + x^2 + x = 0 /* чуть поменял */
n = 4
потому что свободный член, там его хоть и не видно, но он есть и равен нулю

создал полином, дальше вводишь его коэффициенты, в цикле используешь n, как границу

Добавлено через 6 часов 23 минуты
ввод полинома
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
#include <stdio.h>
#include <stdlib.h>
 
struct polinom {
    double *k;
    size_t n;
};
 
struct polinom *CreatePolinom(size_t n);
struct polinom *ReadPolinom(struct polinom *p, size_t n);
 
int main(void) /* C89 ANSI */
{
    struct polinom *p, *q;
    
    if ((q = CreatePolinom(4)) == NULL)
        exit(EXIT_FAILURE);
 
    p = q;
 
    if ((q = ReadPolinom(p, p->n)) == NULL)
        exit(EXIT_FAILURE);
    
    p = q;
    
    exit(EXIT_SUCCESS);
}
 
struct polinom *CreatePolinom(size_t n)
{
    struct polinom *p;
    
    if (!(p = (struct polinom *) malloc(sizeof(struct polinom))))
        return NULL;
    if (!(p->k = (double *) calloc(n, sizeof *p->k))) {
        free(p);
        return NULL;
    }    
    p->n = n;
    return p;
}
 
struct polinom *ReadPolinom(struct polinom *p, size_t n)
{
    size_t i;
    
    for (i = p->n; i > 0; i--) {
        if (i-1 > 0)
            printf("enter x^%d coefficient: ", i-1);
        else
            printf("enter the last coefficient: ");
        fflush(stdout);
        
        if (scanf("%lf", p->k+(n-i)) != 1)
            return NULL;
    }
    return p;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
11.01.2010, 17:20  [ТС]     структура,описание полинома #22
Цитата Сообщение от accept Посмотреть сообщение
size_t n
что это ?


Цитата Сообщение от accept Посмотреть сообщение
int main(void) /* C89 ANSI */
/* C89 ANSI */ А это зачем ?

Цитата Сообщение от accept Посмотреть сообщение
((q = CreatePolinom(4)) == NULL)
\
что значит 4 ?


Цитата Сообщение от accept Посмотреть сообщение
exit(EXIT_FAILURE);
эт типо выйти если не выполняется ?

Цитата Сообщение от accept Посмотреть сообщение
ReadPolinom(p, p->n)
а что эт за комманда ?

Цитата Сообщение от accept Посмотреть сообщение
exit(EXIT_SUCCESS);
эт типо выйти если правильно ?

Цитата Сообщение от accept Посмотреть сообщение
size_t i;
не понял ( стр 47)

Цитата Сообщение от accept Посмотреть сообщение
fflush(stdout);
что это за комманда ? ( стр 54)
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
11.01.2010, 18:02     структура,описание полинома #23
Лестат, извеняй, на си написать немогу..
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
11.01.2010, 22:27  [ТС]     структура,описание полинома #24
ну, если можете, напишите на Си++ , а я постараюсь переделать. плз
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.01.2010, 23:42     структура,описание полинома #25
Цитата Сообщение от Лестат
что это ?
Цитата Сообщение от accept
n - это не степень, это количество коэффициентов
Цитата Сообщение от Лестат
/* C89 ANSI */ А это зачем ?
написано в этом стандарте и кроме него ничего не используется (совместимо с C++)

Цитата Сообщение от Лестат
что значит 4 ?
сколько коэффициентов будет в полиноме (по их количеству определяется степень полинома 4-1 = 3, то есть создаётся полином третьей степени, у которого коэффициентов четыре, включая свободный член (это то, что без x))

Цитата Сообщение от Лестат
эт типо выйти если не выполняется ?
да, нормально завершить программу и вернуть статус неуспешного завершения в окружающую среду

Цитата Сообщение от Лестат
а что эт за комманда ?
это функция ввести полином (она самодельная, внизу там написана)
там два аргумента: полином и количество коэффициентов, хотя можно было сделать и один, а количество коэффициентов прямо из него вытаскивать внутри функции, так просто яснее (глянешь на этот вызов - и видишь сколько прочитает)

Цитата Сообщение от Лестат
эт типо выйти если правильно ?
нормально завершить программу и вернуть статус успешного завершения в окружающую среду

Цитата Сообщение от Лестат
не понял ( стр 47)
создать переменную i типа size_t (size_t - наибольший беззнаковый тип, такой тип возвращают функции типа strlen и подобные и принимают функции типа malloc и подобные)
он не может быть отрицательным и на современных компиляторах разрешает четыре гигабайта, то есть ~ четыре миллиарда значений
ты можешь создавать полином с четырьмя миллиардами коэффициентов, ну, и чтобы перебирать их, нужно тоже создать переменную такого же большого типа

Цитата Сообщение от Лестат
что это за комманда ? ( стр 54)
так как там нет перевода строки, то буфер может остаться не выведенным на экран
то есть ты как бы текст вывел, а он не показывается (будет выведен на экран, когда будет записан буфер стандартного потока вывода), поэтому fflush заставляет буфер потока вывода зразу записываться, чтобы он на экране появлялся сразу
иначе может быть так, что у тебя программа работает всё вводишь там, а потом на выходе она выведет эти подсказки, когда они уже не нужны
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
11.01.2010, 23:52  [ТС]     структура,описание полинома #26
Ясно, спасибо. Эт получается - ввод и вывод ?

Добавлено через 3 минуты
при запуске пишет :
Microsoft Visual C++ Library
Debug Error !
runtome error

о_О
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.01.2010, 23:58     структура,описание полинома #27
это ввод, при выводе нужно проверять каждый коэффициент на знак, на ноль ещё (чтобы он нулевые не выводил, а знаки соответствующие расставлял, и первый делал со знаком, если там только минус, да и если между знаками пробелы, то первый писать без пробела)

проверь настройки проекта
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
11.01.2010, 23:59  [ТС]     структура,описание полинома #28
ясно, так и сделаю
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
12.01.2010, 00:07     структура,описание полинома #29
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
#include <iostream>
 
#define FOR(i,a,b) for (int i(a),_n(b); i < _n; ++i)
#define ABS(a) ( (a) < 0 ? -(a) : a )
 
using namespace std;
 
const int size = 1000;
 
class polinom
{
    int* c;
public:
    polinom()  {c = new int[size]; FOR(i,0,size) c[i] = 0;}
    ~polinom() {delete c;}
    void push(int* a)
    {
        FOR(i,0,size)
            c[i] = a[i];
    }
    void show()
    {
        for (int i = size-1; i > -1; --i)
            if (c[i]) cout << c[i] << "*X^" << i << " + ";
        cout << "\b\b\b" << endl;
    }
    friend polinom operator + (polinom a, polinom b)
    {
        polinom d;
        FOR(i,0,size)
            d.c[i] = a.c[i] + b.c[i];
        return d;
    }
    friend polinom operator - (polinom a, polinom b)
    {
        polinom d;
        FOR(i,0,size)
            d.c[i] = a.c[i] - b.c[i];
        return d;
    }
    friend polinom operator * (polinom a, polinom b)
    {
        polinom d;
        FOR(i,0,size)
            FOR(j,0,size)
                d.c[i+j] += a.c[i]*b.c[j];
        return d;
    }
};
 
int main()
{
    return 0;
}
пока все, завтра еще подумаю..
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
13.01.2010, 16:35  [ТС]     структура,описание полинома #30
Народ, пожалуйста напишите как оно будет ?
никто не может написать полностью ?
я просто не успеваю, а эт не могу сделать ( уже где-то месяц с этой задачей мучаюсь, никак не могу сделать) . ПОЖАЛУЙСТА HELP, мне в пятницу ее сдавать =((((((
АААААА, плз помогите......
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
14.01.2010, 16:40  [ТС]     структура,описание полинома #31
Плз, люди помогите. От этой задачи решается моя судьба по программированию....
Очень прошу HELP . мне её завтра сдавать, а я не успеваю... ПЛЗ, очень прошу , напишите ...
ПЛЗЗЗЗ.
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
14.01.2010, 17:48     структура,описание полинома #32
немного поправил под себя код accept организовал функции ввода и вывода, сложение\вычитание организовать можешь сам, а вот с диффиренированикм и интегрированием тут тебе наврядли кто поможет
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 <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
struct polinom {
    double *k;
    unsigned int n;
};
 
 
 
polinom * CreatePolinom()
{
    polinom *p= (polinom *) malloc(sizeof(polinom));
 
    // ввод количества коэффициентво без проверки на дурака
    printf("Enter number coefficients in polinom: "); scanf("%i",&(p->n));
 
    // выделяем память под коэффициенты
    p->k = (double *) calloc(p->n, sizeof(double));
    for (int i=0; i<p->n; i++)
    {
        printf("Enter coefficient by x^%i: ",i);  scanf("%lf",&(p->k[i]));
    }
 
    return p;
}
 
void PrintfPolinom(polinom * p)
{
    for (int i=p->n; --i>=1;)   printf("%.2lf*x^%i + ",p->k[i],i);  
    printf("%.2lf",p->k[0]);  
}
 
 
int main(void) 
{
    polinom *p;
 
    if ((p=CreatePolinom()) == NULL)
        exit(EXIT_FAILURE);
 
    PrintfPolinom(p);
 
    getch();
    exit(EXIT_SUCCESS);
}
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
14.01.2010, 17:51  [ТС]     структура,описание полинома #33
ясно, очень жаль =(.
Спасибо большое

Добавлено через 1 минуту
а нармализация, вычитание, умножение , деление ? ...
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
14.01.2010, 18:15     структура,описание полинома #34
Цитата Сообщение от Лестат Посмотреть сообщение
ясно, очень жаль =(.
Спасибо большое

Добавлено через 1 минуту
а нармализация, вычитание, умножение , деление ? ...
вот вычитание, остальное по подобию
с умножением посерьёзнее. там степени могут расти, для этого чтобы с переопределением памяти не возиться, можно попробовать сразу памяти выделять не под n коэффициентов а под 2*n-1 и забивать неиспользуемые коэффииенты нулями. а в функии PrintPolinom не выводить данные с нулевыми коэффициентами.
таким образом при умножении находишь самый длинный полином, смело умножаешь и при возрастании степени полинома задействуешь свободные коэффициенты, но опять же если опять умножение повториться, то свободная память иссякнет, всё равно придётся с реалоком возиться.

интересные вам задачки задают товарищ Лестат жаль времени нема, увы работа
а вам широкие перспективы для развития предоставляются

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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
struct polinom {
    double *k;
    unsigned int n;
};
 
 
 
polinom * CreatePolinom()
{
    polinom *p= (polinom *) malloc(sizeof(polinom));
 
    // ввод количества коэффициентво без проверки на дурака
    printf("Enter number coefficients in polinom: "); scanf("%i",&(p->n));
 
    // выделяем память под коэффициенты
    p->k = (double *) calloc(p->n, sizeof(double));
    for (int i=0; i<p->n; i++)
    {
        printf("Enter coefficient by x^%i: ",i);  scanf("%lf",&(p->k[i]));
    }
 
    return p;
}
 
void PrintfPolinom(polinom * p)
{
    for (int i=p->n; --i>=1;)       printf("%.2lf*x^%i + ",p->k[i],i);  
    printf("%.2lf",p->k[0]);  
}
 
polinom * Deduction(polinom * a, polinom * b)
{
  // работаем только с коэфициентами полинов, внимание к количеству коэффициентов
    if (a->n < b->n)
    {
        for (int i=a->n; i<b->n; i++)
        {
             b->k[i]=-b->k[i];
        }
 
        for (int i=0; i<b->n; i++)
        {
            b->k[i]-=a->k[i];
        }
        return b;
    }
 
    for (int i=0; i<b->n; i++)
    {
            a->k[i]-=b->k[i];
    }
    return a;
    
}
 
int main(void) 
{
    polinom *a, *b;
 
    if ((a=CreatePolinom()) == NULL)
        exit(EXIT_FAILURE);
 
    if ((b=CreatePolinom()) == NULL)
        exit(EXIT_FAILURE);
 
    a=Deduction(a,b);
    PrintfPolinom(a);
 
    getch();
    exit(EXIT_SUCCESS);
}
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
14.01.2010, 18:19  [ТС]     структура,описание полинома #35
спасибо ; та какие ж там интересные - жуть, а не задачи =(. Тем более с тем количеством лекций, что в институте, такие задачи не написать =(. Даже с использованием некоторого кол-ва литературы
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
17.01.2010, 01:06  [ТС]     структура,описание полинома #36
народ, кто-нить может написать нормализацию, умножение, деление, дифференцирование, интегрирование ? ( ну короче говоря, все пункты кроме ввода, вывода, вычитания) ....
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.01.2010, 09:31     структура,описание полинома #37
http://www.pmpu.ru/vf4/polynomial
нормализация
умножение прикольное

дифференцирование и интегрирование простое - по частям

Добавлено через 5 часов 13 минут
без выделений памяти
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
#include <stdio.h>
#include <stdlib.h>
 
struct polinom {
    double coeff[100];
    size_t n;
};
 
void NormalizePolinom(struct polinom *p);
 
/* normalizes a polinom */
int main(void) /* C89 ANSI */
{
    struct polinom p = {
        { 1.0, 2.0, 4.5, 0.5 },
        4
    };
    int i;
    
    printf("an initial polinom:" "\n");
    
    for (i = p.n-1; i >= 0; i--)
        printf(
            "degree %d, coefficient = %g" "\n",
            i,
            p.coeff[i]
        );
        
    NormalizePolinom(&p);
    
    printf("a normalized polinom:" "\n");
    for (i = p.n-1; i >= 0; i--)
        printf(
            "degree %d, coefficient = %g" "\n",
            i,
            p.coeff[i]
        );
    
    exit(EXIT_SUCCESS);
}
 
void NormalizePolinom(struct polinom *p)
{
    double first;
    size_t i, n;
    
    n = p->n;
    
    first = p->coeff[n-1];
 
    if (first == 1.0)
        return;
 
    for (i = 0; i < n; i++)
        p->coeff[i] /= first;
}
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
30.01.2010, 10:02  [ТС]     структура,описание полинома #38
а не можете ли написать интегрирование и дифференцирование ? до сих пор не смог написать =((
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.02.2010, 11:01     структура,описание полинома #39
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
#include <stdio.h>
#include <stdlib.h>
 
struct polinom {
    double coeff[100];
    size_t n;
};
 
void DiffPolinom(struct polinom *p);
 
/* differentiates a polynomial */
int main(void) /* C89 ANSI */
{
    int i;
    
    struct polinom p3 = {
        { -1.0, 2, -3, 0.5 },
        4
    };
    
    for (i = p3.n-1; i >= 0; i--)
        printf("%5g * x^%d" "\n", p3.coeff[i], i);
    
    putchar('\n');
    
    DiffPolinom(&p3);
    
    for (i = p3.n-1; i >= 0; i--)
            printf("%5g * x^%d" "\n", p3.coeff[i], i);
        
    exit(EXIT_SUCCESS);
}
 
void DiffPolinom(struct polinom *p)
{
    size_t i;
    
    for (i = 1; i < p->n; i++)
        p->coeff[i-1] = p->coeff[i]*i;
    p->n--;
}
Код
[guest@station Release]$ ./test
  0.5 * x^3
   -3 * x^2
    2 * x^1
   -1 * x^0

  1.5 * x^2
   -6 * x^1
    2 * x^0
[guest@station Release]$
Добавлено через 8 часов 50 минут
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
#include <stdio.h>
#include <stdlib.h>
 
struct polinom {
    double coeff[100];
    size_t n;
};
 
void IntegratePolinom(struct polinom *p);
 
/* integrates a polynomial */
int main(void) /* C89 ANSI */
{
    int i;
    
    struct polinom p3 = {
        { 1.0, -2.0, 3.0, 3.0 },
        4
    };
    
    for (i = p3.n-1; i >= 0; i--)
        printf("%5g * x^%d" "\n", p3.coeff[i], i);
    
    putchar('\n');
    
    IntegratePolinom(&p3);
    
    for (i = p3.n-1; i >= 0; i--)
        printf("%5g * x^%d" "\n", p3.coeff[i], i);
        
    exit(EXIT_SUCCESS);
}
 
void IntegratePolinom(struct polinom *p)
{
    size_t i;
    double prevval, newval;
    
    newval = 1.0;
    
    for (i = 0; i < p->n; i++) {
        prevval = p->coeff[i];
        p->coeff[i] = newval;
        newval = prevval/(i+1);
    }
    p->coeff[i] = newval;
    p->n++;
}
Код
[guest@station test]$ ./test
    3 * x^3
    3 * x^2
   -2 * x^1
    1 * x^0

 0.75 * x^4
    1 * x^3
   -1 * x^2
    1 * x^1
    1 * x^0
[guest@station test]$
Добавлено через 2 минуты
p3 превратилось в p4
то есть это надо создать p4, скопировать в него p3 и передать в функцию интегрирования
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2010, 19:49     структура,описание полинома
Еще ссылки по теме:

Коэффициенты полинома C++
C++ Структура DateTime, битовая структура
C++ Структура «База», сущности «Универсам» и «Продукты», структура «Товар»

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

Или воспользуйтесь поиском по форуму:
Лестат
12 / 11 / 1
Регистрация: 24.09.2009
Сообщений: 188
03.02.2010, 19:49  [ТС]     структура,описание полинома #40
народ, никто не может написать умножение и деление ?плз, сдавать задачу уже скоро, я пробывал, но мои попытки не увенчались успехом . ПЛЗ, оч прошу
Yandex
Объявления
03.02.2010, 19:49     структура,описание полинома
Ответ Создать тему
Опции темы

Текущее время: 13:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru