Witam, mam problem z następującym zadaniem:
Dla zadanego wielomianu anxn + an-1x</sup>(n-1) + … + a1*x + a0 o współczynnikach całkowitych, znajdź i zapisz na listę dwukierunkową wszystkie jego pierwiastki wymierne.
Posortuj tę listę w porządku niemalejącym i wypisz jej zawartość na standardowe wyjście.
Zastosuj w programie odpowiednie funkcje.
Problem polega na tym, że program się kompiluje, jednak w czasie jego działania występuje błąd. Napisałem funkcje odpowiadające za znalezienie pierwiastków oraz stworzenie listy. Program kompilowany w MS Visual Studio 2010. Tablica wynikowa zawierająca pierwiastki to tabWynik.
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
struct lista {
double x;
lista *last;
lista *next;
};
int znajdzPierwiastki (int an, int a0, int tabAn[], int tabA0[], int &licznik1, int &licznik2, double tabWynik[])
{
licznik1 = 0;
for (int i = 1; i <= an; i++)
{
if ( an%i == 0)
{
tabAn[licznik1] = i;
tabAn[licznik1+1] = (-1)*i;
licznik1 += 2;
}
}
licznik2 = 0;
for (int i = 1; i <= a0; i++)
{
if ( a0%i == 0)
{
tabA0[licznik2] = i;
tabA0[licznik2+1] = (-1)*i;
licznik2 += 2;
}
}
double tymczas;
int ileZuzyto = 0;
bool czyByl;
for (int i = 0; i < licznik1; i++)
{
for (int j = 0; j < licznik2; j++)
{
czyByl = false;
tymczas = (double)tabA0[i] / (double)tabAn[j];
tymczas = ceil(tymczas);
for(int z = 0; z < ileZuzyto; z++)
{
if (tabWynik[z] == tymczas)
{
czyByl = true;
}
}
if (czyByl == false)
{
tabWynik[ileZuzyto] = tymczas;
ileZuzyto++;
}
}
}
return ileZuzyto;
}
/* gdzies tu jest blad */
void zrobListe(lista* &head, lista* &last, lista* &temp, double tabWynik[], int ileZu)
{
temp = new lista;
for (int i = 0; i < ileZu; i++)
{
if (head == NULL) // jezeli glowka jest pusta
{
temp->last = NULL;
temp->next = NULL;
temp->x = tabWynik[i];
head = temp;
} else if (head->next == NULL) // jezeli mamy glowke, ale nie wskazuje ona na kolejny element listy
{
temp->last = head;
temp->next = NULL;
temp->x = tabWynik[i];
last = temp;
head->next = last;
} else // w kazdym innym wypadku
{
temp->last = last;
temp->next = NULL;
temp->x = tabWynik[i];
last = temp;
}
}
}
void wypisz (lista *head)
{
lista *temp = new lista;
temp = head;
while (temp != NULL)
{
cout << temp->x << endl;
temp = temp->next;
}
}
int main ()
{
int an, a0, licznik1, licznik2;
int tabAn[30], tabA0[30], ileZu;
double tabWynik[30];
lista* head = new lista;
lista* last = new lista;
lista* temp = NULL;
cin >> a0 >> an;
ileZu = znajdzPierwiastki(an, a0, tabAn, tabA0, licznik1, licznik2, tabWynik);
zrobListe(head, last, temp, tabWynik, ileZu);
return 0;
}
z góry dziękuję za znalezienie oraz wytłumaczenie gdzie leży błąd.
Pozdrawiam!