Funkcja z parametrem <vector>. Nie rozumiem na czym polega błąd ;(

0
 
#include <iostream>
#include <vector> // dla dynamicznej tablicy na miejsca zerowe ( bo niewiemy ile ich będzie) - np w paraboli może być 1 lub 2 lub //wcale
using namespace std;

float pierwiastki_wielomianu(unsigned short stopien, vector <int> wspulczynniki());//prototyp, nawiasy nie kwadratowe, 
//bo w klasie vector są okrągłe

int main()
{
  cout << "Witaj!\nPodaj stopień wielomianu: (q kończy)\n";
  unsigned short a;
  while ( cin >> a && a!= 'q' )
    	{	
    	cout << "Podano " << a << endl;
    	vector <int> tab(a);// tu jest typ vector, bo nie znamliśmy wcześniej stopnia wielomianu
    	for ( int n = 0; n<=a; n++)
		{
		cout << "Podaj współczynnik przy potędze " << a-n <<":\n";
		cin >> tab[n];
		}
    	cout << "Twój wielomian ma postać :\n";
    	for ( int n = 0; n<a; n++)
		{
		cout << tab[n];
		cout << "x^" << a-n << "+";
		}
    	cout << tab[a];	
    	cout << endl;
    	pierwiastki_wielomianu( a, tab); 
    	cout << "Podaj stopień następnego wielomianu: (q kończy)\n";   		
    	}
  return 0;
}	

float pierwiastki_wielomianu(unsigned short stopien, vector <int> wspulczynniki())
{
	while(stopien == 0)
	{
	  cout << "Stopien wielomianu: 0\nBrak miejsc zerowych\n";
	  return 0;
	}
	while(stopien == 1)
	{
	  float wynik; 
	  int a = (int)wspulczynniki[0];
	  int b = (int)wspulczynniki[1];
	  wynik = (b/a)*(-1); 
	  cout << "Wielomian ma jedno miejsce zerowe x = "<< wynik << endl; 
	  return 0;
	}
       while(stopien != 0 && stopien !=1)                                                      
	{
	  cout << "Na razie takiego stopnia ten program nie policzy\n";
	  return 0;
	}	
}	

Zanim wpadłem na pomysł, żeby użyć klasy vector, wszystko było cacy, natomiast teraz wyskoczyło mi dużo błędów o złej konwersji elementów vector na int, ale szczerze mówiąc po przeczytaniu komunikatów i przejrzeniu jeszcze raz informacji z "Język C++. Szkoła programowania" nie mam pojęcia, dlaczego to jest źle i jak powinienem to zrobić, żeby było dobrze . Jestem totalnym początkującym i mogłem popełnić jakąś totalną głupotę typu rerutn zamiast return, ale ja nic takiego nie widzę. Z góry dziękuję za pomoc :)

1
#include <iostream>
#include <vector> // dla dynamicznej tablicy na miejsca zerowe ( bo niewiemy ile ich będzie) - np w paraboli może być 1 lub 2 lub //wcale
using namespace std;
 
float pierwiastki_wielomianu(unsigned short stopien, vector <int> wspulczynniki);//prototyp, nawiasy nie kwadratowe, 
//bo w klasie vector są okrągłe
 
int main()
{
  cout << "Witaj!\nPodaj stopień wielomianu: (q kończy)\n";
  unsigned short a;
  while ( cin >> a && a!= 'q' )
        {    
        cout << "Podano " << a << endl;
        vector <int> tab(a);// tu jest typ vector, bo nie znamliśmy wcześniej stopnia wielomianu
        for ( int n = 0; n<=a; n++)
        {
        cout << "Podaj współczynnik przy potędze " << a-n <<":\n";
        cin >> tab[n];
        }
        cout << "Twój wielomian ma postać :\n";
        for ( int n = 0; n<a; n++)
        {
        cout << tab[n];
        cout << "x^" << a-n << "+";
        }
        cout << tab[a];    
        cout << endl;
        pierwiastki_wielomianu( a, tab); 
        cout << "Podaj stopień następnego wielomianu: (q kończy)\n";           
        }
  return 0;
}    
 
float pierwiastki_wielomianu(unsigned short stopien, vector <int> wspulczynniki)
{
    while(stopien == 0)
    {
      cout << "Stopien wielomianu: 0\nBrak miejsc zerowych\n";
      return 0;
    }
    while(stopien == 1)
    {
      float wynik; 
      int a = (int)wspulczynniki[0];
      int b = (int)wspulczynniki[1];
      wynik = (b/a)*(-1); 
      cout << "Wielomian ma jedno miejsce zerowe x = "<< wynik << endl; 
      return 0;
    }
       while(stopien != 0 && stopien !=1)                                                      
    {
      cout << "Na razie takiego stopnia ten program nie policzy\n";
      return 0;
    }    
}    

Nawiasy oznaczają WYWOŁANIE FUNKCJI. A ty je sobie stawiasz bezmyślnie. Co to niby znaczy
vector <int> wspulczynniki() jako ARGUMENT funkcji? W argumentach masz deklaracje typu i nazwy zmiennej i tyle. A te nawiasy to skąd? Już nawet abstrahuje od twojej ortografii i współczynników...

1

1.Tworzysz wektor zawierający a elementów o indeksach 0 .. a-1, lecz w pętli masz warunek n <= a,
2.WSPÓŁCZYNNIKI,
3.Niepotrzebne nawiasy w deklaracji, powinno być samo vector<int> wspolczynniki,
4.Po co funkcja pierwiastki_wielomianu ma cokolwiek zwracać?
5.Wydaje mi się, że nie rozróżniasz while od ifa.

2

@Samouk.newbie NIE odpowiadaj w komentarzach!

  1. Nie rozumiem co maja nawiasy do adresu i o jakiej tablicy mówisz.
  2. int/int = int. Więc jak twoje a i b są intami to dzielenie też da inta.

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