tabele - problem z przekroczeniem zakresu?

Odpowiedz Nowy wątek
2011-01-06 12:42

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

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;

}

Pozostało 580 znaków

zaspany
2011-01-06 13:08
zaspany
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.

Pozostało 580 znaków

2011-01-06 14:35

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

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?

Pozostało 580 znaków

2011-01-07 00:03

Rejestracja: 9 lat temu

Ostatnio: 8 lat temu

0

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

Pozostało 580 znaków

Odpowiedz

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