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

wielomiany c++

Object Storage Arubacloud
0 głosów
2,559 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 5 maja 2020 przez TOWaD Mądrala (6,000 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 (6,000 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 (6,000 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 (6,000 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 554 wizyt
pytanie zadane 20 stycznia 2020 w Inne języki przez Eufem Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 643 wizyt
0 głosów
0 odpowiedzi 271 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...