[C] Pojasnjenje pokazivaca-pitalica.
Prikazujem rezultate 1 do 5 od 5

Tema: [C] Pojasnjenje pokazivaca-pitalica.

  1. #1
    Aktivan član
    Učlanjen
    28.05.2008.
    Pol
    muški
    Poruke
    1.219
    Tekstova u blogu
    1
    Reputaciona moć
    0

    Podrazumevano [C] Pojasnjenje pokazivaca-pitalica.

    Jel ima neko voljan da mi pojasni malo kako se dobija tačno rešenje u ovoj pitalici.
    Elem pitalica izgleda ovako:
    #include <stdio.h>
    void main() {
    int i;
    int a[3][3] = { {7,8,9}, {6,5,4}, {3,2,1} };
    for (i=2;i>=0;i--)
    printf("%d %d %d\n", a[2-i][i], *(a[2-i]+1), *(*(a+i)+2-i));
    }
    Rešenje je:

    9 8 3
    5 5 5
    3 2 9
    Poslednji put ažurirao/la gost 136592 : 16.06.2009. u 17:32



  2. #2
    Zainteresovan član CAPSLOCK (avatar)
    Učlanjen
    18.10.2008.
    Pol
    muški
    Lokacija
    Novi Sad
    Poruke
    208
    Reputaciona moć
    36

    Podrazumevano Re: [C] Pojasnjenje pokazivaca-pitalica.

    nisam bas upoznat sa C/C++ ali vidim od prilike šta se ovde dešava ..


    Kod:
    #include <stdio.h>
    
    void main() { 
    
    int i; // initalizacija i integera
    
    int a[3][3] = { {7,8,9}, {6,5,4}, {3,2,1} }; // initalizacija trodimenzijalnog array-a
    
    
    for (i=2;i>=0;i--) //for loop koji pocinje sa brojem 2, traje dok je i vece ili jednako od nule ..
    
    
    printf("%d %d %d\n", a[2-i][i], *(a[2-i]+1), *(*(a+i)+2-i));
    }
    ovo "%d" u stringu će se zameniti sa integerom koji je naveden posle stringa

    3 integera sa kojima će biti zamenjeni ovi operatori se uzimaju iz onog gore navedenog
    trodimenzijalnog arraya ( a )

    znači u celom kodu imaćemo tri slučaja vrednosti integera i , kada je on 0, 1 i 2

    dakle za prvi slučaj kada je i 2 kod će izgledati ovako nešto

    a[2-2][2] odnosno 2[0][2] sto znači da se broj uzima iz prvog arraya (redni broj 0) , broj koji će se uzeti će biti na trećem mestu (redni broj dva) , što znači da je prvi broj 9 ..

    evo da ti bude malo jasnije to se radi na ovu foru ..
    Kod:
    {7,8,9}, {6,5,4}, {3,2,1}
       0         1        2
    
    nama treba arraya na nultom mestu dakle uzimamo sledeći..
    
    {7,8,9}
    0  1  2
    
    i treba nam broj na drugom mestu tako da uzimamo broj 9..
    na ovom istom principu se dobijaju i ostali brojevi u sva 3 slučaja ( za i = 0, 1 i 2)

    znam da nisam baš najbolje objasnio ali verovatno će ti biti dosta da sam nešto skontaš
    Something, something, something, dark side ...

  3. #3
    Aktivan član
    Učlanjen
    28.05.2008.
    Pol
    muški
    Poruke
    1.219
    Tekstova u blogu
    1
    Reputaciona moć
    0

    Podrazumevano Re: [C] Pojasnjenje pokazivaca-pitalica.

    Pazi znam da dobijem prvi uspravni deo tj 953,to je lako,ova dva druga uspravna dela mi nisu najjasnija jer se tu radi sa pokazivacima a tu sam slab
    Poslednji put ažurirao/la gost 136592 : 16.06.2009. u 17:33

  4. #4
    Obećava it's (avatar)
    Učlanjen
    14.02.2009.
    Pol
    muški
    Lokacija
    Lokacija: Lokacija: Lokacija: Lokacija: Lokacija: Lokacija: Lokacija: Lokacija:
    Poruke
    57
    Reputaciona moć
    33

    Podrazumevano Re: [C] Pojasnjenje pokazivaca-pitalica.

    Citat Original postavio nozzlezator Pogledaj poruku
    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).

    Е сад, ваљда ће бити јасно... Сећам се да су ми својевремено рекурзија и динамичке променљиве биле највећа главоломка да их "сконтам". Али кад сам их сконтао, радио сам са њима без проблема.

  5. #5
    Aktivan član
    Učlanjen
    28.05.2008.
    Pol
    muški
    Poruke
    1.219
    Tekstova u blogu
    1
    Reputaciona moć
    0

    Podrazumevano Re: [C] Pojasnjenje pokazivaca-pitalica.

    OK,hvala ti puno,neke stvari su mi sada jasnije
    Samo da napomenem da je ovo bila jedna od laksih pitalica na ispitu koji sam imao pre neki dan,da sam imao programiranje u srednjoj bilo bi mi lakse...

Slične teme

  1. vracanje reference ili pokazivaca
    Autor blejac u forumu Programiranje
    Odgovora: 4
    Poslednja poruka: 16.01.2007., 00:19
  2. Molim za malo pojasnjenje
    Autor olja81 u forumu Zdravlje
    Odgovora: 1
    Poslednja poruka: 29.09.2006., 14:30
  3. trazim pojasnjenje
    Autor bubamara34 u forumu Zdravlje
    Odgovora: 17
    Poslednja poruka: 15.01.2006., 22:12
  4. Mala pomoc i pojasnjenje za dr !
    Autor Balkanika u forumu Zdravlje
    Odgovora: 3
    Poslednja poruka: 20.07.2005., 16:56
  5. pitalica
    Autor baba visnja u forumu Humor
    Odgovora: 19
    Poslednja poruka: 28.04.2004., 18:47

Pravila za slanje poruka

  • Ne možete kreirati novu temu
  • Ne možete poslati odgovor
  • Ne možete dodati priloge
  • Ne možete prepraviti svoju poruku
  •