DCC003: Algoritmos e Estruturas de Dados I
2013/1

Exercícios 4: Conversão de bases, estruturas e escopo de variáveis

Exercício 1. Em geral representamos números em base decimal. Outras bases comuns para representação de números são: base binária (dígitos 0 e 1), base octal (dígitos entre 0 e 7), base decimal (dígitos entre 0 e 9) e base hexadecimal (dígitos entre 0 e 9 mais as letras A, B, C, D, E e F).

Tomemos por exemplo o número 210 (dois elevado à décima potência):

Outro exemplo, tomemos o número 27 + 26:

As bases octal e hexadecimal são úteis pois elas são fácilmente relacionadas com a base binária usada por computadores. Em particular, números em base octal agrupam bits de 3 em 3, e números em hexadecimal agrupam bits de 4 em 4. Compare:

210 = 1 * 210 = 10 000 000 000 em binário = 2000 em octal = 100 0000 0000 em binário = 400 em hexadecimal.

28 + 27 = 11 000 000 em binário = 300 em octal = 1100 0000 em binário = C0 em hexadecimal.

Complete a tabela abaixo com a representação de números nas bases binária, octal, decimal e hexadecimal.

Binária Octal Decimal Hexadecimal
10 000 000 000 2 000 1024 400
100 100 010 ? ? ?
? 433 ? ?
? ? 392 ?
? ? ? 4D

Exercício 2. Em C podemos representar números nas bases octal, decimal e hexadecimal, usando as seguintes regras:

Note que as regras acima se aplicam também para constantes negativas precedidas do operador negativo (sinal menos).

Reescreva as colunas relativas às bases octal, decimal e hexadecimal da tabela do exercício 1, convertendo os números para sua representação em C.

Exercício 3. Esboce um programa que defina uma estrutura endereço com três campos: um string de 80 caracteres, um inteiro, e um número de ponto flutuante. Em seu programa, declare duas variáveis com tipo igual ao da estrutura definida. Inicialize a primeira variável na declaração e inicialize a segunda variável depois da declaração (campo por campo). Por último imprima na tela os valores dos campos das duas variáveis.

Exercício 4. Informe qual a saída impressa pelo código abaixo. Atenção: considere o escopo das variáveis envolvidas. Tente resolver "de cabeça" antes de executar o código.

	int i, j;
	int soma = 0;
	for(i = 0; i < 3; i++) {
		soma++;
		int soma = 0;
		for(j = 0; j < 3; j++) {
			printf("%d %d %d\n", i, j, soma);
			soma++;
		}
	}
	printf("%d\n", soma);