Wpis z mikrobloga

#cpp #programowanie

Mikrobki, dlaczego licznik (counter) nie dziala?

#include "iostream"

int counter;

int A(int n, int m)

{

counter++;

if(n==0)

return m+1;

else

{

if((n>0)&&(m==0))

return A((n-1),1);

else

if((n>0)&&(m>0))

return A(n-1,A(n,m-1));

}

}

int main()

{

int n, m;

counter=0;

std::cin>>n>>m;

std::cout<
return 0;

}
  • 28
  • Odpowiedz
@erwit: iostream w <>bo to nie jest stworzona przez Ciebie biblioteka.

Ponadto napisz sobie

Using namespace std;

Po include. Wtedy możesz usunąć wszystkie std z tekstu. Będzie bardziej przejrzysty.
  • Odpowiedz
@GrabkaMan: z tymi klamerkami od biblioteki, racja, edytor mi automatycznie zrobil...

nie mniej nie zmienia to nic w kwestii licznika wywolan rekurencji
  • Odpowiedz
@KrzaQ2: mam po prostu napisac

counter;

counter++; ?

edit: tak tez nie dziala... nie wiem o co chodzi, przeciez ta zmienna jest zadeklarowa
  • Odpowiedz
std::cout<
std::cout<<"counter: "<

Kolejność ewaluacji parametrów funkcji jest niezdefiniowana. A przeciążony operator jest funkcją. Nie można powiedzieć, w jakiej kolejności będzie ci się wykonywać ten cały łańcuch „operatorów”

<<

  • Odpowiedz
@erwit: Chodzi o to, ƶe zmieniasz counter w wywołaniu A() a jednocześnie odczytujesz go w tym samym wyraƶeniu. Zrób

cout << A() << endl; cout << counter;
  • Odpowiedz
@Rincewind: Wiki nie ma racji w tym przypadku :P

If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.


~ n3337 (aka darmowa wersja standardu C++11)
  • Odpowiedz