Exercícios de Revisão sobre Estruturas, Ponteiros e Conversão de Bases Numéricas
1. Exercícios de Revisão
Informação geral: O conceito de modularização deve ser utilizado evitando que
funcionalidades dos programas sejam implementadas na função main(). Essa função somente
deve ter definições de variáveis e chamadas de outras funções.
1) Utilizando o Tipo de Dados Abstratos (TAD) definido abaixo crie uma função que realize a
média dos valores dos elementos de uma matriz qualquer do tipo Matriz. Os elementos
devem ser alocados dinamicamente.
typedef struct {
int m;
int n;
float ** elementos;
} Matriz;
2) Foi realizada uma pesquisa entre habitantes de uma região. As seguintes informações
foram coletadas: idade, salário. Utilizando o TAD abaixo especificado crie um programa
que possibilite capturar e imprimir o conteúdo do TAD. Crie ainda funções que calculem a
média salarial dos habitantes e a menor e a maior idade do grupo. Considere que o vetor
necessário para armazenar as informações dos habitantes deve ser incrementado a
medida que as entrevistas vão ocorrendo.
typedef struct{
int idade;
float salario;
} Habitante;
typedef struct {
int tamanho;
Habitante *hab;
} Vetor;
3) Utilizando a estrutura abaixo crie um programa que capture as informações de maneira
incremental de modo que, a cada novo cadastro, o vetor seja alocado/realocado. Ao final
realize a impressão do conteúdo do vetor.
typedef struct {
int matricula;
char *nome;
} Aluno;
typedef struct {
int tamanho;
Aluno *aluno;
} Vetor;
2. 4) Utilizando o conceito de aritmética de ponteiros elabore um programa que contenha uma
função e possibilite a localização de determinado elemento em uma matriz. A função deve
retornar o endereço do elemento da matriz onde o valor foi encontrado, de tal modo que,
após a adequada conversão se possa obter o conteúdo/valor deste elemento.
5) Uma agenda telefônica é armazenada como uma lista simplesmente encadeada. Um
elemento desta agenda é apresentado abaixo. Crie as funções inicializa, insere e pesquisa.
A função insere deve inserir elementos de forma que estes permaneçam ordenados em
ordem crescente de nome. A função pesquisa deve pesquisar clientes baseado no nome e
retorna o endereço do bloco encontrado ou NULL caso não exista. PS: Você deve ser capaz
de criar os parâmetros adequados a cada uma destas funções.
struct tipo_elemento {
char nome[20];
int telefone;
char endereco[20];
struct tipo_elemento *proximo;
};
6) Na matemática os números podem ser representados em diversas bases numéricas.
Destas, a mais utilizada é a base 10 onde os dígitos são 0,1,2,3,4,5,6,7,8,9 ou seja, 10
símbolos. Se colocarmos mais de um dígito então podemos representar valores maiores,
tal como o número 1000. Além da base 10, existem outras bases numéricas muito
utilizadas na computação como a base 2, 8 e 16. Por exemplo a base 2 terá 2 símbolos
(0,1), já a base 8 terá 8 símbolos (0,1,2,3,4,5,6,7) e a base 16 terá 16 símbolos
(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). Um número representado numa determinada base A é
equivalente a outro número representado numa base B, no sentido que eles representam
a mesma quantidade. Veja a tabela abaixo:
Pela tabela apresentada, percebe-se que os números representados numa mesma linha
representam a mesma quantidade mas expressos em diferentes bases numéricas. Como
exemplo, temos que o número 1710 (Perceba que na notação usamos na parte
3. mais baixa um indicativo da base na qual o número está representado, no caso 10) é
representado na base 2 por 000100012 e na base 16 por 1116. O termo mostrado abaixo
do número tem objetivo deixar claro qual é a base numérica em que o número está
escrito. Conversão de número da base 10 para uma base qualquer Este método de
conversão é baseado na divisão. Por exemplo, deseja-se converter o número 20 escrito na
base 10 (2010) para um número na base 2. A figura 1 mostra os passos da conversão. A
resposta final é 101002, ou seja, os valores de resto apanhados na ordem inversa da
operação realizada. Note que este método só funciona para valores que se encontram na
base 10 e são inteiros positivos.
Escreva uma função RECURSIVA que mostre na tela dígito por dígito o valor resultante da
conversão de um número N (na base 10) para a base NOVA_BASE