[Programação Imperativa] [Paradigmas da Programação II]
2006.04.03

Objectivos:

O objectivo principal desta ficha é consolidar os conhecimentos sobre a implementação do produto cartesiano em C.

Para atingir esse fim, o aluno irá desenvolver pequenos programas em C que envolvem a utilização do produto cartesiano na especificação das estruturas de dados.
Exercícios:
  1. Jornadas de Futebol
  2. Polinómios


Jornadas de Futebol


Pretende-se guardar a informação sobre os resultados dos jogos de uma jornada de um campeonato de futebol na seguinte estrutura de dados:
typedef int Golos;
				
typedef char Equipa[30];

typedef struct sInterv
  { Equipa e;
    Golos g;
   }  Interv;
   
typedef struct sJogo
  { Interv i1, i2; }  Jogo;
  
typedef Jogo Jornada[20];

Desta forma podemos ter um programa que vai trabalhar as jornadas e que declara as seguintes variáveis:
...
int main()
{
  Jornada j1, j2;
  Jornada campeonato[56];
  ...
}

Depois de analisar bem a estrutura de dados especifique as seguintes funções e crie um programa para as testar.
bool igualj( Jornada j );
/* que verifica se nenhuma equipa joga com ela própria */
bool semrepet( Jornada j );
/* que verifica se nenhuma equipa joga mais do que um jogo */
??? empates( Jornada j );
/* que dá a listas dos pares de equipas que empataram na jornada */
??? equipas( Jornada j ); 
/* que dá a lista das equipas que participam na jornada */
??? calcres( Jornada j );
/* que calcula os pontos que cada equipa obteve na jornada (venceu - 3 pontos; perdeu - 0 pontos; empatou - 1 ponto) */

Como exercício extra defina tipos de dados para suportar o tipo de resultado de algumas funções (aquelas que têm o tipo a ???).


Polinómios


Uma forma de representar polinómios de uma variável é usar listas de pares (coeficiente, expoente).

Em Haskell a definição do tipo de dados seria:
       type Pol = [(Float,Int)]

Note que o polinómio pode não estar simplificado. Por exemplo,
    [(3.4,3), (2.0,4), (1.5,3), (7.1,5)] :: Pol

representaria o polinómio: 3.4 x3 + 2 x4 + 1.5 x3 + 7.1 x5.

Desenvolva então, em C, as seguintes alíneas:

(a) Defina em C as estruturas de dados para suportar os polinómios.

(b) Defina a função de cálculo do valor de um polinómio num ponto.

(c) Defina uma função que dado um polinómio, calcule o seu grau.

(d) Defina uma função que calcule a derivada de um polinómio.

(e) Defina uma função para ordenar um polinómio por ordem crescente de grau.

(f) Defina uma função para simplificar um polinómio.

(g) Defina uma função para somar dois polinómios nesta representação.

(h) Defina uma função que calcule o produto de dois polinómios.