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.