• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

was not declared in this scope

Object Storage Arubacloud
0 głosów
766 wizyt
pytanie zadane 8 sierpnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)

main.cpp

#include <iostream>
#include "result.h"
using namespace std;

int main()
{
    Result r(0,0);
    r.gatherWxPx();
    r.addition();
    return 0;
}

result.h

#include <iostream>

using namespace std;

class Result
{
private:

    int dWx; //degree of polynomial W(x)
    int dPx; //degree of polynomial P(x)
    int RWxPx;

public:

    void gatherWxPx(); //gathering polynomial W(x) from user
    Result(int, int);
    ~Result();

    void addition(); //adding polynomials
    void subtraction(); //subtracting polynomials
    void multiplication(); //multiplying polynomials
    void division(); //dividing polynomials
};

gather.cpp

#include <iostream>
#include "result.h"

using namespace std;

void Result::gatherWxPx()
{
    cout<<"Input degree of polynomial W(x): ";
    cin>>dWx;
    while (dWx<=0)
    {
        cout<<"Degree of polynomial has to be greater than 0, try again: ";
        cin>>dWx;
    }
    int HelperWx=dWx;

    cout<<"Input degree of polynomial P(x): ";
    cin>>dPx;
    while (dPx<=0)
    {
        cout<<"Degree of polynomial has to be greater than 0, try again: ";
        cin>>dPx;
    }
    int HelperPx=dPx;

    float *cWx;                  //
    cWx = new float [dWx+1];     //dynamically allocating arrays for W(x)

    cout<<"Input coefficients and constant of polynomial W(x): ";
    cout<<endl;

    for (int i=dWx; i>=0; i--)
    {
        cin>>cWx[i];     //gathering coefficients of W(x)
    }

    cout<<"W(x)= ";              //show W(x)
    for (int i=dWx; i>=0; i--)
    {
        if (cWx[i]>0 && i!=HelperWx)
        {
            cout<<"+";
        }
        if ((cWx[i]<0 && i==0 && i==dWx) || cWx[i]==-1)
        {
            cout<<"-";
        }
        if (cWx[i]!=0)
        {
            if ((cWx[i]!=1 && cWx[i]!=-1) || i==0)
            {
                cout<<cWx[i];
            }
            if (i!=0)
            {
                cout<<"x";
            }
            if (i!=0 && i!=1)
            {
                cout<<i;
            }
        }
        else if (cWx[i]==0)
        {
            HelperWx--;
        }
        if (i<=0 && HelperWx==-1)
        {
            cout<<"0";
        }
    }

    cout<<endl;

   // delete [] cWx;

    float *cPx;               //
    cPx = new float [dPx+1];  //dynamically allocating arrays for P(x)
                              //

    cout<<"Input coefficients and constant of polynomial P(x): ";
    cout<<endl;

    for (int i=dPx; i>=0; i--)
    {
        cin>>cPx[i];      //gathering coefficients of P(x)
    }

    cout<<"P(x)= ";             //show P(x)
    for (int i=dPx; i>=0; i--)
    {
        if (cPx[i]>0 && i!=HelperPx)
        {
            cout<<"+";
        }
        if ((cPx[i]<0 && i==0 && i==dPx) || cPx[i]==-1)
        {
            cout<<"-";
        }
        if (cPx[i]!=0)
        {
            if ((cPx[i]!=1 && cPx[i]!=-1) || i==0)
            {
                cout<<cPx[i];
            }
            if (i!=0)
            {
                cout<<"x";
            }
            if (i!=0 && i!=1)
            {
                cout<<i;
            }
        }
        else if (cPx[i]==0)
        {
            HelperPx--;
        }
        if (i<=0 && HelperPx==-1)
        {
            cout<<"0";
        }
    }
    cout<<endl;
   // delete [] cPx;
}



Result::Result(int Wx, int Px)
{
    dWx=Wx;
    dPx=Px;
}

Result::~Result()
{
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}

addition.cpp

#include <iostream>
#include "result.h"

using namespace std;

void Result::addition()
{

    if (dWx>dPx)
    {
        RWxPx=dWx;
        float *AWxPx;
        AWxPx = new float [RWxPx+1];

        for (int i=dWx; i>dPx; i--)
        {
            AWxPx[i]=cWx[i];
        }
        for (int i=dWx; i>dPx; i--)
        {
            cout<<AWxPx[i];
            cout<<" ";
        }
    }
    else if (dWx<dPx)
    {
        RWxPx=dPx;
        float *AWxPx;
        AWxPx = new float [RWxPx+1];
    }

}

Chodzi glownie o plik addition.cpp, mam tam cWx was not declared in this scope, wiem, że go w tej petli nie ma ale jak zrobic to tak ze komputer odczyta cWx[] ktore wczesniej wprowadzil uzytkownik ale jest w innym pliku no i nie w tej petli albo warunku sam nie wiem? 

Poza tym czy moj zamysl jest dobry:

main:

1.Wywoluje konstruktor klasy Result

2.Wywoluje gatherWxPx w celu pobrania od uzytkownika potrzebnych danych

3.robie Switcha w ktorym sa wszystkie operacje do wyboru (dodawanie, odejmowanie, mnozenie, dzielenie)

4.Wywoluje destruktor ktory niszczy wszystkie dynamicznie zaalokowane tablice

Nie moge znalezc odpowiedzi na to pytanie bo na filmie Miroslawa Zelenta tam ten destruktor nic nie robil i byl wywolany przed innymi funkcjami a ja bede mial w innych funkcjach zaalokowane dynamicznie jeszcze kilka tablic i sie zastanawiam gdzie go umiescic.

 

komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)

@jankustosz1, a jeszcze jedno, czy taki zarys programu na sens:

1.wywolanie konstruktora (w ogole wydaje mi sie bezuzyteczny ale kazali robic)

2.wywolanie gatherWxPx 

3.Switch z 4 operacjami (dodawanie, odejmowanie, mnozenie i dzielenie)

4.Destruktor (zniszczenie wszystkich dynamicznie zaalokowanych tablic)

Pytam bo nie wiem czy moge tak zrobic ze zniszcze je w destruktorze po przeleceniu calego programu, ale w sumie bez sensu byloby usuwac cWx i cPx przed wykonaniem w ogole jakiejs operacji, i zreszta chyba niemozliwe tak?

komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
1) Konstruktor przyjmujący te 2 argumenty wymusza by je podać, jest to dobre lub złe, zależnie od sytuacji. Z tego co mi się wydaje to i tak te zmienne nadpisujesz w gatherWxPx, więc nie ma to zbytniego sensu.

2) Ja bym tak tego nie robił. W sensie lepiej oddzielić logikę od pobierania danych od użytkownika. Wypisywanie i wczytywanie danych powinno być gdzie indziej, ta metoda powinna przyjmować dane jako argumenty i zwracać wyniki. Przydała być się klasa Wielomian w której już metoda wczytująca miała by sens.

3) Kodu nie powinno się powtarzać, a chyba powtórzyłeś wczytywanie wielomianu.

4) Nie widzę, byś te tablice usuwał. Btw. pierwsze sprawdź czy wogóle były stworzone, bo funkcja w której się tworzą może nie zostać wywołana.
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
1)Czyli wywalic konsturktor? A moze funkcje gatherWxPx dac jako konstruktor?

2)Nie rozumiem ;/

3)Gdzie?

4)Tzn w gather.cpp mam to w komentarzach bo wlasnie sie zastanawialem

No i program nie jest skonczony, duzo jest niedopisane, dlatego pytam jak to zrobic najoptymalniej

Dzieki za cala pomoc ja na dzisiaj koncze, odczytam pewnie jutro i wroce do pisania
1
komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
0) Klasa o nazwie Result wiele nie mówi w tym przypadku.

1, 2), 4) Hmmm. Pierwsze zrób klasę Polynomial która będzie posiadała tablicę współczynników(oczywiście z destruktorem, no chyba, że użyjesz std::vector) z metodą do wczytania wielomianu oraz jego wypisania. Następnie zależnie co chcesz mieć w tej klasie możesz zmienić nazwę z Result na PolynomialsUtility, gdzie będzie metoda przyjmująca dwa wielomiany i zwracająca na ich podstawie jakiś wynik. Wtedy oddzielisz też narzędzie do wielomianów od operacji na konsoli i będziesz mógł tego użyć np w aplikacji okienkowej.

3) gatherWxPx - Wczytujesz i wypisujesz wielomian P i W dokładnie w ten sam sposób, czemu więc nie jest to w jakieś pomocniczej funkcji.
komentarz 9 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)

3)Nie do konca bo dla Wx mam petle od dWx do 0 a w Px mam petle od dPx do 0, ogolnie moglbym w sumie nazwac inaczej te wielomiany np polynomial1 i polynomial2 i wtedy w petli od 1 do 2 umiescic to wyswietlanie w taki sposob:

for (int i=1; i>=2; i++)
{
for (int j=polynomial+i; j>=0; j--)   //nie wiem jak sie robi konkatenacje w c++
}

ale wtedy chyba bym nie dal rady tego zrobic zeby wyswietilo mi sie najpierw W(x)=to co wyjdzie z pierwszej iteracji a potem P(x)=to co wyjdzie z drugiej iteracji

124) 1 klasa Polynomial dla 2 wielomianow czy osobno? Czy jak dam destruktor to on mi nie skasuje wprowadzonych danych przed jakas operacja? W klasie polynomialUtilities mialbym 4 metody: dodawanie, odejmowanie, mnozenie i dzielenie, a nie mialbym zadnych atrybutow, mozna tak?

"Wtedy oddzielisz też narzędzie do wielomianów od operacji na konsoli i będziesz mógł tego użyć np w aplikacji okienkowej." - Tego nie rozumiem

 

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

–1 głos
1 odpowiedź 633 wizyt
pytanie zadane 23 sierpnia 2020 w C i C++ przez Drożdżówka Obywatel (1,870 p.)
0 głosów
2 odpowiedzi 521 wizyt
pytanie zadane 4 maja 2020 w C i C++ przez kwazi Nowicjusz (120 p.)
0 głosów
1 odpowiedź 670 wizyt
pytanie zadane 23 października 2019 w C i C++ przez darekdede1995 Nowicjusz (180 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...