Perl – Loop do while

Neste exemplo, os elementos de uma lista são solicitados utilizando-se o laço do while.

  • Design-time
#!/usr/bin/perl
use warnings;
use strict;

my @a;
my $elem;

print "Informe elementos de uma lista, um por linha - 'FIM' ou 'fim' para sair:\n";

do{
$elem = <>;
chomp $elem;
push @a, $elem;
}while($elem ne "FIM" && $elem ne "fim");

pop @a;
my $num = scalar @a;
print "\nNúmero de elementos da lista: $num\n";
print "Lista informada: ( @a )\n";
  • Runtime
  • Sintaxe

A diferença entre os laços while e do while é que, como as instruções (nas linhas 11-13) estão em um bloco antes da condição while, estas sempre são executadas pelo menos uma vez. Por isso, como introduzimos a string “FIM” ou a string “fim” para interromper o laço, temos que usar a função pop para retirá-las do array, ou seja, da lista – veja a linha 16.

  • Reflexão

Pessoas morrem; ideias, não. E há pessoas que se tornam lendas. Portanto, ideias. Edson morreu. Pelé é eterno.

Perl – Loop while

Este é outro exemplo que elabora uma lista e uma tabuada através de estruturas de controle de repetição ou iteração com o laço while.

  • Design-time
#!/usr/bin/perl
use warnings;
use strict;

my @a;

print "Informe números, um por linha\n";
print "CTRL-Z (Windows) ou CTRL-D (Linux) para sair:\n";

while(my $elem = <>){
chomp $elem;
$elem = int $elem;
push @a, $elem;
}

print "Lista informada: ( @a )\n";
my $num = scalar @a;

print "Número de elementos: $num\n";
print "Tabuada do ", $num, ":\n";

$_ = 0;
print "$_ * $num = ", $_++ * $num, "\n" while $_ < 11;
  • Runtime
  • Sintaxe

Observe que não foram utilizados parênteses exceto opcionalmente dentro das strings nas linhas 8 e 16. E as linhas 5, 11-13, 17 e 23 poderiam ter sido escritas respectivamente da seguinte forma, com parênteses:

my @a = ();
chomp($elem);
$elem = int($elem);
push(@a, $elem);
my $num = scalar(@a);
print(“$_ * $num = “, $_++ * $num, “\n”) while($_ < 11);

As outras instruções print também poderiam usar parênteses envolvendo seus argumentos.

Desta vez foi utilizada a variável padrão _$ como iterador explícito para o segundo e último laço (e não uma variável definida pelo usuário, como $i por exemplo).

A estrutura de repetição pode ser escrita da seguinte forma tradicional e mais genericamente:

$iterador = valorMínimo;
while($iterador < valorMáximo){
$iterador+ +;
}

ou

$iterador = valorMáximo;
while($iterador > valorMínimo){
$iterador– –;
}

  • Reflexão

Na véspera do dia atribuído ao nascimento de Jesus, isto é, do Natal, um típico cristão cidadão do bem, em nome de deus, da pátria e da família plantou um explosivo em um caminhão que levaria combustível ao aeroporto de Brasília. Saiba mais na coluna do Sakamoto. E lembre-se: o candidato do nazifascismo foi derrotado, mas infelizmente o nazifascismo continua crescendo cada vez mais especialmente entre os brasileiros cristãos, como na época da República de Weimar, na Alemanha entre 1919 e 1933.

Perl – Estrutura de repetição com laço for

Neste exemplo uma lista e uma tabuada são elaboradas através de estruturas de controle de repetição ou iteração com o laço for.

  • Design-time
#!/usr/bin/perl
use warnings;
use strict;

print "Informe um número (1-10): ";
chomp(my $num = <>);

if($num > 0 && $num < 11){
	my @a = (0..$num);

	print "LISTA: \n( ";
	foreach(@a){
		print $_, " ";
	}
	print ")\n";

	print "TABUADA:\n";
	for(0..10){
		print "$_ * $num  =  ", $_ * $num, "\n";
	}
}
  • Runtime
  • Sintaxe

No código acima, há duas listas.

A primeira é (0..$num), onde $num é o valor informado pelo usuário, sendo idealmente um inteiro de 1 a 10. É atribuída ao array @a. O laço foreach permite que se faça um loop sobre os elementos da lista ou do array (vetor, matriz). Em cada iteração, cada elemento é mostrado individualmente.

A segunda é (0..10). É usada pelo laço for para a construção da tabuada do valor informado.

Os laços for e foreach são idênticos em Perl. Neste exemplo não foi informado um iterador explícito para os laços (como $i, por exemplo), mas uma variável especial, a variável padrão _$, à qual é atribuído o valor de cada elemento da lista em cada iteração.

  • Reflexão

A América Latina, a África e a Ásia sempre foram submetidas à estratégia geopolítica de “divide et impera“, isto é, dividir para conquistar. Isto explica o relacionamento entre Brasil e Argentina e suas fases de isolamento, rivalidade e aproximação.

Qual é o benefício de se ficar contra o próximo e a favor do distante?

Perl – Estrutura de seleção múltipla

A instrução given-when em Perl é um substituto para instruções if longas que comparam uma variável com vários valores inteiros. Fornece uma maneira fácil de desviar a execução para diferentes partes do código com base no valor da expressão, e é semelhante ao switch-case de C/C++, Python ou PHP. A seguir o cálculo do índice de massa corporal é realizado com menos linhas do que nos exemplos anteriores.

  • Design-time
#!/usr/bin/perl
use warnings;
use strict;
use experimental 'switch';

my ($imc, $massa, $altura, $mensagem);

print "Informe o peso: ";
chomp($massa = <>);
print "Informe a altura: ";
chomp($altura = <>);

$imc = $massa / ($altura * $altura);
$mensagem = "IMC = ";
print $mensagem;
printf "%.2f", $imc;
print "\n";

print do{
	given($imc){
		when($imc < 16){"Magreza severa\n";}
		"Magreza moderada\n" when $imc >= 16 && $imc < 17;
		"Magreza leve\n" when $imc >= 17 && $imc < 18.5;
		"Peso normal\n" when $imc >= 18.5 && $imc < 25;
		"Sobrepeso\n" when $imc >= 25 && $imc < 30;
		"Obesidade classe I\n" when $imc >= 30 && $imc < 35;
		"Obesidade classe II\n" when $imc >= 35 && $imc < 40;
		default {"Obesidade classe III\n";}
	}
}
  • Runtime
  • Sintaxe

Neste exemplo a estrutura de seleção múltipla está dentro do bloco do{}que segue a instrução print, cujos argumentos (ou aquilo que será impresso) dependem do valor da variável $imc ou do resultado (ou valor booleano) da expressão contendo essa variável.

A estrutura de seleção múltipla tem o seguinte formato com duas opções ( separadas a seguir com | ):

given( expressão )

{

when( valor1 ) { instrução1; } | instrução1 when valor1;

when( valorN ) { instruçãoN; } | instruçãoN when valorN;

default { instrução default; }

}

Observe que na primeira opção o valor é envolvido por parênteses () e a instrução é envolvida por chaves {}. Compare a linha 21 com as linhas 22-27.

  • Reflexão

Nesta Copa do Mundo, a eliminação do Brasil por penalties frente a Croácia ocorreu por excesso de confiança e de soberba? Faltou seriedade e humildade? O que você acha?

Xbasic – Cálculo do IMC

XBasic é mais um dialeto da linguagem de programação BASIC, desenvolvido em 1988 para a CPU Motorola 88000 e Unix por Max Reason, portado para o Windows em 1992 e freeware desde 1999.

  • Design-time
PROGRAM "imc2"
VERSION "0.001"

DECLARE FUNCTION Entry()

FUNCTION Entry()

	SINGLE massa, altura, imc

	massa = SINGLE(INLINE$("Informe o peso: "))

	altura = SINGLE(INLINE$("Informe a altura: "))

	imc = massa / ( altura * altura )

	PRINT "IMC = ", imc

	IFF imc >= 18.5 THEN
		IFF imc < 17 THEN
			PRINT "Magreza leve"
		ENDIF
		IF imc < 17 && imc >= 16 THEN
			PRINT "Magreza moderada"
		ENDIF
		IFF imc >= 16 THEN
			PRINT "Magreza severa"
		ENDIF
	ENDIF

	IFF imc < 18.5 THEN
		IFF imc >= 25 THEN
			PRINT "Peso normal"
		ENDIF
		IF imc >= 25 && imc < 30 THEN
			PRINT "Sobrepeso"
		ENDIF
		IF imc >= 30 && imc < 35 THEN
			PRINT "Obesidade classe I"
		ENDIF
		IF imc >= 35 && imc < 40 THEN
			PRINT "Obesidade classe II"
		ENDIF
		IFF imc < 40 THEN
			PRINT "Obesidade classe III"
		ENDIF
	ENDIF

END FUNCTION

END PROGRAM
  • Runtime
  • Sintaxe

A instrução IFF significa IF FALSE e, de forma similar ao post anterior, foi utilizada nas linhas 18, 19 e 25 no primeiro bloco condicional e 30, 31 e 42 no segundo. Também foi evitada na linha 22 do primeiro bloco, e 34, 37 e 40 do segundo bloco.

Em Xbasic há outras instruções para estruturas de decisão:

IF, a mais comum, que significa IF TRUE, assim como IFT

IFT, similar a IF

IFZ, que significa IF ZERO

  • Reflexão

Você sabia que as palavras “ler” e “inteligência” têm a mesma origem? Ambas derivam do latim “legere”, que significa “eleger”, “escolher”. Traduzindo de uma forma que qualquer alienado entenda: leia mais para ficar mais inteligente por fazer as melhores escolhas.

Perl – Unless

Em Perl, há duas formas logicamente opostas de controlar condicionalmente a execução de um bloco de código:

  • se não for verdade, então faça isto – instrução if not
  • a menos que seja verdade, então faça aquilo – instrução unless

Reforçando, unless tem ainda as seguintes traduções: a não ser que, salvo se, exceto quando, exceto se, senão. Vejamos o exemplo do cálculo do imc novamente.

  • Design-time
#!/usr/bin/perl
use warnings;
use strict;

my ($imc, $massa, $altura, $mensagem);

print "Informe o peso: ";
chomp($massa = <stdin>);
print "Informe a altura: ";
chomp($altura = <stdin>);

$imc = $massa / ($altura * $altura);
$mensagem = "IMC = ";
print $mensagem;
printf "%.2f", $imc;
print "\n";

unless($imc >= 18.5){
$mensagem = "Magreza ";
$mensagem .= "leve" unless($imc < 17);
$mensagem .= "moderada" if($imc >= 16 && $imc < 17);
$mensagem .= "severa" unless($imc >= 16);
}
elsif($imc >= 18.5 && $imc < 25){
$mensagem = "Peso normal";
}
elsif($imc >= 25 && $imc < 30){
$mensagem = "Sobrepeso";
}
else{
$mensagem = "Obesidade ";
$mensagem .= "classe I" unless($imc >= 35);
$mensagem .= "classe II" if($imc >= 35 && $imc < 40);
$mensagem .= "classe III" unless($imc < 40);
}
print $mensagem, "\n";
  • Runtime
  • Sintaxe

Observe na listagem acima, nas linhas 18, 20 e 22, 32 e 34, que a instrução if foi substituída por unless com inversão da condição – compare com o post anterior.

O efeito é o mesmo, mas a filosofia é diferente. Essa instrução (unless) foi criada para aumentar a legibilidade do código quando você o usa corretamente.

Observe que o ideal é usar essa instrução em condições simples, sendo melhor evitá-la em situações mais complexas – especialmente nas linhas 21 e 33 do código acima.

  • Reflexão

Hoje em dia existe um farto estoque de recursos disponíveis na Internet e, nesta era da informação e da comunicação, praticamente nada justifica a falta do desejo de aprender. Talvez apenas a psicopedagogia e a psicanálise possam explicar a falta de curiosidade, o apego à alienação e a felicidade da ignorância. Mas, como não é minha área, compartilho apenas estes recursos de TI que encontrei navegando por aí: Miguel Panão.