Programação 2012/203 1º Semestre - MEEC Programação 2012/2013 – 1º Semestre MEEC Laboratório 4 – Semana de 5 de Novembro de 2012 1. implemente uma funcao (int prox_primo(int n) )que recebe como argumento um inteiro positivo e retorna o menor numero primo superior a n. Por exemplo prox_primo(4) retorna 7, prox_primo(8) retorn 13. 2. Implemente as funções e programa cujos fluxogramas foram definidos na aula de problemas da semana passada: • Exercício 9, 10 e 11 Use a função prox_primo na resolução deste exercício. 3. Altere o programa anterior para guardar os fatores primos do numero num vector de 100 inteiros; 4. Desenvolva uma função que para cada elemento guardado num vetor imprime quantas vezes esse valor ai ocorre ( void conta(int vet[100], n_valores) ) .Experimente esta função com o programa anterior. O parâmetro n_valores indica quantos valores estão armazenados no vetor. 5. Desenvolva uma função que recebe como argumento um número real e "retorna" separadamente a sua parte inteira e decimal. O cabeçalho desta função é void split_real(float x, int * p_inteira, float * p_decimal). 6. Use a função definida anteriormente para implementar um programa que lê um numero real e imprime em linhas diferentes a parte inteira e a parte decimal. 7. Desenvolva um programa que converte um numero inteiro para o formato BCD. O programa lê um inteiro positivo, armazena-o numa variável do tipo int e converte-o para o código BCD. Cada um dos dígitos BCD (inteiros entre 0 e 9) será armazenado numa posição de um vetor de 8 posições. Se o numero lido for maior que 99999999 devera ser impressa uma mensagem de erro. Depois de convertido o numero deve ser escrito na forma de somatório de potencias de 10, 1/2 Programação 2012/203 1º Semestre - MEEC como o seguinte exemplo: 1059 = 9*10^0+5*10^1+1*10^3. 8. Desenvolva uma função que converte uma letra minúscula em maiúscula. A função recebe o carácter por passagem por referência e altera-o: int conv_maiuscula_2(char *c). Se o carácter não for uma letra minúscula esta não é alterada. A função retorna 1 se a letra tiver sido convertida e 0 caso contrário. Esta função não lê nenhuma informação do teclado, nem escreve nada no ecrã. 9. Usando a função anterior, desenvolva um programa que lê uma linha de texto do teclado, converte todas as letras lidas para maiúsculas e imprime-a após a conversão. Este programa também imprime o numero de conversões. Nas seguintes funções considere que uma data (3 inteiros) é armazenada num vetor; int data[3]. 10. Desenvolva uma função que recebe como argumento uma data (vetor de três inteiros) e escreve-a no ecrã. ( void imprime_data(int data[3] ) 11. Desenvolva uma função (int compara_datas(int data_1[3], int data_2[3]) ) que recebe como argumento duas datas e retorna o seguinte: • -1 se o primeiro argumento corresponder a uma data anterior `a segunda • 0 se as datas forem iguais • 1 se a segunda data for posterior `a primeira 12. Use a função fornecida ( void le_data(int data[3] ) para desenvolver um para testar as duas funções anteriores int le_data(int data[3]){ char linha[100]; printf("Introduza uma data ( dia mes ano separados por espaco):"); fgets(linha, 100, stdin); if(sscanf(linha, "%d %d %d", & data[0], &data[1], &data[2]) != 3){ return -1; } if(data[0]<=0 || data[0]>31){ return -1; } if(data[1]<=0 || data[0]>12){ return -1; } if(data[1]<=0){ return -1; } return 0; } 2/2