Jel ima neko voljan da mi pojasni malo kako se dobija tačno rešenje u ovoj pitalici.
Ја ћу пробати, па шта буде...
Kod:
int a[3][3] = { {7,8,9}, {6,5,4}, {3,2,1} };
Ово значи да низ
a изгледа овако:
a[0][0]==7; a[0][1]==8; a[0][2]==9;
a[1][0]==6; a[1][1]==5; a[1][2]==4;
a[2][0]==3; a[2][1]==2; a[2][2]==1;
Показивачи су мало запетљани... ако ову матрицу схватимо као низ показивача, то ће бити низ три показивача, од којих први показује на први члан низа {7, 8, 9}, други на {6,5,4}, а трећи на {3,2,1}. То у C-у одговара оваквом запису:
*a[0] == 7; *(a[0] +1) == 8; *(a[0] +2) == 9;
*a[1] == 6; *(a[1] +1) == 5; *(a[1] +2) == 4;
*a[2] == 3; *(a[2] +1) == 2; *(a[2] +2) == 1;
односно:
*(a[0] +0) == 7; *(a[0] +1) == 8; *(a[0] +2) == 9;
*(a[1] +0) == 6; *(a[1] +1) == 5; *(a[1] +2) == 4;
*(a[2] +0) == 3; *(a[2] +1) == 2; *(a[2] +2) == 1;
А најзапетљанији део је ако се матрица схвати као показивач на показивач. У овом случају, матрица
a је показивач на a[0][0], односно **a. Тада је *a показивач на први члан у {7, 8, 9}, *(a+1) на {6,5,4}, а *(a+2) на {3,2,1}, па је почетна матрица, ако је гледамо као показивач на показивач, дефинисана овако:
**a == 7; *(*a+1) == 8; *(*a+2) == 9;
*(*(a+1)) == 6; *(*(a+1) +1) == 5; *(*(a+1) +2) == 4;
*(*(a+2)) == 3; *(*(a+2) +1) == 2; *(*(a+2) +2) == 1;
односно:
*(*(a+0) +0) == 7; *(*(a+0) +1) == 8; *(*(a+0) +2) == 9;
*(*(a+1) +0) == 6; *(*(a+1) +1) == 5; *(*(a+1) +2) == 4;
*(*(a+2) +0) == 3; *(*(a+2) +1) == 2; *(*(a+2) +2) == 1;
Не знам колико сам ово појаснио... ваљда нисам још више закомпликовао. Рад са динамичким променљивама представља најтежу област у програмирању у оквиру средњошколског курса, обично је доста тежак за интуитивно разумевање.
Затим следи петља:
Kod:
for (i=2;i>=0;i--)
printf("%d %d %d\n", a[2-i][i], *(a[2-i]+1), *(*(a+i)+2-i));
Значи,
i узима вредности: 2, 1, 0. Идемо редом:
i=2
Наредба гласи:
printf("%d %d %d\n", a[0][2], *(a[0]+1), *(*(a+2)));
Штампају се бројеви: a[0][2], *(a[0]+1), *(*(a+2)). Из горњих таблица видимо да је реч о бројевима: 9, 8, 3.
i=1
Штампају се бројеви: a[1][1], *(a[1]+1), *(*(a+1)+1), то јест: 5, 5, 5.
i=0
Штампају се бројеви: a[2][0], *(a[2]+1), *(*a+2), то јест: 3, 2, 9.
Дакле, одговор је под
B).
Е сад, ваљда ће бити јасно... Сећам се да су ми својевремено рекурзија и динамичке променљиве биле највећа главоломка да их "сконтам". Али кад сам их сконтао, радио сам са њима без проблема.