Você está na página 1de 3

Universidade Federal do Ceará – Campus Russas

Linguagens de Programação
Prof. Ms. Rafael Ivo

Lista de Exercícios 4 – Tipos

1) Defina tipo.

2) O que é um erro de tipo?

3) Qual a diferença entre uma linguagem com tipagem estática e tipagem dinâmica?

4) Qual a diferença entre uma linguagem fortemente tipada e fracamente tipada?

5) O que é o erro de overflow e porque ele acontece?

6) O operador “+” realiza a soma de dois números na maioria das linguagens. Ele realiza a mesma
operação quando recebe dois valores inteiros e quando recebe dois valores de ponto flutuante?
Justifique sua resposta.

7) O que acontece na maioria das linguagens quando duas variáveis de tipos diferentes estão sendo
combinados por um operador?

8) Diferencie conversão implícita de conversão explícita.

9) Diferencie conversão limitante de conversão ampliadora.

10) Por que conversões limitantes não são feitas implicitamente em uma linguagem fortemente
tipada?

11) É possível que uma conversão ampliadora resulte em perda de dados? Se sim, cite um caso.

12) Diferencie equivalência de nomes e equivalência estrutural de tipos.

13) O que é um subtipo?

14) O que é polimorfismo paramétrico?

15) Este código em Java compila? Justifique sua resposta.

byte b = 50;
b = b * 50;

16) No código escrito em C abaixo, quais conversões são válidas?

void main(){
int a = 22;
long b = 44;
double c = 1.406;
b = a;
c = a;
a = b;
b = c;
}
17) Qual deve ser o tipo de dados da variável e para que o programa abaixo seja correto?

void main(){
float a;
int b;
long int c;
double d;
...
e = a*b/c*d;
}

18) Analise a última linha de cada código. Indique todas as conversões que estejam acontecendo e
os tipos dos operadores. Indique, se possível, o valor final da variável x.

a) Código 1 b) Código 2 c) Código 3

float x; float x; int x;


int y = 5, z = 3; int y = 3, z = 2; float y = 3.2, z = 1.6;
x = y/z; x = (float)y/z; x = (int)y/(int)z;

19) O programa abaixo escrito em Java está correto? Explique o que acontece em cada sentença de
atribuição.

class Animal{
}

class Gato extends Animal{


}

public class Principal{


public static void main(String[] args){
Gato miau, persa;
Animal pet;

miau = new Gato();


pet = miau;
persa = (Gato) pet;
}
}

20) Em linguagens orientadas a objeto, como Java, atribuições como as mostradas na linha grifada
do código abaixo são permitidas. Que tipo de conversão está acontecendo nessa atribuição?
Justifique sua resposta.

class Poligono{ a) conversão implícita ampliadora


} b) conversão implícita limitante
c) conversão explícita ampliadora
class Triangulo extends Poligono{
} d) conversão explícita limitante
e) n.d.a.
public class Principal{
public static void main(String[]
args){
Poligono p = new Triangulo();
...
}
}
21) No poker, uma pessoa tem 5 cartas na mão. Cada carta possui um número ou letra e um naipe.
Os naipes podem ser copas, espadas, paus e ouros. Crie um trecho de código em C que modele estas
informações usando enumerações, estruturas e matrizes.

22) Na estrutura de dados árvore binária, cada nó da árvore possui um elemento a ser armazenado
(ex: um inteiro) e possivelmente duas árvores binárias filhas. A figura abaixo mostra o esquema
gráfico de uma árvore binária. Crie um trecho de código em C que modele esta estrutura.

23) Quadtree é uma árvore onde cada nó possui exatamente 4 nós ou nenhum. Elas podem ser
usadas para diminuir o trabalho de detectar colisão (Ex: posso certamente descartar colisão do
Mário com o chão porque ele está em uma área vazia). Cada nó pode ser vazio ou cheio ou parcial.
Os nós parciais possuem obrigatoriamente filhos. Nós cheios ou vazios são as folhas da árvore.
Cada nó também deve guardar seu tamanho, que neste caso é um inteiro (Ex: se esta cena inteira
abaixo for um quadrado de tamanho 8, os menores quadrados serão de tamanho 1 e o quadrado
onde o Mário está é de tamanho 4). Crie um trecho de código em C que modele estas informações
usando enumerações, estruturas e matrizes.

Legenda:
Cores: Números:
Branco = Vazio 0 = Superior esquerdo
Cinza = Parcial 1 = Superior direito
Preto = Cheio 2 = Inferior esquerdo
3 = Inferior direito