Baixe o app para aproveitar ainda mais
Prévia do material em texto
CENTRO UNIVERSITÁRIO INTERNACIONAL UNINTER ESCOLA SUPERIOR POLITÉCNICA BACHARELADO EM ENGENHARIA eletrica LÓGICA DE PROGRAMAÇÃO E ALGORITMOS ATIVIDADE PRÁTICA XXXXXXXXXX – RU: 1,,,,,, Vinicius Pozzobon Borin Pelotas – RS 2021 1. EXERCÍCIO 1 Escreva um programa que leia o nome de um lutador e seu peso. Em seguida, informe a categoria a que pertence o lutador, conforme a Tabela a seguir (note que a tabela foi criada para efeito deste exercício e não condiz com qualquer categoria de luta). A saída do programa deve exibir na tela uma frase com o padrão descrito a seguir: Nome fornecido: Pepe Jordão Peso fornecido: 73.4 Frase a ser exibida: O lutador Pepe Jordão pesa 73,4 kg e se enquadra na categoria Ligeiro Todos os dados devem ser lidos do teclado, sendo que o nome do lutador é string e o peso é um número real. Não é necessário armazenar os dados em uma estrutura de dados, basta imprimir na tela. Coloque todo o seu programa dentro de um laço de repetição e faça-o se encerrar quando uma determinada condição for satisfeita. A condição fica a seu critério. Imprima na tela um teste do seu programa utilizando o seu nome e os dois últimos dígitos do seu RU para o peso. Solução do aluno: def categoria(m_peso): """ funcao que recebe o peso e indica qual a categoria pertence o lutador :param m_peso: peso recebido (float) :return: string com a categoria """ try: # testa se o parametro e valido float(m_peso) if m_peso <= 0: print('dado invalido para funcao categoria.') if m_peso < 65: # identificacao de categoria return 'Pena' if 65 <= m_peso < 72: return 'Leve' if 72 <= m_peso < 79: return 'Ligeiro' if 79 <= m_peso < 86: return 'Meio-medio' if 86 <= m_peso < 93: return 'Medio' if 93 <= m_peso < 100: return 'Meio-pesado' if m_peso >= 100: return 'pesado' except ValueError: # tratamento de valor fora de padrao print('dado invalido para funcao categoria.') def recebe_peso(m_texto): """ funçao utilizada para ler o peso (real) do teclado :param m_texto: frase apresentada ma pergunta do valor :return: retorna o valor intiro digitado """ while True: try: # teste para validade o tipo de caractere m_x = float(input(m_texto)) if m_x > 0: # teste para verificar se o peso é valido return m_x print('ops, peso inválido, Digite um peso real') continue except ValueError: # tratamento de tipo errado print('ops, peso inválido, Digite um peso real') # programa principal m_controle = 's' # inicialização de variavel de controle de parada print('\nSeletor de categorias\nDigite o nome do atleta e seu peso\n') # cabeçalho do programa while True: # loop de execução if m_controle == 'N' or m_controle == 'n': # teste de finalizaçao do programa print('fim das classificações') break # aquisicao de dados m_nome = input('Digite o nome do atleta ') m_peso = recebe_peso('Digite o peso do atleta ') m_categoria = categoria(m_peso) # define categoria # apresentacao de dados conforme solicitado print('O liutador {} pesa {}Kg e se enquadra na categoria {}'.format(m_nome, m_peso, m_categoria)) m_controle = input('Deseja catalogar outro atleta? S ou N ') # pergunta para conclusao do programa Imagem do código funcionando no seu computador: 1. EXERCÍCIO 2 Escreva um programa que receba como parâmetro de entrada um número inteiro de 5 dígitos no intervalo fechado [10000, 30000] que represente códigos de produtos vendidos em uma loja. Crie uma função para validar os dados de entrada, obrigando o usuário a respeitar o intervalo e o tipo de dado (inteiro). Crie uma função que calcule e retorne o dígito verificador do código, utilizando a regra de cálculo explicada a seguir. Por exemplo, considere o código 21853, em que cada dígito é multiplicado por um peso começando em 2, os valores obtidos são somados, e do total obtido calcula-se o resto de sua divisão por 7. Retorne na função o valor do dígito verificador calculado e imprima na tela o código do produto digitado e seu dígito verificador separado por hífen, como: 21853-5. Imprima na tela um teste do seu programa utilizando como código os 5 primeiros dígitos do seu RU. Se seu RU tiver menos de 5 dígitos, complete com zeros. Se seu RU cair fora do intervalo especificado, realize o teste mesmo assim. Solução do aluno: def checksum(m_codigo): """ funcao que calcula o digito verificador :param m_codigo: codigo do produto :return: retorna o valor do DV """ if m_codigo < 10000 or m_codigo > 30000: # testa se o dado recebido é valido. print('codigo invalido') # caso dado invalido encerra a função return 0 m_soma = 0 # inicializa variavel de soma m_codigo = str(m_codigo) # transforma o dado em string para percorrer os valores for c in range(0, 5, 1): m_soma += (int(m_codigo[c]) * (c + 2)) # soma proposta no enunciado return m_soma % 7 # retorna o resto da divisao por 7 def valida_dados(m_texto, m_min, m_max): """ funcao que recebe os dados via teclado e valida o formato :param m_texto: texto apresentado durante a leitura :param m_min: valor minimo a ser lido :param m_max: valor maximo a ser lido :return: retorna o valor inteiro digitado, dentro da faixa especificada """ while True: try: # teste para validade o tipo de caractere m_codigo = int(input(m_texto)) if m_min < m_codigo < m_max: return m_codigo else: print('digite um valor entre {} e {}'.format(m_min, m_max)) except ValueError: print('ops, numero invalido, Digite um codigo valido...') # funcao principal m_item = valida_dados('digite o codigo do item: ', 10000, 30000) # comando para leitura de dados m_dv = checksum(m_item) # chamada de validação print('{}-{}'.format(m_item, m_dv)) # apresentação de resultado conforme proposto Imagem do código funcionando no seu computador: 1. EXERCÍCIO 3 Considere o seguinte conjunto de dados: Nome + (N1, N2, N3, N4). Nome representa o nome de um aluno e deve ser usado como chave. Já N1, N2, N3, N4 representam as notas de provas desse aluno. Utilize uma estrutura de dicionário com listas para resolver este exercício. Escreva um programa que leia os dados de N alunos e apresente na tela se foram aprovados ou reprovados. O critério que garante a aprovação é que a média aritmética das 4 notas seja maior ou igual 7,0. O valor de N é a quantidade de alunos, e esse valor deve ser lido do teclado no começo do programa. Faça um laço de repetição para a leitura destes N alunos. As notas devem ser exibidas ao final do programa com uma casa decimal de precisão. Imprima na tela um teste do seu programa usando como primeiro cadastro o seu nome, e como nota os 4 primeiros dígitos do seu RU. Solução do aluno: def valida_int(m_texto, m_min, m_max): """ funcao que recebe os dados via teclado e valida o formato numero inteiro :param m_texto: texto apresentado durante a leitura :param m_min: valor minimo a ser lido :param m_max: valor maximo a ser lido :return: retorna o valor inteiro digitado, dentro da faixa especificada """ while True: try: # teste para validade o tipo de caractere m_codigo = int(input(m_texto)) if m_min < m_codigo < m_max: return m_codigo else: print('digite um valor entre {} e {}'.format(m_min, m_max)) except ValueError: print('ops, numero invalido, Digite um valor inteiro...') def valida_float(m_texto, m_min, m_max): """ funcao que recebe os dados via teclado e valida o formato numero com virgula :param m_texto: texto apresentadodurante a leitura :param m_min: valor minimo a ser lido :param m_max: valor maximo a ser lido :return: retorna o valor inteiro digitado, dentro da faixa especificada """ while True: try: # teste para validade o tipo de caractere m_codigo = float(input(m_texto)) if m_min <= m_codigo <= m_max: return m_codigo else: print('digite um valor entre {} e {}'.format(m_min, m_max)) except ValueError: print('ops, numero invalido, Digite nota valida...') # programa principal # cria dicionario de listas vazio d_alunos = {'nome': [], 'nota1': [], 'nota2': [], 'nota3': [], 'nota4': [], 'media': [], 'situacao': []} m_alunos = valida_int('Quantos alunos vamos cadastrar? ', 0, 9999) # identifica a quantidade de cadastros realizados for i in range(0, m_alunos, 1): # povoamento do dicionario d_alunos['nome'].append(input('Digite o nome do aluno: ')) d_alunos['nota1'].append(valida_float('Digite a primeira nota: ', 0, 10)) d_alunos['nota2'].append(valida_float('Digite a segunda nota: ', 0, 10)) d_alunos['nota3'].append(valida_float('Digite a terceira nota: ', 0, 10)) d_alunos['nota4'].append(valida_float('Digite a quarta nota: ', 0, 10)) # calculo da media d_alunos['media'].append( (d_alunos['nota1'][i] + d_alunos['nota2'][i] + d_alunos['nota3'][i] + d_alunos['nota4'][i]) / 4) # teste para preenchimento da situacao if d_alunos['media'][i] >= 7: d_alunos['situacao'].append('aprovado') else: d_alunos['situacao'].append('reprovado') # impressao dos dados tabulados conforme solicitado. - ' '*20-len(nome) usado para garantir tabulacao com diferentes # nomes --- {:.1f} usado para garantir 1 casa decimal conforme solicitado print('notas dos alunos') print( 'nome' + ' ' * 16 + 'N1' + ' ' * 5 + 'N2' + ' ' * 4 + 'N3' + ' ' * 4 + 'N4' + ' ' * 4 + 'media' + ' ' * 3 + 'situacao') for i in range(0, m_alunos, 1): print(d_alunos['nome'][i] + ' ' * ( 20 - len(d_alunos['nome'][i])) + '{:.1f} {:.1f} {:.1f} {:.1f} {:.1f} {}'.format( d_alunos['nota1'][i], d_alunos['nota2'][i], d_alunos['nota3'][i], d_alunos['nota4'][i], d_alunos['media'][i], d_alunos['situacao'][i])) Imagem do código funcionando no seu computador: 1. EXERCÍCIO 4 Leia e armazene em um dicionário o nome, a idade e o número do telefone de seus contatos, sendo que a chave deve ser o nome. Ao digitar uma string vazia para o nome, o programa interrompe a leitura e se encerra. Apresente na tela os dados lidos em ordem alfabética pelo nome dos contatos. Uma possível solução de ordenar alfabeticamente é usar o método sort. Em seguida, armazene os contatos em outros dois dicionários, utilizando como critério a idade: menores de 18 anos em um e os maiores em outro dicionário, eliminando o original. Apresente na tela os dois dicionários resultantes da separação. Imprima na tela um teste do seu programa usando como primeiro cadastro o seu nome, como telefone o seu RU, e como idade os dois últimos dígitos do seu RU. mo nota os 4 primeiros dígitos do seu RU. Solução do aluno: def valida_int(m_texto, m_min, m_max): """ funcao que recebe os dados via teclado e valida o formato numero inteiro :param m_texto: texto apresentado durante a leitura :param m_min: valor minimo a ser lido :param m_max: valor maximo a ser lido :return: retorna o valor inteiro digitado, dentro da faixa especificada """ while True: try: # teste para validade o tipo de caractere m_codigo = int(input(m_texto)) if m_min < m_codigo < m_max: return m_codigo else: print('digite um valor entre {} e {}'.format(m_min, m_max)) except ValueError: print('ops, numero invalido, Digite um valor inteiro...') # programa principal # cria dicionario e listas vazios d_contatos = {'nome': 0, 'idade': 0, 'telefone': 0} l_contatos = [] l_menor18 = [] l_maior18 = [] m_count = 0 while True: # loop para cadastro ate que a condicao seja satisfeira d_contatos['nome'] = input('Digite o nome do contato: ') # cadastro de item if d_contatos['nome'] == '': # consicao de parada break m_count += 1 d_contatos['idade'] = valida_int('Digite a idade: ', 0, 200) # cadastro de item d_contatos['telefone'] = input('Digite o telefone: ') # cadastro de item l_contatos.append(d_contatos.copy()) # povoamento de lista l_contatos.sort(key=lambda d: d['nome']) # ordena a lista usando como chave o nome # impressao da lista completa ordenada print('lista ordenada\n' + 'nome' + ' ' * 16 + 'idade' + ' ' * 6 + 'telefone') for i in range(0, m_count, 1): print(l_contatos[i]['nome'] + ' ' * (20 - len(l_contatos[i]['nome'])) + '{} {}'.format( l_contatos[i]['idade'], l_contatos[i]['telefone'])) # separacao das listas for i in range(0, m_count, 1): if l_contatos[i]['idade'] < 18: l_menor18.append(l_contatos[i]) else: l_maior18.append(l_contatos[i]) # impressao das listas separadas print('lista menores 18 anos\n' + 'nome' + ' ' * 16 + 'idade' + ' ' * 6 + 'telefone') for i in l_menor18: print(i['nome'] + ' ' * ( 20 - len(i['nome'])) + '{} {}'.format(i['idade'], i['telefone'])) print('lista maiores 18 anos\n' + 'nome' + ' ' * 16 + 'idade' + ' ' * 6 + 'telefone') for i in l_maior18: print(i['nome'] + ' ' * ( 20 - len(i['nome'])) + '{} {}'.format(i['idade'], i['telefone'])) Imagem do código funcionando no seu computador: 1
Compartilhar