Programação — MEEC — 2º Semestre 1o Exame — 11 de Junho de 2011 Duração: 3h00 O exame só pode ser realizado em folhas de exame do IST, usando canetas de tinta azul ou preta. Identifique todas as folhas do exame, com o nome, número de aluno. As folhas que não estejam identificadas não são classificadas. Faça cada grupo de perguntas numa folha separada. Garanta que as respostas são claras, distinguindo e separando-as dos rascunhos. Durante esta prova não há esclarecimento de dúvidas. Se detectar algum erro, que tenha influência na resolução de um exercício, assinale-o. Se tiver razão ser-lhe-á atribuída a totalidade da cotação dessa pergunta. 1. (5.0 valores) 1.a) (4.0 valores) O código seguinte tem erros e como tal não faz o que aparece descrito no comentário. Identifique cada um dos erros sintácticos e lógicos indicando a linha onde ocorre. Sugira uma correcção possível para cada erro. Pressuponha que foram feitos todos os includes necessários. JUSTIFIQUE TODAS CORRECÇÕES, indicando as consequências dos erros! /* Programa que lê do teclado uma string e conta o número de dígitos aí presentes*/ int main(){ int linha[100]; int I; int c; printf("Escreva uma frase\n"); fgets(linha, 1024, stdin); } while(i<100){ if(linha(i) >0 && linha(i) < 9){ c = c+1; i=i+1; } printf("foram lidos o $d digitos",c); exit(0); 1.b)(1.0 valores) Observe o seguinte troço de código. Identifique e explique os seus problemas: int main(){ char linha[1024]; char palavra1[20]; char palavra2[20]; ... sscanf(linha, "%s %s", palavra1, palavra2) ... } 1º Exame de Programação MEEC 2010/2011 – 2 Semestre — 2/3 — 2. (4.5 valores) 2.a) (2.0 valores) Desenvolva uma função que recebe como argumento um vector de 100 inteiros, calcula a sua média e desvio padrão. O cabeçalho dessa função deve ser float media(int vect[100]); 2.a) (2.5 valores) Desenvolva um programa que lê de um ficheiro chamado dados.dat 100 inteiros e calcula, usando a função anterior, a média desses valores. Em cada linha deve aparecer um inteiro. Se a linha não tiver um inteiro, deverá ser ignorada e impressa uma mensagem de erro. Se a linha tiver mais caracteres para além do inteiro deverá unicamente ser impressa uma mensagem de aviso. Se o ficheiro contiver mais de 100 inteiros, deverá ser impressa uma mensagem de aviso e calculada a média dos 100 primeiros. Se o ficheiro contiver menos de 100 inteiros deverá ser impressa uma mensagem de erro e sair (sem calcular a média). 3. (5.0 valores) 3.a) (0.5 valores) Defina o tipo quadrado, que permite guardar a informação de quadrados: coordenada do centro e comprimento do lado. 3.b) (0.5 valores) Defina uma função que recebe como argumento um quadrado e retorna a sua área. 3.c) (1.0 valores) Defina uma função que recebe como argumento um quadrado e um ponto e retorna verdadeiro se esse ponto se encontrar dentro do quadrado e falso caso contrário. Pressuponha que as faces dos quadrados são paralelas aos eixos x e y. 3.d) (1.0 valores) Desenvolva uma função que recebe como argumento dois quadrados e retorna verdadeiro se esse quadrados se interceptarem e falso caso contrário. Pressuponha que as faces dos quadrados são paralelas aos eixos x e y. 3.e) (2.0 valores) Defina uma função que recebe como argumento um vector de 100 quadrados e calcula quantos desses quadrados se interceptam entre si 1º Exame de Programação MEEC 2010/2011 – 2 Semestre — 3/3 — 5. (5.5 valores) Sistema de senhas. Lista por ordem de chagada. Com nome e numero do serviço tipo Função de entrada. Chamada de um cliente (recebe o numero do serviço). Retorna o nome e remove-o da lista Estatistica para cada serviço imprime quantas pessoas estao à espera Entrada (com mudança de estado dos outros serviços) Saida (com mudança de estado dos outros serviços 5.a) (0.5 valores) Declare os tipos necessários ao armazenamento da lista de empregados. 5.b) (1.5 valores) Escreva uma função chamada contabiliza_idades cujos argumentos sejam um apontador para a base da lista, o ano corrente e um vector de inteiros. A função deverá contabilizar e armazenar nesse vector o número de empregados com uma determinada idade. Só deverão ser contabilizadas as idades entre 18 e 70 anos. Na primeira posição deverá ficar armazenada a quantidade de trabalhadores com 18 anos, na segunda a quantidade de trabalhadores com 19 e na última a quantidade de trabalhadores com 70. 5.c) (2.0 valores) Escreva uma função que receba como argumento o vector anterior e desenhe no ecrã um gráfico de barras com a informação aí armazenada. O gráfico de barras ficará deitado e que por cada 5 empregados com uma dada idade são impresso os caracteres [] ; se restarem 3 ou 4 trabalhadores é desenhado no fim da barra o caracter [ (observe com atenção o exemplo). É obrigatório usar a instrução for. Exemplo: • 5 empregados com 18 anos, • 11 empregados com 19 anos, • 9 (5+4) empregados com 20 anos • 22 empregados com 21 anos: 18 19 20 21 [] [][] [][ [][][][] 5.d) (1.5 valores) Escreva uma função que elimina da lista de trabalhadores todos os empregados cujo ano de nascimento seja anterior a um dado ano. A função recebe como argumento a base da lista e o ano actual.