DCC003: Algoritmos e Estruturas de Dados I
2013/1

Exercícios 6: Funções e alocação dinâmica

Exercício 1. Defina uma estrutura com três campos: um string de 80 caracteres, um inteiro, e um número ponto flutuante. Crie uma função para inicializar os campos de uma variável desta estrutura (assuma que a variável foi criada fora da sua função inicializadora). Sua função deve ter tipo de retorno void. Dica: a função scanf inicializa variáveis que foram declaradas fora dela (não é para usar scanf, só olhar como ela funciona).

Exercício 2. Defina uma estrutura com três campos: um string de 80 caracteres, um ponteiro para inteiro, e um número de ponto flutuante. Crie uma função para alocar e inicializar os campos de uma variável desta estrutura. Sua função deve retornar um ponteiro para a estrutura alocada e inicializada.

Exercício 3. Faça uma função para calcular o volume de um cilindro, seguindo a formula: V = π * raio2 * altura.

Exercício 4. O valor de e (número de Euler) pode ser aproximado pelo somatório 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + ...

Implemente um programa para aproximar o valor de e. Seu programa deve aumentar a precisão da aproximação calculando iterativamente (isto é, num laço) os termos do somatório acima. Seu programa deve parar a aproximação quando o i-ésimo termo 1/i! for menor do que 10-6.

Implemente esse programa fazendo uma função separada para calcular o fatorial de i.

Exercício 5. Defina uma estrutura para armazenar um CD de música (struct CD { ... };) e uma estrutura para armazenar uma música (struct musica { ... };). Crie uma biblioteca de funções para criação e manipulação de CDs. Use o código abaixo como seu arquivo cdmusica.h.

#ifndef __CDMUSICA_H__
#define __CDMUSICA_H__

struct musica {
    char *nome;
    int duracao;
};

struct CD {
    char *nome;
    char *banda;
    struct musica **musicas;
    int num_musicas;
};

struct CD * cria_CD(void);
void destroi_CD(struct CD *cd);

struct musica * cria_musica(void);
void destroi_musica(struct musica *mus);

void adiciona_musica(struct CD *cd, struct musica *mus);