INF1005 - PROGRAMAÇÃO 1  
LISTA DE EXERCÍCIOS 13  
1
. Considere uma tabela com os resultados de um campeonato de futebol, onde os  
resultados dos times são dispostos numa ordem qualquer. Como ilustrado a seguir, para  
cada time registrasse total de pontos ganhos (PG), número de vitórias (V), número de  
empates (E), número de derrotas (D), número de gols pró (GP) e número de gols contra  
(GC).  
Considere ainda que os números da tabela são representados em uma matriz de valores  
inteiros. Cada linha da matriz representa os resultados de um determinado time. Na  
primeira coluna da matriz armazena-se o número de pontos ganhos, na segunda o número  
de vitórias e assim por diante.  
a) Escreva uma função que retorne o número do time com o melhor saldo de gols. A  
função deve receber como parâmetros o número de times, n, e a tabela com os  
resultados, tab, e deve obedecer ao seguinte protótipo:  
int melhorsaldo(int n, int tab[][6]);  
b) Escreva uma função que retorne o número do time que está na liderança. A  
liderança é determinada pelo time que tiver maior número de pontos ganhos. Se  
um ou mais times tiverem o mesmo número de pontos, ꢀe usado o seguinte  
critério de desempate: número de vitórias e saldo de gols, nesta ordem. Se,  
mesmo assim, dois ou mais times empatarem, deve-se retornar o número de um  
dos times líderes. A função deve receber como parâmetros o número de times, n,  
e a tabela com os resultados, tab, e deve obedecer ao seguinte protótipo:  
int lider(int n, int tab[][6]);  
c) Escreva uma função que retorne o número do time que está em ꢀultimo lugar na  
classificação, obedecendo o mesmo critério de classificação do item anterior. Se  
dois ou mais times empatarem em todos os critérios, deve-se retornar um dos  
times que está em último lugar. A função deve receber como parâmetros o  
número de times, n, e a tabela com os resultados, tab, e deve obedecer ao  
seguinte protótipo:  
int ultimo(int n, int tab[][6]);  
d) Escreva um programa que leia a tabela de resultados de um arquivo e teste suas  
funções.  
2
. Considere n cidades numeradas de 0 a n-1 que estão interligadas por uma série de  
estradas de mão única. As ligações entre as cidades são representadas pelos elementos de  
uma matriz quadrada Lnxn, cujos elementos lij assumem o valor 1 ou 0, conforme exista ou  
não estrada direta que saia da cidade i e chegue à cidade j.  
Assim, os elementos da linha i indicam as estradas que saem da cidade i, e os elementos  
da coluna j indicam as estradas que chegam à cidade j. Por convenção lii = 1, mas atenção,  
uma ligação da cidade para ela mesma não deve ser contada como saída nem entrada da  
cidade. A figura abaixo mostra um exemplo para n = 4 e seu código pode considerar uma  
matriz L de tamanho 4x4.  
Para cada uma das questões abaixo, você deve desenvolver a função solicitada e também  
testa-la através de chamadas na função principal do programa.  
a) Escreva uma função que recebe a matriz de ligações L e um índice de cidade k, e  
escreve na tela quantas estradas saem e quantas chegam à cidade k (só considerar  
estradas e saídas diretas).  
Exemplo de saída para k=0:  
Existe 1 estrada(s) que chega(m) na cidade 0 e 2  
estrada(s) para sair.  
b) Escreva uma função que recebe a matriz de ligações L e retorne o índice da cidade  
onde chegam o maior número de estradas.  
c) Escreva uma função que recebe a matriz de ligações L e um índice de cidade k, e  
testa se todas as ligações diretas entre a cidade k e outras são de mão dupla. Caso  
seja de mão dupla a função retorna 1, ou retorna 0 para o caso contrário.  
d) Escreva uma função que recebe a matriz de ligações L e um vetor C de tamanho  
igual ao número de cidades. A função escreve no vetor C para cada cidade se ela é  
(1) ou não é (0) isolada, isto é, se não têm ligação com nenhuma outra. Os índices  
das posições no interior de C representam as respectivas cidades. Exemplo: C[5]  
deve ser preenchido avaliando se a sexta cidade é ou não isolada.  
e) Escreva uma função que recebe a matriz de ligações L e escreva em um arquivo  
chamado avisos.txtuma mensagem alertando cada uma das cidades que são fim  
de linha, ou seja, as cidades das quais não há saída, apesar de haver entrada. Sua  
função deve escrever no arquivo a seguinte mensagem para cada cidade fim de  
linha encontrada em L: Atenção a cidade XXX é fim de linha, não há saídas dela!”  
f) Escreva uma função que recebe a matriz L e um vetor com uma sequência de m  
inteiros cujos valores estão entre 0 e o número de cidades 1. A sequência de  
inteiros no vetor representa um roteiro percorrendo as cidades de destino em  
destino. Sua função deve verificar se é possível realizar o roteiro correspondente e  
nesse caso retornar 1 ou se não é possível, por não haver estradas ligando as  
cidades desejadas na ordem do roteiro. No exemplo dado, o roteiro representado  
pela sequência (m=5) 2 3 2 1 0 é impossível.