Mirki, byłby ktoś tak dobry i wytłumaczył mi dlaczego ten kod działa:
int mait(); { unsigned t,p,w; for(cin>>t;t--;cout<<((int)pow(p%10,1+(3+w)%4))%10<>p>>w;
return 0; }
t - liczba testów, p - podstawa potęgi, w - wykładnik. Jestem początkujący. Jest to jedno z zadań ze SPOJa ale konkretna treść nie ma znaczenia. I stety/niestety szukając pomocy trafiłem na gotowe rozwiązanie. Do sedna. Próbuje w 100% zrozumieć działanie tej pętli. Bo wygląda ona nieco "dziwnie" w porównaniu do tych podstawowych. Próbuję ją napisać po swojemu - też nie idzie. A nie wrzucę przecież tego na SPOJa żeby mieć zaliczone zadanie :D
@qweasdqweasd: @PanWitold: No właśnie chodzi mi o tę nieczytelność. Na drugim miejscu jest warunek (według definicji for), a w tym kodzie, który wstawiłem jest instrukcja wykonywania po każdej pętli - w tym przypadku dekrementacja t. Na trzecim jest wynik, który chcę otrzymać. I nie ma go w instrukcji pętli tylko "w niej". Dlatego ciężko mi to rozkminić.
Na drugim miejscu jest warunek (według definicji for), a w tym kodzie, który wstawiłem jest instrukcja wykonywania po każdej pętli - w tym przypadku dekrementacja t.
@idler: dekrementacja, która jest również warunkiem
Czyli teraz rozumiem to tak: pętla startuje od wprowadzonego t. Następnie po każdym wykonaniu te maleje o jeden i wyświetlany jest wynik. A gdzie warunek kończący wykonywanie się pętli?
1. W for możesz pominąć dowolny element, po prostu go nie wstawiając. I tak np. for(;;) będzie pętlą nieskończoną. Natomiast int i = 4; for(;--i;); ma takie samo działanie jak for(int i = 4; --i;). Różnica jest taka, że w drugim przypadku scope (zakres) zmiennej i jest tylko wewnątrz ciała pętli. 2. for (int i = 5; --i;) wywoła pętle for aż warunek stopu, czyli środkowy element for-a
@virgoerns: Czyli w moim przypadku warunkiem kończącym pracę pętli jest t--, a pętla się przerywa kiedy t osiągnie wartość 0. Dzięki :D A drugie pytanie: jak to jest z tym umieszczeniem cout'a w nagłówku pętli zamiast w ciele skoro ma to być niejako wynikiem działania pętli? Tego jeszcze do końca nie rozumiem.
"expr" - ostatni element nagłówka for-a (czyli ten cout) jest po prostu wyrażeniem, które ma się wykonać po ciele pętli określonej przez "statement". Innymi słowy, takiego for-a możemy zapisać w postaci równoważnej pętli
@virgoerns: Dzięki wielkie. Właśnie z powodu tego, że nie widziałem o tym co napisałeś nie mogłem zrozumieć tej pętli bo na pierwszy rzut oka była napisana "dziwnie" względem tej najbardziej elementarnej i pokazywanej w przykładach.
Mirki, byłby ktoś tak dobry i wytłumaczył mi dlaczego ten kod działa:
int mait();
{
unsigned t,p,w;
for(cin>>t;t--;cout<<((int)pow(p%10,1+(3+w)%4))%10<>p>>w;
return 0;
}
t - liczba testów, p - podstawa potęgi, w - wykładnik. Jestem początkujący. Jest to jedno z zadań ze SPOJa ale konkretna treść nie ma znaczenia. I stety/niestety szukając pomocy trafiłem na gotowe rozwiązanie. Do sedna. Próbuje w 100% zrozumieć działanie tej pętli. Bo wygląda ona nieco "dziwnie" w porównaniu do tych podstawowych. Próbuję ją napisać po swojemu - też nie idzie. A nie wrzucę przecież tego na SPOJa żeby mieć zaliczone zadanie :D
cin >> t;
while (t > 0) {
t = t - 1;
cout << (p%10 do potęgi 1+(3+w)%4) % 10
}
@idler: a dlaczego miałby nie działać? Zobacz sobie co się wsadza do pętli for i porównaj z tym co jest napisane w tym programie.
for (instrukcja_inicjalizująca ; warunek ; instrukcja wykonywania po każdej iteracji)
@idler: dekrementacja, która jest również warunkiem
int main()
{
unsigned
@idler: no to źle przeczytałeś, bo jest warunek.
bo masz unsigned
A co do warunku to nie mam pomysłu. return 0; ??
1. W for możesz pominąć dowolny element, po prostu go nie wstawiając. I tak np.
for(;;)
będzie pętlą nieskończoną. Natomiastint i = 4; for(;--i;);
ma takie samo działanie jakfor(int i = 4; --i;)
. Różnica jest taka, że w drugim przypadku scope (zakres) zmiennej i jest tylko wewnątrz ciała pętli.2.
for (int i = 5; --i;)
wywoła pętle for aż warunek stopu, czyli środkowy element for-aA drugie pytanie: jak to jest z tym umieszczeniem cout'a w nagłówku pętli zamiast w ciele skoro ma to być niejako wynikiem działania pętli? Tego jeszcze do końca nie rozumiem.
attr for (init ; condition ; expr) statement
(Pomijamy to, czym jest attr, ale jeśli chcesz doczytać, to proszę bardzo: http://en.cppreference.com/w/cpp/language/attributes
"expr" - ostatni element nagłówka for-a (czyli ten cout) jest po prostu wyrażeniem, które ma się wykonać po ciele pętli określonej przez "statement". Innymi słowy, takiego for-a możemy zapisać w postaci równoważnej pętli