4.9 (3,310 calificaciones) | 110K estudiantes inscritos
4.9 (3,310 calificaciones)
[MÚSICA] Quero agora que vocês façam exercício para consolidar essa ideia de repetições encaixadas, de laços aninhados e o exercício vai ser o seguinte. Eu quero que você faça programa que vá receber do usuário, que vai digitar uma sequência de números e para cada número que ele digite eu quero que você imprima o fatorial desse número. Então como você vai fazer isso? Você vai precisar de while mais externo que vai, tem como objetivo ler números do teclado que o usuário vai digitar e para cada número que ele digita, você vai precisar ter outro código que vai conter while mais interno que vai calcular o fatorial daquele número que o usuário digitou. Então dá pause aí no seu vídeo e faz isso e quando você tiver a coisa funcionando, você volta aqui, daí eu vou mostrar para vocês a minha solução que eu vou fazer aqui tempo real para vocês. Então, aperta pause, apertou? Voltou? Vamos lá, então vamos tentar fazer uma solução tempo real disso. A gente quer então programa que vai lendo do teclado uma sequência de números e a gente vai imprimindo o fatorial. Então eu, para ler isso, vou chamar esses números que vão ler no teclado de n, eu vou querer número inteiro e eu vou falar input, Digite número inteiro positivo. [SEM_ÁUDIO] Então aqui ele começou digitando número. Só esqueci de fechar o parêntesis, pronto, número inteiro positivo e agora eu vou fazer, a gente vai fazer while, na verdade então vou colocar isso dentro do while. Enquanto o meu número n for positivo, ou seja, for maior que 0, daí a gente faz isso e eu vou colocar o n aqui, só número positivo qualquer para ele entrar a primeira vez dentro do while. Então enquanto n for número maior que 0, lê o n do teclado, os atalhos aqui. E agora dado que já temos o n, a gente agora têm que cacular n fatorial e imprimir n fatorial. Para isso a gente vai precisar de uma variável fatorial que eu vou inicializar, nela a gente vai calculando o fatorial. Então vai ser uma série de multiplicações. Eu vou inicializar com o elemento neutro da multiplicação que é 1. Então o fatorial recebe 1 e daí agora a gente faz outro while, que esse sim vai calcular o fatorial e nesse outro while vou fazer: enquanto o n for número maior do que 1, aqui, não esquecer os dois pontos depois do while, da condição do while. Enquanto n for maior que 1, o fatorial recebe o valor anterior do fatorial vezes n e logo seguida eu vou fazer n recebe n menos 1, então o n começa com o n que o usuário digitou. Eu vou multiplicando essa palavra fatorial e vou sempre subtraindo 1, então a primeira vez que essa linha aqui é executada, o fatorial vai receber: 1 vezes o n que o usuário digitou, então começa valendo n. Seguida, a segunda vez, eu vou ter feito esse n recebe n menos 1, então a segunda vez o fatorial vai receber o n vezes o n menos 1, porque o n agora vai estar valendo n menos 1, então cada interação eu vou subtraindo valor do n, então se o número passado do n inicial for 10, eu vou fazer 10 vezes 9 vezes 8 vezes 7 vezes 6 vezes 5 vezes 4 vezes 3 vezes 2, daí quando chegar no 1 aqui, ele cai fora desse while. Então quando ele cai fora desse while aí a gente já está pronto para imprimir o valor do número fatorial, então eu posso imprimir aqui essa variável fatorial. Então já imprimi a variável fatorial, agora a gente têm que ir para a próxima variável. Então nesse ponto o n ali vai estar valendo 1 e a gente sobe ali para cima. O problema, eu acho que está certo já o cálculo do fatorial, o problema aqui a gente precisa fazer agora, como a gente vai terminar esse while, esse loop mais externo aqui? Eu pensei terminar, por exemplo, com o usuário digitando número negativo. Então na verdade eu vou pegar essa leitura aqui do número n, eu vou colocar aqui e daí vou falar: Digite número inteiro. Se o usuário digita números positivos, a gente continua calculando, se ele digita número negativo, a gente cai fora do while. Por quê? Porque esse n aqui tem essa condição: while n maior que 0, ela vai valer falso se o n for negativo. Só que agora eu vou precisar, como eu joguei essa leitura ali para baixo, eu vou precisar ler aqui cima. Para ler o primeiro número, daí a gente não precisa mais desse n recebe 1 aqui. Então vamos ver se está funcionando aqui. É compilar, ver se eu cometi algum erro de, vou chamar aqui de Fatoriais, ver se eu cometi algum erro de compilação, não. Já está executando: digite número inteiro. Vamos experimentar, 5, 120, 4, 24, 6, 720, 10, deu número ali grandão que acho que é o fatorial de 10 e se eu não me engano está certo. Quais são números que podem dar problema? Eu diria números pequenos ali. O 0 fatorial é por definição 1, vamos ver se está funcionando. Não deu, o 0, por que é que não deu certo o 0? Porque a minha condição eu fiz: enquanto n maior que 0, e na verdade eu quero que para o 0 também rode, então vou colocar: enquanto n maior é igual a 0, porque eu quero que com n 0 ele também execute. Então vou mandar executar aqui, vamos ver se ele está funcionando. Para o n 0, pronto, agora dá 1, está certo. 1 fatorial é 1, 2 fatorial é 2, 3, 6, está certo, então parece que está funcionando aqui. O que a gente tem que testar, eu gostaria que digitando número negativo ele terminasse a execução do programa, então vamos ver, menos 10, pronto, terminou, então está correto. Então aqui a gente viu como a gente pode fazer while encaixado para fazer uma sequência de coisas. Então para cada número digitado eu faço toda uma computação ali para calcular o fatorial e para isso eu preciso de dois whiles encaixados. Eu vou deixar uma lição aqui de casa para vocês: uma outra forma de organizar esse código seria uma função, lembra que a gente aprendeu como definir uma função, a gente pode fazer def fatorial para definir uma função fatorial e nessa função a gente coloca todo esse while mais interno aqui do cálculo do fatorial e daí no código mais externo a gente faz while que vai chamando aquela função fatorial. No final a gente vai ter dois whiles do mesmo jeito, mas a coisa fica pouco mais organizada, porque dos whiles vai ficar nessa função fatorial e o outro vai ficar fora, então o código fica pouquinho mais organizado, mas são duas formas válidas aí de se fazer while encaixado. Então tentem fazer essa refatoração para extrair esse trecho do código aqui, para esse trecho do código ser uma função fatorial separada. [MÚSICA] [MÚSICA] [MÚSICA]