matesteves Posted November 26, 2020 at 06:31 PM Report Share #620454 Posted November 26, 2020 at 06:31 PM Estou a escrever um código de uma calculadora de multiplicação que deve usar apenas operadores aritméticos, no intervalo de "-10 >= x <= 10" e deve sempre fazer as contas sob a melhor performance possível, ex.: "3x2 = 3 + 3" e não "3x2 = 2 + 2 + 2", sem usar nenhum tipo de "while" ou "for", só posso usar os operadores + e -. Eu montei a calculadora, porém eu não consigo fazê-la funcionar na maneira mais otimizada e nem quando "s" é menor que 0, que são os meus maiores problemas. Além disso, preciso dar print nos intermediários da conta, por exemplo: "3 x 10" eu teria que dar um print de algo parecido com: "10; 20; 30" e não faço ideia de como fazer isso. Agradeço qualquer ajuda, estou bem enrolado com isso. def erro_numero(): print(' ') print('O número deve ser igual ou estar entre -10 e 10.') def erro_letra(): print(' ') print('O valor deve ser um número inteiro.') def erro_0(): print(' ') print('Não é possível dividir por zero.') def primeiro_numero(): try: x = int(input('Digite o valor do primeiro número: ')) if x < -10 or x > 10: erro_numero() return primeiro_numero() else: return x except: erro_letra() return primeiro_numero() def segundo_numero(): try: z = int(input('Digite o valor do segundo número: ')) if z < -10 or z > 10: erro_numero() return segundo_numero() else: return z except: erro_letra() return segundo_numero() def multiplica(p, s, resultado_parcial=0): if s == 0: return resultado_parcial resultado_parcial = resultado_parcial + p return multiplica(p, s - 1, resultado_parcial) def operacao(pro): print('O valor do produto é:', pro) while True: #Isto aqui é só para fazer rodar o programa p = primeiro_numero() s = segundo_numero() pro = multiplica(p, s, resultado_parcial=0) operacao(pro) Link to comment Share on other sites More sharing options...
Solution thoga31 Posted November 26, 2020 at 09:26 PM Solution Report Share #620458 Posted November 26, 2020 at 09:26 PM Antes de mais, permite-me algumas dicas gerais: Podes usar a mesma função para ler os dois números. Se reparares com atenção, primeiro_numer() e segundo_numero() são exactamente a mesma função, apenas com nomes de variáveis diferentes no interior (x vs z). E se tivesses de ler 10 números? Não irias criar 10 funções. Portanto, cria uma função única que leia um número entre -1 e 10. Se podes usar a estrutura try-except, sugiro levantar excepções na função de leitura do número e apanha as excepções onde invocas essa mesma função. Esta dica não é, contudo, da maior importância, pelo que é seguro ignorar se quiseres. Quanto ao problema em específico, tens de ter em consideração alguns pormenores: Terás de tratar de forma diferente os casos em que os números são negativos com recurso a condições; Poderás ter de considerar o caso especial da multiplicação de 0 por 0; Antes de cada chamada recursiva, faz um print do resultado parcial actual; De forma a considerar bem qual o maior e menor valor, passa os valores à função de tal forma que garantas que, por exemplo, o primeiro argumento seja sempre maior ou igual que o segundo - isto deverá permitir generalizar e facilitar o código da função de multiplicação. Neste sentido, sugiro este esqueleto: def multiplica(p, s, r=0): # Se p e s são 0, devolve 0 # Caso contrário: if s > 0: r += p print(r) return multiplica(p, s-1, r) elif s < 0: # to-do else: return r Cumprimentos. 1 Report Knowledge is free! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now