Você está na página 1de 6

ESTD QUESTES PREPARATRIAS PARA P2 novembro/2013

1. Oua a nadade do programa abaxo ? (Indque sgncado gera do programa.)


1. vod novo()
2. char str|81|;
3. p = (struct prs *) maoc(szeof(struct prs));
4. f (ppr ==(struct prs *) NULL) ppr = paux = p;
5. ese { paux = ppr;
6. whe((*px).ppx != (struct prs *) NULL) px=(*px).ppx;
7. (*px).ppx=p;
8. px=p;
9. }
10. cout << "\nDgte o ttuo: "; gets((*px).ttuo);
11. cout << "\nDgte o autor: "; gets((*px).autor);
12. cout << "\nDgte o numero de regstro: "; gets(str);
13. (*px).regnum=ato(str);
14. cout << "Dgte o preco: "; gets(str);
15. (*px).preco=atof(str);
16. (*px).ppx=(struct prs *) NULL;
17. }
RESPOSTA:
Fnadade: ncu um novo eemento (novo vro) em uma LLE - Lsta Lnear Encadeada.
Prncpas aes:
a) Faz aocao de uma rea do tamanho do nodo PRS;
b) Enquanto o ponter ppx for dferente de NULL, faz o ponter px receber o endereo contdo em ppx;
c) Ouando ppx for NULL, faz ppx receber o endereo contdo em p;
d) Preenche o nodo com os dados: ttuo, autor, regnum e preo, e cooca NULL no ponter ppx
2. Num programa C h a seguinte linha de cdigo: int x=2 !=" #$ #b #%&
Algumas linhas depois encontramos: $ = 'x& b = '!& % = b&
Depois dessas operaes, ual ser o conte!do de cada "ari"el relacionada a#ai$o %indiue o "alor ou o conceito&:
(obs: o efeito das operaes no acumulativo)
1) a 2)
*
a 3) &a 4) c++ 5)
*
b 6)
*
a +
*
b 7)
*
c -
*
a 8) b-- 9) b
*
c 10) a + &a
11) &c 12) c / b 13) 2
*

*
c
RESPOSTA:
1) endereo de x
2) 2
3) endereo do ponter a
4) endereo segunte ao endereo que est no ponter c
5) 8
6) 10
7) 6
8) endereo anteror ao endereo que est no ponter b
9) no exste mutpcao de endereos
10) endereo que est no ponter a somado ao endereo do prpro ponter a
11) endereo do ponter c
12) no exste dvso de endereos
13) 16
3. Oua a nadade do programa abaxo ? (Indque sgncado gera do programa.)
1. vod nserr(vod)
2. { char s|256|, *p;
3. do
4. { cout << "\nEntre com o novo evento : << pv+1;
5. gets(s);
6. f (stren(s)==0) break;
7. p = (char *) maoc(stren(s));
8. f(!p) { cout << "Nao houve aocacao de memora."; return; }
9. strcpy(p,s);
10. f(*s) qstore(p);
11. } whe(*s);
12. }
Fnadade: Incu um novo evento em uma FILA.
Prncpas aes:
A) Dene uma rea para a entrada do evento: vetor de caracteres s (strng) e um pontero.
B) L o evento dgtado na strng s e, enquanto s no for uma strng dgtada nua (\0) ou seu tamanho no
for zero:
C) Aoca uma rea de memra para o evento;
D) Indca ERRO e retorna caso maoc() no consga aocar esta rea (sem memra);
E) copa o evento dgtado para a rea aocada;
F) Se s no for zero, pe o evento na rea aocada na FILA
4. Oua a nadade do programa abaxo ? (Indque sgncado gera do programa.)
1. vod nsere(nt )
2. {
3. prox++;
4. f(prox==(orgem+TAMANHO))
5. { cout << "\nEstouro de memora";
6. system("pause");
7. ext(1);
10. }
11. *prox = ;
13. }
Fnadade: Incu um novo eemento em uma PILHA.
Prncpas aes:
A) Incrementa o pontero para o prxmo oca vre na pha.
B) Verca se a pha est chea (chegou ao seu mte de TAMANHO)
C) Se a PILHA estver chea, nforma ESTOURO DE MEMORIA e sa do programa com retorno 1.
D) Se tver ugar, cooca o eemento neste oca vre da PILHA.
5. Oua a nadade do programa abaxo ? (Indque sgncado gera do programa.)
1. nt fatora(nt )
2. {nt fat;
3. f(==0) fat=1;
4. ese fat=*(fatora(-1));
5. return fat;
6. }
7. nt man()
8. {nt num;
9. whe(1)
10. {
11. cout << "\n\nInforme numero (ou -1 para m): ";
12. cn >> num;
13. f (num==-1) break;
14. cout << "\nFatora de " << num << " = " << fatora(num);
15. system("pause");
16. }
17. }
RESPOSTA:Fnadade: Cacua o fatora de um nmero ntero.
Prncpas aes:
A) Dene uma varve ntera para etura do nmero.
B) Fca em um oop contnuo efetuando:
C) L um nmero dgtado,
D) Se for -1, termna sando do oop com break;
E) Se for vdo, cacua o fatora atravs da funo recursva fatora e mostra na tea.
F) Na funo fatora, dene uma varve ntera para o novo fatora;
G) Sendo o nmero gua a zero, faz o novo fatora ser 1;
H) Se no for zero, cacua este novo fatora como sendo o nmero vezes o fatora do nmero medatamente
anteror (-1);
I) Retorna o vaor deste novo fatora.
6. Descreva, em nhas geras, o agortmo de FILA estudado. (Trata-se de uma e de qu, exatamente? Ea montada
sobre agum vetor ou matrz? A a anda?)
RESPOSTA:
uma estrutura de dados montada na memra RAM, usando vetores, aocao de memra e ponteros. O
vetor usado smua uma a que contm ponteros e utza os ndces:1. PLIV = prxma poso vre no vetor,
2. PREC = prxma poso a ser da/recuperada, como uma a de mpresso, Desta forma a FILA no anda,
o que anda so estes ndces;
Numa FILA o prmero eemento a entrar o prmero eemento a sar.
7. O que sgnca "aocar memra" ? E "desaocar memra" ?
RESPOSTA:
Aocar memra reservar parte da memra RAM para uso excusvo do programa. H macros para aocar
memra dsponves na nguagem "C" (caoc, maoc). Desaocar memra berar para o SO uma poro de
memra prevamente aocada que no ser ms usada;
A macro na nguagem C que bera a memra aocada a free().
8. O modo de operar da cacuadora HP um exempo do uso de qua estrutura de dados ? Por que ?
RESPOSTA:
PILHA porque os eementos e resutados parcas so emphados em uma PILHA nterna e as operaes so
executadas entre o tmo ou os dos tmos eementos da pha. Assm, este modo uma estrutura de dados
montada na memra RAM, usando ponters e vetor. Usa dos ponters: uma na base (aponta para o nco da
pha) e um no topo (aponta para o eemento de cma da pha).
9. Expque o conceto de recursvdade e d um exempo de funo recursva.
RESPOSTA:
uma caracterstca de uma funo/programa "chamar a s mesma", ou se|a, desvar para o endereo de
memra onde ea/ee prpro est rencando sua execuo. Ocorre quando o eemento dendo por ee
prpro dentro de um mte nto;
Exempo fatora(n) = n*fatora(n-1), onde fatora(0)=1 e fatora(1)=1.
10. Oua a nadade do programa abaxo ? (Indque sgncado gera do programa.)
1. do
2. { cout << "\n\n\tTtuo: " << (*px).ttuo;
3. cout << "\tAutor: " << (*px).autor;
4. cout << "\tNumero de regstro: " << (*px).regnum;
5. cout << "\tPreco: " << (*px).preco;
6. px=(*px).pprox;
7. } whe(px != (struct prs *) NULL);
RESPOSTA:
um nodo de uma sta near encadeada (LLE).
Fnadade: Percorrer uma LLE mostrando as nformaes de todos os seu nodos (vros).
Prncpas aes:
A) a partr de um pontero px para o nodo nca, mostra Ttuo, Autor, Numero de regstro e o Preo;
B) faz px apontar para o prxmo da sta;
C) enquanto px for dferente de zero (tmo nodo da LLE), contnua a mostrar at que chegue ao na.
11. Ouanto ao agortmo LLE: a) o que um nodo? B) quantos ponters tem um nodo da LLE? C) como feto o
encadeamento entre nodos na memra? d) fc ncur um novo eemento na LLE? Expque como feto; e) e quanto
a deetar um eemento? Expque como feto.
RESPOSTA:
A) Um nodo uma estrutura com campos de dados e peo menos um pontero para o prxmo nodo e
usado para nserr cada agrupamento de dados na LLE.
B) (1) No mnmo um pontero necessro. Caso se|a uma Lsta Lnear Dupamente encadeada, sero
necessros dos ponteros: um para o prxmo nodo e outro para o nodo anteror.
C) O ponter que est dentro de um nodo aponta para o outro. O encadeamento feto partr de um
pontero no programa para o nodo nca e depos peos ponteros exstentes em cada um dos nodos at o
tmo nodo, onde seu pontero ser nuo (NULL).
D) Sm. aocado uma rea em memra para acomodar todas as nformaes da estrutura do nodo e o
pontero para o prxmo. Se o nodo for o prmero da LLE, faz-se o pontero do programa apontar para ee
e o pontero do nodo ser nuo; Se o nodo for nserdo no na da LLE, faz-se o pontero do tmo nodo
(que nuo) apontar para o novo nodo e o pontero no nodo ser nuo; Se for nserdo no meo de uma LLE,
guarda-se o endereo do prxmo nodo da LLE que est no nodo atua, aps o qua, o novo ser nserdo.
Faz-se este endereo ser o endereo do novo nodo e ento faz-se o pontero deste novo nodo ser o
endereo do prxmo nodo que fo guardado anterormente.
E) Sm. Varre-se a LLE at o nodo aps o qua o nodo segunte ser removdo. Guarda-se o endereo do nodo
que ser removdo (do pontero do nodo atua). Faz-se o endereo do pontero do nodo atua ser o
endereo do prxmo nodo aps o nodo que ser removdo ( o endereo do pontero do nodo que ser
removdo) . Lbera-se a memra com o endereo anterormente guardado do nodo removdo.
void novo()
char str[81];
p = (struct prs *) malloc(sizeof(struct prs));
if (ppr ==(struct prs *) N!!) ppr = pau" = p;
else # pau" = ppr;
$hile((*p").pp" %= (struct prs *) N!!) p"=(*p").pp";
(*p").pp"=p;
p"=p;
&
cout '' ()n*i+ite o titulo, (; +ets((*p").titulo);
cout '' ()n*i+ite o autor, (; +ets((*p").autor);
cout '' ()n*i+ite o numero de re+istro, (; +ets(str);
(*p").re+num=atoi(str);
cout '' (*i+ite o preco, (; +ets(str);
(*p").preco=atof(str);
(*p").pp"=(struct prs *) N!!;&
-inalidade, inclui um novo elemento (novo livro) em uma !!. / !ista !inear .ncadeada.
-az aloca01o de uma 2rea do tamanho do nodo 345;
.n6uanto o pointer pp" for diferente de N!!7 faz o pointer p" rece8er o endere0o contido em pp";
9uando pp" for N!!7 faz pp" rece8er o endere0o contido em p;
3reenche o nodo com os dados, titulo7 autor7 re+num e pre0o7 e coloca N!! no pointer pp"
void inserir(void)
# char s[:5;]7 *p;
do
# cout '' ()n.ntre com o novo evento , '' pliv<1;
+ets(s);
if (strlen(s)===) 8rea>;
p = (char *) malloc(strlen(s));
if(%p) # cout '' (Nao houve alocacao de memoria.(; return; &
strcp?(p7s);
if(*s) 6store(p);
& $hile(*s); &
-inalidade, @nclui um novo evento em uma -@!A.
*efine uma 2rea para a entrada do evento, vetor de caracteres s (strin+) e um ponteiro.
!B o evento di+itado na strin+ s e7 en6uanto s n1o for uma strin+ di+itada nula (C)=D) ou seu tamanho n1o for zero,
Aloca uma 2rea de memEria para o evento;
@ndica .44F e retorna caso malloc() n1o consi+a alocar esta 2rea (sem memEria);
copia o evento di+itado para a 2rea alocada;
5e s n1o for zero7 pGe o evento na 2rea alocada na -@!A
void insere(int i)
#
pro"<<;
if(pro"==(ori+em<HAIANJF))
# cout '' ()n.stouro de memoria(;
s?stem(KpauseL);
e"it(1);
&
*pro" = i &
-inalidade, @nclui um novo elemento em uma 3@!JA.
@ncrementa o ponteiro para o prE"imo local livre na pilha.
Merifica se a pilha est2 cheia (che+ou ao seu limite de HAIANJF)
5e a 3@!JA estiver cheia7 informa .5HF4F *. I.IN4@A e sai do pro+rama com retorno 1.
5e tiver lu+ar7 coloca o elemento neste local livre da 3@!JA.
int fatorial(int i)
#int fat;
if(i===) fat=1;
else fat=i*(fatorial(iO1));
return fat;
&
int main()
#int num;
$hile(1)
#
cout '' ()n)n@nforme numero (ou O1 para fim), (;
cin PP num;
if (num==O1) 8rea>;
cout '' ()n-atorial de K '' num '' K = K '' fatorial(num);
s?stem(KpauseL);
&
-inalidade, Qalcula o fatorial de um nRmero inteiro.
*efine uma vari2vel inteira para leitura do nRmero.
-ica em um loop continuo efetuando,
!B um nRmero di+itado7
5e for O17 termina saindo do loop com 8rea>;
5e for v2lido7 calcula o fatorial atravSs da fun01o recursiva fatorial e mostra na tela.
Na fun01o fatorial7 define uma vari2vel inteira para o novo fatorial;
5endo o nRmero i+ual a zero7 faz o novo fatorial ser 1;
5e n1o for zero7 calcula este novo fatorial como sendo o nRmero vezes o fatorial do nRmero imediatamente anterior (iO1);
4etorna o valor deste novo fatorial.
FILA T uma estrutura de dados montada na memEria 4AI7 usando vetores7 aloca01o de memEria e ponteiros.
F vetor usado simula uma fila 6ue contSm ponteiros e utiliza os Undices,3!@M = prE"ima posi01o livre no vetor7
34.Q = prE"ima posi01o a ser lidaVrecuperada. *esta forma a -@!A n1o anda7 o 6ue anda s1o estes Undices;
Numa -@!A o primeiro elemento a entrar S o primeiro elemento a sair.
ALOCAR E DESALOCAR Alocar memEria S reservar parte da memEria 4AI para uso e"clusivo do pro+rama.
J2 macros para alocar memEria disponUveis na lin+ua+em KQL (calloc7 malloc).
*esalocar memEria S li8erar para o 5F uma por01o de memEria previamente alocada 6ue n1o ser2 mis usada;
A macro na lin+ua+em Q 6ue li8era a memEria alocada S a free().
HP PILHA por6ue os elementos e resultados parciais s1o empilhados em uma 3@!JA interna
e as opera0Ges s1o e"ecutadas entre o Rltimo ou os dois Rltimos elementos da pilha.
Assim7 este modo S uma estrutura de dados montada na memEria 4AI7 usando pointers e vetor.
sa dois pointers, uma na 8ase (aponta para o inUcio da pilha) e um no topo (aponta para o elemento de cima da pilha).
RECURSIVIDADE T uma caracterUstica de uma fun01oVpro+rama Kchamar a si mesmaL7 ou seWa7
desviar para o endere0o de memEria onde elaVele prEprio est2 reiniciando sua e"ecu01o.
Fcorre 6uando o elemento S definido por ele prEprio dentro de um limite finito;
."emplo fatorial(n) = n*fatorial(nO1)7 onde fatorial(=)=1 e fatorial(1)=1.
do
# cout '' ()n)n)tHitulo, ( '' (*p").titulo;
cout '' ()tAutor, ( '' (*p").autor;
cout '' ()tNumero de re+istro, ( '' (*p").re+num;
cout '' ()t3reco, ( '' (*p").preco;
p"=(*p").ppro";
& $hile(p" %= (struct prs *) N!!);
T um nodo de uma lista linear encadeada (!!.).
-inalidade, 3ercorrer uma !!. mostrando as informa0Ges de todos os seu nodos (livros).
a partir de um ponteiro p" para o nodo inicial7 mostra Hitulo7 Autor7 Numero de re+istro e o 3re0o;
faz p" apontar para o prE"imo da lista;
en6uanto p" for diferente de zero (Rltimo nodo da !!.)7 continua a mostrar atS 6ue che+ue ao final.
NODO S uma estrutura com campos de dados e pelo menos um ponteiro para o prE"imo nodo e
S usado para inserir cada a+rupamento de dados na !!..
Um pointer. *izemos no mUnimo um ponteiro S necess2rio por6ue caso seWa uma !ista !inear *uplamente encadeada7
ser1o necess2rios dois ponteiros, um para o prE"imo nodo e outro para o nodo anterior.
ENCADEAMENTO F pointer 6ue est2 dentro de um nodo aponta para o outro.
F encadeamento S feito X partir de um ponteiro no pro+rama para o nodo inicial e
depois pelos ponteiros e"istentes em cada um dos nodos atS o Rltimo nodo7
onde seu ponteiro ser2 nulo (N!!).
FCIL INCLUIR NOVO ELEMENTO NA LLE 5im. T alocado uma 2rea em memEria
para acomodar todas as informa0Ges da estrutura do nodo e o ponteiro para o prE"imo.
5e o nodo for o primeiro da !!.7 fazOse o ponteiro do pro+rama apontar para ele e
o ponteiro do nodo ser nulo; 5e o nodo for inserido no final da !!.7 fazOse o ponteiro
do Rltimo nodo (6ue S nulo) apontar para o novo nodo e o ponteiro no nodo ser nulo;
5e for inserido no meio de uma !!.7 +uardaOse o endere0o do prE"imo nodo da !!.
6ue est2 no nodo atual7 apEs o 6ual7 o novo ser2 inserido. -azOse este endere0o ser o endere0o
do novo nodo e ent1o fazOse o ponteiro deste novo nodo ser o endere0o do prE"imo
nodo 6ue foi +uardado anteriormente.
FCIL DELETAR UM ELEMENTO 5im. MarreOse a !!. atS o nodo apEs o 6ual o nodo
se+uinte ser2 removido. YuardaOse o endere0o do nodo 6ue ser2 removido (do ponteiro do nodo atual).
-azOse o endere0o do ponteiro do nodo atual ser o endere0o do prE"imo nodo apEs o nodo 6ue ser2 removido
(S o endere0o do ponteiro do nodo 6ue ser2 removido) . !i8eraOse a memEria com o endere0o anteriormente
+uardado do nodo removido.

Você também pode gostar