A minha ideia neste livro é transformar a mente dos desenvolvedores C++ numa fonte de verdade, onde será atribuído uma resposta a todos os "por quê" de cada dúvida sobre C++. Esse livro é destinado a todas as pessoas que não renunciaram ao conhecimento e mesmo nessa grande barafunda que é o mundo, ainda conseguem dedicar o próprio tempo para estudar.
Ass: Rafael Romão (Mark Security)
- Entendendo a estrutura principal do programa C++
- Entendendo variáveis e declarações condicionais
- Operadores matemáticos
- Tomada de decisão, IF/ELSE e comando GOTO.
- Operadores lógicos
- Operador Ternário
#include <iostream>
- Essa função nos permite incluir em nosso código algumas bibliotecas para que possamos utilizar funções disponibilizadas por elas. A biblioteca padrão do C++ é conhecida como IOSTREAM (fluxo de entrada e saída). Essa biblioteca é muito importante para utilizarmos alguns objetos de fluxos globais, como por exemplo: cout, cin, cerr, clog, werr, wcin, etc..."
using namespace std;
- A funçao using namespace std é essencial para evitarmos o uso de identificadores como
std::
em nosso código. Um desses exemplos é o seguinte:std::cout << "Hello world" << std::endl;
int main() {
return 0;
}
- Essa função é essencial para os nosso programas em C++. A main é onde ficará toda estrutura do nosso programa e é pela main que é identificado por onde começa e termina o nosso programa.
Bom, podemos fazer uma pequena anatomia da nossa estrutura main e compreendermos de uma forma mais elaborada sobre o nosso programa.
- 1 Por que a main se inicia como um int?
- 2 Por que ela se chama main?
- 3 Por que ela termina com o return 0?
1 - Bom, a nossa main se inicia com int pelo fato de que o nosso return ou será 0 (true) ou será false (1). Esses dois números são considerados números inteiros, ou seja... o motivo de usarmos o int no inicio da nossa main é porque o nosso identificador return ou ele será 0 ou ele será 1 que são dois números inteiros.
2 - A tradução de main é algo como "principal", ou seja, ela é basicamente o vetor principal de nosso código, é por ela que o compilador reconhecerá onde o nosso programa se inicia.
3 - O motivo é o mesmo da resposta número 1... pois o valor de 0 em C++ tem valor de true e 1 tem valor de false, portanto só saberemos se o nosso código deu certo caso o retorno for igual a 0 e se algo deu errado, caso o retorno for 1.
cout << "Hello world" << endl;
- Essa parte do nosso código nos mostra o famoso "Olá mundo" que é bastante utilizado como representação do nosso primeiro programa escrito em determinada linguagem de programação. Podemos fazer a anatomia desse pequeno parâmetro de código.
- cout = essa é a função que determina ao nosso programa que iremos imprimir mensagens no nosso console/terminal. Essa mensagem seja ela colocada por nós ou imprimida por meio de um valor de uma variável atribuida por nós.
- << = Conhecido como operadores de deslocamento bit a bit, informa ao nosso programa que terá uma saída de dados (output).
- "Hello world" = essa é a mensagem que será imprimida em nossa tela. Essa mensagem foi inserida manualmente, portanto conseguimos inserir valores de variáveis para serem imprimidos em nosso console. (veremos sobre isso logo, logo.)
- endl = determina o nosso programa que após a execução da mensagem, será pulado uma linha para criar espaçamento entre objetos.
O resultado de exeução do nosso programa é:
int inteiro = 10;
float flutuante = 1.0;
char caracter = 'C';
string strings = "Hello world";
bool TorF = false;
double doublen = 10000000;
Bom, vamos compreender então o que cada variável nos quer mostrar e o como elas funcionam.
- Int - Essa variável é chamada de variável do tipo inteiro. Essa variável sempre será atribuída a valores númericos de 0 (um) ao 9 (nove), ou seja, é determinada somente para números puros (sem pontos e vírgulas.)
- Float - Essa variável é chamada de variável do tipo ponto flutuante, pois todos os seus valores númericos são trabalhados com pontos, como por exemplo: 3.1415.
- Char - Essa variável é chamada de variável do tipo caractere, ou seja, utiliza-se letras para se atribuir valores as variáveis do tipo char.
- String - Essa variável é chamada de variável do tipo referência, ou seja, contém um endereço de objeto. Normalmente é utilizada para expressar mensagens com grandes valores de letras.
- Bool - Essa variável é chamada de variável do tipo booleana, ou seja, contém apenas duas sintaxes atribuídas a ela: true or false, 1 or 0. Muito eficiente para ser utilizada em situações como tentar validar se algo é verdadeiro ou falso.
- Double - Essa variável é chamada de variável do tipo double porque ela armazena números de ponto flutuantes, com precisão dupla, ou seja normalmente possui o dobro de capacidade de uma variável do tipo float.
cout << inteiro << endl;
cout << flutuante << endl;
cout << caracter << endl;
cout << strings << endl;
cout << TorF << endl;
cout << doublen << endl;
Aqui nós estamos imprimindo em nosso terminal/console todas as informações que foram atribuídas as nossas variáveis.
Você pode utilizar algumas formas de mudar valores usando o método de casting. Bom, mas o que seria o Cast? O Cast é basicamente uma função que nos permite mudar valores de variáveis sem que precisamos mudar o seu tipo em seu escopo.
int valor = 100 // Sabemos que essa variável é do tipo inteiro (int) como foi explicado logo acima e estou atribuindo a ela um valor que é 10.
cout << valor; // Aqui estou imprimindo em meu console o valor desta variável que no caso é 10.
Caso eu queira que o valor dela seja retornado como 100.000... sem que eu mude em seu escopo de definição do tipo de variável, eu apenas adiciono a função (float) na frente da variável que está sendo chamada em cout: cout << (float)valor;
OBS: Aqui eu estou usando o printf() da biblioteca pois o meu cout estava gerando um bug.
Irei abordar sobre os operadores matemáticos no C++ e isso poderá facilitar a forma de lidar com problemas de multiplicação, divisão, substração e adição no dia a dia de vocês.
Bom, são quatro operadores matemáticos que existem no C++, fora o operador de restos mas que não será falado nesse tópico.
Podemos utilizá-los de diversas formas em nosso código, mas como padrão, farei uma pequena calculadora para que seja representado de forma eficaz utilizando todos os operadores matemáticos ao mesmo tempo.
Bom, chegamos finalmente na parte onde se trabalha toda lógica de decisão em um programa de computador, independente da linguagem de programação, sempre existirá funções atribuídas a tomadas de decisões. Vejamos abaixo o código representando sobre este conteúdo.
Podemos fazer uma anatomia deste código e entender como ele funciona.
int num;
num = 1;
if (num == 1) {
cout << "Num é igual a 1!" << endl;
}
int num
-> Está sendo declarado uma variável do tipo inteiro com nome de "num".num = 1
-> Está sendo declarado um determinado valor diretamente na variável "num".if (num == 1)
-> Nessa função, estamos verificando se num é igual a 1. Se essa verificação for verdadeira (true), ele irá executar a mensagem, mas caso for falso (false), o programa será fechado.
Bom, podemos observar que a mensagem foi exibida e por isso temos a certeza de que o valor de num era verdadeiro, caso contrário nada seria executado. Mas onde o else entraria nessa história? O ELSE é nada mais que uma função de (senão). Observe na imagem abaixo o else sendo utilizado.
Observe que o valor de num agora foi alocado como 2, ou seja, um valor totalmente diferente do que está definido na nossa condição if(num == 1). Bom, vamos executar o nosso programa e vamos observar o que será feito.
Pode-se observar que a mensagem que foi exibida, é a que está dentro da condição else, pois caso a condição else não existisse, nada seria executado e simplesmente o programa seria parado. O que entende-se sobre isso, é que o if e else são duas condições com funcionalidades diferentes porém sempre trabalhando juntas. Se (if) a minha condição for verdadeira, execute o que há dentro de "if", senão (else) for verdadeira, execute o que há dentro de "else".
A condição goto é bastante interessante quando se trata de fazer um loop em nosso programa. O que acontece, é que essa função nos permite reexecutar o nosso programa sem precisarmos executar um comando para que o nosso programa seja executado. Criei um pequeno programa de calculos de adição e mostrarei como exemplo para que vocês possam compreender de uma forma mais simples.
Adicionei uma biblioteca chamada cstdlib, pois ela possui a função de system()
para que eu possa utilizar o comando cls em meu console, para que depois da reexeução do programa, não fique ocupando espaço em meu console com impressões de execuções passadas.
Bom, a função goto entra diretamente logo depois das declarações de variáveis, chamado de inicio:
. Na função de decisão if(), observa-se que há um comando chamado goto inicio;
. Esse comando permite que ele volte até onde a minha primeira declaração foi feita, que no caso foi onde determinei a função inicio:
.
Os operadores lógicos ou operadores aritméticos são elementos que trabalham com operações juntos das variáveis. Os operadores lógicos sempre trabalharão com o corportamento de true (1) ou false (0). Representarei abaixo em códigos e mostrarei as diversas formas de se utilizar esses operadores. Antes disso, vamos conhecer quais são e que funções eles atribuem ao nosso código.
> (Maior que...)
Esse operador é utilizado para indicar que se determinado número for maior que outro, então será "true", mas caso for menor, será "false".< (Menor que...)
Esse operador é utilizado para indicar que se um determinado número for menor que outro, então será "true", mas caso for maior, será "false".!= (Diferente de)
Esse operador é utilizado para indicar diferença entre dois valores. Se determinado valor for diferente de outro valor, então será "true", mas caso for igual, será "false".>= (Maior ou igual a...)
Esse operador é utilizado para indicar que se um número for maior ou igual a outro número, então será "true", mas caso for menor ou não igual, será "false".<= (Menor ou igual a...)
Esse operador é utilizado para indicar que se um número for menor ou igual a outro número, então será "true", mas caso for maior ou não igual, será "false".== (Igual a...)
Esse operador é utilizado para indicar igualdade a um valor. Caso 1 for igual a 1, então será "true", mas caso 1 não for igual a 1, então será "false".
Foi declarado que x é igual a y, pois o valor que foi atribuído na variável x é o mesmo valor que foi atribuído na variável y.
Podemos observar aqui que o console imprimiu que x é menor que y, pois o valor que foi atribuído na variável x é menor que o valor que está atribuído na variável y.
Uh! Parece que o resultado foi "false", pois ele não retornou a mensagem dizendo que x é maior que y. O valor que foi atribuído em x é bem menor que o valor atribúido em y.
Observe que o valor que foi atribuído ao x, não é menor que o valor de y mas sim igual ao valor de y, portanto sendo verdadeiro, foi exibido a mensagem dentro da condição de "if".
O resultado exibido em nosso console está dizendo que x é maior ou igual a y, e de fato isso é verdadeiro. O valor que foi atribuído em x é maior do que y mas não é igual a y.
A resposta em geral foi dada como verdadeiro, pois o valor que está atribuído em x é diferente do valor que está atribuído em y, portanto o valor é verdadeiro e será exibido a mensagem dentro da condição de "if".
O Operador Ternário é também conhecido como "if ternário", pois a sua forma de trabalhar é bastante semelhante com o "if", mas algumas coisas são diferentes, como por exemplo: O Operador Ternário verifica uma condição e retorna um dentre esses dois valores que foram pré-definidos em sua estrutura. Talvez seja um pouco difícil de entender o seu funcionamento mas na prática tudo se torna flores. Então vamos lá!
Vamos entender o código abaixo:
Bom, podemos observar que temos uma função estranha em nosso código e é exatamente sobre essa função que buscaremos entender.
-
(calc >= 50)
-> Nessa função estamos atribuindo a nossa variável calc e dizendo que se o valor que foi atribuído a essa variável for maior ou igual a 50, nossa resposta será verdadeiro (true) mas caso contrário, será falso (false). -
res = "boa nota" : res = "nota ruim"
-> Essa função aqui trabalha da seguinte forma: (verdadeiro | falso). Se a minha variável for maior ou igual a 50, então a primeira função será executada, caso a minha variável for menor que 50, então a segunda função será executada.
Existe diversas maneiras de se utilizar o Operador Ternário, mas essa é uma das formas mais comuns de se utilizar esse operador. Vale ressaltar que o Operador Ternário é mais rápido no quesito de exeução em comparação com a função de controle "if". Para máquinas mais fracas o Operador Ternário é a melhor função a ser utilizada.