Buscar

ALGORITIMOS (Resumo)

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 36 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 36 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 36 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

ALGORITIMOS
O que é lógica de programação?
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.
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.
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.
O fluxograma é uma representação gráfica de um processo ou fluxo de trabalho, feito com figuras geométricas padronizadas e setas ligando cada figura. Também pode ser definido como o gráfico que representa o caminho feito por algum elemento (como, por exemplo, um documento), entre os vários departamentos de uma empresa.
Criação de fluxogramas 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.
O algoritmo é a representação do pensamento descrito como uma sequência de passos que visam atingir um objetivo.
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.
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.
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.
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.
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#.
A memória primária é o que conhecemos como RAM: memória de acesso aleatório, podendo ser escrita e apagada.
Unidade Controladora responsável pela sincronização entre os demais componentes.
Unidade lógica e aritmética responsável pelos cálculos e seus controles.
Dispositivo de entrada e saída compreendendo os discos, pendrives e demais dispositivos de armazenamento.
AULA 02
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.
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.
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 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”.
in significa “principal” e, portanto, essa linha indica que estamos iniciando o programa principal.
Para você ter uma ideia, as palavras reservadas em C++ sã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.
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.
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.
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).
Use endentaçõ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 um bom programador vai se preocupar com isso. Os comentários são delimitados por /* */ ou ainda //.
AULA 03
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.
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.
Refatoração melhoraro 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.
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.
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.
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.
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.
Finalizando: basicamente é assim que o DevC++ funciona. Com o que vimos aqui, já é suficiente para você editar os seus programas, compilá-los e fazer a devida investigação de erros por meio do depurador.
Além disso, conte com a internet. Devido ao fato de o DevC++ ser muito popular, não falta material sobre ele.
Aula 04
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.
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;
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:
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:
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++?
SQRT é a forma mnemônica de square root em inglês. Vamos estudar as funções em C++ algumas aulas mais à frente.
“Como eu vou saber em qual biblioteca tem o que eu preciso?”.
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 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.
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.
bool é um tipo em C++ e pode assumir os valores booleanos true ou false.
Operadores relacionais
Não se preocupe. A partir das próximas aulas, vamos começar a estudar os comandos de controle de fluxo, e estas condições booleanas sempre aparecerão nos programas e ficarão mais claras para você.
Exemplo: 
!(a==b) é equivalente a (a!=b)
!(a!=b) é equivalente a:_________________
!(a>b) é equivalente a:_________________
!(a<b) é equivalente a:_________________
!(a>=b) é equivalente a:_________________
!(a<=b) é equivalente a:_________________
Gabarito:
b) (a==b)
c) (a<=b)
d) (a>=b)
e) (a>b)
f) (a<b)
AULA 05
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 montadaspara poder executar o programa corretamente.
Esse desvio é chamado de desvio condicional simples. Vamos observá-lo com mais detalhes em C++.
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.
Como programar um desvio condicional composto
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?
Na próxima aula, vamos continuar a aprender outras formas de desvios de fluxo e, portanto, ainda vamos ficar mais um tempo desvendando o “if-else”. Até lá!
Aula 06
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:
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.
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
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!”
1 #include <iostream>
2 using namespace std;
3
4 int main(int argc, char** argv) {
5 int mes,dias;
6
7 cout<<"Digite o número do mês:"<<endl;
8 cin>>mes;
9
10 switch (mes){
11 case 1:
12 dias = 31;
13 break;
14 case 2:
15 dias = 28;
16 break;
17 case 3:
18 dias = 31;
19 break;
20 case 4:
21 dias = 30;
22 break;
23 case 5:
24 dias = 31;
2
25 break;
26 case 6:
27 dias = 30;
28 break;
29 case 7:
30 dias = 30;
31 break;
32 case 8:
33 dias = 31;
34 break;
35 case 9:
36 dias = 30;
37 break;
38 case 10:
39 dias = 31;
40 break;
41 case 11:
42 dias = 30;
43 break;
44 case 12:
45 dias = 31;
46 break;
47 default:
48
cout<<”Você digitou um mês
inválido”<<endl;
49 break;
50 }
51 cout<<"O mês "<<mes<<" tem "<<dias<<" dias.";
52 return 0;
53 }
Entendeu como este comando funciona? Ele é muito útil e pode ser usado quando
temos vários ifs.
É interessante usá-lo para substituir vários ifs e deixar o código mais legível. Também
é bastante usado em estruturas de menu. Porém, temos uma limitação: o comando
não pode ser usado para avaliar expressões relacionais.
Ele só funciona quando comparamos com um valor constante e, quando a comparação
é verdadeira, um bloco de comandos é executado.
AULA 07
Repetições
Vamos a mais uma importante estrutura de programação: a estrutura de repetição.
Até lá, essas perguntas deverão estar respondidas. Um jogo como este, ou um jogo de videogame qualquer, é uma estrutura de repetição.
O jogo termina com todas as posições em branco, esperando ser preenchidas com “X” ou “O”;- O jogo finaliza quando algum dos jogadores ganha ou quando há um empate e ninguém faz uma sequência.
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.
Inicialização: declaramos uma variável do tipo inteiro (sempre) e atribuímos um valor inicial;
Condição: é uma expressão relacional que determina quando a repetição acaba. Quando a condição se tornar falsa, a execução do programa continua no comando seguinte ao for;
Incremento: configura como a variável de controle da repetição varia cada vez que a repetição é executada. Pode ser positivo ou negativo.
O que podemos fazer com o for?
Agora que vimos o que podemos fazer com os operadores em C++, olha só o que podemos fazer com o for:
Alterar a variável de controle de 1 a 100 incrementando de 1for (int i=1; i<=100; i++)
Alterar a variável de controle de 100 a 1 em decrementos de 1for (int i=100; i>=1; i--)
Alterar a variável de controle de 8 a 88 em incrementos de 8for (int i=8; i<=88; i+=8)
Alterar a variável de controle de 20 a 2 em decrementos de 2for (int i=20; i>=2; i-=2)
Alterar a variável de controle sobre uma sequência de valores. Por exemplo: 2,5,8,11,14,17,20for (int i=2; i<=20; i+=3)
Alterar a variável de controle sobre uma sequência de valores. Por exemplo: 99,88,77,66,55,44,33,22,11,0for (int i=99; i>=0; i -=11)
AULA 08
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 (){
‹ bloco de comandos ›
}
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.
O algoritmo consiste em ler do usuário um número de funcionários, que será o nosso contador. Para cada funcionário, será pedido o salário mensal, e este valor será somado ao valor da folha.
Veja que, na linha 11 até a 16, temos o while sendocontrolado por uma variável que o usuário digitou. Se o usuário digitar 800, teremos 800 repetições (800 funcionários); se digitarmos 8, teremos 8 repetições e assim por diante.
A linha 15 é muito importante e muitas vezes é esquecida pelos iniciantes. Sem ela, o looping cairá numa repetição infinita, o que, mais uma vez, é tudo o que não queremos. Nunca se esqueça de colocar dentro de um while a alteração da variável de controle!
A cada repetição, a variável valor_folha é incrementada com o valor do salário lido. Veja a linha 14 e olhe o operador += que foi usado. Lembra-se dele, né? Para recordar, ele faz o mesmo que valor_folha = valor_folha + salário. Observe também o operador de incremento na linha 15.
Repetição Controlada pelo Resultado de uma Operação
Agora, veremos quando uma repetição não será controlada pelo programador nem pelo usuário, mas o próprio programa.
Você sabe o que é MDC?
É o máximo divisor comum. Dois números naturais sempre terão um máximo divisor comum. Por exemplo: os divisores comuns de 12 e 18 são 1, 2, 3 e 6; logo, 6 é o MDC entre 12 e 18, e anotamos assim: MDC (12,18) = 6. Para que serve o MDC?
Exemplo: 
Veja este exemplo obtido do site Brasil Escola:
Uma indústria de tecidos fabrica retalhos de mesmo comprimento. Após realizarem os cortes necessários, verificou-se que duas peças restantes tinham as seguintes medidas: 156 centímetros e 234 centímetros.
O gerente de produção, ao ser informado das medidas, deu a ordem para que o funcionário cortasse o pano em partes iguais e de maior comprimento possível. Como ele poderá resolver essa situação?
Simples: com o MDC dos números 156 e 234.
Repetição Controlada pelo Valor da Entrada de Dados
sta é 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:
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.
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.
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.
AULA 09
Basicamente é isso que fazemos quando temos um programa muito grande e temos a possibilidade de simplificá-lo:
Usando subprogramas, 	chamados de funções ou	procedimentos.
Como as Funções e Procedimentos funcionam?
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.
Já usamos um procedimento em alguns de nossos programas anteriores. Lembra-se do system(“cls”)? O que este comando faz?
Atenção
É igual ao programa do celular de que falamos no início. Parece que é um programa sequencial, não é? Mas, no fundo, um programa para celular é na verdade um grande looping cheio de chamadas a procedimentos específicos, como por exemplo, fazer ligação, navegar na internet, executar a calculadora etc.
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:
Lembra que o system(“cls”) é um procedimento? Que retorno ele devolve ao programa principal?
Nenhum! Logo, é um procedimento.
Atenção
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?
Existem várias vantagens de se usar funções. Vejamos:
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.
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.
Função getch()
Tem como objetivo ler uma tecla digitada pelo usuário e retornar o valor numérico da tecla. Cada tecla no computador tem um código, e o código da tecla “c” é 99. A função getch() é definida na biblioteca conio.h, e para usar a função, é necessário incluir a biblioteca no programa.
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.
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).
Essa palavra é obrigatória para as funções que não retornam valor. As que retornam valor, no lugar da palavra void, terão que indicar o tipo do retorno, como mostra a função soma() abaixo, agora modificada:
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
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.
Problema: Nucleotídeos de uma Cadeia de DNA
á vamos começar a nossa aula lançando um problema para você: vamos supor que você acabou de ser contratado por um laboratório de bioinformática, e o primeiro problema que caiu no seu colo foi contar o número de nucleotídeos de uma cadeia de DNA.
Antes que você ache que estamos falando em outra língua, vamos explicar um pouco de biologia molecular.
Lembra-se das suas aulas do colégio, em que você aprendeu que o DNA (ácido desoxirribonucleico) é uma molécula enrolada que contém o nosso código genético?
Resumidamente falando, o DNA é um conjunto de nucleotídeos (existem quatro: adenina [A], citosina [C], guanina [G] e tiamina [T]), que se combinam. As combinações formam nosso genoma ou de qualquer ser vivo que possua um código genético.
Para nós, que somos da programação, o DNA será “apenas” uma sequência combinada dessas quatro letras, como por exemplo:
Vetores
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:
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.
Travessia do Vetor
Atravessar o vetor, ou iterar sobre ele, ou percorrê-lo consiste em fazer uma repetição e verificar índice por índice o valor de cada posição, até chegar ao final do vetor, seja ele do tamanho que for.
No nosso exemplo de bioinformática, diminuímos o tamanho da string de entrada para simplificar, mas como já vimos, um genoma tem terabytes de tamanho.
Já pensou você declarar um vetor com um bilhão de posições? É por isso que máquinas que trabalham com esta área precisam ser rápidas, para poder processar os dados dentro de um tempo razoável.
Pronto, agora podemos entregar o trabalho para o nosso chefe, e que venham mais sequências de DNA!
Aprendemos o básico sobre os vetores. Existem mais detalhes que vamos reservar para você usar sua curiosidade e habilidade para aprender novas funções da linguagem C que podem ser feitas com as strings e também que podem ser usadas exclusivamente com vetores.
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?
Atenção
Repare que essa é a declaração de uma matriz de duas dimensões. Quer dizer que podemos ter mais dimensões. Existem também várias aplicações para matrizes com três dimensões (os cubos), quatro dimensões, cinco etc. Porém, este conhecimento não faz parte do nosso contexto.
s 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.
Este exemplo é bem simples. Ele vai pedir para o usuário preencher uma matriz de 3x3 e depois vamos imprimir a matriz na tela.

Continue navegando