Buscar

EXERCÍCIO UNIDADE 3 - AMPLI CIÊNCIA DE DADOS

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

EXERCÍCIO - UNIDADE 3
1. Nas linguagens de programação funcional, diz-se que é possível evitar estouros de pilha 
usando "recursão de cauda". A diferença entre recursiva normal e de cauda é justamente 
aonde a chamada recursiva é chamada. Caso seja chamada na "cauda" da função, é uma 
chamada de cauda recursiva. A "cauda" da função é sua última chamada. É a última 
computação / cálculo feito pela função, e logo depois dela, nenhum tratamento é feito antes de 
retornar seu valor.  Neste contexto, analise as figuras 16(a) e 16(b).
 
Figura 16 – (a) recursão normal e (b) recursão de cauda
É correto apenas o que se afirma em: 
I - Na figura 16(a), cada chamada recursiva aumenta porque o programa só pode calcular o 
resultado da primeira função chamada, para depois calcular o resultado das que a chamaram. Assim,
a pilha estoura.
II - Na figura 16(b), cada passo de chamadas nem aumenta nem diminui. A partir do momento que a
função recursiva é chamada, todas são chamadas no final, sem precisar de mais cálculos.
III - Quando um compilador pronto para isso vê uma chamada recursiva na cauda, ele 
automaticamente a transforma em um laço durante as otimizações. Desta forma não perde as 
vantagens, nem a elegância da programação funcional, mas também não corre o risco de passar por 
um estouro de pilha.
III
-----------------------
---------------
3.
O trecho de programa a seguir calcula a média entre duas temperaturas distintas:
 
#include<stdio.h>
float t1, t2;
float calcularMedia(){
return (t1 + t2)/2;
}
int main(){
printf("\n Digite as duas temperaturas: ");
scanf("%f %f",&t1,&t2);
printf("\n A temperatura media = %.2f",calcularMedia());
return 0;
}
O trecho de programa é um exemplo prático da utilização do:
escopo global de uma variável.
------
4. Para criar uma função utiliza-se a seguinte sintaxe:
 
<tipo de retorno> <nome> (<parâmetros>)
{
<comandos da função>
<retorno> ( )
}
 
Para cada declaração da função existem parâmetros que são obrigatórios e outros que são opcionais.
Neste contexto, relacione a Coluna A que contém as sintaxe com a Coluna B que contém as 
funções.
 
I-B / II-A / III-C / IV-E / V-D.   <tipo de retorno> - Indica qual o tipo de valor a função retornará. 
<nome> - Identificará a função. <parênteses depois do nome> - Toda função terá o nome 
acompanhado por eles. <comandos da função> - Só justifica criar se tiver um conjunto de 
comandos para realizar. <retorno> - Se for void é opcional, porém, quando não for void é 
obrigatório. 
----
5. Analise o trecho de programa a seguir:
 
#include<stdio.h>
#include<stdlib.h>
int* alocar(){
return malloc(200);
}
int main(){
int *memoria;
memoria = alocar();
if(memoria != NULL){
printf("Endereco de memoria alocada = %x",memoria);
}
else{
printf("Memoria nao alocada");
}
return 0;
}
 
Agora, avalie as seguintes asserções e a relação proposta entre elas.
 
I - Foi criado um ponteiro inteiro e, após a função ser chamada, seu resultado foi armazenado no 
ponteiro chamado memoria.
PORQUE
II - Se o valor do ponteiro memoria é diferente de NULL, então sabe-se que a alocação foi feita com
sucesso e imprime o endereço da primeira posição, caso contrário, o usuário é informado que a 
memória não foi alocada.
As asserções I e II são proposições verdadeiras, mas a asserção II não é uma justificativa da 
asserção I.   I - VERDADEIRA - Foi criado um ponteiro inteiro e, após a função ser chamada, seu 
resultado foi armazenado no ponteiro chamado memoria.   II - VERDADEIRA - Se o valor do 
ponteiro memoria é diferente de NULL, então sabe-se que a alocação foi feita com sucesso e 
imprime o endereço da primeira posição, caso contrário, o usuário é informado que a memória não 
foi alocada. 
-----
4 – Tentativa 2
Conforme Mizrahi (2008) o escopo de uma variável é definido pelas regiões (blocos) onde a 
variável pode ser utilizada e é nesta hora que surge o conceitos das variáveis globais e variáveis 
locais. Variáveis globais são aquelas declaradas no início de um algoritmo. São visíveis, ou seja, 
podem ser utilizadas no algoritmo principal e por todos as funções. As variáveis locais são aquelas 
declaradas no início de uma função. São visíveis, ou seja, podem ser utilizadas somente pela função
onde foram declaradas.
 
Observe o programa a seguir: 
Considerando o programa apresentado, avalie as afirmativas a seguir:
 
I.   O programa apresentado está errado pois a variável res foi declarada duas vezes, causando um 
erro de compilação.
II.  A função fat está escrita antes da função main ( ) porém, o programa começa sempre pela 
função main ( ) independentemente da quantidade de funções que possam ter antes do main ( ).
III.  Para a função fat, o parâmetro n funciona como uma variável local (ou seja, válida dentro da 
função apenas), juntamente com a variável res.
IV.  A função fat possui a variável n e a variável n recebe seu valor no instante da chamada da 
função dentro da função main ( ).
É correto o que se afirma em:
Apenas as afirmativas II, III e IV estão corretas.

Continue navegando