No Unix/Linux, há o comando wc com o qual é possível obter o número de linhas, número de palavras e o número de bytes de um arquivo.
Uma maneira de obter-se um comando equivalente através do Powershell, poderia ser:
Para mais, leia.
Mostrando postagens com marcador palavras. Mostrar todas as postagens
Mostrando postagens com marcador palavras. Mostrar todas as postagens
segunda-feira, 12 de março de 2018
segunda-feira, 23 de outubro de 2017
Recursividade
Se tivermos um algoritmo para resolver um problema solucionando uma instância menor do mesmo problema, podemos usar funções recursivas. Reduz-se o problema até uma parte em que a recursividade cessa.
Quando se implementa recursividade, o exemplo clássico que nos vem à mente é o do cálculo do fatorial de um número. Se bem observarmos, o fatorial de um número é calculado multiplicando-o pelos números que o antecedem. Assim, fatorial de 6! = 6x5x4x3x2x1. E, por definição, o fatorial de 0! = 1.
Desse modo, é possível implementar facilmente uma função recursiva que calcule o fatorial de um número. Por exemplo:
Um exemplo de execução para o cálculo do fatorial de 7!
No post Invertendo Strings e Palíndromos, demonstramos uma maneira de implementar uma função que verifica se uma string é um palíndromo, ou seja, sua forma inversa tem escrita idêntica. É possível implementar uma função recursiva que verifica se uma string é palíndromo, mas fica apenas como exercício de programação, dado que a implementação no post anterior é bem mais simples.
Seguindo a ideia para funções recursivas de dividir um problema em instâncias menores, observamos que palavras são palíndromos quando a letra inicial e final são as mesmas. Assim, podemos usar esse algoritmo de testar se são iguais as letras inicial e final, removê-las e repetir a mesma lógica, até que não restem letras ou reste uma letra central. Se isso acontecer, a palavra é um palíndromo. Cada iteração seria uma chamada à função recursiva. O código poderia ser escrito assim:
Com o seguinte resultado de execução:
Referência: KHANACADEMY - Recursividade
Quando se implementa recursividade, o exemplo clássico que nos vem à mente é o do cálculo do fatorial de um número. Se bem observarmos, o fatorial de um número é calculado multiplicando-o pelos números que o antecedem. Assim, fatorial de 6! = 6x5x4x3x2x1. E, por definição, o fatorial de 0! = 1.
Desse modo, é possível implementar facilmente uma função recursiva que calcule o fatorial de um número. Por exemplo:
Function fatorial([Int32]$num) { if ($num -eq 0) { return 1 } return $num * (fatorial($num-1)) } Clear-Host do { try { $numOk = $true [Int32]$num = Read-host ` "Digite um número entre 0-100 para calcular o fatorial e pressione [ENTER]" } catch {$numOK = $false} } until (($num -ge 0 -and $num -le 100) -and $numOK) Write-Host -NoNewline "O fatorial de $num é: " fatorial($num)
Um exemplo de execução para o cálculo do fatorial de 7!
Digite um número entre 0-100 para calcular o fatorial e pressione [ENTER]: 7 O fatorial de 7 é: 5040
No post Invertendo Strings e Palíndromos, demonstramos uma maneira de implementar uma função que verifica se uma string é um palíndromo, ou seja, sua forma inversa tem escrita idêntica. É possível implementar uma função recursiva que verifica se uma string é palíndromo, mas fica apenas como exercício de programação, dado que a implementação no post anterior é bem mais simples.
Seguindo a ideia para funções recursivas de dividir um problema em instâncias menores, observamos que palavras são palíndromos quando a letra inicial e final são as mesmas. Assim, podemos usar esse algoritmo de testar se são iguais as letras inicial e final, removê-las e repetir a mesma lógica, até que não restem letras ou reste uma letra central. Se isso acontecer, a palavra é um palíndromo. Cada iteração seria uma chamada à função recursiva. O código poderia ser escrito assim:
Function trimFirstLast($pal) { $pal = $pal.TrimStart($pal[0]) $pal = $pal.TrimEnd($pal[$pal.Length-1]) return $pal } Function ehPalindromo([String]$pal) { if ($pal.Length -lt 2) { return $true } if ($pal[0] -ne $pal[$pal.Length-1]) { return $false } return ehPalindromo(trimFirstLast($pal)) } $palavras = @("RELER","REVIVER","RADAR","ARARA","AMORA","SALAS",` "ANILINA","MUSSUM","CASACA","MOTOR","OSSO","RIR","MIRIM","ROTOR") Clear-Host ForEach ($pal in $palavras) { Write-Host -NoNewLine "$pal é palíndromo? " ehPalindromo $pal }
Com o seguinte resultado de execução:
RELER é palíndromo? True REVIVER é palíndromo? True RADAR é palíndromo? True ARARA é palíndromo? True AMORA é palíndromo? False SALAS é palíndromo? True ANILINA é palíndromo? True MUSSUM é palíndromo? True CASACA é palíndromo? False MOTOR é palíndromo? False OSSO é palíndromo? True RIR é palíndromo? True MIRIM é palíndromo? True ROTOR é palíndromo? True
Referência: KHANACADEMY - Recursividade
domingo, 8 de outubro de 2017
String Par ou String Ímpar
Dizer que uma determinada String é par ou é ímpar soa bastante estranho, mas essa ideia me ocorreu ao lembrar da cantora Ana Carolina, já que ela possui essa "mania" de classificar palavras, nomes, ou mesmo frases inteiras como sendo "par" ou "ímpar".
Eu até consegui encontrar dois vídeos no YouTube comprovando o fato. Um deles é um trecho de uma entrevista no programa Estrelas, da Angélica. Outro, um trecho de uma entrevista no programa do Jô Soares.
A propósito, Ana Carolina é ímpar!
Então, pensei: powershell pode nos ajudar a informar se uma determinada palavra é par ou é ímpar.
Para tanto, vamos precisar identificar:
A implementação é bastante simples, porém divertida.
Inicialmente, vamos criar uma função, que recebe como parâmetro uma String e retorna se ela é par ou é ímpar.
Vamos criar um array para armazenar as palavras (ou frases) que desejamos que o powershell verifique.
Na sequência, usamos ForEach para percorrer cada palavra do array e chamar a função StrPoI que retorna se é par ou se é ímpar. Observação: os espaços em branco não são levados em consideração, somente as letras, por isso o replace.
Ao executarmos o script, o resultado é seguinte.
Eu até consegui encontrar dois vídeos no YouTube comprovando o fato. Um deles é um trecho de uma entrevista no programa Estrelas, da Angélica. Outro, um trecho de uma entrevista no programa do Jô Soares.
A propósito, Ana Carolina é ímpar!
Então, pensei: powershell pode nos ajudar a informar se uma determinada palavra é par ou é ímpar.
Para tanto, vamos precisar identificar:
- Quantas letras tem uma determinada palavra: isso é bastante fácil porque o powershell já tem a propriedade length na classe String.
- Se um número é par ou ímpar: também é fácil, verificando o resto da divisão do número por 2. Se o resto for zero, o número é par, senão é ímpar.
A implementação é bastante simples, porém divertida.
Inicialmente, vamos criar uma função, que recebe como parâmetro uma String e retorna se ela é par ou é ímpar.
Function StrPoI([string]$str) { if (($str.Length % 2) -eq 0) { return "PAR" } else { return "ÍMPAR" } }
Vamos criar um array para armazenar as palavras (ou frases) que desejamos que o powershell verifique.
$palavras = @("Futebol","Jogador","Música","PowerShell","Oftalmologista",` "Inconstitucional","Paralelepípedos", "Ana Carolina")
Na sequência, usamos ForEach para percorrer cada palavra do array e chamar a função StrPoI que retorna se é par ou se é ímpar. Observação: os espaços em branco não são levados em consideração, somente as letras, por isso o replace.
ForEach ($palavra in $palavras) { $r = StrPoI($palavra -replace (' ','')) Write-Host -ForegroundColor Cyan $palavra" - " -NoNewline Write-Host -ForegroundColor Yellow $r }
Ao executarmos o script, o resultado é seguinte.
Assinar:
Postagens (Atom)