OneCompiler

Lista 1 MD2 231039113

#1. Cálculo de n! utilizando recursividade

    if n<2:
        return n
    else:
        print(n)
        return n*fat(n-1)
while True:
    try:
        ntermo = int(input("insira numero para fatoriar: "))
        break
    except:
        print("insira um valor valido")
        
if (ntermo == 0 or ntermo == 1):
    print("1")
else:
    print(fat(ntermo))

##2. a sequência de Fibonacci

#criei uma lista de n termos (ex quero fibo de 5), para cada termo eu faco a soma
def fibo(n):
    if n <= 1:
        return n
    else:
        return (fibo(n-1)+fibo(n-2)) #prox termo vai ser termo anterior menos o 2x anterior
    
while True:
    try:
        nterms = int(input("insira n de termos do fibonacci: "))
        break
    except:
        print("insira um valor valido")
        
if nterms <= 2:
    print("insira um valor valido")
else:
    for i in range(nterms):
        print(fibo(i))        

#3. a impressão recursiva dos números naturais de 1 a n (exemplo teste 1 a 10)

def natural(a, n, sequencia=None):
    if sequencia is None:
        sequencia = []  
    if a > n:
        print(" + ".join(map(str, sequencia)))
        return 
    sequencia.append(a)
    natural(a+1, n, sequencia)
    
def main():
    while True:
        try:
            n = int(input("Digite um numero inteiro NATURAL: \n"))
            if n < 1:
                print("Numero invalido, tente novamente \n")
            else:
                break
        except ValueError:
            print("Numero invalido, tente novamente \n")
    natural(1,n)
   
main()

#4. um método recursivo que receba como entrada um número inteiro positivo n e retorne
1 + 2 + 3 + 4 + … + n

def aten(n, sequencia=None):
    if sequencia is None:
        sequencia = [] #vetor para guardar os valores 
    if n == 0:
        sequencia.insert(0, n) #colocando o 0 no vetor
        print(" + ".join(map(str, sequencia))) #printando os valores formatados em n + n-1 + n-2 ...
        return 0 #retornando a soma / ou 0 se for o caso
    else:
        sequencia.insert(0, n) # colocando os valores no vetor 
        return n + aten(n - 1, sequencia)

def main():
    while True:
        try:
            n = int(input("Digite um numero inteiro maior ou igual a zero: \n"))
            if n < 0:
                print("Numero invalido, tente novamente \n")
            else:
                break
        except ValueError:
            print("Numero invalido, tente novamente \n")
   
    print("A soma de 1 ate", n, " = ", aten(n))
   
main()

#5. Algoritmo de Euclides para o cálculo do MDC

def euclides(n1,n2):
    if(n1 == 0):
        return n2
    if(n2 == 0):
        return n1
    print("numeros digitados: ",n1,n2)
    r = 100
    while(r != 0):
        r = n1 % n2
        n1 = n2
        n2 = r
    else: 
        return n1
    
def mdc(n1,n2):
    resultado = euclides(n1,n2)
    print("MDC:",resultado)

def main():
    print("Digite dois numeros inteiros \n")
    while True:
        try:
            n1 = int(input("Digite o primeiro numero: \n"))
            break
        except ValueError:
            print("Numero invalido, tente novamente \n")

    while True:
        try:
            n2 = int(input("Digite o segundo numero: \n"))
            break
        except ValueError:
            print("Numero invalido, tente novamente \n")
            
    mdc(n1,n2)

main()

#6. Calcular o MMC(a,b) a partir do MDC(a,b)

def euclides(n1,n2):
    if(n1 == 0):
        return n2
    if(n2 == 0):
        return n1
    print("numeros digitados: ",n1,n2)
    r = 100
    while(r != 0):
        r = n1 % n2
        n1 = n2
        n2 = r
    else: 
        return n1
    
def mdc(n1,n2):
    resultado = euclides(n1,n2)
    return resultado

def mmc(n1,n2,n3):
    return n1 * n2 // n3

def main():
    print("Digite dois numeros inteiros \n")
    while True:
        try:
            n1 = int(input("Digite o primeiro numero: \n"))
            break
        except ValueError:
            print("Numero invalido, tente novamente \n")

    while True:
        try:
            n2 = int(input("Digite o segundo numero: \n"))
            break
        except ValueError:
            print("Numero invalido, tente novamente \n")
            
    n3 = mdc(n1,n2)
    print("O mmc de",n1,"e",n2,"usando o mdc eh:",mmc(n1,n2,n3))

main()

#7. Tabela Z_n para adição modular

def tab_add(n):
    tab = [[(a + b) % n for b in range(n)] for a in range(n)]
    return tab

def tab_show(tab):
    print("Tabela Zn modular de adicao:")
    for line in tab:
        print(" ".join(f"{num:2}" for num in line))

def main():
    while True:
        try:
            n = int(input("Digite um numero inteiro maior que 1: "))
            if n < 2:
                raise ValueError
            break
        except ValueError:
            print("Digito invalido.")
            break
    tab = tab_add(n)
    tab_show(tab)

main()

#8. Tabela Z_n para multiplicação modular

def tabx(n):
    tab = [[(a * b) % n for b in range(n)] for a in range(n)]
    return tab

def tab_show(tab):
    # Exibe a tabela formatada
    print("Tabela de multiplicação :")
    for line in tab:
        print(" ".join(f"{num:2}" for num in line))

def main():
    while True:
        try:
            n = int(input("Digite um numero inteiro maior que 1: "))
            if n < 2:
                raise ValueError
            break
        except ValueError:
            print("Digito invalido.")
            break
    tab = tabx(n)
    tab_show(tab)

main()