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

wielomiany c++

VPS Starter Arubacloud
0 głosów
2,448 wizyt
pytanie zadane 4 maja 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)
#include <iostream>

using namespace std;

int stopienPX, stopienQX, wybor;


int main()
{
    cout << "Jakiego stopnia ma byc wielomian P(x)?: ";
    cin>>stopienPX;
    stopienPX+=1;
    int *IlewspolczynnikowPX;
    IlewspolczynnikowPX = new int [stopienPX];

    cout<<"Wprowadz wspolczynniki przy odpowiednich potegach"<<endl;
    cout<< "Oraz jako ostatnia cyfre wyraz wolny!: "<<endl;
    for (int i=0; i<stopienPX; i++)
    {
        cin>>IlewspolczynnikowPX[i];

    }

    cout<<"Jakiego stopnia ma byc wielomian P(x)?: ";
    cin>>stopienQX;
    stopienQX+=1;
    int *IlewspolczynnikowQX;
    IlewspolczynnikowQX = new int [stopienQX];
    cout<<"Wprowadz wspolczynniki przy odpowiednich potegach!: "<<endl;
    cout<< "Oraz jako ostatnia cyfre wyraz wolny!: "<<endl;
    for (int i=0; i<stopienQX; i++)
    {
        cin>>IlewspolczynnikowQX[i];
    }

    cout<<"1.Dodawanie"<<endl;
    cout<<"2.Odejmowanie"<<endl;
    cout<<"Wybierz co chcesz zrobic: ";
    cin>>wybor;

    switch(wybor)
    {
    case 1:
        {
            if (stopienPX==stopienQX)
            {
             for (int i=0; i<stopienPX; i++)
            {
             cout<<IlewspolczynnikowPX[i]+IlewspolczynnikowQX[i]<<" ";
            }
            }
            if (stopienPX>stopienQX)
            {
             int inne=stopienPX-stopienQX;
            stopienQX+=inne;



                for (int n=inne; n<stopienQX; n++)

                {
                  IlewspolczynnikowQX[n]=    ???? //tutaj nie wiem
                }

                for (int i=0; i<inne; i++)
                {
                    IlewspolczynnikowQX[i]=0;  //tutaj przypisuje 0 dla pierwszych np 2 tablic jezeli roznica pomiedzy stopniami wielomianow =2
                }

            }


        }
        break;

    }

    delete [] IlewspolczynnikowPX;
    delete [] IlewspolczynnikowQX;

    return 0;
}

Dzisiaj rankiem sobie wpadłem na pomysł, żeby napisać taki kalkulator wielomianowy bo skonczylem sie akurat tego uczyc, no i stanalem na dodawaniu bo dla tych samych stopni wielomianow dziala, ale jak stopnie sie roznia to nie, no i przezcytalem na necie zeby wstawic 0 w tablicach przy odpowiednich potegach ale nie moge wymyslic sposobu, cos probowalem ale sie zatrzymalem, prosze o pomoc

tldr 

Jak wstawic wartosci do poczatkowych do tablic po tym jak sa juz one wypelnione jakas liczba, tzn chce je przesunac przyklad:

[4]=[2,3,4,5}  ---> [8]={0,0,0,0,2,3,4,5}

2 odpowiedzi

+1 głos
odpowiedź 4 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
uzywajac tablic uzykasz to tylko przepisujac sama tablice, lub zmieniajac w niej pozycje, czyli zmieniasz ostatnia pozycje z 1, pozniej ta ostatnia z druga itd. Duzo zabawy i troche bez sensu, gdy mozna uzyc:

std::list i push_front

std::vector insert

std::map i tez insert.

Przy okazji pozbywasz sie zabawy na wskaznikach i uzywasz dynamicznych kontenerow, ktore sa lepsze, bo jak zapomnisz zwolnic pamiec lub bedziesz dzialal na wskaznku i napiszesz adres, to tez pojawia sie problem
komentarz 4 maja 2020 przez lujasjeden Użytkownik (860 p.)
Kurde, możlwe, że mnie nie zrozumiales albo ja ciebie bo nie chodzi mi zeby zamienic miejscami na odwrot tylko zeby majac np 5 tablic (5 wspolczynnikow wielomianu) a chce miec 7 (bo bede dodawal/odejmowal wielomian 5stopnia do wielomian 7stopnia) w ktorych pierwsze 2 beda mialy wartosc 0 a reszta (3,4,5,6,7) bedzie miala wartosci starych 1,2,3,4,5. Dla np przykladu gdzie mialbym dodawac wielomian 3 stopnia do 10 stopnia to pierwsze 7 tablic wypelnione bylyby zerami a ostatnie 3 mialyby wartosci takie same jak mialy pierwsze trzy na poczatku. Mam nadzieje ze teraz mnie rozumiesz lub moze to ja nie rozumiem Ciebie jesli tak to prosze o wyjasnienie. Co do tych 3 zapisow std... to pierwszy raz to widze zreszta no duzo jeszcze nie umiem ale chetnie sie naucze wiec jezeli moglbys wytlumaczyc na jakiej zasadzie to by dzialalo najlepiej na tym przykladzie to bylbym wdzieczny
1
komentarz 4 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)

Mowiles o wyplenianiu dnamicznych, dlatego podalem dynamiczne wektory, ktore umowzliwiaja Ci wpisywanie wartosci na dowolna pozycje, bez zabawy z przepisywaniem i wskaznikami.

Skoro wiesz, ze 1. wielomian PX bedzie 10 stopnia, a drugi bedzie PQ 3. stopnia, to wtedy mozesz dla obu zarezwerowac tyle samo miejsca, tzn. w tym przypadku 10, bo PX jjest wiekszy. I w tym momencie mozezs tez latwo obliczyc, ile miejsc potrzebujesz zeby go uzupelnic, czyli 10 - 3 = 7. Wiec pierwsze 7 elementow uzupelniasz 0, a kolejne 3 danymi od usera.

std::cin >> stopienPX;
    std::cin >> stopienQX;
    
    if (stopienPX >= stopienQX) {
        //tab [stopienPX];
    } else {
        //tab [stopienQX];
    }

Czyli najpierw sprawdzasz ile potzrbujesz wyrazow ogolnie dla obu tablic, zeby mialy taka sama wielkosc.

komentarz 4 maja 2020 przez lujasjeden Użytkownik (860 p.)
cout<<"Podaj stopien PX:
cin>>PX;
PX+=1;
int *WPX;
WPX = new int [PX];
cout<<"Podaj stopien WX: ";
cin>>WX;
WX+=1;
int*WWX;
WWX = new int [WX];

int roznica;
if (PX>WX)
{
 roznica=PX-WX; 
}

for (int i=0; i<PX; i++)
{
 cin>>PWX[i];
}

for (int i=0; i<roznica; i++)
{
 WWX[i]=0;
}

for (int i=roznica; i<PX; i++)
{
 cin>>WWX[i];
}

if (WX>PX)
To samo tylko na odwrot

Ok napisalem w ten sposob na szybko takie cos ma sens?? Czy uzywac tego List

A zaciekawił mnie bardzo temat tych wektorow ktore moge zmieniac wartosc dowolnej tablicy, mialem pomysl nad zrobieniem tetrisa ale limitowaly mnie umiejetnosci a to tak na pierwszy rzut oka mogloby mi sie przydac no ale to bym musial sie dluzej zastanowic nad tym

1
komentarz 4 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
Tetris jest slabym pryzkladem dla wektorow, bo tam wielkosc planszy jest stala i sie nie zmienia.

Odpal ten kod i zobacz co uzyskasz. Skad wiesz, ze WX bedzie mniejszy od PX? Nie wiesz, dlatego musisz sprawdzic ze wielkosci, zeby moc zarezerwowac taka sama ilosc miejsc. Jezeli teraz WX bedzie wiekszy od PX, to masz za malo elementow w PX, a na odwrot za malo w WX.
komentarz 4 maja 2020 przez lujasjeden Użytkownik (860 p.)
no dlatego sprawdzam if W(x)>P(x) to sie dzieje kod co napisalem a if P(x)>W(x) to to samo tylko odwrotnie no juz nie pisalem dwa razy tego samego dla przykladu co pisalem "na kolanie" i zaraz napisze do w konsoli i zobacze czy bedzie ok, a co do tetrisa to chodzi mi o to ze (wkleje moje notatki z notatnika)

Buduje planszę z tablic np.int pole[20][10]; każde pole to jeden kwadracik, wpisuję do każdego wartość 0 (wczytuje zdjęcie pustego pola dla 0 i zdjęcie kolorowego kwadratu jako kszałtu dla 1 i 2), robię Timer, który trigeruje się co np. 20 sekund i losuje on kształt i w zależności od tego co wylosuje trigeruje Timer odpowiedniego kształtu, załóżmy, że wylosował on kwadrat 2x2 to ustawia on wartosci 1 w polach [0][4], [0][5], [1][4], [1][5] i co np. sekundę zmienia wartość na 1 o dwie komorki niżej po prostu, że pierwsza iteracja to jedynki w 1 i 2 rzędzie, w drugiej iteracji 3,4 rząd, trzeciej 5,6 itd. dopóki któreś z komórek w ostatnim rzędzie = 1.

No ale limituje mnie to ze jak juz opadnie ksztalt czyli bedzie jakby na samym dole to nie w calym wierszu tylko w 2 kolumnach np i wtedy jak kolejny spada to moze spasc i do ostatniego wiersza i do o jednego wyzej no ogolnie sobie probowalem jakies petle pisac zeby to ogarnac no ale glownie nie moglem nic wymyslic co by obeszlo to co napisalem wczesniej, moze wroce do tego jak bede umial wiecej
komentarz 4 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
yhm przy kazdy klocku sprawdzasz jego pozycje na planszy i w momencie ktorym juz na niej lezy, sprawdzasz czy dany wiersz nie jest wypelniony jednykami. Esli tak to uswasz z tablicy ten wiersz i zrzucasz wszytsko co jest wyzej nizej.

sprawdz na githubie, jak mozesz optymalnie zrobic kolizje w tetrisie
komentarz 4 maja 2020 przez lujasjeden Użytkownik (860 p.)

kurcze wiem ale chodzi mi bardziej o opadanie bo pierwszy klocek spadnie wiem i zalozmy ze spadnie idealnie na srodku na dole, to nastepny moze juz spasc na niego jakby i jak to zapisac wtedy ze on ma sie zatrzymac o jedno wyzej niz koniec planszy, w petli while jakos ze dopoki tablica sie rowna 0 to ma zmieniac pozycjami talbice?? zobacze na githubie dzieki

a wracajac do Wielomianow to:

#include <iostream>

using namespace std;

int sWX, sPX, wybor;

int main()
{
    cout <<"Podaj stopien wielomianu W(x): ";
    cin>>sWX;
    sWX+=1;
    int *wWX;
    wWX = new int [sWX];

    cout<<"Podaj stopien wielomianu P(x): ";
    cin>>sPX;
    sPX+=1;
    int *wPX;
    wPX = new int [sPX];

    int roznica;
    if (sWX>sPX)
    {
        roznica=sWX-sPX;
        cout<<"Wypisz wspolczynniki wielomianu W(x) przy odpowiednich potegach"<<endl;
        for (int i=0; i<sWX; i++)
        {
            cin>>wWX[i];
        }
        cout<<"Wypisz wspolczynniki wielomianu P(x) przy odpowiednich potegach ";
        for (int i=0; i<roznica; i++)
        {
            wPX[i]=0;
        }
        for (int i=roznica; i<wPX; i++) // TUTAJ!!!
        {
            cin>>wPX[i];
        }
 

 

tam gdzie napisalem TUTAJ!!! mam taki blad:

|error: ISO C++ forbids comparison between pointer and integer [-fpermissive]|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
 

komentarz 4 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
1. sprawdzasz jeo pozyje, jesli na jego drodze jest jakis klocek, to musisz wtedy wykryc kolizje, czyli w przejsciu petli sprawdzasz czy dotknal klocka. Jesli tak, to nie zmieniasz juz jego pozycji. Mowie wejdz na githuba, tam jest multum algorytmow w c/c++, python, pascal itd.

2.
Bo podajesz pointer na tablice, amiast wielkosc tablicy. Czyli probujesz przypisac pointer na tablice do inta, albo raczej porownac go z intem
komentarz 4 maja 2020 przez lujasjeden Użytkownik (860 p.)
To co zrobic? Zaalokowac dynamicznie tyle tablic ile jes rowna roznica i wtedy w petle wpisac te tablice??
komentarz 4 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
Jezeli zrobisz wilekosc roznicy, a masz wielomian 10 stopnia i 8 stopnia, to bedziesz mial 2 elementy. Ja bym proponowal napisac tu funkcje, np do wypelniania tablicy
komentarz 4 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
#include <iostream>

void wypelnij (int * tab, int wielkosc, int roznica) {
        for (int j = 0; j < roznica -1; j++) {
            tab [j] = 0;
        }
        for (int k = roznica; k < wielkosc; k ++) {
            std::cin >> tab[k];
        }
}
void wypisz (int * tab, int wielkosc) {
    for (int l = 0; l < wielkosc; l++) {
        std::cout << tab[l] << " ";
    }
}

int main() {
    int sWX, sPX, wybor;

    std::cout << "Podaj stopien wielomianu W(x): ";
    std::cin >> sWX;
    std::cout << "Podaj stopien wielomianu P(x): ";
    std::cin >> sPX;
    int roznica = 0;
    int *wPx;
    int *wWx;
    if (sWX >= sPX) {
        wWx = new int [sWX];
        wPx = new int [sWX];
        roznica = sWX - sPX;
        wypelnij(wWx, sWX, roznica);
        wypelnij(wPx, sWX, roznica);
    } else {
        wWx = new int [sPX];
        wPx = new int [sPX];
        roznica = sPX - sWX;
        wypelnij(wWx, sPX, roznica);
        wypelnij(wPx, sPX, roznica);
        wypisz(wWx, sPX);
        wypisz(wPx, sPX);
    }

}

Cos w tym sytlu, ale daleko tu do perfekcji i sporo do poprawy

komentarz 4 maja 2020 przez lujasjeden Użytkownik (860 p.)
tzn no dla twojego przykladu dwa pierwsze elementy- for (int i=0; i<ta tablica dla roznicy; i++)

zostanie wypelniona 0, a for (int i=tablica roznicy; i<sWX; i++) pobiore wartosci cinem, i bede mial pierwsze dwie rowne 0 a reszta jakie chce

czy nie?
komentarz 4 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
czemu 2? to zalezy o czym mowimy. Jesli roznica miedzy nimi to 5, to pierwszych 5 zostanie wypelnionych zerami, jesli 10 to pierwszych 10. Aczkolwiek chyba zauwazylem maly blad w tej petli, ktory sam musisz porawic. Mianowicie dla obu wartosci zostana wypelnione pola w tablicy zerami. Dlatego pomysl jak to rozwiazac, a ja poki co spadam, moze dzis jeszcze bede nie wiem
komentarz 4 maja 2020 przez lujasjeden Użytkownik (860 p.)
edycja 4 maja 2020 przez lujasjeden
zastanowie sie nad tym pozniej bo teraz paruje mi czerep
komentarz 4 maja 2020 przez lujasjeden Użytkownik (860 p.)

Dla kodu ponizej mam to:

: 'i' was not declared in this scope|

|error: 'wWX' was not declared in this scope|

|error: 'wPX' was not declared in this scope|

#include <iostream>

using namespace std;

int sWX, sPX, wybor;

int roznica;
int main()
{
    cout <<"Podaj stopien wielomianu W(x): ";
    cin>>sWX;
    sWX+=1;


    cout<<"Podaj stopien wielomianu P(x): ";
    cin>>sPX;
    sPX+=1;

    if (sWX>sPX) //zamien na wartosc bezwzgledna potem
    {
        roznica=sWX-sPX;
    }
    else if (sPX>sWX)
    {
        roznica=sPX-sWX;
    }


    if (sWX>sPX)
    {
    sPX=sWX;
    int *wWX;
    wWX = new int [sWX];

    for (int i=0; i<sWX; i++)
    {
        cin>>wWX[i];
    }


    int *wPX;
    wPX = new int [sWX];

    for (int i=0; i<roznica; i++)
    {
        wPX[i]=0;
    }

    for (int i=roznica; i<sWX; i++)
    {
        cin>>wPX[i];
    }


    }
//----------------------------------------------------------------- jeszcze if px>wx i wx==px

    cout<<"1.Dodawanie"<<endl;
    cout<<"2.Odejmowanie"<<endl;
    cout<<"Wybierz co chcesz zrobic: ";
    cin>>wybor;

    switch(wybor)
    {
    case 1:
        {
         for (i=0; i<sWX; i++)
         {
             cout<<wWX[i]+wPX[i];
         }
        }
    }





    return 0;
}

a jak dam switcha na gorze w ifie to mam to:

|error: name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]|

#include <iostream>

using namespace std;

int sWX, sPX, wybor;

int roznica;
int main()
{
    cout <<"Podaj stopien wielomianu W(x): ";
    cin>>sWX;
    sWX+=1;


    cout<<"Podaj stopien wielomianu P(x): ";
    cin>>sPX;
    sPX+=1;

    if (sWX>sPX) //zamien na wartosc bezwzgledna potem
    {
        roznica=sWX-sPX;
    }
    else if (sPX>sWX)
    {
        roznica=sPX-sWX;
    }


    if (sWX>sPX)
    {
    sPX=sWX;
    int *wWX;
    wWX = new int [sWX];

    for (int i=0; i<sWX; i++)
    {
        cin>>wWX[i];
    }


    int *wPX;
    wPX = new int [sWX];

    for (int i=0; i<roznica; i++)
    {
        wPX[i]=0;
    }

    for (int i=roznica; i<sWX; i++)
    {
        cin>>wPX[i];
    }

    switch(wybor)
    {
    case 1:
        {
         for (i=0; i<sWX; i++)
         {
             cout<<wWX[i]+wPX[i];
         }
        }
    };


    }


    return 0;
}

Dac sobie spokoj z tym sposobem? Czy jestem to w stanie w ten sposob napisac jak ja to mysle?

komentarz 4 maja 2020 przez lujasjeden Użytkownik (860 p.)
#include <iostream>
#include <cmath>
using namespace std;

int sWX, sPX, wybor;

int roznica;
int main()
{
    cout <<"Podaj stopien wielomianu W(x): ";
    cin>>sWX;
    sWX+=1;


    cout<<"Podaj stopien wielomianu P(x): ";
    cin>>sPX;
    sPX+=1;

    roznica=abs(sWX-sPX);

    if (sWX>sPX)
    {
     int *wWX;
     wWX = new int [sWX];
     for (int i=0; i<sWX; i++)
     {
         cin>>wWX[i];

     }

     int *wPX;
     wPX = new int [sWX];
     for (int i=0; i<roznica; i++)
     {
         wPX[i]=0;
     }
     for (int i=roznica; i<sWX; i++)
     {
         cin>>wPX[i];
     }
     for (i=0; i<sWX; i++)
     {
         cout<<wWX[i]+wPX[i];
     }
    }
    return 0;
}

No dla takiego kodu to samo:

|error: name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]|

Potrzebuje innego sposobu aby wpisac te zera na poczatek, chyba ze robie cos tutaj zle co moge poprawic i by dzialalo?

Da sie jakos polaczyc te dwie petle? Bo rozumiem ze chodzi tu o to ze ten iterator nie moze sie zmieniac ze nie moze byc w dwoch petlach odzielnie zeby dzialal dla jednego rownania potem

komentarz 4 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
#include <iostream>

void wypelnij (int * tab, int wielkosc, int roznica) {
    for (int j = 0; j < roznica -1; j++) {
        tab [j] = 0;
    }
    for (int k = roznica; k < wielkosc; k ++) {
        std::cin >> tab[k];
    }
}
void wypelnij (int * tab, int wielkosc) {
    for (int k = 0; k < wielkosc; k ++) {
        std::cin >> tab[k];
    }
}
void wypisz (int * tab, int wielkosc) {
    for (int l = 0; l < wielkosc; l++) {
        std::cout << tab[l] << " ";
    }
}

int main() {
    int sWX, sPX, wybor;

    std::cout << "Podaj stopien wielomianu W(x): ";
    std::cin >> sWX;
    std::cout << "Podaj stopien wielomianu P(x): ";
    std::cin >> sPX;
    int roznica = 0;
    int *wPx;
    int *wWx;
    if (sWX >= sPX) {
        wWx = new int [sWX];
        wPx = new int [sWX];
        roznica = sWX - sPX;
        wypelnij(wWx, sWX);
        wypelnij(wPx, sWX, roznica);
    } else {
        wWx = new int [sPX];
        wPx = new int [sPX];
        roznica = sPX - sWX;
        wypelnij(wWx, sPX, roznica);
        wypelnij(wPx, sPX);
    }

}

To jest wyplenianie tylko i wylacznie tych tablic. Wiec sama logika myslenia musi sie odbyc inaczej. Dodam tylko, ze jest to wedlug mnie maefektywny sposob i bym go poprawil, nie wiemdo konca jak ale by to zrobil

komentarz 5 maja 2020 przez TOWaD Mądrala (5,700 p.)

@lujasjeden, 

To co powiedzał , DragonCoder, kontenery w większości przypadków są lepsze

a tu kod jaki pytałeś na początku, suma wielomianów rożnego stopnia:

#include <iostream>
#include <vector>

using namespace std;

using vi=vector<int>;
using viritr=vector<int>::reverse_iterator;

int main() {
    vi vQX= {1,2,3,4,5};
    vi vPX= {1,2,3,4,5,6,7,8,9};

    int sizesum =min(vQX.size(),vPX.size());
    vi sum(sizesum);

    viritr ritQX=vQX.rbegin();
    viritr ritPX=vPX.rbegin();


    for (; ritQX!=vQX.rend()&&ritPX!=vPX.rend(); ritQX++,ritPX++) sum.at(--sizesum)=*ritQX+*ritPX;
  
    cout<<'{';
    for(const auto &x:sum ) cout<<x<<',';
    cout<<'}'<<endl;
    return 0;
}

(to samo da się zrobić z new tylko wskaźnik na ostatni element)

komentarz 5 maja 2020 przez lujasjeden Użytkownik (860 p.)
edycja 5 maja 2020 przez lujasjeden

@DragonCoder, nie rozumiem:

1.Co to jest wielkość, nie ma podanej zadnej wartosci, jak moze dzialac w petli w ogole

2.Pierwsze wypelnij() to wypelnianie tablic wielomianu o nizszym wspoloczynniku? Dlaczego roznica-1 a nie roznica

3.Czy moglbys dodac komenatrze jakies do tego zapisu co sie tutaj wykonuje:

wypelnij(wWx, sWX);

wypelnij(wPx, sWX, roznica);

 

4.Jak chce wyswietlic wyniki np dodawania po wpisaniu:

for (int i=0; i<sWX; i++)
    {
        cout<<wWX[i]+wPX[i];
    }

Wychodza totalne glupoty

komentarz 5 maja 2020 przez lujasjeden Użytkownik (860 p.)
edytuje bo napisalem glupote XD
1
komentarz 6 maja 2020 przez DragonCoder Nałogowiec (36,500 p.)
1. Wielkosc jest uzywane i chodzi o to, jak duza jest tablica, to jest wlasnie minus inicjalizacji dynamicznych tablic per hand, zamiast uzywania gotowych wektorow, bo musisz przekazac jej wielkosc. No chyba ze uzyjesz size of jeszcze

2. Bo zakladajac ze roznica to 4, to chce uzupelnic pola w tablicy 0, 1, 2, 3. Wiec wielkosc -1 to zaczynam liczyc od zera. Btw nie mowilem ze kod jest idealny, to byl raczej pokaz jak moglbys to rozwiazac, ja osbiscie szedlbym w kontenery, bo maja juz gotowe funkcje a przyklad dostales tu w kom lub nizej w odp

3. komentarze sa moim zdaniem zbedne bo widac co robi ta funkcja, btw. nazwy sa do dupy, bo bylo pisane od tak, powinny byc po angielsku i miec znaczenie. No ale jedna wypelnia tablice danymi tylko do user, a druga uzupelnia tabele na poczatku zerami, tzn wyrownuje ta roznice

4. nie wiem, bo nie sprawdzalem, calego kodu tez nie mam
komentarz 11 maja 2020 przez lujasjeden Użytkownik (860 p.)

Ok wlasciwie po tygodniu sprobowalem sie jeszcze raz i wyszlo mi, nie uzywalem kontenerow szczerze mowiac brak mi jeszcze podstaw i wole najpierw je przeorac, no a wstawie kodzik moze komus sie kiedys przyda, mam na 3 ify px>wx wx>px i wx==px bo inaczej mi nie wychodzilo kod na pewno nie jest optymalny ale dziala 

#include <iostream>
#include <cstdlib>
#include <stdio.h>

using namespace std;

int sWx, sPx, roznica, roznica2, wybor;

int main()
{
for(;;)
{
    cout <<"Podaj stopien wielomianu W(x): ";
    cin>>sWx;
    sWx+=1;


    cout<<"Podaj stopien wielomianu P(x): ";
    cin>>sPx;
    sPx+=1;

    if (sWx>sPx)
    {
        roznica=sWx-sPx;
        int *wWx;
        wWx = new int [sWx];

        int *wPx;
        wPx = new int [sWx];

    cout<<"wspolczynniki wielomianu W(x): "<<endl;
    for (int i=0; i<sWx; i++)
    {
        cin>>wWx[i];
    }
    cout<<"wspolczynniki wielomianu P(x): "<<endl;
    roznica2=roznica;
    for (int i=0; i<roznica; i++)
    {
        wPx[i]=0;
    }
    for (int i=roznica2; i<sWx; i++)
    {
        cin>>wPx[i];
    }

    cout<<"1.Dodawanie"<<endl;
    cout<<"2.Odejmowanie"<<endl;
    cout<<"3.Wyjdz"<<endl;
    cout<<"Wybierz opcje: ";
    cin>>wybor;

    switch(wybor)
    {
    case 1:
        {
         for (int i=0; i<sWx; i++)
         {
          cout<<wWx[i]+wPx[i];
          cout<<",";
         }
        }
        break;
    case 2:
        {
         for (int i=0; i<sWx; i++)
         {
          cout<<wWx[i]-wPx[i];
          cout<<",";
         }
        }
        break;
        case 3:
        {
            exit(0);
        }
        break;

        default: cout<<"Nie ma takiej opcji w menu!";
    }
    getchar();getchar();
    system("cls");
    }


    if (sPx>sWx)
    {
        roznica=sPx-sWx;
        int *wWx;
        wWx = new int [sPx];

        int *wPx;
        wPx = new int [sPx];


    cout<<"wspolczynniki wielomianu W(x): "<<endl;
    roznica2=roznica;
    for (int i=0; i<roznica; i++)
    {
        wWx[i]=0;
    }
    for (int i=roznica2; i<sPx; i++)
    {
        cin>>wWx[i];
    }

    cout<<"wspolczynniki wielomianu P(x): "<<endl;
    for (int i=0; i<sPx; i++)
    {
        cin>>wPx[i];
    }

    cout<<"1.Dodawanie"<<endl;
    cout<<"2.Odejmowanie"<<endl;
    cout<<"3.Wyjdz"<<endl;
    cout<<"Wybierz opcje: ";
    cin>>wybor;

    switch(wybor)
    {
    case 1:
        {
         for (int i=0; i<sPx; i++)
         {
          cout<<wWx[i]+wPx[i];
          cout<<",";
         }
        }
        break;
    case 2:
        {
         for (int i=0; i<sPx; i++)
         {
          cout<<wWx[i]-wPx[i];
          cout<<",";
         }
        }
        break;
         case 3:
        {
            exit(0);
        }
        break;

        default: cout<<"Nie ma takiej opcji w menu!";
     }
     getchar();getchar();
     system("cls");
    }


   if (sPx==sWx)
    {

        int *wWx;
        wWx = new int [sWx];

        int *wPx;
        wPx = new int [sPx];


    cout<<"wspolczynniki wielomianu W(x): "<<endl;
    for (int i=0; i<sWx; i++)
    {
        cin>>wWx[i];
    }

    cout<<"wspolczynniki wielomianu P(x): "<<endl;
    for (int i=0; i<sPx; i++)
    {
        cin>>wPx[i];
    }

    cout<<"1.Dodawanie"<<endl;
    cout<<"2.Odejmowanie"<<endl;
    cout<<"3.Wyjdz"<<endl;
    cout<<"Wybierz opcje: ";
    cin>>wybor;

    switch(wybor)
    {
    case 1:
        {
         for (int i=0; i<sPx; i++)
         {
          cout<<wWx[i]+wPx[i];
          cout<<",";
         }
        }
        break;
    case 2:
        {
         for (int i=0; i<sPx; i++)
         {
          cout<<wWx[i]-wPx[i];
          cout<<",";
         }
        }
        break;
    case 3:
        {
            exit(0);
        }
        break;

        default: cout<<"Nie ma takiej opcji w menu!";
     }
     getchar();getchar();
     system("cls");
   }



}
    return 0;
}

i dodam sobie mnozenie i dzielenie

0 głosów
odpowiedź 5 maja 2020 przez TOWaD Mądrala (5,700 p.)
#include <iostream>

int *newSum (int* QX,int QXsize,int* PX, int PXsize) {
    int minsize=std::min(QXsize,PXsize);
    int *sum = new int [minsize];
    while (minsize) {
        sum[--minsize]=QX[--QXsize]+PX[--PXsize];
    }
    return sum;
}

void sumSecondToFirst (int* QX,int QXsize,int* PX, int PXsize) {

    while (QXsize&&PXsize) {
        QX[--QXsize]+=PX[--PXsize];
    }
    return;
}
using namespace std;
int main() {
    int QXsize=5;
    int PXsize=9;
    int* QX =new int[QXsize] {1,2,3,4,5};
    int* PX = new int[PXsize] {1,2,3,4,5,6,7,8,9};
    int* QXplusPX;

    QXplusPX =newSum (QX,QXsize,PX,PXsize);
    for (int i=0; i<std::min(QXsize,PXsize); i++) cout<<QXplusPX[i]<<',';
    cout<<endl;

    sumSecondToFirst (QX,QXsize,PX,PXsize);
    for (int i=0; i<QXsize; i++) cout<<QX[i]<<',';
    cout<<endl;

    sumSecondToFirst (PX,PXsize,QX,QXsize);
    for (int i=0; i<PXsize; i++) cout<<PX[i]<<',';
    cout<<endl;

    delete[]QX;
    delete[]PX;
    delete[]QXplusPX;
}

 

komentarz 5 maja 2020 przez lujasjeden Użytkownik (860 p.)
forestG narazie sproboje zastosowac to co napisze Dragon bo juz jakby myslami jestem w tym a tu patrze na te zapisy to nic nie rozumiem, a nie ogarne dwoch rzeczy naraz ale dzieki za odpowiedz i moze skorzystam w przyszlosci
komentarz 5 maja 2020 przez TOWaD Mądrala (5,700 p.)

tak ogólnie to wielomian stopnia zerowego powinien się znajdować zerowej szufladce,

ax^0 + bx^1+ cx^2 + dx^3=0

ax^0 + bx^1;

komentarz 5 maja 2020 przez lujasjeden Użytkownik (860 p.)
a nie jest?
komentarz 6 maja 2020 przez TOWaD Mądrala (5,700 p.)
edycja 6 maja 2020 przez TOWaD

[4]=[2,3,4,5}  ---> [8]={0,0,0,0,2,3,4,5}

2+3* x +4* x^2 +5*x^3=0;

0+0*x+0* x^2 +0* x^3 +2* x^4 +3* x^5 +4* x^6 +5* x^7 =0

tak sobie wyobrażam to przesuniecie jak jest.

a jak by stopnie zgodne z indeksami to dodawanie 3 stopnia do 7

stopien3=4;
stopien7 =8;
Q3[stopien3];..
Q7[stopien3];....
for(int i=0;i<stopien3&&i<stopien7 ;i++) cout<<Q3[i]+Q7[i];

wielomian 3 stopnia (2x^3+5) {5,2} -> {5,0,0,2} takie wstawianie zer to ok

Podobne pytania

0 głosów
0 odpowiedzi 509 wizyt
pytanie zadane 20 stycznia 2020 w Inne języki przez Eufem Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 636 wizyt
0 głosów
0 odpowiedzi 252 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...