Lógica, perguntado por TaeyongNenezaoJVC, 11 meses atrás

"Dados números inteiros n, i e j, todos maiores do que zero, imprimir em ordem crescente os n primeiros naturais que são múltiplos de i ou de j e ou de ambos. Por exemplo, para n = 6, i = 2 e j = 3 a saída deverá ser: 0 2 3 4 6 8" A linguagem é python

Soluções para a tarefa

Respondido por GeBEfte
2

No programa abaixo, não há validação de dados ou um tratamento de erros/exceções, ou seja, espera-se que o usuário utilize de forma correta, mais sobre nos comentários embaixo do código.

Ainda, tenha em vista que esta é apenas uma das diversas possibilidades existentes de resolver o problema.

Obs.: Os pontos que precedem as linhas foram colocados apenas para garantir a indentação, não fazem parte do programa.

n=int(input('Digite o valor de n: '))

i=int(input('Digite o valor de i: '))

j=int(input('Digite o valor de j: '))

mults=set()

for c in range(0,n):

.....mults.add(c*i)

.....mults.add(c*j)

mults=sorted(mults)

print(f'Os {n} primeiros múltiplos são: ',end='')

for v in range(0,n):

.....print(mults[v],end=' ')

Comentários:

--> Começamos lendo os dados necessários (n, i, j) pela função input() já convertida para inteiro pela função int().

--> Declaramos um set() (uma coleção de valores sem repetição) no qual vamos guardar os múltiplos de "i" e "j".

--> Com auxilio de um laço for, vamos adicionar no set com o método add() os "n" primeiros múltiplos de "i" e os "n" primeiros múltiplos de "j". Perceba que aqui está o porquê de utilizar um set, os múltiplos repetidos não serão adicionados, o próprio método add se encarrega de ignorar valores repetidos.

--> Em seguida, utilizamos a função sorted() para deixar o set em ordem crescente e guardamos na mesma variável (mults).

--> Por fim, utilizamos outro laço for para mostrar ao usuário os "n" primeiros múltiplos que foram guardados no set mults.

--> Como dito anteriormente, caso o usuário utilize incorretamente o programa, ocorrerão erros/exceções. Por exemplo, se o usuário digitar valores não inteiros para "n", "i" ou "j" ocorrerá um "ValueError", se digitar valores menores que 1 para para "i" ou "j" estaremos desrespeitando o proposito do programa (apenas múltiplos Naturais).

Na figura anexada, é possível ver o código e alguns exemplos de funcionamento do programa.

Anexos:

TaeyongNenezaoJVC: Tem outras formas de fazer sem o mults, sorted, add e set? Porque eu ainda não aprendi esses termos então não entendi direito.
GeBEfte: "mults" é apenas o nome dado à variável, pode trocar por qualquer outro.
A função sorted pode ser substituída, mas tornaria o código mais "complexo" sem proposito.
Basta saber que esta função vai ordenar o set (ou outra coleção de elementos qualquer).
GeBEfte: Pode-se também substituir o set por uma lista, mas também seria necessário uma estrutura condicional para evitar repetições dos múltiplos.
Ficaria assim o trecho utilizando mults como uma lista:
mults=list()
for c in range(0,n):
if c*i not in mults:
mults.append(c*i)
if c*j not in mults:
mults.append(c*j)
GeBEfte: Ficou sem indentação, corrigindo:
mults=list()
for c in range(0,n):
.....if c*i not in mults:
..........mults.append(c*i)
.....if c*j not in mults:
..........mults.append(c*j)
Perguntas interessantes