CTRL85 Temat założony przez niniejszego użytkownika  | 
Obliczanie wartości wielomianów bez użycia pętli » 2017-01-24 14:47:50 Mam za zadanie obliczyć wartości wielomianów dla podanych argumentów bez używania pętli (for, while, goto, switch), bez używania jakichkolwiek tablic i bez klas, jedyny plik nagłówkowy to iostream.
  Przykładowe dane wejściowe wyglądają tak:
  2 //liczba wielomianów 2 //liczba argumentów 0 1 //podane argumenty 2 //stopień pierwszego wielomianu 1 2 3 //współczynniki pierwszego wielomianu od najniższej potęgi 3 //stopień drugiego wielomianu 2 3 4 5 // współczynniki drugiego wielomianu
  Chcę stworzyć listę jednokierunkową, w której będę przechowywał argumenty wraz z wartościami, ale mam problem jak rekurencyjnie i bez użycia pętli uzupełniać listę.   | 
 | 
pekfos  | 
» 2017-01-24 15:11:55 A jak byś rozwinął taką pętlę for, czy while do postaci funkcji rekurencyjnej? Mógłbyś nawet to zapakować do szablonu funkcji, przyjmującego lambdy jako warunki i powtarzaną instrukcję.  | 
 | 
DejaVu  | 
» 2017-01-24 15:12:01 Kto wymyśla tak głupie zadania... :/ void readData( std::list < int >& _list ) {     int value;     std::cin >> value;     if( value == 0 )          return;          _list.push_back( value ); }
  Niemniej jednak zgodnie z tym co napisałeś to header listy też nie jest dozwolony, więc have fun.  | 
 | 
CTRL85 Temat założony przez niniejszego użytkownika  | 
» 2017-01-24 15:38:41 A coś w stylu struct Lista {     int arg;     int wynik;          Lista * nast; };
  void WczytajArgumenty( int IleArg ) {          Lista * nowa = new Lista;          int arg = 0;          cin >> arg;          nowa->arg = arg;     nowa->nast = 0;          if( IleArg > 1 )          WczytajArgumenty( IleArg - 1 );          nowa->nast = nowa; } Aktualnie kod nie działa, bo problem mam ze wskazaniem następnego elementu.  | 
 | 
pekfos  | 
» 2017-01-24 16:32:31 Niech funkcja zwraca listę i zwróconą wartość ustawiaj jako  nast. nowa->nast = IleArg > 1 ? WczytajArgumenty( IleArg - 1 )     : nullptr; return nowa;
  Pierwsze wywołanie funkcji po prostu zwróci ci gotową listę.  | 
 | 
mokrowski  | 
» 2017-01-24 17:55:02 #include <iostream>
  using namespace std;
  template<typename T> struct Node {     T arg;     T result;     Node * next = nullptr; };
  template<typename T> void readArgument(Node<T>& node, int argCount) {     cin >> node.arg;     if(--argCount) {         auto newNode = new Node<T>();         node.next = newNode;         readArgument(*newNode, argCount);     } }
  template<typename T> void showList(Node<T>& node) {     cout << node.arg;     if(node.next != nullptr) {         cout << ' ';         showList(*(node.next));     } else {         cout << '\n';     } }
  int main() {     Node<int> node;     readArgument(node, 2);     cout << "Lista: ";     showList(node); }
   | 
 | 
pekfos  | 
» 2017-01-24 18:24:13 @mokrowski: Walczę właśnie z silną chęcią, żeby skasować twój post.. Sam gotowiec, więc dość kontrowersyjna forma odpowiedzi na tym forum, to jeszcze źle sformatowany i nic nie wnoszący do tematu. Nie ma w nim nic, co nie padło w tym temacie, a ubieganie autora tematu w składaniu kodu do kupy, to zwyczajne robienie z niego idioty. Możesz to uznać za ostrzeżenie..  | 
 | 
CTRL85 Temat założony przez niniejszego użytkownika  | 
» 2017-01-24 20:30:12 Mam aktualnie tak: Lista WczytajArgumenty( int IleArg ) {          Lista * nowa = new Lista;          int arg = 0;          cin >> arg;          nowa->arg = arg;          nowa->nast = IleArg > 1 ? WczytajArgumenty( IleArg - 1 )         : nullptr;          return * nowa; } I kompilator wywala: Error C2446: ':': no conversion from 'nullptr' to 'Lista' note: No constructor could take the source type, or constructor overload resolution was ambiguous Tylko nie za bardzo rozumiem dlaczego.  EDIT, dobra, już poradziłem sobie: Element WczytajArgumenty( int IleArg ) {          Element * nowa = new Element;          int arg = 0;          cin >> arg;          nowa->arg = arg;          if( IleArg > 1 )          nowa->nast = & WczytajArgumenty( IleArg - 1 );     else          nowa->nast = NULL;          return * nowa; }
  EDIT2: Ale teraz mam inny problem: Element * start = new Element;
  start = & WczytajArgumenty( ileArgumentow );
  cout << start->arg << endl; cout << start->nast->arg << endl;
  Wywołuję sobie funkcje i wszystko byłoy ok, gdyby nie to, że zamiast drugiego elementu wyświetla jakieś bzdury. Co dziwniejsze wszystko psuje cout - gdy chcę wyświetlić tylko drugi element, to nie ma problemu, w debuggerze, jak zatrzymam program przed coutem to wszystko wygląda ładnie i po wykonaniu tej linii się psuje. Oo  | 
 | 
|  « 1 »  2 |