tabele - problem z przekroczeniem zakresu?

0

Witam wszystkich!!! Jestem nowy na forum i początkujący programista. Mam zrobić program do szkoły wykonujący działania na wielomianach. Wszystko jest już OK oprócz jednego błędu. Mianowicie gdy pierwszy wielomian jest mniejszy od drugiego nie przepisuje mi większych wartości z drugiego. Oto kod:

#include <string>
#include <iostream>

using namespace std;

void wynik2(int tablica2[],int tablica[],int n, int m)
{
if (tablica<tablica2)
{
for (int i=m; i>n; --i)
{
if(tablica2[i]>=0)
cout<<"+"<<tablica2[i]<<"x^"<<i<<" ";
else
cout<<tablica2[i]<<"x^"<<i<<" ";
}
}
else
{
for (int i=n; i>m; --i)
{
if(tablica[i]>=0)
cout<<"+"<<tablica[i]<<"x^"<<i<<" ";
else
cout<<tablica[i]<<"x^"<<i<<" ";
}
}
}
void wynik (int tabnew[],int tablica2[],int tablica[],int n) //wypisuje wynik
{
for ( int i=n; i>1; --i)
if(tabnew[i]>=0)
cout<<"+"<<tabnew[i]<<"x^"<<i<<" ";
else
cout<<tabnew[i]<<"x^"<<i<<" ";
if(tabnew[1]>=0)
cout<<"+"<<tabnew[1]<<"x"<<" ";
else
cout<<tabnew[1]<<"x"<<" ";
if(tabnew[0]>=0)
cout<<"+"<<tabnew[0];
else
cout<<tabnew[0];
}

int main()
{
int stopien; //tworzy pierwszy wielomian
cout<<"Program wykonujacy dzialania na wielomianach:\n";
cout<<"Podaj stopien wielomianu pierwszego: ";
cin >>stopien;

int tablica[stopien];

for (unsigned int i = 0; i < stopien-1; ++i)

{
    cout <<"Podaj wyraz "<<i+1<<". (x^"<<stopien-i<<"): ";
    cin >>tablica[stopien-i];  
}   

cout<<"Podaj wyraz "<<stopien<<". (x) :  ";
cin>>tablica[1];
cout<<"Podaj wyraz "<<stopien+1<<". :  ";
cin>>tablica[0];

int stopien2;                                                       //tworzy drugi wielomian
cout <<"Podaj stopien wielomianu drugiego: ";
cin >>stopien2;

int tablica2[stopien2];

for (unsigned int i = 0; i < stopien2-1; ++i)

{
    cout <<"Podaj wyraz "<<i+1<<". (x^"<<stopien2-i<<"): ";
    cin >>tablica2[stopien2-i];  
}   

cout<<"Podaj wyraz "<<stopien2<<". (x) :  ";
cin>>tablica2[1];
cout<<"Podaj wyraz "<<stopien2+1<<". : ";
cin>>tablica2[0];

int max = 0;
int sum = stopien+stopien2;
if (stopien>stopien2) 
   max=stopien;
else
   max=stopien2;

cout<<"Suma wielomianow:\n";
int tablica3[max];
for ( int i = 0; i <=stopien ; ++i)
    tablica3[i]=tablica[i]+tablica2[i];
if (tablica!=tablica2)
    wynik2(tablica2,tablica,stopien,stopien2);
if (tablica>tablica2)
    wynik(tablica3,tablica2,tablica,stopien2);
else
    wynik(tablica3,tablica2,tablica,stopien);

cout<<"\n";
cout<<"Roznica wielomianow:\n";
int tablica4[max];
for ( int i = 0; i <=stopien ; ++i)
    tablica4[i]=tablica[i]-tablica2[i];
if (tablica!=tablica2)
    wynik2(tablica2,tablica,stopien,stopien2);
if (tablica>tablica2)
    wynik(tablica4,tablica2,tablica,stopien2);
else
    wynik(tablica4,tablica2,tablica,stopien);

cout<<"\n";
cout<<"Iloczyn wielomianow:\n";
int tablica5[sum];

for(int k=0; k<=sum; k++) 
   {
      int s=0;
      int u=k-stopien2; 
      if(u<0) u=0;
      int v;
      if(stopien<k) v=stopien; 
      else v=k; 
          for(int j=u; j<=v; j++) 
             { 
               s=s+tablica[j]*tablica2[k-j]; 
               tablica5[k]=s;
             }
   }

wynik(tablica5,tablica2,tablica,sum);

cout<<"\n";
cout<<"Iloraz wielomianow:\n";

//system("pause");
return 0;

}

0

Pierwsze co rzuca sie w oczy.. Dynamiczne tablice tworz przy pomocy operatora new i usuwaj je poprzez delete a nie tak jak teraz:

 int x = 10;
int tab[x];

Albo skorzystaj z kontenerów STL.

0

dzięki, działa ale jak tylko wpiszę sobie np. new int[30], a ja chciałbym żeby można było podawać z reki np. tab=new int[n]. Da się to jakoś obejść nie używając vectorów?

0

Problem już rozwiązany. Zamieszane było w funkcji do wypisywania wyniku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0