Я пытаюсь вычислить эту непрерывную долю, но я не могу работать, однако программа может быть скомпилирована правильно, но вылетает, пока работает - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь заставить эту программу работать, так как она требует вычисления продолженной доли, введенной в связанный список.программа не выдает никакой ошибки, однако она всегда падает в середине.Кто-нибудь может мне помочь?

Задача состоит в том, чтобы просто сохранить программу в связанном списке и затем рассчитать ее, взяв параметр по ссылке.Это непрерывная дробь.

#include <iostream>
#include <cmath>
using namespace std;
struct node
{
    int data;
    node *next;
} *h=nullptr, *t=nullptr;

float calculation (int co)
{
    float a,c;
    node *b,*f;
    b->next = f;

    while(co != 0)
    {
        f = t;
        a = (float)f->data;
        a = 1/a;
        c = (float)b->data;
        a = c + a;
        t = b;
        co--;

    }

    return a;
}

void storedata (int& c)
{
    node *n = new node;
    n->data = c;
    n->next = nullptr;
    cout<<n->data<<endl;
    if(h==nullptr)
    {
        h=n;
        t=n;
        n=nullptr;
    }
    else
    {
        t->next=n;
        t=n;
    }

}
void formula (int a, int b, int co)
{
    int c;
    int z;
    while (co!=0)
    {
        c = a/b;
        storedata(c);
        z = b*c;
        z = a-z;
        a = b;
        b = z;
        co--;
    }
}

int main ()
{
    int a,b,c,z,co,d;
    float e;

    a = 123;
    b = 100;
    co = 5;
    formula (a,b,co);
    e = calculation(co);
    cout<<"cf1 = 123/100 ="<<e;
}

1 Ответ

0 голосов
/ 15 ноября 2018

Как минимум следующие проблемы (некоторые из которых будут обнаружены при включенных предупреждениях, например, -Wall):

  1. Использование неинициализированных указателей, например, node *b,*f; b->next = f;.Это вызывает неопределенное поведение.

  2. new, но нигде нет delete, поэтому утечки памяти будут присутствовать.

...