Exercícios

1) (Vectores) Escreva em linguagem C uma função que leia uma sequência de valores inteiros de um ficheiro até EOF e guarde os valores num vector, alterando a sua dimensão de 10 em 10: int *leints(FILE*, int *siz); Realize um programa que testa a rotina imprimindo os valores lidos. 

2) (Pontos 2D e Rectângulos) Considere que um ponto é definido pelas suas coordenadas e que um rectângulo é definido pelos pontos dos cantos superior esquerdo e inferior direito. Considere ainda as seguintes definições para pontos e rectângulos: 

typedef struct { 
  int x; 
  int y; 
} Ponto; 

typedef struct { 
  Ponto se; 
  Ponto id; 
} Rectangulo; 


a) Implemente a função Ponto * lePontos(int n) que lê um conjunto de n pontos e retorna um vector contendo todos os pontos. Considere que n é um número pedido ao utilizador. 

b) Implemente a função void escrevePontos(Ponto * pontos, int n) que mostra no standard output os pontos contidos num vector de tamanho n. 

c) Implemente a função Rectangulo * defineRectangulo(Ponto * pontos, int n) que dado um vector de pontos de tamanho n devolve o rectângulo de menor área que contém todos os pontos do vector. 

3) (Vectores de Estruturas) Considere que se pretende ler do standard input a informação de um conjunto de inscrições de alunos a disciplinas e respectivas notas. A estrutura que guarda a informação de uma inscrição está definida do seguinte modo:

typedef struct { 
  int num_aluno; 
  char* cod_disc; 
  int nota; 
} Inscricao; 


a) Escreva em linguagem C a função Inscricao* lerInscricoes(int n) que lê um sequência de n inscrições do standard input e devolve um novo vector de inscrições de alunos em disciplinas. Assuma que o código de uma disciplina é uma sequência de letras e digitos com tamanho máximo de 10 caracteres. 

b) Escreva em linguagem C a função int* distribuicaoNotas(Inscricao* ins, int n, char* disc) que dado um vector de inscrições de tamanho n devolve um novo vector de inteiros com a distribuição das notas de uma disciplina. Ou seja, na posição indice i do vector deverá conter o número de alunos que teve nota i à disciplina.

4) (Vectores de Estruturas) Considere que se pretende ler um ficheiro e guardar as suas linhas numa lista ligada. Cada linha tem no máximo BUFSIZ caracteres, mas não deve desperdiçar espaço. Desenvolva duas soluções, onde a estrutura tem um ponteiro para a linha, e uma só estrutura de dimensão variável.

Soluções: