Você está na página 1de 40

Algoritmos / Aula 1 - Introdução à lógica de programação

Entendo a programação...

A Informática é uma área que permeia quase todas as outras áreas. Na Engenharia, Agronomia,
Arquitetura e até nas artes podemos encontrar exemplos de aplicações da tecnologia da informação.

Um sistema computacional é composto pela combinação de hardware e software.

O que é lógica de programação?

EXEMPLO 1

Um bebê sabe que precisa chorar para receber atenção;

EXEMPLO 2

Para pegar a caneta que está dentro da gaveta da gaveta fechada, precisamos primeiro abrir a
gaveta para depois pegar a caneta.

O pensamento (e a lógica) pode ser expresso por meio da palavra falada ou da palavra escrita.
Um mesmo pensamento pode ser expresso em inúmeros idiomas, tanto oralmente quanto por escrito.

A forma de representar o pensamento é muito importante na programação de computadores


porque, quando um programador ou analista pensa em um programa, ele precisa saber expressar seu
raciocínio por meio de uma representação ou mesmo de uma linguagem gráfica.
Nas empresas, isso é muito comum. Existem diagramas específicos para representar fluxos de
processos e outros procedimentos. Por exemplo: os organogramas, que mostram a divisão funcional de
pessoas; as plantas de arquitetura e outros exemplos nos quais encontramos desenhos que representam
algum processo ou projeto.
Atenção
Na informática não é diferente, e usamos alguns recursos para representar o conhecimento. Os
exemplos mais comuns são os fluxogramas e os algoritmos. Você vai perceber que esses recursos não
são exclusivos da área. Eles podem e devem ser usados em várias situações do nosso dia.

1
Os fluxogramas

Em qualquer tipo de tamanho de projeto, sendo ele de software ou não, é feito um planejamento ou
um esboço do que será desenvolvido.

Esses esboços são muito importantes porque ajudam tanto a equipe de desenvolvimento quanto
o cliente a entender melhor o problema a ser resolvido. Servem também como uma ferramenta de
apoio e linguagem comum entre quem está desenvolvendo e o cliente.

Uma forma de criar o esboço de um projeto em programação de computadores é o fluxograma.

Saiba mais
A representação gráfica possibilita que entendamos, de forma rápida e fácil, uma solução para um
problema e mostra a como as informações ou documentos entre os elementos que participam no
processo são transformadas.

Criação de fluxogramas

A existência de fluxogramas na representação de processos é fundamental para a padronização


do trabalho. Além de auxiliar a compreensão dos processos desenvolvidos em cada departamento ou
área da empresa, pode indicar oportunidades de otimização.

Veja dois exemplos de fluxogramas:

1. Suponha que um processo vá ser representado 2. Vamos examinar um exemplo de outra situação:
por um retângulo. E para o início e fim do o objetivo é determinar o valor do saldo no final
desenho, vamos usar um retângulo arredondado. do 3º mês de uma aplicação financeira, com
Sendo assim, para ligar um carro, o desenho do investimento inicial de R$100,00, com juros de 1%
fluxo seria assim: ao mês. Observe o fluxograma a seguir:

No nosso exemplo, temos alguns valores que podem variar:

 i: valor do investimento inicial;  s: saldo ao final do 2º mês;


 j: a taxa de juros;  t: saldo ao final do 3º mês.
 p: saldo ao final do 1º mês;

2
Você sabe o significado de cada figura nos fluxogramas?

No fluxograma, vimos que existem figuras diferentes, cada uma delas com um significado. Observe:

Observe agora um fluxograma um pouco mais complexo:

3
Não diga que é complicado! Ele é apenas um pouco mais elaborado do que os outros e mostra que
nem todas as tarefas são sequenciais.

O que faz este fluxograma?

Ele avalia e calcula as raízes de uma equação do segundo grau. Para que seja possível executar a operação x
= -b/(2*a), é preciso verificar se o valor de a não é zero.

Siga as setas! Atenção aos desvios do fluxo.

Para terminar, observe que também existem fluxogramas para problemas que não sejam
exclusivamente matemáticos.

Veja o fluxograma a seguir:

Esse é mais simples, né?

A outra forma que vamos estudar, a qual representa uma solução de um problema, é o famoso algoritmo.

Algoritmos
O algoritmo é a representação do pensamento descrito como uma sequência de passos que visam
atingir um objetivo.

Quer ver um exemplo?

Olhe como eles são mais simples e corriqueiros do que imaginamos:


 Receita de bolo;
 Orientação para se chegar a algum endereço;
 Um manual de instruções.

E qual a importância dos algoritmos na programação?

Eles servem para representar o raciocínio, independentemente de detalhes computacionais, ou seja,


deixam os detalhes que uma linguagem de programação possui. Esses detalhes podem ser
acrescentados mais tarde. O importante é focalizar primeiro na resolução algorítmica do problema,
possibilitando depois codificá-la em qualquer linguagem.

4
Escrever um algoritmo é fácil. E quanto mais simples você escrever, mais claro e objetivo ele será.

Quer ver um exemplo?

Como fazemos para trocar uma lâmpada? Trata-se de uma sequência de passos, não é mesmo?

Temos que:

1. Pegar uma escada;


2. Posicionar a escada embaixo da lâmpada;
3. Buscar uma lâmpada nova;
4. Subir na escada;
5. Retirar a lâmpada velha;
6. Colocar uma lâmpada nova.

Saiba mais
Dependendo da equipe, do problema ou do projeto, é bom usar uma dessas duas formas (algoritmos ou
fluxogramas), ou até mesmo as duas formas simultaneamente, se for o caso, para poder esclarecer com
precisão a solução de um determinado problema. O algoritmo é muito usado em várias situações. Na
matemática, existem vários tipos de algoritmos, assim como na genética em Biologia e até mesmo na
Administração e Economia.

Como escrever um algoritmo?


A forma mais comum de escrever um
algoritmo é usar uma linguagem chamada
de português estruturado ou portugol. Esta
forma é a que mais se aproxima da definição
de algoritmos como conhecemos.
O português estruturado é uma simplificação
da nossa linguagem natural, na qual usamos
frases simples e estruturas que possuem um
significado muito bem definido.
Apesar disso, a aparência do português
estruturado é muito semelhante a uma
linguagem de programação tradicional. Ele
possui um conjunto de palavras e regras que
formam as sentenças válidas e compõem a
sintaxe da linguagem.
Veja o exemplo de um algoritmo em
português estruturado na tela do
computador: Veja que temos frases curtas e imperativas, ou seja,
estamos “mandando” o computador executar
pequenas ordens que devem ser muito claras.
Veja outro exemplo de algoritmo:

5
Viu que um algoritmo não precisa ser tão
“matemático” ou “computacional” como o primeiro exemplo?

Ele também serve para documentar qualquer tipo de processo, em qualquer área.

Atenção
Você já entendeu que é possível representar programas de computador ou processos por meio de
figuras (no fluxograma) ou por texto (no caso de algoritmo). É preciso agora entender como de fato os
computadores são programados. Para isto, usamos uma linguagem de programação.

Linguagens de programação
As linguagens de programação
não surgiram recentemente.
Elas fazem parte da história da
computação, de uma maneira
muito marcante.
A figura a seguir mostra um
pequeno resumo de como as
linguagens de programação
surgiram ao longo do tempo,
desde a década de 1960:

Reflexão
Em 1960, não tínhamos a internet na forma como é hoje, logo a linguagem Fortran, que é uma das
primeiras a serem usadas em grande escala, não serve para programar para a internet. Essa linguagem
era voltada para as características de sua época como cálculos científicos e outros. E assim ocorreu com
as outras linguagens. Veja como evoluíram até chegar à linguagem C++, que vamos estudar nesta
disciplina. E veja que o C++ deu origem a duas grandes linguagens muito usadas atualmente: o Java e o
C#.

Como um computador é organizado internamente?

Muito bem, um estudo introdutório de programação não pode deixar de abordar a plataforma onde
ele vai ser utilizado. O hardware é o parceiro do software, por isso, vamos estudar a organização básica de
computadores, ou seja, vamos ver como ele é por dentro.

Assim como qualquer equipamento moderno como a TV, o telefone, o automóvel e outros, o
computador é fruto direto da evolução tecnológica das últimas décadas. É claro que em 1940, quando
apareceu o primeiro computador, a tecnologia não era como hoje. Naquela época, mal tínhamos a telefonia
como conhecemos hoje, imagine um computador. A história dos computadores é dividida em gerações, e
vamos dar uma rápida olhada em cada uma delas:

Primeira Geração
1943
A primeira geração dos computadores foi marcada pelo ENIAC (Electrical Numerical Integrator and
Calculator). Ele foi criado em 1943 por John Eckert e John Mauchly e era bem diferente do que
conhecemos por um computador atual.
Segunda Geração
1947
A segunda geração dos computadores ficou marcada pelo desenvolvimento do transístor em 1947.
Os transístores oferecem muitas vantagens em relação às válvulas:

6
São muito menores que as válvulas;
Muito mais econômicos;
Muito mais rápidos;
Não esquentam.

1951
Em 1951, foi criado o UNIVAC (Universal Automatic Computer). Os computadores desta época eram
diferentes dos atuais em vários sentidos. Um deles é que os computadores eram construídos com
finalidades muito específicas.
Terceira Geração
Período de 1965 a 1970
Outro grande avanço na eletrônica contribuiu diretamente na arquitetura dos computadores: o
surgimento do circuito integrado (CI), também chamado de microchip.
Quarta Geração
Começo da década de 1970
Os computadores ficam menores ainda e começam a usar o microprocessador, que é um circuito com
vários circuitos eletrônicos presentes internamente.
Dias atuais
Depois da quarta geração, os computadores tiveram uma evolução muito rápida. Assim como a
tecnologia evoluiu em outras áreas, o computador seguiu esta evolução. Porém, mesmo com os
computadores modernos que temos hoje, ultrabooks, tablets, surfaces e outros, sua arquitetura interna
não foi tão modificada assim.

Comentário
Essa arquitetura foi criada por John Von Neumann, um matemático húngaro naturalizado estadunidense
que contribuiu com várias áreas, inclusive a computação. A arquitetura desenvolvida por ele é usada de
uma maneira geral nos computadores mais modernos, inclusive em supercomputadores, com algumas
variações, mas de qualquer forma obedecem ao princípio desenvolvido por Von Neumann.

A arquitetura tem o seguinte diagrama. Von Neumann sugeriu uma forma de organizar o computador
por meio dos seguintes elementos:

7
UMA MEMÓRIA, UMA UNIDADE DE UMA UNIDADE LÓGICA E DISPOSITIVOS DE
DIVIDIDA EM PRIMÁRIA E CONTROLE ARITMÉTICA (ALU) ENTRADA E SAÍDA
SECUNDÁRIA
A memória primária é o Responsável pela Responsável pelos Compreendendo os
que conhecemos como sincronização entre os cálculos e seus discos, pendrives e
RAM: memória de demais componentes. controles. demais dispositivos de
acesso aleatório, armazenamento.
podendo ser escrita e
apagada.

Atividade

Observe o esquema a seguir e escreva qual funcionamento básico de um computador convencional de


acordo com seu significado.

GABARITO

1. Armazenamento Secundário
2. Entrada
3. Processamento
4. Processamento
5. Saída

CARACTERISTICAS DE UM ALGORÍTMO
1. A finitude – todo algoritmo deve terminar após um número finito de passos.
2. Definição – cada passo do algoritmo deve ser claramente definido.
3. Entradas – tem que ser nulas ou com algum valor específico.
4. Saídas – O algoritmo tem que ter um número X ou Y de saída.
5. Efetividade – todas operações devem ser simples, de modo que possam ser executadas por
um determinado tempo. E o tempo tem que ser limitado.

8
Algoritmos / Aula 2 - Nosso primeiro programa

O que é um programa?

Um programa nada mais é do que uma sequência de comandos ou ordens dados a um computador.
Mas é bem difícil pegar um microfone e dar ordens verbais para um computador realizar o que queremos.

O que temos é o nosso teclado e o monitor, por enquanto.

Então, um programa é um arquivo de texto, feito no mais simples editor de texto que você possuir no
seu computador.

Compilação

Por outro lado, o computador não


entende o conteúdo do arquivo de texto
contendo o seu programa.
Ele precisa ser convertido em uma
linguagem que o computador entende,
para poder executar o programa. Este
processo é chamado de compilação. A
compilação ocorre basicamente de
acordo com o diagrama:
Existem outras etapas e fases com
muitos detalhes, mas basicamente o que
precisamos saber é que um programa
começa com o seu código-fonte, escrito
em uma linguagem de alto nível, e passa
por algumas etapas específicas para cada
plataforma.
Veja que no diagrama o mesmo
programa pode rodar no Linux, no
Windows ou no Mac, desde que ele seja
compilado para estas plataformas.

Saiba mais
Dizemos que uma linguagem é de alto nível quando conseguimos ler e escrever usando palavras
conhecidas por nós. O C++, por mais que pareça difícil, possui muitas palavras que nós entendemos,
como if (se), while (enquanto), for (para) etc. Portanto, compilar um programa significa converter um
arquivo de texto escrito em uma linguagem de programação em códigos binários pertencentes a uma
plataforma de execução.

Lembre-se: o computador é uma máquina que só entende a linguagem binária. E devido à forma como
os sistemas operacionais são construídos, cada um tem suas peculiaridades.

Vamos supor que a seguinte sequência signifique: “Escreva ‘alô’ na tela” no Linux:
0111010000100010101.

No Mac Os e no Windows, essa sequência pode não significar a mesma coisa; por isso, cada uma das
plataformas tem o seu próprio compilador.

Bem, vamos programar!

9
Nosso primeiro programa
Vamos começar com um exemplo bem simples. Em muitos livros, tutoriais, videoaulas e afins, o
pessoal costuma criar um programa com a mensagem “Alô, mundo”.

Nosso caso é mais interessante: vamos calcular a média de um aluno baseado em suas 4 notas
bimestrais.

A seguir, mostramos um programa completo em C++.

Dê uma olhada nele. Será que, mesmo sem saber programar, você consegue adivinhar o que ele faz?
Embora já tenhamos adiantado, leia o programa desde o começo, tente traduzir as palavras em inglês e
verifique a expressão matemática existente na linha 13.

Iniciando o programa

Complicado? Nem tanto.


Lembre-se que aprender uma linguagem
de programação é como aprender um
idioma: precisamos conhecer a estrutura
da linguagem, sua sintaxe, suas regras e
até mesmo suas “manhas”.

Vamos estudá-lo linha a linha.

Nosso primeiro programa – Primeiro passo

A linha 1 contém uma palavra que nos indica que ela inicia um programa. Qual seria a palavra?

1 int main(int argc, char** argv) {

GABARITO

Se você pensou em main, acertou. Main significa “principal” e, portanto, essa linha indica que
estamos iniciando o programa principal.

Mas e as outras palavras que aparecem na linha, o que significam? Por enquanto, não é hora de
tratarmos delas. Apenas vamos considerar que, para começar um programa em C++, precisamos
escrever o programa principal iniciando tal como está na linha 1.

Para começarmos nossos programas, vamos usar sempre essa linha:

1 int main(int argc, char** argv) {

10
Nosso primeiro programa –
Segundo passo

As próximas linhas são parecidas:


2 float nota1;
3 float nota2;
4 float nota3;
5 float nota4;
6 float media;

Vamos por partes! O que você acha que significa float?

Float significa flutuar, e como estamos lidando com notas (nota1, nota2, nota3, nota4 e média), isto nos
faz pensar que são números de ponto flutuante (ou números com casas decimais).

Afinal, uma nota de um aluno pode variar de 0 a 10 e ter casas decimais (7.5, 8.25 etc.), certo?

Então, as linhas de 2 a 6 servem para dizer ao compilador que vamos usar 4 palavras para representar as
notas e 1 para a média. O bom é que podemos usar qualquer palavra para essa representação.

Poderíamos ter usado, por exemplo, n1 no lugar de nota1, a2 para nota2 etc., só que teríamos um
problema: elas não iam fazer muito sentido para quem lesse o programa depois.

Porém, a palavra float não pode ser mudada. Ela faz parte de um conjunto próprio da linguagem C++
chamado de palavras reservadas, e não podemos usar palavras que estejam neste conjunto.

Para você ter uma ideia, as palavras reservadas em C++ são:

11
Nosso primeiro programa – terceiro passo
Continuando... As próximas linhas deixam claro que as palavras que criamos antes, nota1 a nota4, vão
receber alguns valores.

8 nota1 = 7;
9 nota2 = 6;
10 nota3 = 9;
11 nota4 = 5;

Se fosse um caso real, no boletim desse suposto aluno, ele teria tirado estas 4 notas. Mas agora temos uma
pergunta:

“E se fosse outro aluno, como o programa seria?”.

A linha 13 faz o cálculo da média das notas:

13 media = (nota1+nota2+nota3+nota4)/4;

Porém, ela só faz o cálculo. O resultado não é mostrado na tela.

Reflexão
Como cada aluno tem uma nota diferente, temos que esta nota é um valor variável, ou seja, varia de
acordo com o aluno. Logo, o nome destas palavras que usamos é “variável”, e este é um conceito que
existe em qualquer linguagem de programação.

Então, a resposta é: para que o programa possa aceitar outros valores para as variáveis, precisamos de
alguma forma realizar entradas de dados para obter os valores do usuário. Vamos ver isso mais à frente.

Nosso primeiro programa – Quarto passo


As duas linhas seguintes terminam o programa:

Nos nossos programas, sempre termine com o


comando da linha 15. Vamos estudar o motivo de
ele estar aí em outra aula.

A linha 16 também é muito importante. Ela fecha


o bloco de programa aberto na linha 1.

Em C++, você tem que ser educado: se você abre


uma porta, tem que fechar; se você abre uma
chave “{“, tem que fechá-la: “}”.

Nosso primeiro programa – quinto passo Exatamente. Não tem ainda. Nosso objetivo aqui
Neste momento, você pode estar pensando sobre foi estudar um programa do início ao fim, e o
o programa: programa cumpre o que promete. Vamos estudar
sobre entradas e saídas de dados mais adiante.

Para você entender um pouco mais, poderíamos


inserir na linha 14 o seguinte comando:

14 cout<<”O valor da media eh: “<

12
Em C++, o comando que exibe uma mensagem na tela, ou seja, faz a saída de dados, é o cout. Observe
que na linha 14, após o comando cout, temos o operador “<<”. Tudo o que vier após o “<<” será
impresso na tela. No caso da linha citada, será impresso a string entre aspas.

Pontos importantes
Após verificar como o programa funciona, lembre-se de alguns pontos:

ABRIU? FECHE!
Em todas as linguagens de programação, alguns comandos precisam de caracteres que iniciam outra
expressão ou bloco de informações ou comandos. É o caso dos caracteres (, [, {, “, ‘e, dependendo da
linguagem, outros ainda são necessários, como < e >. Observe que, toda vez que você abre um
parêntese, ele precisa ser fechado; idem para as aspas, chaves, colchetes etc. Nas linguagens de
programação, isto não é diferente.
TODAS AS VARIÁVEIS EM C++ PRECISA SER DECLARADAS
No nosso exemplo, antes de fazermos o cálculo da média, tivemos que escrever que seriam usadas 5
variáveis (nota1, nota2, ... , nota4 e média). Se fizéssemos o cálculo da média diretamente, o compilador
iria gerar um erro. Portanto, se formos usar 300 variáveis no programa, todas as 300 terão que ser
declaradas antes.
“UMA COISA É UMA COISA; OUTRA COISA É OUTRA COISA”!
Em C++, se você declarar uma variável “nota”, ela será diferente de “Nota”, “NOTA”, nOta” etc. Ou seja,
C++ é case sensitive (faz distinção de caracteres maiúsculos e minúsculos).
INICIE OS PROGRAMAS COM INT MAIN (INT ARGC, CHAR** ARGV) { E TERMINE COM RETURN 0.
Existe um motivo para isso, e cada palavra destes comandos tem um significado e um sentido. Mas
vamos estudar sobre isto em outra aula.
USE ASEDENTAÇÕES, LINHAS BRANCAS E COMENTÁRIOS.
Eles servem para deixar o código mais legível e fácil de ser entendido. Pense sempre na manutenção!
Não é porque um programa é executado com sucesso que está tudo finalizado. A manutenção posterior
de programas é um assunto importante, e

Basicamente, a estrutura de um programa em C++ é assim:

13
Entrada e saída de dados
Todo algoritmo ou programa tem um objetivo. Este objetivo é alcançado por meio de uma entrada de
dados, a qual será processada e resultará em uma saída que será avaliada.
O problema é que, se a entrada for ruim, serão processados da maneira correta e a saída será ruim (e a
culpa cairá sobre o sistema, ou o computador, como sempre!).
Portanto, fazer a correta entrada de dados é fundamental. O processo de entrada-processamento-saída
ocorre o tempo todo. Todo fluxograma obedece a esse processo; assim como os processos de
compilação e de execução.
A entrada e a saída podem ocorrer de diversas formas em um computador. Podemos ter a leitura de um
cartão de banco em um caixa eletrônico, a digitação da senha, a informação que a senha digitada foi
errada como saída e várias outras formas.

ENTRADA  PROCESSAMENTO  SAÍDA

Portanto, toda vez que for escrever um programa, lembre-se desse trio: entrada-processamento-saída.

Finalizando

Por enquanto, é só, mas antes de finalizarmos completamente, o que acontece se os valores das variáveis
mudarem?

Como podemos ver o resultado? Pense nisso e veja nossa atividade proposta em seguida.

Até a próxima!

14
Algoritmos / Aula 3 - Conhecendo o DevC++

Introdução
Existem várias formas de aprender programação. Uma delas é usar o nosso conhecido editor de
textos e fazer a compilação “na unha”, ou seja, executar o compilador na linha de comando e
acompanhar os resultados gerados.
Outra forma é usar os softwares conhecidos como IDE (integrated development environment ou
ambiente de desenvolvimento integrado), que facilitam bastante o nosso trabalho.
A linguagem C++ possui vários IDEs diferentes, cada um com sua particularidade. Vamos estudar
nesta aula o DevC++, que é o nosso escolhido para nos acompanhar durante o aprendizado da linguagem
C++. Trata-se de um software muito popular e largamente usado por quem trabalha com C++.

Você vai gostar.

Vamos lá!

O que é uma IDE?

No mercado de programas de desenvolvimento, encontramos vários softwares chamados de IDE. Estes


softwares têm a função de colocar e integrar, em um mesmo ambiente, vários outros programas que
ajudam um programador a criar seus programas.

Vamos comparar com o Microsoft Word.

Ele é um editor de texto, certo?

Mas o Notepad, ou mesmo o Wordpad, que vem com o Windows, também são editores de texto.

E por que a maioria das pessoas prefere o Word?

Porque ele possui outros recursos como editores de equação, mala direta, tabelas, etc., que não estão
presentes no Wordpad.

Ou seja, o Word é um programa composto de outros que o tornam poderoso suficiente para ser o
preferido de quem edita texto. A IDE é parecida.

Há alguns anos, quando o Windows ainda nem era sistema operacional, para que um programa C++
fosse compilado, era preciso que o programador possuísse na máquina um compilador e outro programa
chamado Linker, para poder gerar o programa executável.

Para quem está acostumado, é fácil, mas para nós que estamos aprendendo, nada melhor que uma tela
gráfica, não é?

Portanto, a IDE é um conjunto de programas úteis ao programador reunidos em um mesmo ambiente,


a fim de facilitar o trabalho de desenvolvimento.

15
Exemplo
Entre as IDE mais comuns e gratuitas para o desenvolvimento em C++, temos o DevC++, o Eclipse, o
Netbeans, o Codeblocks e o CodeLite.

Entre as pagas, temos o Visual Studio, o CLion e o C++Builder.Todas elas podem ser usadas para o
desenvolvimento de sistemas de qualquer porte, porém algumas delas têm programas de trabalho em
equipe, que as “menores” não possuem.

Alguns IDEs possuem ferramentas de testes, distribuição e de refatoração.

Melhorar o código por meio da construção de um código mais eficiente, sem abalar a estrutura geral
do programa e geralmente contando com a colaboração de outros membros da equipe.

Para os programadores mais experientes, isto é muito bom.

Criando nossos programas

Assim como vários outros IDEs, o DevC++ trabalha com um tipo de arquivo chamado de projeto.

Um projeto é um agregador de recursos, ou seja, quando desenvolvemos um software, além dos arquivos
de código-fonte, podemos ter imagens, bibliotecas de terceiros que podemos incluir no nosso programa,
arquivos de configuração e outros.

Para criarmos nossos programas em C++, vamos criar um projeto em primeiro lugar. Fazer isto é muito fácil,
como podemos ver no vídeo a seguir:

Como vimos, basta clicar em Arquivo> Novo> Projeto.

Observe que temos três opções principais abaixo do menu Executar:

COMPILAR
Esta opção apenas compila o programa. Em um programa novo, esta opção é obrigatória e inicial. Sem
ela, a execução não é possível. Muitas vezes, durante o desenvolvimento do programa, é necessário
somente compilar o programa sem precisar necessariamente executá-lo. Neste caso, esta opção é
interessante e muito útil.
EXECUTAR
Esta opção executa o programa previamente compilado. Em programas pequenos, a etapa de
compilação é muito rápida. Já em programas grandes, a compilação pode levar vários minutos. Quando
a compilação já foi executada com sucesso, usar a opção para somente executar o programa pode ser
bem útil.
COMPILAR E EXECUTAR
Esta opção é útil nas situações em que o programador precisa compilar e logo em seguida executar o
programa.

16
Novo programa

Vamos mudar o programa.

Lembra o programa proposto na aula 2 para transformar graus Celsius em Fahrenheit? Observe-o
atentamente!

Vamos digitá-lo no DevC++. Acompanhe o vídeo a seguir.

Compilação e execução

Você percebeu que o programa contém um erro, certo? Ou seja, o programa anterior não será compilado
nem executado. E qual é o erro?

Observe que o DevC++ é bem camarada e nos indica qual é a linha onde o compilador não conseguiu
transformar o código-fonte em código objeto. No exemplo, a variável c não foi declarada. O programador
esqueceu que nomeou a variável para os graus Celsius como celsius e não como c.

Saiba mais
Lembre-se: sempre salve o programa antes de compilar novamente. Senão, as alterações que você fez
não serão verificadas pelo compilador. O programa correto está aqui:

#include
using namespace std;

int main(int argc, char** argv) {

float celsius;
float fahrenheit;

celsius = 25;
fahrenheit = celsius*1.8 + 32;
cout<<celsius<<" graus="" celsius="" equivale="" a="" "<<fahrenheit<<"="" fahrenheit.";

}</celsius<<">

17
Cin e cout
Antes de continuar, você deve
ter notado o cout. E já deve ter
percebido que ele é o
responsável por exibir algo na
tela.

Olhando o nosso exemplo,


percebemos que a linha a seguir
imprime aquela parte na qual o
computador “conversa” com o
usuário, ou seja, escreve uma
frase obtida pelo processamento
de algum comando.

Veja o exemplo.

Depurando o programa

Já vimos as opções mais básicas de operação do DevC++. Existem muito mais, mas vamos nos concentrar
nesse momento em como usar o Dev para nos ajudar a criar e executar os programas.

1. Ler a mensagem de erro, sem medo. Se a mensagem está difícil porque esta em inglês, use um
dicionário, pesquise na internet, pois é muito importante que você leia e entenda onde esta o
erro no seu programa.
2. Depure o programa. Vamos aprender agora como fazer isso, que muitos programadores, por
incrível que pareça não fazem.

A depuração é uma atividade que permite ao programador executar o programa passo a passo. Desta
forma, ele pode verificar os valores das variáveis e descobrir qual é a execução natural de um
programa.

Nesse programa, a depuração é muito tranquila, porque é um programa sequencial. Nos programas
que possuem desvios condicionais e repetições, o depurador realmente fará diferença e te mostrará o
quanto ele pode ser útil durante o desenvolvimento de um programa.

Para começar, vamos inserir um breakpoint. Breakpoint é um ponto de parada, ou seja, após o
compilador ter feito a sua parte, o depurador entrará em execução e rodará o programa até a linha que tem
o breakpoint. Esta linha (que contém o breakpoint) estará marcada em vermelho.

Comentario
Como vimos, para criar um breakpoint, podemos usar o mouse, clicando na linha desejada, ou usar o
menu Executar, ou ainda usar a tecla F4.

Uma vez criado o breakpoint, é hora de executar o programa. Porém, lembre-se que agora a execução ficará
parada na linha do breakpoint.

Um detalhe: você pode criar quantos breakpoints quiser, porém quando o programa começar, obviamente
ele ficará parado no primeiro deles.

18
Nosso objetivo nessa depuração será apenas verificar os valores das variáveis Celsius e Fahrenheit. Viu
como é fácil?

Para observar os valores das variáveis durante a execução do programa, basta criar marcadores para cada
uma das variáveis que deseja observar. Você pode criar quantos marcadores quiser e pode criar expressões
matemáticas envolvendo marcadores também.

Depurador

Durante a depuração, a tela do DevC++ passa por uma pequena transformação.


A parte inferior da tela muda para o modo Depurador. Neste modo, aparecem alguns botões diferentes:

A parte inferior da tela muda para o modo Depurador. Neste modo, aparecem alguns botões diferentes:

Depurar serve para iniciar a depuração do programa;


Adicionar
serve para criar observadores durante a execução do programa;
marcador
Próxima linha serve para fazer com que o depurador passe para a próxima linha;
serve para parar a depuração e continuar a execução do programa normalmente
Continuar
até encontrar o próximo breakpoint;
Próxima
serve para indicar o depurador e passar para a próxima instrução do programa;
instrução
Parar execução interrompe o programa e volta para o modo de edição;
Visualizar janela em programas maiores, às vezes é necessário verificar o estado da CPU e de seus
da CPU registradores. Este botão abre uma janela para mostrar o status da CPU;
Passar por este botão terá um maior significado quando estudarmos as funções. Ele permite
dentro que o depurador entre no código de uma função quando encontrar uma;
funciona ao contrário do botão anterior. Ao encontrar uma função, o depurador
Pular função
não entrará nela. Ele vai pular a função e passar para a próxima linha.
COMENTARIO
Esses foram os principais tópicos a respeito da depuração. Como já dissemos, é muito importante e
benéfico para o seu programa fazer a depuração do código. Desta forma, o programa poderá ser mais
bem avaliado, pois erros não visíveis podem ser percebidos. Além disso, trata-se de uma boa prática de
programação.

19
Alguns recursos do DEVC++

O DevC++ possui outros vários recursos que auxiliam o programador. Entre eles, temos:

AS PROPRIEDADES DO PROJETO: MENU ARQUIVO-PRORPIEDADE

Veja que podemos facilmente ver a quantidade de linhas do arquivo, quantas linhas estão vazias,
linhas de código etc.
Pode parecer insignificante, mas muitas medidas em relação ao tamanho do software podem ser
obtidas destes indicadores.
CONFIGURAÇÕES DO AMBIENTE

Nesta tela podem ser configuradas várias opções como por exemplo criar arquivos de backup
automaticamente, mudar o tema (aparência) do DevC++, entre outras.

20
OPÇÕES DO EDITOR

Esta tela é muito útil. Ela configura o comportamento do DevC++ em várias situações, como por
exemplo, a auto endentação, posições do cursor etc.

Podem parecer configurações insignificantes, mas no dia a dia do trabalho de programação, esses
pequenos ajustes ajudam demais o programador a se tornar mais produtivo.

Variáveis

Na programação, uma variável é um objeto (uma posição, frequentemente localizada na memória)


capaz de reter e representar um valor ou expressão. Enquanto as variáveis só "existem" em tempo de
execução, elas são associadas a "nomes", chamados identificadores, durante o tempo de
desenvolvimento.
Quando nos referimos à variável, do ponto de vista da programação de computadores, estamos
tratando de uma “região de memória (do computador) previamente identificada cuja finalidade é
armazenar os dados ou informações de um programa por um determinado espaço de tempo”. A
memória do computador se organiza tal qual um armário com várias divisões. Sendo cada divisão
identificada por um endereço diferente em uma linguagem que o computador entende.
O computador armazena os dados nessas divisões, sendo que em cada divisão só é possível
armazenar um dado e toda vez que o computador armazenar um dado em uma dessas divisões, o dado
que antes estava armazenado é eliminado. O conteúdo pode ser alterado, mas somente um dado por
vez pode ser armazenado naquela divisão.
O computador identifica cada divisão por intermédio de um endereço no formato hexadecimal, e
as linguagens de programação permitem nomear cada endereço ou posição de memória, facilitando a
referência a um endereço de memória. Uma variável é composta por dois elementos básicos: o
conteúdo, o valor da variável e identificador, um nome dado à variável para possibilitar sua utilização.

21
Algoritmos / Aula 4 - Conhecendo alguns elementos de C++

Tipos primitivos
Vamos começar a nossa aula com um assunto presente em todas as linguagens de programação: os
tipos primitivos.

O que é isso?

Vamos responder com um exemplo.

Imagine que você está navegando na


internet e chega a um cadastro como
este ao lado.

Observe que você tem de preencher


campos como: nome, data de
nascimento, e-mail, sexo, telefone,
identidade, entre outros.

Cada cadastro que você encontrar


como exemplo na internet possui
campos iguais ou semelhantes a esse.

CAMPO “SEXO”

Quais são os possíveis valores que ele pode assumir de acordo com o formulário?
Masculino ou feminino, correto?

E provavelmente, no banco de dados, dentro do sistema, ele ficará armazenado como “m” ou “f”. Ou seja,
na definição desse formulário, haverá uma variável chamada sexo, a qual poderá guardar apenas dois
valores: “m” ou “f”.

São caracteres! Logo, a variável sexo não poderá receber valores como “1”, “verdadeiro”, “3.14159266” etc.
Somente poderá receber caracteres.

Será que existe em C++ um tipo para somente caracteres?


Tem. E é chamado de char.

E para o campo nome? Poderíamos usar o char?


O tipo char tem uma característica: ele guarda apenas um caractere. Logo, o nome “Matusalém” não
poderá ser um valor possível para uma variável do tipo char.

E agora?
Bem, já vimos anteriormente que, quando temos vários caracteres juntos, isso é chamado de string.

22
Temos o tipo string em C++?
Não. No caso de C++, para guardar uma string, temos que importar uma biblioteca chamada string. É o
mesmo que ocorre com o cout. Lembra que temos de importar a biblioteca iostream para o cout? No
caso da string, a biblioteca é a string!

Mas como vou saber isso?


Estude a API da linguagem! Lembre-se: a API (application program interface) é o local onde você vai
encontrar os recursos disponíveis com toda a documentação para a linguagem que você está usando
para programar.

E o campo DDD?
É uma variável que não pode aceitar letras, nem símbolos especiais, apenas números. Para isso temos o
tipo int (inteiro).

Será que existe em C++ um tipo para somente caracteres?

No exemplo do formulário, por se tratar de uma ficha de inscrição para o Vestibular, não temos campo
como altura ou peso, que também são números, mas podem ter valores decimais. Para este caso, usamos o
já conhecido float.

Em C++, temos os seguintes tipos básicos de variáveis:

Temos algumas variações desses tipos, que usam os seguintes modificadores de tipos:

Veja que o modificador unsigned retira o sinal do tipo e dobra sua capacidade no intervalo positivo

23
Entenda o que é o domínio estendido e as precisões de cada tipo em C++ na tabela a seguir:

Tipo Nº de bits Intervalo


Início Fim
char 8 -128 127
unsigned char 8 0 255
signed char 8 -128 127
int 16 -32.768 32.767
unsigned int 16 0 65.535
signed int 16 -32.768 32.767
short int 16 -32.768 32.767
unsigned short int 16 0 65.535
signed short int 16 -32.768 32.767
long int 32 -2.147.483.648 2.147.483.647
signed long int 32 -2.147.483.648 2.147.483.647
unsigned long int 32 0 4.294.967.295
float 32 3,4E-38 3.4E+38
double 64 1,7E-308 1,7E+308
long double 80 3,4E-4932 3,4E+4932

Declaração e inicialização de variáveis

Em C++, é obrigatório que toda variável usada no programa seja declarada. A declaração reserva o espaço
em memória necessário para a alocação do conteúdo que receberá. A sintaxe da declaração de variáveis em
C++ é:

Atenção
Existem algumas regras para a escolha dos nomes de variáveis em C++:

 Nomes de variáveis só podem conter letras, números e o caractere “_”;


 Não podem começar com um número;
 Embora seja possível ter uma variável com o nome “_var” (começando com “_”), estes são
reservados para a implementação interna do programa, e seu uso é bem restrito e
desaconselhado. O compilador não vai mostrar erro quando criamos variáveis desse jeito,
mas o programa criado se comportará de forma inesperada;
 Não é possível utilizar palavras reservadas da linguagem C++. Vamos listar as palavras
reservadas em seguida;

24
 Também não é possível criar uma variável que tenha o mesmo nome de uma função, mesmo
que essa função tenha sido criada pelo programador ou que seja uma função de biblioteca;
 Não há limite para o tamanho de nome de variável em C++; quando criarmos constantes,
estas devem ser escritas com todas as letras em maiúsculas.

Portanto, as declarações de variáveis a seguir são válidas: int a;char a, b, c;unsigned int x1, x2, media;char
_a;

Lendo e escrevendo em C++

Já vimos rapidamente como é o comando de saída de dados em C++, certo? Agora, vamos tratar um pouco
mais profundamente deste assunto.

É muito importante criar formas de orientar o usuário com relação ao que o programa necessita para poder
funcionar adequadamente. Ou seja, é importante mostrar mensagens na tela e receber informações do
usuário de maneira eficiente.

Em C++, o comando que exibe uma mensagem na tela, ou seja, que faz a saída de dados, é o cout. Para esse
comando funcionar, vimos que é necessário inserir duas linhas no início dos nossos programas:

25
O código do programa mostrado no vídeo é:

include
#include
using namespace std;
int main(void){
string nome;
cout<<"Qual eh o seu nome?"<<cin>>nome;
cout<<"Oi "<return 0;

Saiba mais

Vimos que o vídeo mostra o resultado do valor lido na variável nome. Perceba que no código estamos
usando duas diretivas para o compilador (nas linhas 1 e 2). Uma carrega a biblioteca para os
comandos cin e cout, e a outra carrega a biblioteca para o tipo string.

No vídeo, o valor que é armazenado na variável nome é exibido juntamente com a string “Oi _____, tudo
bem com você?”.

Bem, por enquanto é isso sobre entrada e saída. Simples, né?

O cin e cout são bem eficientes e você vai notar que eles são bastante usados em C++ e aparecem na
maioria das referências que vamos encontrar sobre a linguagem.

É claro que a linguagem oferece outros comandos para escrever e ler informações, mas o cin e cout já dão
conta muito bem do recado.

Operadores aritméticos em C++


Toda linguagem de programação possui capacidade para fazer contas aritméticas, e com o C++ não é
diferente. Na programação de computadores, é possível fazer vários tipos de operações, além das
aritméticas. É preciso conhecer o que são operações lógicas, relacionais e outros detalhes para poder
construir programas.

Temos os seguintes operadores aritméticos em C++.


Com eles, podemos fazer as contas mais comuns:

26
Funções do C++
Certo, já vimos que existem operadores na linguagem.

Mas o que acontece quando precisamos de operações um pouco mais complexas como o cálculo de
senos, cossenos, raiz quadrada? Fazer isto em C++?

Assim como outras linguagens de programação, o C++ possui funções que auxiliam o programador em
algumas tarefas. Da mesma forma que usamos bibliotecas para as strings e para o cin e cout, podemos usar
outras bibliotecas para as funções matemáticas.

Uma destas bibliotecas é a cmath. Com ela, podemos calcular a raiz quadrada, por exemplo.

Observe este programa:

SQRT é a forma mnemônica de square root em inglês. Vamos estudar as funções em C++ algumas aulas mais
à frente.

Novamente você pode perguntar:

“Como eu vou saber em qual biblioteca tem o que eu preciso?”.

Lembra-se da resposta?

A resposta é “estude a API”. Não tem jeito; é muito importante estudar a API da linguagem que você está
aprendendo.

Operadores lógicos
Como já dissemos, na programação existem operações que não são só aritméticas. Em muitos e muitos
casos, precisamos criar situações de comparação entre valores, e essa comparação faz parte de um tipo de
operação chamada de operação lógica.

Esse tipo de operação faz parte de uma lógica chamada proposicional e foi muito estudada por um
matemático chamado George Boole. Assim, também ganhou o nome de “álgebra booleana”.

Essa álgebra trabalha principalmente com valores booleanos ou lógicos, e basicamente nesta lógica só
existem dois valores: verdadeiro (true) ou falso (false).

27
Tudo que conhecemos na computação atual é baseada nessa álgebra. Ela possui propriedades, teoremas e
um monte de coisas que excedem o nosso contexto. Mas saiba que ela é muito importante na computação
atual.

Aliás, quando trabalhamos com a aritmética binária, de certa forma, também estamos trabalhando com a
álgebra de Boole, e neste caso normalmente usamos 0 para valores falsos e 1 para verdadeiros.

Na álgebra de Boole, temos basicamente três operadores:

Na álgebra booleana, usamos um recurso chamado de tabela verdade para mostrar os valores possíveis que
as variáveis lógicas podem assumir.

A tabela verdade mostra todas as possibilidades combinatórias entre os valores de diversas variáveis lógicas
que são encontradas em somente duas situações e um conjunto de operadores lógicos.

Nas tabelas verdade a seguir, A e B são proposições.

Os operadores lógicos “e” e “ou” em C++ são representados pelos símbolos “&&” e “||” respectivamente.

Veja suas tabelas verdades:

Guarde essas informações, pois vamos fazer um exemplo mais completo adiante.

Saiba mais
Duas dicas que pode te ajudar nas operações envolvendo condições lógicas:

Em uma expressão envolvendo o operador E (&&), a expressão só será verdadeira se todas as partes da
expressão forem verdadeiras. Se contiver uma só que seja falsa, toda a expressão será falsa;

Em uma expressão envolvendo o operador OU (||), a expressão só será falsa se todas as partes da
expressão forem falsas. Se contiver uma só que seja verdadeira, toda a expressão será verdadeira.

Operadores relacionais
Os operadores relacionais são usados para fazer comparações entre dois operandos do mesmo tipo
primitivo. Esses valores são representados por constantes, variáveis ou expressões aritméticas.

28
Vejamos um exemplo. Considere:

a = 1;
b = 2;
c = verdadeiro;

Se fôssemos fazer essas declarações em C++,


teríamos:

int a = 1;
int b = 2;
bool c = true;

bool é um tipo em C++ e pode assumir os valores booleanos true ou false.

29
Algoritmos / Aula 5 - Estrutura de decisão

Introdução
Tomar decisões é uma parte muito importante da nossa vida e também dos nossos programas. Fazemos
isso todos os dias e a toda hora.

Um programa também tem momentos nos quais tem de parar e avaliar as condições para tomar uma
determinada direção. Imagine o robô Curiosity em Marte fazendo suas explorações: ao encontrar um
determinado tipo de material, ele precisa avaliar e tomar alguma decisão.

Enfim, a estrutura de decisão é outra peça fundamental e presente em qualquer linguagem de


programação.

Vamos dividir este conceito em duas aulas e, nesta, vamos começar com os conceitos mais básicos.

Vamos lá?

Recordando...

Até agora, vimos os seguintes elementos de programação:

Já aprendemos bastante coisa, não é?

Para continuar nossos estudos, temos que começar a aplicar estes conceitos daqui para a frente e estudar
alguns comandos que desviam o fluxo sequencial e natural de um algoritmo e de um programa.

É assim que ocorre também na estrada a seguir: o motorista que está nesta estrada tem uma importante
decisão a fazer: ou toma o caminho da direita ou o da esquerda.

Exemplo
Nos programas de computador, as decisões são muito mais comuns do que você pensa. Quando você
abre um arquivo, se ele for protegido, então vai aparecer uma janela avisando. No Word, se o botão de
negrito estiver selecionado, então o seu texto ficará em negrito, e por aí vai.

Temos que aprender a fazer isso.

Vamos usar um exemplo mais fácil: pense nas suas notas escolares. Suponha que a média para
aprovação seja 6.

30
Como você bolaria um programa para verificar se você está aprovado ou não?

O desvio é feito quando a média é maior que 6. E uma vez que a


média for maior que 6, o programa pega um caminho que exclui a
outra possibilidade (de ser menor que 6).Além disso, atente que, se
a nota for exatamente igual a 6, nem assim o aluno estará
aprovado.

Percebeu que a condição lógica é importante? Isto foi visto na aula


anterior, e lá dissemos que estas condições têm que ser muito bem
montadas para poder executar o programa corretamente.

Esse desvio é chamado de desvio condicional simples. Vamos observá-lo com mais detalhes em C++.

Calculando um desvio condicional simples


Você também deve ter percebido que grifamos algumas palavras desde o início desta aula.

Quais foram as palavras grifadas?

“Se” e “então”. Aí, entramos no conceito do primeiro tipo de desvio: o chamado desvio condicional
simples.

Vamos fazer um exemplo para mostrar este


tipo de desvio de fluxo. Trata-se do cálculo
do IMC (índice de massa corporal). Este
índice é muito fácil de ser calculado e, de
acordo com seu resultado, precisamos
consultar uma tabela para classificar o
usuário.

Como programar um desvio condicional simples

Veja que o programa:

31
Compare a forma como usamos o if com a figura do comando exibida anteriormente. Tranquilo, né? Se o
cálculo for menor que 17, o sujeito está bem abaixo do peso.

Essa classificação é feita de acordo com a tabela a seguir. Esta tabela pode ser obtida em qualquer site que
mostre o cálculo do IMC.

Programando...

Portanto, como podemos perceber, a sintaxe de um if em C++ é assim:

Perceba que temos alguns detalhes que precisam ser seguidos para o if poder funcionar.

32
Exemplo
Em C++, não utilizamos a palavra “então”. Fica implícito que o código que virá a seguir é o que deve ser
feito quando a condição testada é verdadeira.

O comando é simples. Dentro dos parênteses há um teste, o qual pode ser uma simples comparação ou
uma expressão lógica maior. Isto vai depender do programa.

Então, prepare-se para colocar dentro desse teste qualquer tipo de expressão que possa ser avaliada e
retornar verdadeiro (true) ou falso (false). Se o teste for verdadeiro, o bloco é executado. Se for falso, o
bloco é ignorado completamente e o fluxo do programa continua na linha seguinte ao bloco.

O tamanho do bloco pode ser de 1, 2, 200, 2.000 linhas. De qualquer forma, se o teste for false, todo o
bloco, independentemente do tamanho que seja, será ignorado.

Você se lembra do fluxograma?


Para esta estrutura, o fluxograma correspondente é:

Voltando ao programa do cálculo do IMC, podemos torná-lo


mais complexo.

Como você pode perceber, o programa só vai tratar daquelas


pessoas bem magrinhas. As outras classificações existentes na
tabela não foram contempladas.

E agora? Como vamos fazer? O que você sugere?

É simples. Se for menor que 17, já fizemos, a situação é “muito abaixo do peso”.

Se estiver entre 17 e 18,49, a situação é “abaixo do peso”. Se estiver entre 18,5 e 24,99, a situação é “peso
normal”.

E assim por diante.

Mas o que significa estar entre 17 e 18,49 (por exemplo)?

33
GABARITO

Resposta em “computes”: imc>=17 E imc<=18,49, ou melhor, imc>17 && imc<=18,49.

Como programar um desvio condicional composto


Até agora, aprendemos apenas uma parte da estrutura condicional. Vimos que, se uma condição for
verdadeira, ela vai executar um bloco de programação, e em seguida, continuar com o fluxo normal do
programa.

Veja o exemplo:

Observe que se a idade for menor que 18, o programa vai ignorar todo o bloco entre as linhas 10 a 14 e
continuar o seu fluxo normal na linha 15.

Mas e se quisermos tratar a condição quando a idade for menor que 18 anos?

Sua primeira resposta pode ser: “mas isto já é feito no programa acima. A linha 15 é executada se a idade
for menor que 18”.

Preste atenção: a linha 15 será executada de qualquer maneira.


O que estamos propondo agora é:

Se a idade for maior que 18, faça as linhas 11 a 14,


senão faça outra coisa! A situação pode ser explicada
de acordo com o fluxograma ao lado:

34
Programando um desvio condicional composto
Em C++, a sintaxe é a seguinte:

Vamos ver um exemplo em C++:

Na linha 10, o teste é feito. Se o número for positivo, o programa executa a linha 11, encontra o fim do
bloco e (preste atenção agora) vai para a linha 16. O programa ignora o bloco do “else” (pois este bloco é a
execução caso o teste for falso).

Se o teste da linha 10 for falso, o programa vai ignorar o bloco que começa com o { logo após o if e vai
diretamente procurar o else, que está na linha 13. Ele executa o bloco do else, também passa pela linha 16 e
finaliza o programa.

35
O código do programa executado no vídeo é o seguinte:

Durante o vídeo, temos


duas execuções. Cada uma
delas mostra o resultado do
teste da linha 10.

Veja que, quando o teste é


positivo, o programa
executa o bloco das linhas
10 a 13, e quando o teste é
falso, o bloco das linhas 14 a
17 é executado. E para
finalizar, a frase da linha 18
é sempre mostrada.

Algoritmos / Aula 6 - Estrutura de decisão

Introdução
Esta é a segunda parte das estruturas de decisão. Na primeira aula, vimos alguns conceitos básicos
que são as estruturas iniciais para começarmos a tratar o assunto.

Nesta aula, vamos mostrar as outras formas de tomar decisões e suas implementações em
C++.Dessa forma, nosso repertório de comandos vai aumentar e você vai conseguir criar programas mais
interessantes e completos em C++.

Vamos lá?

Recapitulando...

No final da última aula, vimos a


estrutura condicional de comando
composto. Esta estrutura é a famosa
“if-then-else”, porque trata o teste
condicional de uma maneira completa:
“se o teste for verdadeiro, então faça
isso, senão faça aquilo”. Ela tem a
seguinte forma, como vimos:

36
Para lembrar a estrutura, observe o exemplo a seguir.

Lembrou?
O teste é feito na linha 10; caso
verdadeiro, executa o bloco das linhas 10-
12; senão, executa o bloco das linhas 13-
15.

Observe o teste da linha 10. Usamos o


operador %, chamado mod. Este
operador retorna como resultado o resto
da divisão; no exemplo, do número n por
2. Se for zero, é um número par; senão, é
um número ímpar.

Mudando o teste...

Para relaxar, vamos fazer uma


brincadeira com C++. Se você quiser
impressionar alguém e dizer que
conhece bastante de programação,
em vez de escrever as linhas 10 a 15,
substitua-as apenas pela linha 10
deste código. O resultado é o mesmo
que o código anterior.

É uma forma que parece bem complicada, não é? Mas vamos explicar: trata-se de outro operador existente
em C++ e em outras linguagens, chamado de operador ternário. Ele é uma alternativa para substituir o
desvio condicional composto em algumas situações.

Veja sua sintaxe:

Como é um operador ternário, temos três operandos:

37
Esse operador também é útil quando vamos atribuir um valor a uma variável como resultado de um if.

Observe:
if (x == 10) // Se x for igual a 10
y = 20; // então faço y receber 20else
y = 30; // senão faço y receber 30

Usando o operador condicional ternário, poderíamos escrever:


y = (x == 10) ? 20 : 30; // y recebe, se x for igual a 10 então 20, senão 30.

Colocando um if Dentro do Outro

Colocar um if dentro do outro é mais comum do que você imagina. Esta forma é chamada
de aninhamento ou encadeamento de ifs e é usada em várias linguagens de programação e também com
outros comandos. Vamos nos concentrar nos ifs por enquanto.

1- #include <iostream>
2- using namespace std;
3-
4- int main(void){
5- int idade;
6- char sexo;
7-
8- cout<<"Qual a sua idade?"<<endl;
9- cin>>idade;
10- cout<<"Digite (m)para Masculino, (f)para Feminino"<<endl;
11- cin>>sexo;
12-
13- if (idade>=18){
14- cout<<"Você pode dirigir"<<endl;
15-
16- if (sexo=='m'){

cout<<"Você precisa ir no Serviço

17- Militar"<<endl;
18- }
19- }
20- else {
21- if (idade>16){
22- cout<<"Você já pode votar"<<endl;
23- }
24- else {
cout<<"Você não pode votar nem
25- dirigir"<<endl;
26- }
27- }
28- return 0;
29- }

38
Veja que temos um if dentro do outro:

 O if que começa na linha 13 vai até a linha 18, quando a condição (idade>=18) for verdadeira.
 Dentro deste if, temos um if simples aninhado entre as linhas 16 e 18.
 Caso a condição da linha 13 seja falsa, temos o else, que compreende as linhas de 20 a 27.
 Dentro do else, temos um if-then-else completo nas linhas 21 a 26.

Como podemos ver, o aninhamento de ifs é muito útil e é mais comum do que pensa. Existem muitas
situações que usam estruturas aninhadas, e nas próximas aulas esta estrutura ficará cada vez mais comum,
e com outros comandos também.

O Comando Switch
Este comando é bastante útil.

Veja um exemplo em que ele pode ser usado: imagine um programa no qual o usuário informa um mês, e o
programa devolve se o mês tem 30 ou 31 dias.

Como você faria esse programa?

“Vou ter que ler o número do mês.”

“Se for janeiro, tem 31 dias.”

“Se for fevereiro, pode ter 28 ou 29 dias. Se o ano for bissexto, tem 29; senão, tem 28. Bem, mas acho que
desta vez, eu vou considerar que tem 28 dias, só pra facilitar.”

“Se for março, tem 31.”

“Abril tem 30”, “maio tem 31.”

“se for junho, então são 30...”

“e se for dezembro, tem 31.”

“Caramba, vai ser um monte de ifs!”

Se fosse usar o comando if, o programa teria pelo menos 12 ifs. O comando switch facilita a nossa vida. Sua
sintaxe é:

switch (variável){
case constante1:
Instruções;
break;

case constante2:
Instruções;
break;

default
Instruções;
}
39
Vamos ver o programa em execução

Lembre-se sempre de colocar a cláusula default, como mostram as linhas 47 a 50.

Durante o vídeo, você percebeu que foram testados alguns valores corretos para os meses, porém na
última execução foi inserido o mês 29 e o programa executou a cláusula default. Imagine se fizéssemos
esse programa usando o if.

Seriam vários ifs e, além disso, seria difícil ler o programa. O switch é muito bom para deixar o programa
mais claro.

Porém, a última execução do programa deixou uma “rebarba”. Veja que, se o usuário digitar um mês
negativo ou outro valor que não esteja dentro das cláusulas case, o programa executa corretamente a
cláusula default, mas imprime na tela a mensagem da linha 51.

Seria melhor que essa linha não fosse impressa quando o valor for inválido.

E agora?

Agora, precisamos de uma forma de criar uma condição lógica. Para isso, entramos no próximo tópico desta
aula.

Operadores Lógicos
Em C++, temos três operadores:

No exemplo anterior, precisamos criar uma condição que não deixe que o programa aceite valores abaixo
de 1 E acima de 12. Se fosse nas aulas de Matemática, seria fácil: poderíamos criar uma expressão assim:

1<=mês<=12

Mas em C++, precisamos transformar essa condição de acordo com a sintaxe da linguagem.

40