Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko 2 zadatka sa pokazivacima

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc oko 2 zadatka sa pokazivacima

[ Pregleda: 1613 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Susie_Q
Student

Član broj: 265734
Poruke: 1
212.200.65.*



+2 Profil

icon Pomoc oko 2 zadatka sa pokazivacima09.08.2010. u 13:43 - pre 167 meseci
Imam problema sa sledecim pitalicama. Potrebno je da protumacimo sta ispisuju sledeci programi:

Code:

#include <stdio.h>
int P1(int *a) {return *a+1;}
int P2(int *b) {return 1+(*b+=1);}
int P3(int *c) {return *c++;}
void main () {
int (*p[]) (int *)={P1,P2,P3,P1,P3,P2};
int i=0,t;
while (1) {
if ((t=(*p[i]) (&i))==i)
break;
printf ("%d",i=t);
}
}



Code:

#include <stdio.h>
#include <stdlib.h>
void main () {
int i, *a[5], **b;
for (i=0; i<5 ; i++) {
a[i]= (int *) malloc (sizeof(int));
*a[i]=i%2;
}
for (b=a+--i; i>0; i--) {**(b-i)=**b+i%3;}
for(i=0; i<5; i++) printf ("%d", *b[-i]), free (b[-i]);
}


Resenje prvog zad. je 134, a drugog 01201, medjutim nikako ne mogu da dodjem do ovih rezultata. Nadam se da neko moze da mi pomogne i pojasni ove kodove.
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Pomoc oko 2 zadatka sa pokazivacima09.08.2010. u 14:07 - pre 167 meseci
p je niz pokazivača na funkcije P1, P2 i P3 koje sve primaju pokazivač na int i vraćaju vrednost pri tome P2 i P3 i menjaju prosleđeni pokazivač uvećavanjem za jedan.

U petlji se poziva funkcija nad i, rezultat smešta u t i prekida ako je rezultat isti kao prosleđena promenljiva. Inače se rezultat čuva u promenljivu i i štampa kao broj.

Dakle najpre za i=0 se poziva P1(0) što vraća i potom ispisuje 1, kao sporedno dejstvo pri ispisu promenljiva i postaje 1.

Zatim se za i=1 poziva P2(1) što menja promenljivu i u 2 i vraća 3 koje se ispisuje pri čemu i postaje 3.

Za i=3 sledi poziv P1(3) što vraća i potom ispisuje 4, i postaje 4.

Na kraju se za i=4 poziva P3(4) što vraća 5 ali i povećava i na 5 zbog čega if uslov u petlji postaje tačan i ona se prekida bez ispisa.

Dakle, ispisuje se 134 što lako možeš da proveriš izvršavanjem ovog programa.

http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Pomoc oko 2 zadatka sa pokazivacima09.08.2010. u 14:35 - pre 167 meseci
U drugom programu, se formira niz pokazivača na int kojem se dodaljuju vrednosti 0,1,0,1,0.
Onda se b namesti da pokazuje na a[4], pa se kroz isti niz prolazi (korišćenjem negativnog indeksa) od nultog do četvrtog člana. **b ima vrednost 0 jer predstavlja *a[4] (koji je jednak 0).

Code:
for (b=a+--i; i>0; i--) {**(b-i)=**b+i%3;}


u stvari prolazi kroz a[ i ] od 0 do 4 i dodeljuje vrednost modulo 3 od i, tj. vrednosti 0,1,2,0,1.

Na kraju se niz ispisuje od *a[0] do *a[4] korišćenjem pokazivača b i negativnih indeksa i oslobađa se prostor koji je bio rezervisan sa malloc

[Ovu poruku je menjao djoka_l dana 09.08.2010. u 15:50 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pomoc oko 2 zadatka sa pokazivacima

[ Pregleda: 1613 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.