Neo traderBot

Neo traderBot

Você sabia?

Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!

Curso Básico – Lógica de Programação

Aula 02 – Tipos de Dados e Operações

Leitura estimada: 15 minutos 539 views

Aprenda os tipos básicos de dados e operações.

Reproduzir vídeo

1. Introdução

Programação é como brincar de lego…não é por acaso que até a empresa lego faz kits de programação para ensinar às crianças. A forma de pensar ao resolver um problema e programar a solução é sempre de encaixar blocos sequencialmente para obter o resultado desejado. Desta forma, temos que saber o que cada bloco faz para fazermos o melhor uso dele em nossos programas.

A seguir vamos aprender quais são os tipos básicos de dados e como podemos manipulá-los, ou seja, quais operações podemos realizar com eles. Por quanto ainda vamos tentar evitar ao máximo entrar em detalhes de linguagens de programação específicas e nos ater aos conceitos. Em breve, você poderá iniciar o estudo de uma linguagem de programação com os conceitos básicos já absorvidos.

2. Quais são os tipos básicos de dados?

Os primeiros blocos que precisamos conhecer são os tipos de dados. Em todas as linguagens de programação você irá encontrar três tipos basícos de dados, que podem ser números inteiros (que nas linguagens serão apresentados como integer ou int), números com casas decimais (ou ponto flutuante, que podem se apresentar como float, real, double) e dados booleanos (um tipo de dado que apresenta apenas dois valores possíveis: verdadeiro/falso, ou em inglês, true/false). Não se preocupe em decorar as nomenclaturas, pois cada linguagem pode chamar os tipos de dados de forma diferente e quando você obtiver fluência esse será um detalhe que não representará nenhuma dificuldade. Há ainda um tipo de dados conhecido como string, que são os dados de texto, mas que não iremos abordar nesse curso introdutório para restringir o conteúdo ao que é realmente essencial.

Um termo técnico muito comum em programação é a declaração de variáveis. O que siginifica isso? O seu código fonte certamente exigirá que você crie variáveis para armazenar informação. Para cada variável, o programador precisar atribuir um nome e o tipo de dados que aquela variável armazena. O processo de definir a variável é o que se chama “declarar variável”

3. Operações com dados numéricos

Vamos falar então sobre as operações que podemos fazer com os dados numéricos, sejam inteiros ou com casas decimais. Obviamente você já aprendeu isso na escola! É possível somar, subtrair, multiplicar, dividir, exponenciar, tirar a n-ésima raiz, obter resto de uma divisão, obter o valor absoluto do número, entre outras…

A diferença na programação quando usamos dados inteiros e dados com casas decimais ocorre quando tentamos armazenar o resultado de uma das operações acima mencionadas em uma variável com tipo de dado incompatível. 

Lembra que vimos na primeira aula que os computadores só fazem o que a gente pede!? Então, ao escrever seu programa você precisará declarar o tipo das variáveis que utilizará. Vamos supor que você tenha declarado uma variável inteira para armezar o número da sua residência em sua rua: num_residencia. Logo, se em algum momento você tentar atribuir um valor à variável num_residencia, este valor deverá ser um inteiro. Poderíamos atribuir valores por meio de vários tipos de operações:

				
					// Atribuição direta
num_residencia = 8;
				
			
				
					// Atribuição por divisão
num_residencia = 16/2;
				
			
				
					// Atribuição por multiplicação
num_residencia = 2*4;
				
			
				
					// Atribuição por exponenciação (2 elevado a 3)
num_residencia = 2**3;
				
			
				
					// Atribuição por n-ésima raiz (no caso, raiz quadrada)
num_residencia = 64**(1/2);
				
			

Para todas as atribuições acima não haveria problema, porque o resultado é sempre um número inteiro e a variável num_residencia é do tipo inteiro. Mas e se o resultado da operação fosse um número com casas decimais, ex: 10/3?

Nesse caso, dependeria de cada linguagem! Há linguagens que iriam fazer a conversão automática do resultado (técnicamente conhecida como conversão implícita), truncando as casas decimais e atribuiria o valor 3 à variável num_residencia. Outras poderiam gerar um erro durante a compilação do programa ou durante a execução. Assim, o mais adequado é você garantir que a variável receberá um valor do mesmo tipo que foi declarada.

Vamos supor agora que você declare uma variável chamada minha_altura como do tipo Real, ou seja, um número com casas decimais, para armazenar minha altura em metros. Observe que a variável minha_altura poderá receber tantos valores inteiros como valores com casas decimais.

Daí você pensa, quantas casas decimais o computador pode guardar? Se eu armazenasse em minha_altura o resultado da operação 5/3. A variável minha altura teria o valor 1,66 ou 1,66667, ou 1,666666….? Isto já começa a ficar um pouco técnico e você nem precisa se preocupar em profundidade com isso. Mas vou tentar lançar um pouco de luz para que entenda melhor. 

Cada tipo de dado numérico com casas decimais pode ter uma precisão diferente a depender da quantidade de bits que este tipo de dado ocupa na memória. Assim, quanto mais bits ele ocupar na memória, mais casas decimais ele pode armazenar. É correto você pensar que em casos de resultados com infinitas casas decimais o computador nunca terá o resultado exato e sim aproximado com maior ou menor precisão, dependendo do tipo de dado que esteja utilizando. Mas para efeitos práticos, a precisão numérica que temos hoje é tão grande que isso não representa problemas para a imensa maioria das aplicações!

4. Ordem de precedência das operações

Algo importante para se prestar atenção ao escrever uma fórmula para uma variável é a ordem de precedência das operações. Você já estudou isso em matemática, mas não custa nada lembrar:

  1. Parênteses;
  2. Expoentes;
  3. Multiplicações e divisões (da esquerda para direita);
  4. Somas e subtrações (da esquerda para direita).

Nada melhor do que eu exemplo para deixar as coisas mais claras! Vamos pensar na variável minha_altura, que é do tipo Real. Se eu atribuísse a fórmula abaixo à variável, qual seria o seu valor? Tente fazer antes de expandir a resposta!

  • minha_altura = (9 – 2*((2)*(5-4)))/3
  • minha_altura = (9 – 2*((2)*(1)))/3
  • minha_altura = (9 – 2*(2))/3
  • minha_altura = (9 – 4)/3
  • minha_altura = 5/3

Você deve estar pensando: para que alguém iria programar um código para fazer essa conta? Basta usar a calculadora! E você tem razão! Não teria sentido algum programar uma atribuição de variável dessa forma, foi apenas um exemplo didático!

Em programação, o que possivelmente você iria programar é uma fórmula que baseada em outras variáveis, possa calcular ou estimar sua altura. Assim, poderíamos reescrever a fórmula de minha_altura como:

 

				
					minha_altura = (A - 2*((B-2)*(C-D**2)))/3
				
			

Inserindo os valores de A, B, C e D, o programa iria calcular minha_altura. Note que você precisa programar apenas uma vez a fórmula, o resultado dependerá apenas das variáveis inseridas no programa.

Bom, por ora, acho que estamos satisfeitos sobre operações com dados numéricos. Vamos passar agora para o outro tipo de dado: dados booleanos.

5. Operações com dados booleanos

A denominação booleano foi realizada em homenagem ao matemático inglês George Boole, um dos país da lógica booleana. As operações booleanas ou lógica booleana estão presentes em todos os circuitos eletrônicos que puder imaginar, ou seja, é a base para todos os eletrônicos que conhecemos, desde o controle do portão eletrônico até o seu celular! Não vamos abordar a lógica booleana em profundidade explorando todas as suas propriedades, mas vamos falar do necessário para que possa aprender a programar.

Como já disse na introdução, uma variável booleana pode ter apenas um de dois valores possíveis: true ou false. Vou usar os termos em inglês daqui para frente, pois assim serão apresentados para você nas linguagens de programação que vier a estudar. Para as variáveis booleanas, podemos realizar três operações básicas booleanas:

  1. NOT;
  2. AND (E);
  3. OR (OU).

Vamos começar pela operação mais simples: NOT. Se A for uma variável do tipo booleana e seu valor for true. A operação (NOT A) resulta em false. Se B é uma variável booleana e seu valor é false. A operação (NOT B) resulta em true. Simples, não!? Vamos ver isso em um formato de tabela para estruturar o raciocínio (são as famosas tabelas da verdade que já vimos no ensino médio):

A NOT A
false
true
true
false

A operação AND (E) exige que todos os operandos sejam verdadeiros para que resulte em verdadeiro, senão o valor resultante será falso. Vejamos a tabela da verdade no caso de apenas dois operandos:

A B A AND B
false
false
false
false
true
false
true
false
false
true
true
true

Por fim, a operação OR (OU) exige que pelo menos um dos operandos seja verdadeiro para que o resultado seja verdadeiro. Se nenhum operando for verdadeiro, o resultado será falso. A tabela da verdade no caso de dois operandos é a seguinte:

A B A OR B
false
false
false
false
true
true
true
false
true
true
true
true

6. Praticando a lógica booleana

Agora que já vimos o básico da lógica booleana, vamos testar se realmente aprendemos. Veja abaixo a declaração de algumas variáveis e em seguida, calcule o resultado de cada expressão. Olhe as respostas só depois de ter tentado resolver!

 

				
					int A = 10
int B = 15
boolean C = false
real D = 35,5
int E = 2
				
			

R: true

R: false

R: false

R: true AND false

R: false

R: false OR false

R: false

R: false OR false OR true

R: true

R: true AND true

R: true

R: NOT(NOT(false))

R: NOT(true)

R: false

R: (100 – 106,5) < 0

R: true

R: (50 > 35,5) AND NOT(false)

R: true AND true

R: true

7. Tipo de dados especial: Arrays

Vamos agora falar de um tipo de dado muito útil em programação: os arrays (difícil encontrar uma tradução para essa palavra! Vamos usar em inglês mesmo!)

Os arrays não são um tipo de dado básico, tais como um número inteiro, real ou booleano, mas são extremamente relevantes. Os arrays são, na verdade, uma sequência de tamanho definido de algum tipo de dado básico. Por exemplo, suponhamos que precisássemos declarar 10 variáveis inteiras. Ao invés de criar 10 nomes diferentes, podemos declarar uma única variável (um array de números inteiros) com tamanho igual a 10, conforme figura abaixo. Vamos nomear o array abaixo de array_teste.

A variável array_teste teve seus valores inicializados de forma aleatória para fins didáticos. Podemos acessar cada valor do array por meio de um indexador/índice, um número inteiro que irá se referir à posição desejada do array.

Desta forma, se quisermos nos referir ao número 15, que ocupa a primeira posição da variável array_teste, iremos utilizar a seguinte convenção array_teste[1]. Da mesma forma, a última posição do array_teste possui o valor 10 e é referenciado como array_teste[10].

Um ponto importante de ressaltar é que a referencia para o primeiro elemento do array depende da linguagem. Algumas linguagens consideram os índices iniciando por 0. Se fosse este o caso, array_teste[0] retornaria o primeiro elemento da sequência, no caso 15, enquanto array_teste[1] iria se referir na verdade ao segundo elemento da lista, no caso 4, e o último elemento da lista seria array_teste[9], que teria o valor 10.

 

8. Recapitulando

Nesta aula começamos conhecendo os tipos básicos de dados comuns em todas as linguagens de programação. Em seguida, vimos as operações que podemos aplicar sobre os dados numéricos e a ordem de precedência no cálculo de fórmulas. Também vimos as operações básicas booleanas e realizamos alguns exercícios para fixar o conteúdo. Por fim, vimos que os arrays são uma sequência de dados de um mesmo tipo declarado como uma única variável indexada, e sua importância para programação.

CONTENTS