Buscar

Resumo - Algoritmos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 39 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 39 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 39 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmos
Aula 01 – Introdução à lógica de Programação
Histórico da programação
Na escrita cuneiforme já haviam instruções
Os babilônios usavam a numeração em base 60 (números em ponto flutuante)
“Para calcular o volume da cisterna, se o seu raio for 2 e sua altura 7, então o volume é 3,1 vezes 2 vezes 2 vezes 7”.
Abū ‘Abd Allāh Muhammad ibn Mūsā al-Khwārizmī:
Trabalhos algébricos em linguagem natural
Ada Lovelace é conhecida por ter escrito um algoritmo para a máquina de Charles Babbage
As primeiras linguagens:
Plankalkul (Konrad Zuse)
Em 1936 criou um computador mecânico (Z1) 
Era um ábaco mecânico, controlado por pinos e correias
Programável por fitas perfuradas
Tinha números de ponto flutuante, em binário, com expoentes
Em 1950, programar dava trabalho:
Um programa levava semanas para ser feito
Programação “física”
Trocar fios de lugar
Cartões perfurados
As primeiras ferramentas 
Montadores
Compiladores primitivos
SpeedCoding, John Backus, 1954
Era preciso poupar tempo dos programadores
Fortran
A primeira linguagem de programação popular
John Backus, IBM
Diminui os erros de programação
Possuía um compilador que gerava código de qualidade
Usada até hoje
Previsão do tempo
Mecânica dos fluidos
John Backus também contribuiu:
Fortran
Algol 58 e 60
BNF
FP
LISP (Lots of Insignificant and Stupid Parenthesis!)
Conferência de IA (1954)
Minksy, Newell, Simon: Logic Theorist: um programa de raciocínio escrito em IPL
McCarthy aprimorou a linguagem, surgindo a linguagem LISP
A influência de LISP
Ideias como recursão, expressões condicionais e outras são usadas até hoje
Muitas linguagens funcionais apareceram
A coleta de lixo é usada em linguagens modernas
Em 1957 havia um problema:
As empresas tinham seus padrões
As universidades tinham seus padrões
Não havia padronização
Aparecimento da linguagem Algol
Universal, independente de máquina
Comitê internacional em 1958
Algol 58, Algol 60 e Algol 68
Herança do Algol
Blocos delimitadores
Estrutura léxica de formato livre
Sintaxe definida via BNF
Escopo de bloco para variáveis locais
Tipagem estática com anotações de tipo
Aninhamento de if-then-else
Chamada por valor
Recursão e expressões condicionais
Alocação dinâmica de memória
Procedimentos de primeira classe
Operadores definidos pelo usuário
Smalltalk
Influenciou a programação orientada a objetos, junto com Simula
Ainda é usada
Tudo é objeto
Implementação simples
Fácil manutenção
Curva de aprendizado pequena
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?
Trata-se da Ciência que estuda as formas do pensamento. E sempre que pensamos, a lógica nos acompanha, como nos exemplos a seguir.
Um bebê sabe que precisa chorar para receber atenção;
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.
Comentário:
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.
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.
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:
Suponha que um processo vá ser representado por um retângulo. E para o início e fim do desenho, vamos usar um retângulo arredondado. 
Você sabe o significado de cada figura nos fluxogramas?
Criação de fluxogramas
Para terminar, observe que também existem fluxogramas para problemas que não sejam exclusivamente matemáticos. 
Veja o fluxograma a seguir:
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.
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:
Pegar uma escada;
Posicionar a escada embaixo da lâmpada;
Buscar uma lâmpada nova;
Subir na escada;
Retirar a lâmpada velha;
Colocar uma lâmpada nova.
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.
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.
 Clique no monitor e veja um exemplo de um algoritmo em português estruturado:
Você já entendeu que é possível representar programas de computador ou processos por meio de figuras (no fluxograma) ou por texto (no casode 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:
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:
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.
Quando dizemos “arquitetura interna”, estamos nos referindo não aos componentes eletrônicos, mas sim à forma como estes componentes estão organizados e se relacionam uns com os outros.
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:
Memoria: A memória primária é o que conhecemos como RAM: memória de acesso aleatório, podendo ser escrita e apagada.
Unidade de Controle: Responsável pela sincronização entre os demais componentes.
Unidade Aritmetica e Logica: Responsável pelos cálculos e seus controles.
Entrada: Compreendendo os discos, pendrives e demais dispositivos de armazenamento.
Saída: Compreendendo os discos, pendrives e demais dispositivos de armazenamento.
Resumo:
Algoritmo é uma palavra derivada do nome do matemático Abu Já´far Muhammad (800-847) que introduziu a escrita dos cálculos substituindo o ábaco. Ele ficou conhecido como Al-Kharazmi. 
A palavra algoritmo na Matemática designa um procedimento geral de cálculo que se desenvolve, por assim dizer, automaticamente, poupando-nos esforço mental durante o seu curso. 
Podemos conceituar algoritmo como sendo uma sequência de passos finitos que devem ser escritos de forma precisa e clara, evitando qualquer tipo de dúvida na interpretação e que tem, como objetivo, solucionar um problema computacional. 
Para avaliar a importância de Algoritmos é preciso compreender: O seu significado, Como ele pode ser representado, que aspectos precisaremos considerar quando estivermos construindo um algoritmo, como testar se está correto e a diferença entre um algoritmo e um programa. 
Algoritmo é uma palavra derivada do nome do matemático Abu Já´far Muhammad (800 -847) que introduziu a escrita dos cálculos substituindo o ábaco. Ele ficou conhecido como Al-Kharazmi. 
A palavra algoritmo na Matemática designa um procedimento geral de cálculo que se desenvolve, por assim dizer, automaticamente, poupando-nos esforço mental durante o seu curso. (FONSECA FILHO, C., 1999, p.50). 
COMO RESOLVER UM PROBLEMA 
Segundo o matemático húngaro George Pólya, que nasceu em 1887 e faleceu em 1995: 
Compreenda o problema: • identifique os dados. • identifique a incógnita. • identifique a condição. • verifique se possível satisfazer a condição com os dados fornecidos. 
Planeje: • tente encontrar uma relação entre os dados e a incógnita. • procure achar alguma semelhança entre esse problema e outro que já resolveu. • releia o problema se não tiver conseguido encontrar as etapas necessárias para resolvê-lo. • quando tiver conseguido, escreva as etapas sem ser prolixo e impreciso. 
Execute o plano: • acompanhe todas as etapas. • verifique se conseguiu atingir o objetivo. 
Reflita sobre a solução: • consegue justificar todas as etapas? • consegue visualizar outra solução? • consegue ver uma outra aplicação para a solução encontrada? 
Construindo algoritmos computacionais: 
Para se construir um algoritmo, temos que fazer uso de alguma linguagem. Normalmente, a linguagem natural é a mais escolhida, mas a linguagem gráfica também é usada. 
Historicamente, Herman Goldstine e John von Newmman, antes de 1940, já tinham chegado à conclusão de que os algoritmos precisavam ser representados e é atribuído a Von Newmann a primeira representação de um diagrama de fluxo. 
If (se), else (então), flag (indicador), break (intervalo) 
Processamento de dados: É a transformação de dados em outros que sejam mais significativos para uma determinada finalidade. 
Data – Dados: São valores que representam algum atributo (exemplo: peso, idade, nome, etc.) de uma entidade (pessoa, animal, objeto, etc). 
Informação: É um conjunto de dados significativos. 
Lógica: É o ramo da filosofia que cuida das regras do bem pensar, ou do pensar correto, sendo, portanto, um instrumento do pensar. 
Lógica de Programação: É a técnica de desenvolver algoritmos (sequências lógicas) para atingir determinados 
objetivos dentro de certas regras baseadas na Lógica Matemática e que, depois, são adaptados para a Linguagem de Programação utilizada pelo programador para construir seu software." 
Conceito de Programa: Um programa é um algoritmo codificado em uma linguagem de programação, isto é, um conjunto de instruções/funções que representam tarefas que serão interpretadas e executadas por um computador. 
Podemos conceituar algoritmo como sendo uma sequência de passos finitos que devem ser escritos de forma precisa e clara, evitando qualquer tipo de dúvida na interpretação e que tem, como objetivo, solucionar um problema computacional. 
Aula 02 – Nosso Primeiro Programa
Processo de compilação de um programa:
Palavras reservadas em C++ (e em C)
Palavras reservadas em C++ (e que não estão presentes na linguagem C)
Estrutura básica de um programa
Pontos importantes
Abriu? Feche!
Todas as variáveis em C++ precisam ser declaradas
Uma coisa é uma coisa, outra coisa é outra coisa! 
Inicie os programas com int main(int argc, char** argv) { e termine com return 0.
Use as endentações, linhas brancas e comentários
As linhas de códigos/instruções são sempre terminadas por ponto-e-virgula (;).
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 textocontendo 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 a seguir.
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.
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.
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.
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:
	int main(int argc, char** argv) {
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.)
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:
Resumo:
Entrada: Representa os dispositivos que captam os dados que serão armazenados na memória principal. 
Processamento: Representa as operações que são realizadas com os dados para obtermos o resultado desejado. 
Saída: Representa os dispositivos que recebem os resultados. 
Apresentando a linguagem 
Linguagem Natural: O início do algoritmo começa com a primeira ordem e termina com a última ordem. Você poderá, ou não, numerar os passos. 
Os caracteres de controle \n e \t são usados com o comando imprima para que o programador tenha poder de decidir onde o dado será impresso. Eles podem ser colocados no início ou no final da cadeia. 
Estrutura sequencial: É um tipo de estrutura onde os comandos são executados numa sequência pré-estabelecida, isto é, cada comando só é executado quando o anterior é finalizado. 
Operadores Aritméticos: Os operadores aritméticos são representados por símbolos, ou para palavras. Com eles, podemos construir algoritmos que executam operações.
Origem do Dado: O dado é um valor fornecido pelo usuário, gerado pelo programa, ou lido de um arquivo. 
Tipos de Dados: De uma maneira geral, existem os tipos primitivos e os compostos. 
Variável: O conceito de variável é o mais filosófico de todos e o autor, não importa se foi John von Newmann ou Randell ou Rosen ou Stren ou Wilkes, só poderia estar, como se diz no popular, "em alpha" para conceber a ideia de que o programa e os dados poderiam ser armazenados no mesmo local. 
Declarando uma Variável: Para que possamos declarar uma variável, primeiro precisamos definir que tipo de dado ela irá armazenar, pois, quando se define um tipo de variável, informamos ao computador o quanto de memória será necessário ”separar” e que tipos de operações poderão ser realizadas com o dado que será armazenado. Para se declarar uma variável, usamos a seguinte sintaxe: tipo nomeDaVariável ; 
Tipos de Variáveis: Se a variável armazena dados cujos tipos já foram definidos, é conclusivo que os tipos das variáveis devam coincidir com os tipos dos dados. Tipos: int, real, string e lógico. 
Como os Dados são armazenados nas Variáveis: As formas básicas são: através do comando de atribuição ou do comando de entrada via teclado. 
O comando de atribuição: É um dos quatro comandos básicos da programação. Consiste em atribuir um valor a uma variável. Para se atribuir um valor a uma variável, usamos a seguinte sintaxe: 
nomeDaVariável <- valor ; 
Aula 03 – Conhecendo o Dev C++
Objetivo
Ao final desta aula você estará apto a 
criar programas em C++ usando o DevC++
utilizar comandos de entrada e saída de dados
depurar os programas criados
IDE (Integrated Development Environment)
IDE pode referir-se a:
Ambiente de Desenvolvimento Integrado, um ambiente integrado para desenvolvimento de software
ATA, uma controladora para discos rígidos
As características e ferramentas mais comuns encontradas nos IDEs são:
Editor
Compilador (compiler)
Linker
Depurador (debugger)
Modelagem (modeling)
Geração de código
Testes Automatizados
Refatoração (refactoring)
Compilação
Depurar (debugging)
Faça!
Ler a mensagem de erro, sem medo
Depure o programa.
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 
Next, next, finish!
O DevC++ é um software muito popular e fácil de ser encontrado na internet. Ele possui código aberto e, por isso, pode ser baixado gratuitamente e usado sem restrição. Porém, ele só possui versão para Windows.
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.
A IDE integra estes dois programas no mesmo ambiente, e cabe ao usuário apenas apertar uma tecla para que o programa seja compilado, verificado e depois linkado, gerando o executável.
Além disso, a IDE oferece recursos gráficos que, como vamos ver ainda nesta aula, se estivessem na linha de comando, seriam muito difíceisde serem usados, como é o caso do depurador.
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.
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. Para os programadores mais experientes, isto é muito bom.
Compilação e execução
Todos esses programas teriam de ser executados na linha de comando se não usássemos o DevC++. Veja o próximo vídeo e observe como é feita a execução do programa.
Durante o vídeo, observe a parte inferior da tela, que mostra o programa GCC e depois o Make sendo executados. Lembre-se que, se não fosse a IDE, você teria de executar esses comandos manualmente!
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.]
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.
Uma atividade muito importante é saber como depurar o programa. Além disso, encorajamos você a sempre fazer o seguinte quando encontrar um erro:
Ler a mensagem de erro, sem medo. Se a mensagem está difícil porque está em inglês, use um dicionário, pesquise na internet, pois é importante que você leia e entenda onde está o erro no seu programa;
Depure o programa. Vamos aprender agora como fazer isto, 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.
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
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
Aula 04 – Conhecendo alguns elementos do C++
Objetivo
Ao final desta aula você estará apto a 
Declarar variáveis
Utilizar os comandos de entrada e saída
Construir tabela verdade com operações AND e OR
montar operações envolvendo expressões aritméticas, lógicas e relacionais na linguagem C++.
Tipos primitivos
Em C++ temos os seguintes tipos básicos de variáveis:
char: Guarda um caractere;
int: Guarda um número inteiro;
float: Guarda um número real com certa precisão;
double: Guarda um número real com precisão maior que float;
void: Tipo vazio. É um tipo que informa ao compilador que a variável não terá um tipo definido
Modificadores de tipo:
unsigned char: caracter sem sinal
long int: número inteiro, com domínio estendido;
unsigned int: número inteiro positivo;
unsigned long int: número inteiro positivo com domínio estendido.
short int: inteiro com domínio reduzido.
unsigned short int: inteiro positivo com domínio reduzido
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.
Vamos analisar o 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”.
O que são as letras “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?
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:
char: guarda um caractere;
int: guarda um número inteiro;
float: guarda um número real com certa precisão;
double: guarda um número real com precisão maior que o float;
void: tipo vazio. Informa ao compilador que a variável não terá um tipo definido.
Temos algumas variações desses tipos, que usam os seguintes modificadores de tipos:
unsigned char: caractere sem sinal;
long int: número inteiro, com domínio estendido;
unsigned int: número inteiro positivo;
unsigned long int: número inteiro positivo com domínio estendido;
short int: inteiro com domínio reduzido;
unsigned short int: inteiro positivo com domínio reduzido.
Veja que o modificador unsigned retira o sinal do tipo e dobra sua capacidade no intervalo positivo.
Declaração e inicialização de variáveis
Em C++ é obrigatório que toda variável usada no programa seja declarada
A sintaxe da declaraçã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++ é:
 ᅠ	tipo_da_variável ᅠ ᅠ ᅠ ᅠ ᅠ ᅠ ᅠ ᅠ lista_de_variáveis
tipo_da_variável lista_de_variáveis
int a, b, idade, x1, x_1, meses;
int a;
char a, b, c;
unsigned int x1, x2, media;
char _a;
Declaração e inicialização de variáveis
Nomes de variáveis só podem conter letras , números e o caracter “_”.
Não podem começar com um número.
Não é possível utilizar palavras reservadas da linguagem C++, vamos listar as palavras reservadas em seguida. 
Não é possível criar uma variável que tenha o mesmo nome de uma função
Não há limite para o tamanho de nome de variável em C++.
Constantes devem ser escritas em maiúsculas
Ou seja, toda vez que uma variável for declarada em C++, é preciso que o seu tipo venha em primeiro lugar e depois a variável desejada, ou uma lista de variáveis, separada por vírgula.
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çãointerna 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;
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
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.
Operadores aritméticos em C++
Aritméticos
+ (soma), - (subtração), * (multiplicação), / (divisão), % (resto da divisão)
Lógicos
&& (e), || (ou), ! (not)
Relacionais
> (maior), < (menor), != (“diferente”), == (igualdade), >= (maior ou igual), <= (menor ou igual)
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
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).
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:
O operador lógico “E”, em C++: &&
O operador lógico “OU”, em C++: ||
O operador de negação, em C++: !
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:
Operadores relacionais
Resumo:
Tipos de comandos: A seleção é composta ou aninhada ou encadeada, mas o “tipo” tem que ser simples, composto, aninhado / encadeado. 
Seleção composta: Neste tipo, após a execução do teste, tanto será executado um bloco de comandos se o resultado do teste for verdadeiro quanto será executado um outro bloco de comandos se o resultado for falso. 
Seleção simples: Neste tipo, após a execução do teste, só será executado o bloco de comandos se o resultado do teste for verdadeiro. 
Seleção aninhada/ encadeada: Neste tipo, após a execução do teste, será executado um bloco de comandos se o resultado do teste for verdadeiro, podendo ter um outro teste(aninhado); caso não seja, um outro teste(encadeado) será feito até que todas as possibilidades de respostas sejam contempladas. 
Teste: O teste é uma expressão relacional que compara valores dos seus operandos. 
A expressão relacional é formada, obrigatoriamente, por um operador relacional e dois operandos do mesmo tipo. 
Aula 05 – Estrutura de Decisão
Desvio condicional simplesRecordando...
Desvio condicional composto
Até agora, vimos os seguintes elementos de programação:
Bloco de programação;
Entrada e saída de dados;
Variáveis;
Constantes;
Atribuições;
Expressões lógicas;
Expressões relacionais;
Expressões aritméticas;
Comandos sequenciais.
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. Como você bolaria um programa para verificar se você está aprovado ou não?
Percebeu que há um desvio?
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++.
Atenção: 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 é:
Em C++, a sintaxe é a seguinte:
Temos então uma nova palavra ao nosso vocabulário de C++: else. Esta palavra é equivalente ao “senão”.
O programa é muito simples. Ele verifica se um número digitado pelo usuário é positivo ou negativo.
Aula 06 – Estrutura de Decisão
Recapitulando...
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:
Mudando o teste...
 É 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
Operador ternário
if (x == 10) // Se x for igual a 10
 y = 20; // então faço y receber 20
else 
 y = 30; // senão faço y receber 30
 
y = (x == 10) ? 20 : 30; 
Como é um operador ternário, temos três operandos:
 • A condição, que é o testelógico usual, que é feito em toda estrutura de decisão;
• Valor quando verdadeiro, que é a expressão ou valor a ser atribuído a uma variável quando a condição for verdadeira. Tudo o que vier após a interrogação “?” e antes do “:” será executado. Detalhe: neste espaço, somente um comando é permitido;
• Valor quando falso: é a expressão ou valor a ser atribuído a uma variável quando a condição for falsa. Também só é permitido um comando. Tudo o que vier após o “:” e antes do final da linha “;” será executado.
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.
O Comando Switch
A sintaxe do switch é a seguinte:
switch( opção )
{
 	 case opção1:
 comandos caso a opção 1 tenha sido escolhida
 break;
 	 case opção2:
 comandos caso a opção 2 tenha sido escolhida
 break;
 	 case opção3:
 comandos caso a opção 3 tenha sido escolhida
 break;
     default:
 comandos caso nenhuma das opções anteriores tenha sido escolhida
}
O switch vai comparar a variável 'opção' com os 'case'. Se ele achar uma opção (case) que seja igual, ele vai rodar o código que vem após esse case, e antes do próximo case.
Caso nenhum case seja igual a 'opção', o código que está default é o que será rodado.
Caso a 'opção' seja um char, coloque entre aspas simples ' ', caso seja string coloque entre aspas duplas " " e caso seja um número, não é necessário colocar nenhum tipo de aspas.
Operadores Lógicos
Em C++, temos três operadores:
O operador E, representado pelos caracteres &&;
O operador OU, escrito como || em C;
O operador de negação, representado pelo caractere! (Ponto de exclamação).
TRÊS ESTRUTURAS DE REPETIÇÃO: 
ESTRUTURA DO PARA: Estrutura ideal quando o número de repetições for conhecido durante a elaboração do algoritmo ou quando o usuário puder fornecê-lo durante a execução. Na linguagem C++, essa estrutura recebe o nome de for e, diferentemente de outras linguagens, simula com facilidade as estruturas do enquanto e do faça... enquanto como veremos mais adiante. 
ESTRUTURA DO ENQUANTO: Estrutura que testa no início e é usada quando o número de repetições for desconhecido. Simula, com facilidade a estrutura do faça ... enquanto e a estrutura do para (desde que criemos uma variável que terá seu valor incrementado/decrementado dentro da estrutura de repetição). Na linguagem C++, essa estrutura recebe o nome de while. 
Sua lógica é: repete enquanto a condição for verdadeira. Como ela testa antes de executar o bloco, pode ser que ela nem execute o bloco se a condição de início for falsa. 
ESTRUTURA DO FACA ENQUANTO: Estrutura usada quando o número de repetições for desconhecido. Sua diferença em relação à estrutura do enquanto é que ela testa ao final, significando que executa o bloco de comandos pelo menos uma vez. Essa estrutura também precisa de um teste para interromper a repetição. Muito usada em algoritmos com menus. Na linguagem C++, essa estrutura recebe o nome de do...while. A estrutura da repetição é mais parecida com a estrutura do para, não precisando de leitura/atribuição antes do faça para entrar na estrutura, pois testa, como já foi dito, ao final.
A estrutura do para(for) é muito fácil, pois funciona como uma máquina de xerox, ou como uma máquina que gera uma PA(Progressão Aritmética) ou como uma máquina que gera uma PG(Progressão Geométrica).
Aula 07 – Estrutura de Repetição – Parte 1
A Estrutura For
			for (<inicialização>; <condição>; <incremento>) 
			<comandos>
Operadores unários
A parte de <inicialização> é realizada apenas 1 vez, no início da execução do comando. A seguir, a <condição> é testada, e caso verdadeira, os <comandos> são executados. Após a execução dos <comandos> mas antes de testar a <condição>, a parte <incremento> do comando for é executada.
Qual é a tradução de for? “Para”, certo? Pois bem, a estrutura for é muito usada nas repetições, principalmente nas ocasiões nas quais sabemos a quantidade de repetições que ocorrerão.
Esse tipo de repetição é chamada de repetição controlada por contador, pois teremos uma variável que determinará o número de repetições daquela parte do programa.
Observe: é um pouco estranho ter duas repetições e meia, ou “repita 10 vezes e meia”, certo? Logo, esta variável tem que ser inteira. Não podemos ter uma variável decimal para contar quantas repetições teremos.
Aula 08 – Estrutura de Repetição – Parte 2
CONJUNTOS: 
Conceito: Conceituamos conjunto como um agrupamento ou coleção de elementos, ou membros, do mesmo tipo e é, geralmente, indicado por uma letra maiúscula. 
Descrição: 
1- Um conjunto pode ser descrito através da enumeração dos seus elementos entre chaves. 
Observe o conjunto dos meses que começam pela letra a: { abril, agosto} 
2- Um conjunto pode ser descrito, também, por uma propriedade. 
Observe um conjunto formado pelos números pares representado pela sentença: 
 Características: Um conjunto sempre tem um nome, um delimitador (chaves ou diagrama de Euler-Venn) e algumas operações para manipular os elementos quando eles são números inteiros. 
MATRIZES: 
Nomenclatura: Toda matriz tem uma letra maiúscula como nome e, de forma subscrita, sua dimensão, isto é, o número de linhas e de colunas separadas pela letra x minúscula. 
Apresentação: Os elementos de uma matriz se apresentam entre um par de colchetes ou de parênteses. 
Representação: Cada elemento é representado pela letra minúscula correspondente ao nome da matriz e, de forma subscrita, sua posição linha/coluna, separadas por vírgula. Sendo assim, poderíamos dizer que: 
 Outros Conceitos: Há, também, os conceitos de matriz transposta, matriz identidade, diagonal principal, secundária, as operações realizadas com matrizes, entre outros. 
AS ESTRUTURAS NA LINGUAGEM C++ 
Estrutura é uma técnica de programação que permite que agrupemos vários elementos em uma mesma variável, podendo ser classificada em homogênea ou heterogênea. 
O estudo da estrutura heterogênea não faz parte do conteúdo dessa disciplina, pois em programação, começamos nosso estudo com as estruturas homogêneas por serem mais conhecidas. Mas vamos apresentar de forma sucinta a diferença entre essas duas estruturas. 
HOMOGÊNEA: A estrutura homogênea é formada por elementos do mesmo tipo e, muitas vezes, precisaremos declarar várias estruturas homogêneas para atender às necessidades do programa. 
HETEROGÊNEA: A estrutura heterogênea pode ser formada por elementos de tipos diferentes. O uso desse tipo de estrutura irá simplificar os programas e, muito em breve, você ouvirá falar em struct. 
Costumamos dizer que as matrizes são tabelas criadas na memória principal (MP) que podem ter u ma dimensão ou mais. 
Quando uma matriz tem somente uma dimensão, chamamos de vetor, como na Matemática, ou array ou matriz unidimensional. 
PARA SIMPLIFICAR: 
Podemos dizer que uma matriz é um conjunto de variáveis, todas com o mesmo nome e só diferenciadas pela posição que ocupam nesse conjunto. 
Na linguagem C++, assim como em outras linguagens, essa dimensão que localiza a posição de uma variável vem entre um par de colchetes.
Repetição com Limite do Contador Determinado pelo Usuário
Ao ler o tipo de repetição, já podemos entender o que vai acontecer: a repetição será controlada por um contador determinado pelo usuário.
Compare com o for, que você já conhece: embora sejamos nós programadores que digitamos a condição final, naquele momento não estamos desempenhando o papel do usuário, e sim do programador. Agora é diferente: é o usuário que vai determinar isso.
Embora dê para fazer esta estrutura com o for, existe outro comando mais interessante para esta tarefa: o while (enquanto). Este comando tem a seguinte sintaxe:
While:
Esquematicamente,o comando funciona de acordo com o seguinte diagrama:
Veja, no diagrama, que o fluxo chega a uma condição (decisão) no qual será avaliada. Se for verdadeira, o fluxo passa para as instruções a serem executadas e volta à condição. Viu o looping aí? Enquanto a condição for verdadeira, o fluxo ficará “preso” a esse laço.
Quando a condição for falsa, aí sim, ele se liberta e continua o programa. Portanto, evite criar condições que deixem o programa preso para sempre no looping, o chamado (e temido) looping infinito.
Do-while
do {
	comando;
	comando;
	...
} while (condição);
O teste é feito no fim!
Repetição Controlada pelo Valor da Entrada de Dados
Esta é uma variação da estrutura que vimos usando o for. Com o for, percebemos que ele é adequado para situações em que o número de repetições é bem definido e conhecido.
Agora vamos ver uma variação desse tipo de estrutura, porém usando o comando while. Um bom exemplo é o cálculo do pi (π) usando uma série infinita, chamada de série de Gregory-Leibniz. Esta série tem o seguinte formato:
Perceba que na série há uma alternância do sinal positivo com o negativo. Além disso, os denominadores das frações estão em uma série que cresce com passo 2, só de números ímpares.
Sabemos que podemos simplificar o valor de pi usando 3,14, mas em várias situações de cálculos trigonométricos ou outros que requerem maior precisão, temos que usar o pi com um número de casas mais significativos.
Temos um detalhe: a série de Gregory-Leibniz só funciona bem com no mínimo 500.000 repetições.
Você pode pensar que demoraria para retornar o resultado, mas isto vai depender do seu computador. Se o seu computador tiver um bom processador, com bastante memória RAM, em pouquíssimos segundos o resultado irá aparecer.
Estávamos acostumados com poucas repetições, certo? Agora apareceu um programa mais exigente!
A ESTRUTURA DO ENQUANTO SIMULANDO A ESTRUTURA DO PARA 
Embora a estrutura do para seja a mais indicada quando o número de repetições for conhecido, nada impede que usemos a estrutura do enquanto combinada com um contador para simular a estrutura do para. Veja como ficaria o exemplo que fizemos na aula anterior usando a estrutura do para com a estrutura do enquanto.
Repetição Controlada pela Resposta do Usuário
Há muito tempo, em uma galáxia distante, os programas de computador não eram gráficos, cheio de cores, com mouse e sons bacanas, como hoje.
Na atividade da aula passada, já vimos que as telas eram em modo texto e tinham que ser desenhadas usando caracteres disponíveis no sistema operacional.
Olhe a tela a seguir. Esta é uma tela que usa um ambiente “gráfico”, mas que não impede o desenho pelo programador. Esse ambiente é chamado de Turbo Vision.
Mas não se anime achando que nunca vai trabalhar com telas em modo texto. Muitos sistemas legados ainda usam este tipo de ambiente e, por incrível que pareça, é uma área na qual ainda existe demanda.
Veja que existe um menu na parte superior e inferior da tela. Perceba que, enquanto o usuário não usar as teclas ALT-X, o sistema continuará em execução.
Ou seja, preste atenção na frase: “Até que as teclas ALT e X sejam pressionadas, continue a executar o programa”; quer dizer, temos aí uma nova estrutura de repetição. A estrutura em que vamos trabalhar agora é útil para construir menus deste tipo.
Loopings Aninhados
Em várias situações, é necessário criar um algoritmo de repetição dentro do qual há outra repetição.
Isso é mais comum do que você pensa. Quando falamos sobre a programação em modo texto, para pintar uma tela, como vimos no Turbo Vision, era necessário criar um looping dentro de outro.
Na folha de pagamento (novamente), é preciso um looping para tratar todos os funcionários da empresa, e para cada funcionário, vários cálculos são feitos. Enfim, tenha certeza que você em breve vai encontrar em uma situação real.
Veja a seguir as sintaxes possíveis para os laços aninhados:
Aula 09 – Funções
Como as Funções e Procedimentos Funcionam?
Observe a figura a seguir:
A figura basicamente explica o funcionamento de uma função ou procedimento. O procedimento é um grupo de comandos que realiza uma determinada tarefa específica que é executada quando o procedimento é chamado.
Quando o programa principal chama o procedimento, o fluxo do programa é desviado para o procedimento, o qual é executado em seguida, e após a sua finalização, o procedimento volta à execução do programa principal normalmente.
Diferenças entre Funções e Procedimentos
Agora, vamos supor que você está desenvolvendo um programa que vai trabalhar com algumas operações matemáticas, como por exemplo, calcular o MDC entre dois números, verificar se um número é primo etc.
Poderíamos criar procedimentos para isso, correto? Mas temos algumas melhorias que podemos fazer nos procedimentos. Por exemplo, criar procedimentos que funcionariam assim:
Esse retorno pode ser então usado no programa que chamou o procedimento. Então, temos aqui a função. A função é um procedimento que possui obrigatoriamente um retorno. O procedimento não possui retorno.
Lembra que o system(“cls”) é um procedimento? Que retorno ele devolve ao programa principal? Nenhum! Logo, é um procedimento.
Daqui para a frente, não vamos mais usar no nosso vocabulário de C++ a palavra “procedimento”. Uma vez que o procedimento é uma função, mas que não retorna valor, então vamos usar apenas “função”, combinado?
Por que Usamos Funções?
Para uma melhor legibilidade, como já citamos;
Para modularizar o programa em partes menores e mais funcionais;
Para melhorar a manutenção e permitir a alteração de uma determinada parte do código de uma maneira mais rápida;
Para evitar que uma parte do código seja repetida várias vezes em um programa;
Para o reaproveitamento de código: uma função que você faz pode ser usada por outro programador.
A sintaxe de uma função em C++ é a seguinte:A sintaxe de uma função em C++ é a seguinte:
Tipo_da_função nome_da_função(lista_de_parâmetros){
 Corpo da função
}
Parâmetros
Na função teclac() que fizemos, você deve ter notado que a chamada dela no programa principal é muito simples. É como chamar a função getch(): basta usá-la e pronto!
Mas algumas funções precisam receber valores para serem executadas. Como já vimos, uma função para calcular a raiz quadrada de um número precisa receber o número para que a função seja executada.
Algumas funções, como o exemplo do MDC, precisam de dois ou mais parâmetros, enfim, para a linguagem C++ ficar mais versátil, o uso de parâmetros é permitido.
Os parâmetros possibilitam que seja definido sobre quais dados a função deve funcionar.
Para definir os parâmetros de uma função, é preciso que o tipo da variável seja declarado antes do nome da variável. Se houver mais do que um, os outros parâmetros são separados por vírgulas.
Os parâmetros da função, quando estão na declaração da função, são chamados de parâmetros formais (como o float a, int b na função anterior). Na chamada da função, são chamados de parâmetros reais ou argumentos.
Preste atenção: os parâmetros devem ser passados de acordo com sua posição. Ou seja, o tipo do primeiro argumento (na chamada) tem que “casar” com o tipo do primeiro parâmetro formal (na declaração da função); o tipo do segundo argumento “casa” com o segundo tipo do parâmetro formal, e assim por diante.
Os nomes das variáveis da chamada e da declaração não precisam ser os mesmos.
Retorno de uma Função
A função soma que acabamos de mostrar apresenta uma mensagem informando o resultado da conta dentro da função (veja a linha 7).
A função tem que fazer exatamente o que o nome dela propõe. Se estamos fazendo uma soma, então ela deveria fazer somente a soma, e o resultado, o próprio programa principal se encarrega de fazer.
Porém, dessa forma vamos precisar que a função retorne um valor para quem a chamar (neste caso, o programa principal).
Escopo de Variáveis
O escopo de uma variável é o bloco de código onde a variável é válida.Desta forma, temos algumas considerações a fazer:
As variáveis são válidas nos blocos em que foram definidas.
As variáveis que são definidas dentro de uma função são chamadas de variáveis locais.
Os parâmetros formais de uma função valem somente dentro da função.
Uma variável que foi definida dentro de uma função não é acessível em outras funções, mesmo se os nomes forem exatamente iguais.
Finalizando
O estudo das funções em C++ é muito amplo, e nosso objetivo aqui é iniciar os seus estudos.
Ao longo de todas as aulas, usamos as funções o tempo todo, e talvez você não tenha notado que o próprio programa principal em C++ é uma função. Por isso usamos o return 0 no final dos programas: para retornar o valor 0 a quem chamou o programa; neste caso, o sistema operacional.
O possui milhares de funções predefinidas, e saber usá-las é muito importante. Desta forma, evitamos a “reinvenção da roda”, como por exemplo, desenhar figuras de funções matemáticas, funções de estruturas de dados, de manipulação de strings etc.
Já existe muita coisa pronta. Basta saber em qual biblioteca a função desejada se encontra e incluir a biblioteca corretamente dentro do programa. Como foi o caso da função getch().
Aula 10 – Matrizes e Vetores
Estrutura de Dados
Na ciência da computação, existe uma área de estudo chamada Estrutura de Dados. Para quem é da área de programação de computadores, esta é uma disciplina obrigatória e fundamental.
As estruturas de dados servem principalmente, e de uma maneira resumida, para abstrair estruturas da vida real em formas computacionais que sejam viáveis de serem implementadas.
Exemplo:
Você já deve ter visto uma planilha eletrônica. Como você faria se fosse uma das pessoas da equipe de desenvolvimento do Excel para poder implementar uma planilha? Usando uma tabela, não é? Logo, a tabela é uma estrutura de dados e serve para abstrair uma planilha.
Existem muitos exemplos semelhantes, e nesta aula, vamos estudar as estruturas de dados mais fundamentais que existem e que vão nos ajudar a continuar a resolver muitos problemas. Apresentaremos a você os vetores e as matrizes.
Vetores (Arrays)
Um vetor, ou array, ou variável composta unidimensional é uma estrutura de dados contendo um conjunto de dados, todos do mesmo tipo, indexados por um valor. 
O array precisa ter um nome. No array da figura, o nome é x
O array tem um tamanho. No array da figura, tamanho 9
O array possui um tipo. Todos os componentes do array obrigatoriamente são do mesmo tipo. No array da figura, o tipo é char
O array é dividido em índices, um para cada elemento do array, começando obrigatoriamente pelo número 0.
O array é finito. Não é possível trabalhar com índices maiores que o tamanho do array e nem com índices negativos. No nosso caso, não é possível colocar um valor na posição 9, isso vai gerar um erro chamado “index out of bounds”.
Os índices sempre são números inteiros.
A primeira estrutura de dados que vamos estudar é chamada de vetor ou array. Se você quiser um nome mais acadêmico, pode escolher o nome “variável composta unidimensional”. São sinônimos.
Um vetor, array ou variável composta unidimensional é uma estrutura de dados contendo um conjunto de dados, todos do mesmo tipo, indexados por um valor. Graficamente, podemos representá-lo assim:
A figura mostra um array com tamanho 9, chamado de x, cujo conteúdo é de variáveis do tipo char. Temos algumas informações importantes na figura:
O array precisa ter um nome. No array da figura, o nome é x;
O array tem um tamanho. No array da figura, o tamanho é 9;
O array possui um tipo. Todos os componentes do array obrigatoriamente são do mesmo tipo. No array da figura, o tipo é char;
O array é dividido em índices, um para cada elemento do array, começando obrigatoriamente pelo número 0;
O array é finito. Não é possível trabalhar com índices maiores que o tamanho do array, nem com índices negativos. No nosso caso, não é possível colocar um valor na posição 9; isso vai gerar um erro chamado de index out of bounds;
Os índices sempre são números inteiros.
Como declaramos este array em C++? Usamos a seguinte sintaxe:
tipo nome_array[tamanho]
Manipulações com Vetores
Podemos fazer várias operações com vetores. Veja atentamente os exemplos:
Vamos supor que o seu professor de Algoritmos peça que você faça algumas operações com as notas das provas. São 15 alunos na sala e as notas podem ter uma casa decimal.
Qual é o tipo de dados mais apropriado para guardar as notas? Pode ser o float, não é?
Vamos usar um array para esta tarefa. Em primeiro lugar, vamos criar um array em C++: float notas[15];
Após essa declaração, teremos o um vetor criado na memória do computador.
Vetor criado na memória do computador:
Como podemos perceber, ele está pronto para receber valores; temos que preenchê-lo.
Em C++, fazemos assim para atribuir um valor a uma posição do array:
notas[0] = 7.5;
Após essa linha, teremos o seguinte vetor na memória:
Travessia do Vetor
Atravessar o vetor, ou iterar sobre ele, ou percorrer o vetor consiste em fazer uma repetição e verificar índice por índice o valor de cada posição, até chegar no final do vetor, seja ele do tamanho que for.
Matrizes
A outra estrutura de dados que vamos estudar nesta aula são as matrizes, ou variáveis compostas multidimensionais.
O que é uma matriz? Pense numa tabela. Pronto, aprendeu!
Quando falamos sobre vetores na primeira parte da aula, você viu que as figuras representativas da estrutura de dados estão desenhadas horizontalmente? Mas e se empilhássemos vários vetores, desta forma?
Também temos aqui índices para a dimensão horizontal e para a dimensão vertical. Podemos até chamar de x e y, mas normalmente chamamos de linhas e colunas. Cada uma tem a sua numeração correspondente.
Da mesma forma que o vetor, uma matriz também tem um nome, é uma variável e, por definição, seu conteúdo só pode ser preenchido por valores do mesmo tipo.
Veja a figura a seguir:
Essa figura mostra uma matriz chamada “a”, com n colunas e i linhas. Cada par linha x coluna é denotado por aij ou também a[i,j].
Em C++, declaramos uma matriz de duas dimensões assim:
tipo nome_da_matriz [ ][ ];
int matriz[5][3]; // declara uma matriz de 5 linhas e 3 colunas
As regras que foram apresentadas para os vetores (índices negativos ou maiores que o tamanho da estrutura, nome da estrutura etc.) também são aplicáveis para as matrizes.
Vamos apresentar um programa e incluir nele a forma de declaração de uma matriz em C++, e sua forma de travessia. É muito parecido com o vetor, porém agora, temos que trabalhar com dois índices para cada valor.

Outros materiais