Baixe o app para aproveitar ainda mais
Prévia do material em texto
Trabalho Prático de G1 Valor: 2,0 Curso: Sistemas de Informação / Ciência da Computação / Engenharia de Software Disciplina: Algoritmos e Programação II Data: 26/03/2017 Turma:0702 Professor: Fabiano Fagundes Nota: Alunos: Nº Instruções: Leia atentamente as questões antes de respondê-las; A interpretação é parte essencial da avaliação; Implemente os códigos de forma otimizada (busque sempre a melhor forma de realizar determinada tarefa); Tenha seu estilo próprio, sem cópias. Os nomes dos arquivos devem ser questao1.py e questao2.py. Compacte todos os arquivos em um único arquivo rar ou zip e envie para thilfa@gmail.com até as 19h do dia 26/03, com assunto [AP2-G1] Seus nomes completos Pode ser feito em grupos de até 4 pessoas Questão Prática 1 (valor 1,0) Elaborar um programa para ler um gabarito com dez questões objetivas fornecido como uma string com dez caracteres relativos às alternativas corretas (cada resposta é indicada por ‘A’ ou 'a', ‘B’ ou 'b', ‘C’ ou 'c', ‘D’ ou 'd' ou ‘E’ ou 'e') . Ex.: Se for digitado "DCBEACDDEA" isto significa que as alternativas corretas são: 1a. questão 'D', 2a. 'C', 3a. 'B', etc. Obs. O programa deve repetir a leitura do gabarito completo se este for digitado com algum erro (p.ex., quantidade de questões ou algum caractere inválido). Após a leitura do gabarito, o programa lê 5 respostas de provas, também como strings, avalia e escreve a nota de cada uma delas. Cada nota é de 0 a 10 (isto é, determinada por um ponto para cada item da resposta da prova que confere com o gabarito). Havendo algum erro na digitação da prova a ser avaliada, o programa escreve uma mensagem informando que não pode atribuir nota por esse motivo. Além do programa principal, deve haver funções para: - leitura do gabarito - leitura das respostas - avaliação das respostas - impressão da nota Questão prática 2 (valor 1,0) Lembra que você acabou de ser contratado por uma empresa? Pois é, aquele programador continua em licença médica e você precisa dar manutenção em outro código dele. Agora o código é para verificar a validade dos dígitos verificadores (DV) de CPF, do qual só existe a versão impressa em suas mãos. No CPF, o DV módulo 11 corresponde ao resto da divisão por 11 do somatório da multiplicação de cada algarismo da base respectivamente por 9, 8, 7, 6, 5, 4, 3, 2, 1 e 0, a partir da unidade, conforme exemplos abaixo. O resto 10 é considerado 0. Veja, abaixo, exemplo de cálculo do primeiro DV módulo 11 para o CPF nº 280.012.389: 2 8 0 0 1 2 3 8 9 = 3 x x x x x x x x x 1 2 3 4 5 6 7 8 9 ------------------------- 2+ 16+0+ 0+ 5+12+21+64+81 = 201÷11=18, com resto 3 Esse primeiro dígito DV calculado é usado para o cálculo do segundo DV, conforme exemplo abaixo. Porém verifique que o primeiro algarismo é agora multiplicado por zero, o segundo por um e assim sucessivamente até chegar ao dígito que foi calculado anteriormente. 2 8 0 0 1 2 3 8 9 3 = 8 x x x x x x x x x x 0 1 2 3 4 5 6 7 8 9 ---------------------------- 0+ 8+ 0+ 0+ 4+10+18+56+72+27 = 195÷11=17, com resto 8 Portanto, CPF+DV = 280.012.389-38 O usuário entrará com os dados no formato nnn.nnn.nnn-nn sem cometer erro na entrada dos valores. Exemplos de CPFs válidos: 280.012.389-38 222.333.444-05 333.444.555-08 444.555.666-19 111.222.333-96 141.734.261-78 536.511.553-82 Atenção: Esta é sua tarefa!!! Deixar o programa rodando perfeitinho! E NÃO é para você refazer o programa, é para você dar manutenção nele fazendo as poucas modificações necessárias. A propósito, modificações desnecessárias tirarão pontos de sua avaliação. Código de verificação de CPF def limpaCPF(cpf): lista1 = cpf.split('-') lista2 = lista1[0].split('.') limpa = ''.join(lista2)+lista1[1] return limpa def calculaPrimeiroDigito(digitos): acum = 0 for i in range(len(digitos)-2): acum = acum + int(digitos[i])*(i+1) if acum%11 == 10: return 0 else: return acum%11 def calculaSegundoDigito(digitos): acum = 0 for i in range(len(digitos)-3): acum = acum + int(digitos[i])*i acum=acum+int(digitos[-1])*9 if acum%11 == 10: return 0 else: return acum%11 cpf=input("Digite seu cpf: ") cpfLimpo= limpaCPF(cpf) primeiro = calculaPrimeiroDigito(cpfLimpo) segundo = calculaSegundoDigito(cpfLimpo+str(primeiro)) if primeiro==cpf[-2] and segundo == cpf[-1]: print('O CPF ',cpf, ' é válido') else: print('O CPF ',cpf, ' é inválido')
Compartilhar