Buscar

Anotações de aulas de 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 47 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 47 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 47 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

AL notas de aula.txt
ALG - A1 _________________________________________________________________
LV: FEOFILOFF, P. Algoritmos em linguagem C. Rio de Janeiro: Campus, 2008.
FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lógica de programação: a construção de 
algoritmos e estruturas de dados. São Paulo: Makron Books, 1993.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. D. Algoritmos: lógica para desenvolvimento
de programação. 9. ed. São Paulo: Érica, 1996.
NA: Lógica > Trata-se da Ciência que estuda as formas do pensamento
A forma de representar o pensamento é muito importante na programação de 
computadores > programador pensa em um programa - precisa saber expressar seu 
raciocínio por meio de uma representação ou mesmo de uma linguagem gráfica
Na informática usamos alguns recursos para representar o conhecimento > mais 
comuns são os fluxogramas e os algoritmos 
Fluxograma > uma representação gráfica de um processo ou fluxo de trabalho - com
figuras geométricas padronizadas e setas ligando as figuras
O fluxograma utiliza diagramas para representar e facilitar o entendimento de um
algoritmo
O algoritmo > um conjunto de regras para chegar a resultados, sejam eles 
conclusivos ou que podem fazer com que retorne (ou pule) para determinada parte 
da regra > o fluxograma tem como finalidade mostrar graficamente através de 
símbolos pré-definidos como o algoritmo funciona
Algoritmo > a representação do pensamento descrito como uma sequência de passos 
que visam atingir um objetivo
Algoritmos > são independentes da linguagem de programação
Importância dos algoritmos na programação > servem para representar o raciocínio
de uma resolução algorítmica do problema
A forma mais comum de escrever um algoritmo é usar uma linguagem chamada de 
português estruturado ou portugol
Português estruturado (pseudocódigo) > uma simplificação da nossa linguagem 
natural, na qual usamos frases simples e estruturas que possuem um significado 
muito bem definido
A linguagem de programação é a maneira utilizada de formalizar a solução de um 
problema do mundo real a partir dos algoritmos
O algoritmo pode ser representado de três maneiras: 
Linguagem gráfica > Sua simbologia é amplamente conhecida, por isto sua 
aplicação não se restringe apenas a algoritmos computacionais (fluxogramas)
Pseudocódigos > Sua simbologia e sintaxe aproxima-se muito a simbologia e a 
sintaxe da maioria das linguagens de programação.
Linguagem natural > A grande ambiguidade existente nos significados de seus 
termos é uma restrição a representação aos algoritmos computacionais
Hardware > história do computador em gerações > 1ª ger. 1943 ENIAC (válvulas) / 
2ª ger. 1947 (transístor) e primeiras linguagens de programação / 3ª ger. 
1965-1970 (circuito integrado ou microchip) / 4ª ger. 1970 (microprocessador) / 
depois uma evolução muito rápida (Porém a "arquitetura interna" de organização e
de relacionamento entre os componentes eletrônicos não se modificou muito - as 
variações obedecem aos princípios da arquitetura criada por John Von Neumann)
Página 1
AL notas de aula.txt
Elementos da arquitetura interna por Neumann: memória (primária [RAM] e 
secundária) / unidade de controle ([CU] - sincroniza os demais componentes) / 
unidade lógica e aritmética [ULA] (responsável por cálculos e controles) / ES
** Memória ROM > elemento do computador com informações gravadas sobre as 
rotinas de inicialização feitas pelo fabricante (não pode ter dados gravados 
pelo usuário)
** CPU -> "cérebro do computador" >> seguintes elementos: CU / ULA / 
Registradores
VA: história da programação - escrita cuneiforme (documentando instruções e 
processos do dia-a-dia) / Musa al-Khwarismi com trabalhos algébricos em 
linguagem natural (origem do algoritmo) / Ada Lovelace escreve um algoritmo (um 
programa) para máquina de calcular de Babbage / 1ªs linguagens: plankalkul 
(planilha de cálculo) utilizada no computador (ábaco) mecânico chamado Z1 
(programável com fitas perfurados; números de ponto flutuante; binário; com 
expoentes) / 1950 - programação física - trocar fios de lugar, perfurar cartões 
e testar / 1954 - 1ªs ferramentas: montadores e compiladores primitivos (poupar 
tempo dos programadores) / 1ª linguagem de programação [LP] popular FORTRAN 
(IBM) - criou um compliador (diminui erros e gera código de qualidade) - usada 
até hoje para previsão do tempo e mecânica de fluídos / Backus (IBM) - outras 
LPs Algol, BNF e FP (fuction point - ling. específica) / 1954 - LISP (aplicada 
em inteligência artificial) - influências como a recursão, as expressões 
condicionais, usadas até hoje (coleta de lixo) / 1957 - surge a linguagem 
universal independente de máquina (padronização) - Algol (precursora do Pascal) 
- influência (herança): blocos delimitadores, estrutura léxica de formato livre,
sintaxe definida via BNF, escopo de blocos para variáveis locais, tipagem 
estática, aninhamento de if-then-else, chamada por valor, recursão e expressões 
condicionais, alocação dinâmica de meória, procedimentos de primeira classe, 
operadores definidos pelo usário / LP Smalltalk e Simula - programação orientada
a objetos - usadas até hoje
Evolução das LP usadas na disciplina: Algol 60 > CPL > BCPL > B > C > C++
AT: Quais são as linguagens mais usadas atualmente? TIOBE programming community 
index
TC: 100%
ALG - A2 _________________________________________________________________
NA: Programa > uma sequência de comandos ou ordens dados a um computador
Compilação > quando o arquivo de texto é convertido em uma linguagem que o 
computador entende, para executar o programa
Programa -> código fonte em linguagem de alto nível -> compilador -> programa 
objeto -> linguagem de programação em códigos binários pertencentes a uma 
plataforma de execução
> para começar o programa usa sempre a linha: 
int main(int argc, char** argv) {
> as linhas intermediárias podem receber dados variáveis, p.e:
2 float nota1;
3 float nota2;
Página 2
AL notas de aula.txt
** Float significa flutuar > no caso são notas (nota1, nota2, nota3, nota4...) >
são números de ponto flutuante [decimais]
> saída de dados > inserir na linha 14 o seguinte comando:
14 cout<<”O valor da media eh: “<<media;
**Em C++, o cout é o comando que exibe uma mensagem na tela - faz a saída de 
dados / após o comando cout, temos o operador “<<” / tudo o que vier após o “<<”
será impresso na tela
> para terminar o programas usa-se sempre o comando da linha 15:
 15 return 0;
> a linha 16 também é muito importante, fecha o bloco de programa aberto na 
linha 1:
 16 }.
> Em C++ se você abre uma porta tem que fechar -> se você abre uma chave “{“ tem
que fechá-la “}”
**Notas importantes:
> 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 >
> Em C++, todas as variáveis inseridas precisam ser declaradas em linhas de 
comando
> Em C++, se você declarar uma variável “nota”, ela será diferente de “Nota”, 
“NOTA”, nOta” etc.
> Inicie os programas com int main (int argc, char** argv) { e termine com 
return 0.
> Use as endentações, linhas brancas e comentários / comentários são delimitados
por /* */ ou ainda //
> As linhas de códigos / instruções são sempre terminadas por ponto-e-vírgula 
(;)
> entrada-processamento-saída > Todo algoritmo ou programa tem um objetivo > é 
alcançado por meio de uma ENTRADA de dados, a qual será PROCESSADA e resultará 
em uma SAÍDA que será avaliada > Se a entrada for ruim, é problema, pois serão 
os dados ainda processados da maneira correta, no entanto, a saída será ruim
* fazer a correta entrada de dados é fundamental
**Variável > necessita de espaço na memória e define o tipo de dado a ser 
armazenado> diretivas de pré-processamento > ficam as bibliotecas e funções pré-definidas 
e prontas que podem ser usadas
> declarações globais > criamos as variáveis globais, constantes e estruturas 
que serão usadas e visíveis por todas as partes do programa
Página 3
AL notas de aula.txt
> declarações de funções > funções que serão utilizadas pelo programa
> programa principal [main] > o programa todo fica dentro do bloco que começa 
com { e termina com }
> definições locais > variáveis locais do programa
> instruções > os comandos e instruções do programa -> onde a parte principal 
fica armazenada
> finalização > observe o } para finalizar o bloco de programação
VA: O mais importante na programação é entender como montar os programas
> o programa é montado em linguagem de alto nível
> o editor de texto mais simples da plataforma é suficiente para escrever um 
programa
> depois esse programa deve ser compilado [em um programa compilador] para 
executá-lo
> pelo compilador se cria o programa objeto
> em outro programa Linker os códigos do programa objeto são convertidos em 
código de máquina [binária]
> dicionário de palavras reservadas de C++ é maior que o dicionário de C
> estrutura geral do C++:
 int main(int argc, char** argv) {
 definições locais -> variáveis
 instruções
 return 0;
 }
** em outros programas encontram-se mais sequências de comando, além dos cinco 
de C++:
diretivas de pré-processamento / declarações globais / declarações de funções
AT: instalar o Dev C++
TC: 75%
ALG - A3 _________________________________________________________________
NA: para programar > é possível executar o compilador na linha de comando pelo 
editor de texto e acompanhar os resultados gerados > OU utilizar softwares 
conhecidos como IDE (integrated development environment ou ambiente de 
desenvolvimento integrado), que facilitam o trabalho
> IDE >> 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
> A IDE integra o complidador e o linker no mesmo ambiente > por ele o programa 
é compilado, verificado e depois linkado, gerando o executável
> IDE -> é um conjunto de programas úteis ao programador reunidos em um mesmo 
ambiente, a fim de facilitar o trabalho de desenvolvimento
> a linguagem C++ possui vários IDEs diferentes > DevC++ foi escolhido
> baixar o DevC++ > o nome do arquivo contém 'TDM-GCC' > o que significa que a 
versão baixada vem com o compilador GCC, que é específico para o C++
** Refatoração
 > Melhorar o código por meio da construção de um código mais eficiente, sem 
abalar a estrutura geral do programa e geralmente contando com a colaboração de 
outros membros da equipe
Página 4
AL notas de aula.txt
> DevC++ trabalha com um tipo de arquivo chamado de projeto
> Um projeto é um agregador de recursos >> quando desenvolvemos um software, 
além dos arquivos de código-fonte, podemos ter imagens, bibliotecas de terceiros
que podemos incluir no nosso programa, arquivos de configuração e outros
> DevC++ > altera cor do código de acordo com o tipo de comando ou instrução que
está sendo trabalhado -> as strings ficam em azul, as palavras-chave ficam em 
negrito, as diretivas ficam em verde e assim por diante
** String
 > é uma sequência de caracteres > p.e.: ‘O’ ‘l’ ’á’ [são caracteres] - quando 
os juntamos para formar uma frase como “Olá” temos uma string >> É sempre 
representada entre aspas
** Tabela de caracteres ASCII -> American Standard Code for Information 
Interchange
** REGRAS PARA NOMEAR VARIÁVEIS
> Letras maiúsculas e minúsculas do alfabeto Inglês (diferenciando maiúsculas de
minúsculas - Case sensitive), dígitos de 0 a 9 e o caracter underscore "_" 
poderão ser usados.
> O primeiro caracter NÃO pode ser dígito.
> Nenhuma palavra reservada deverá ser usada para nome de variável.
>> Sugestões
> Embora o caractere underscore possa ser o primeiro, não é aconselhável. 
Procure usá-lo nos nomes compostos.
> Você também pode adotar a “convenção” de usar letra maiúscula para a primeira 
letra de cada palavra, a partir da segunda, e não usar underscore. Exemplo: 
notaDaProva
> Procure dar nomes significativos, evitando muitos comentários no código.
** Comentários poderão ser feitos em seu código para esclarecimentos ou 
identificações de trechos
Será possível comentários de uma linha: // ou um bloco de linhas: /* */
 // Nomes válidos: nome, Nota, p1, p2, mediaDaTurma, media_da_turma
 /* Nomes inválidos: preço, 2p, media aluno, n#2 */
> fazer o programa da AULA 2 [medias] - ok
> Compilar >> em um programa novo é obrigatório 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
> Executar >> 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 é 
possível usar a opção para somente executar
> fazer o programa da AULA 2 [temperaturas] - ok
> cout >> é o responsável por exibir algo na tela
Página 5
AL notas de aula.txt
> O cout consegue mesclar valores armazenados em variáveis [valores] e frases 
[strings] -> Esta mistura em computação é chamada >> concatenação* > p.e.:
cout<<celsius<<" graus Celsius equivale a "<<fahrenheit<<" graus Fahrenheit.";
*a operação de unir o conteúdo de duas strings
> depuração >> é uma atividade que permite ao programador executar o programa 
passo a passo > ele pode verificar os valores das variáveis e descobrir qual é a
execução natural de um programa
> Em um programa sequencial a depuração é tranquila / em programas que possuem 
desvios condicionais e repetições, o depurador realmente fará diferença durante 
o seu desenvolvimento
> Breakpoint > é um ponto de parada >> após o compilador ter feito a sua parte, 
o depurador entrará em execução e rodará o programa até a linha que tem o 
breakpoint > esta linha (breakpoint) estará marcada em vermelho
> para criar um breakpoint >> podemos usar o mouse clicando na linha desejada >>
ou usar o menu Executar >> ou ainda usar a tecla F4
> durante a depuração, a tela do DevC++ muda para o modo Depurador > aparecem 
alguns botões diferentes
**Depuração é um debug -> tirar os erros do programa / depurador = debugger
> recursos do C++:
>> As propriedades do projeto: menu Arquivo-Propriedades
 -> ver a quantidade de linhas do arquivo, quantas linhas estão vazias, linhas 
de código etc. [importante para o tamanho do software, p.e.]
>> Configuração do ambiente
 -> tela podem ser configuradas várias opções como por exemplo criar arquivos de
backup automaticamente, mudar o tema (aparência) do DevC++, entre outras
>> Opções do Editor
 -> configura o comportamento do DevC++ em várias situações, como por exemplo, a
autoendentação, posições do cursor etc.
**refatoração > permite melhorar o código
VA: IDE (Integrated development enviroment) > características e ferramentas mais
comuns:
> editor
> compilador (compiler)
> linker
> depurador (debugger)
> modelagem (modeling)
> geração de código
> testes automatizados
> refatoração (refactoring)
No C++ todos os comentários são apresentados nessa forma: /* ... */
/* qualquer texto escrito entre barras e asteriscos não aparece e nem interfere 
no programa */
>> todo arquivo em C++ tem a extensão .cpp
>> Palavras reservadas são todas em negrito (ver as palavras reservadas de C++)
>> Todo delimitador são em vermelho [chaves, parênteses...]
Página 6
AL notas de aula.txt
>> hashtag em verde é diretiva de pré-processamento
>> comandos presentes em bibliotecas externas -> inserir diretiva para importar 
a biblioteca > p.e. iostream [in out stream] = fluxo de entrada e saída
1 #include<iostream>
2 using namespace std;
>> para mostrar informações na tela utiliza-se o comando cout (saída)
>> para inserir dados no programa executável utiliza-se o comando cin (entrada)
P.e. > comando de entrada e saída em C++:
cout << "lendo a idade"; cin >> idade;
>> recurso using namespace std -> espaço de nomes padrão [std - standard] -> é 
uma regra:
> se for usar cin e cout, obrigatoriamente tem que importar o iostream e 
utilizar a diretiva de using namestream std
> Depuração > é um tipo de demarcação > uma atividade que permite ao programador
executar o programa passo a passo > para verificar os valores da variáveis e 
descobrir qual é a execução natural de um programa
>> o programa que possibilita acompanhar a execução do programa e verificar 
erros
> endl -> endline - pula para outra linha
AT: realizar programas - ok
>> Se quando tentarmos compilar um programa surgir uma mensagem de erro, 
sinalizando que cout não foi declarado, qual a primeira providência? observar se
escrevemos corretamente iostream
TC: 83%
ALG - A4 _________________________________________________________________
LV: ver o capítulo 2 do livro didático 
NA: os tipos primitivos > p.e. no campo "gênero" de um formulário os possíveis 
valores que ele pode assumir serão masculino ou feminino >> no banco de dados do
sistema ele ficará armazenado como “m” ou “f” >> 
Ou seja, na definição desse formulário, haverá uma variável chamada gênero, a 
qual poderá guardar apenas dois valores: “m” ou “f”
> Tipos de dados:
 int - armazena uma número inteiro no intervalo: -2147483648 até 2147483647;
 char - armazena um caractere;
 float - armazena um número real com pouca precisão; 
 double - armazena um número real com precisão maior do que o tipo float;
 void - tipo vazio / informa ao compilador que a variável não terá um tipo 
definido;
 bool - armazenará somente um dos valores: false ou true / 0 ou qualquer;
 
> Variações dos tipos de dados, que usam os seguintes modificadores de tipos:
 unsigned char: caractere sem sinal;
Página 7
AL notas de aula.txt
 long int: número inteiro, com domínio estendido - armazena um inteiro bem 
grande;
 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
** ver tabela de tipos de dados
> 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_separadas_por_vírgulas;
* é 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 
> 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;
 Não é possível utilizar palavras reservadas da linguagem C++ [ver lista];
 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
> p.e. declarações de variáveis:
 int a;
 char a, b, c;
 unsigned int x1, x2, media;
 char _a;
**São cinco tipos nativos em C++: int, float, double, char e bool
> lista de palavras reservadas: auto / double / int / struct / break / else / 
long / switch / case / enum / register / typedef / char / extern / return / 
union / const / float / short / unsigned / continue / for / signed / void / 
default / goto / sizeof / volatile / do / if / static / while
> para saída de dados [exibir mensagem na tela - cout] é necessário inserir duas
linhas no início do programa:
1 #include <iostream>
2 using namespace std;
>> a primeira inclui na compilação do programa a biblioteca iostream -> esta bb 
contém várias funções prontas como o cout e cin
>> a segunda linha é necessária pois define um espaço de nomes chamado std -> a 
Página 8
AL notas de aula.txt
ausência dessa linha demanda a indentificação do espaço em toda a programação: 
3 std::cout<<"exemplo de saida"<<std<<endl;
> Operadores aritméticos em C++:
+ | soma (inteira e ponto flutuante)
- | subtração ou troca de sinal (inteira e ponto flutuante)
* | multiplicação (inteira e ponto flutuante)
/ | divisão (inteira e ponto flutuante)
% | resto de divisão (inteiros)
>> exemplo do uso do resto da divisão: 10|2_
 0 5 resto é 0 -> a representação 10 %
2 = 0
 9|2_
 1 4 resto é 1 -> a representação 9 % 
2 = 1
>> também é possível realizar operações um pouco mais complexas -> cálculo de 
senos, cossenos, raiz quadrada
>> bibliotecas para as funções matemáticas > p.e. a "cmath"
** Como eu vou saber qual biblioteca preciso? -> estude a API da linguagem 
[Application Programming Interface ou Interface de Programação de Aplicativos]! 
>> ver site <http://www.cplusplus.com/reference/>
> Operadores lógicos -> 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 >> faz parte de uma 
lógica chamada proposicional e foi muito estudada por um matemático chamado 
George Boole [álgebra booleana] -> 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
>> Na 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
> álgebra booleana tem 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++: !
** o operador ! nega (inverte) o resultado -> p.e. se A=3 e B=7 confirmar: 
!(A>B) resultado: !(3>7) -> !(falso) -> verdadeiro
tabela verdade -> mostrar os valores possíveis que as variáveis lógicas podem 
assumir -> 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 >> p.e. A e B são proposições:
 A | B | A && B | | A | B | A || B | 
 V | V | V | | V | V | V | 
Página 9
AL notas de aula.txt
 V | F | F | | V | F | V | 
 F | V | F | | F | V | V | 
 F | F | F | | F | F | F | 
** 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
> 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
operador | descrição
 == | igual
 > | maior que
 < | menor que
 != |diferente
 >= | maior ou igual que
 <= | menor ou igual que
> bool é um tipo em C++ e pode assumir os valores booleanos true ou false;
** TIPO DE DADOS LÓGICO >> O tipo de dados primitivo mais simples é o chamado 
booleano ( ou lógico ) >> dado booleano só pode assumir dois valores ( 
VERDADEIRO ou FALSO )
OS OPERADORES LÓGICOS >> As operações lógicas trabalham sobre valores booleanos,
tanto os valores de entrada como o de saída são desse tipo >> Os operadores 
lógicos são: E, OU, NÃO, NÃO-E, NÃO-OU, OU-EXCLUSIVO E NÃO-OU-EXCLUSIVO
-> Operador “E” ou “AND” resulta em um valor VERDADEIRO se os dois valores de 
entrada da operação forem VERDADEIROS, caso contrário o resultado é FALSO
-> Operador “OU” ou “OR” resulta em um valor VERDADEIRO se ao menos UM dos dois 
valores de entrada da operação for VERDADEIRO, caso contrário o resultado é 
FALSO
-> Operador “NÃO” ou “NOT” é o único operador que recebe como entrada apenas um 
valor, e sua função é simplesmente inverter os valores. Ou seja, se o valor de 
entrada for VERDADEIRO, o resultado será FALSO e se o valor de entrada for 
FALSO, o resultado será VERDADEIRO
-> Operador “NÃO-E” ou “NAND” é o contrário do operador E (AND), ou seja, 
resulta em VERDADEIRO, se ao menos um dos dois valores for FALSO, na verdade 
este é o operador E (AND) seguido do operador NÃO (NOT)
-> Operador “NÃO-OU” ou “NOR” é o contrário do operador OU (OR), ou seja, 
resulta em VERDADEIRO, se os dois valores forem FALSO, na verdade este é o 
operador OU (OR) seguido do operador NÃO (NOT)
Página 10
AL notas de aula.txt
-> Operador “OU-EXCLUSIVO” ou “XOR” é uma variação interessante do operador OU 
(OR), ele resulta em VERDADEIRO se apenas um dos valores de entrada for 
VERDADEIRO, ou seja, apenas se os valores de entrada forem DIFERENTES
-> Operador “NÃO-OU-EXCLUSIVO” ou “XNOR” é o contrário do operador OU-EXCLUSIVO 
(XOR), ou seja, resulta VERDADEIRO se os valores de entrada forem IGUAIS
->> utilizamos esses operadores praticamente o tempo todo, principalmente para 
controle de fluxo de execução e tomadas de decisão
VA: tipos primitivos >> 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, mais preciso que o float) / void (tipo
vazio - informa ao compilador que a variável não terá um tipo definido)
>> tipo modificados: unsigned char / unsigned int / long int / unsigned long int
/ short int / unsigned short int
** em C++ é obrigatório que toda variável seja declarada antes de ser utilizada
> a sintaxe da declaração de variáveis é: tipo da variável [char, int, outra] e 
a lista de variáveis [char -> a, b, c / int -> idade, meses, x1, media]
>> p.e string nome -> variável chamada 'nome' do tipo 'string'
** quanto mais souber de biblioteca, mais produtiva a programação
** existem bibliotecas para tudo em C++ (tudo mesmo!)
AT: realizar o programa do nome >> usar a biblioteca string ou cstdlib >> ok
**para pular linha no programa utiliza:
 cout<<"\n";
1. Considere a = 1 b = 2. Usando os operadores que vimos nesta aula, 
observe:
a) a > b a é maior que b? ( ) Sim / (x) Não
b) b >= a b é maior ou igual a a? (x) Sim / ( ) Não
c) a == b o valor de a é igual ao valor de b? ( ) Sim / (x) Não
2. Nas situações abaixo, assinale V ou F para avaliar as sentenças.
Seja: A=3 B=7 Total=200.0 Média=8.1 Ano=2000
a) ( ) A > B
b) ( ) Total == 100.0
c) ( ) Média >= 7
d) ( ) Ano != 2001
e) ( ) !(A>B)
f) ( ) (A<B) && ((Total+1) >= 200.0)
g) ( ) (Ano+15) == 2015
h) ( ) !((A+B) > (B-A))
i) ( ) (A>B) || (Média>=6)
j) ( ) ((A+B)!=10) || (Ano+15>2015)
Gabarito 1. a) N b) S c) N
 2. a) F b) F c) V d) V e) V f) V g) V h) F i) V j) F
Página 11
AL notas de aula.txt
SLIDES aula_intr_1 parei no 50
TC: 100%
ALG - A5 _________________________________________________________________
NA: Elementos de programação estudados: 
 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
> Em programas de computador, as decisões são comuns: quando você abre um 
arquivo, SE ele for protegido, ENTÃO vai aparecer uma janela avisando
>> a condição lógica é importante! Estas condições têm que ser muito bem 
montadas para poder executar o programa corretamente
>> Desvio de condicional simples e composto, p.e:
8 numero1 = */ **entrada*** ***enter** /*
9 numero2 = */ **entrada*** ***enter** /*
10
11 if ( numero1 > numero2 ) { */ condicional simples /*
12 cout<<"condição verdadeira"; */ condicional simples /*
13 } */ condicional simples /*
14 else { */ condicional composto /*
15 cout<<"condição falsa"; */ condicional composto /*
16 } */ condicional composto /*
17 cout>> "fim do programa"
>> cálculo do IMC (índice de massa corporal), p.e.:
a fórmula é -> IMC = __Peso_(em_kg)__
 altura (em m)²
traduzindo para linguagem de C++ -> IMC = peso/(altura*altura) OU 
IMC=peso/(pow(altura,2))
* pow (base, expoente) é uma função da biblioteca cmtah que podemos usar para 
fazer cálculos com potenciação
> A sintaxe de um IF em C++:
 if (teste/condição) {
 bloco de comando quando o teste/condição for true
 } 
** os parênteses são obrigatórios para a condição de teste
 a estrutura sempre começa com a palavra chave IF
 após a condição, deve-se abrir um bloco de comando que começa com { e termina
com }
 O uso das chaves é obrigatório quando for usada mais de uma instrução dentro 
Página 12
AL notas de aula.txt
da estrutura de decisão - if - usar sempre não ocasionará problemas
> Nesse teste é possível utilizar 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
> Desvio condicional composto >> Em C++, a sintaxe é a seguinte:
 if (teste/condição) {
 bloco de comando quando o teste/condição for true
 } 
 else {
 bloco de comando quando o teste/condição for false
 } 
* Temos então uma nova palavra ao nosso vocabulário de C++: else. Esta palavra é
equivalente ao “senão”
VA: estrutura de desvio condicional simples e composto
> IF > operadores relacionais:
 operador | símbolo
 (igual a) | ==
 (diferente de) | !=
 (maior que) | >
 (menor que) | <
 (maior ou igual que) | >=
 (maior ou igual que) | <=
 AND | && ou * [triângulo]
 OR | || ou + [redondo]
 NOT | ! [bolinha na ponta]
 (resto da divisão) | %
> IF [se] ou ELSE [se não] >>
 if (teste/condição){
 bloco de comandos quando teste for true
 }
 else{
 bloco de comandos quando teste for false
 }
AT: Em um programa para se determinar se o número é par ou ímpar, vamos precisar
dos seguintes recursos:
I - Do operador mod (%) / II - De um desvio condicional composto / III - Da 
biblioteca cmath
RESP -> I e II:
int main (void){
 int num;
Página 13
AL notas de aula.txt
 cout<<"\nDigite um numero:";
 cin>>num;
 if (num %2 ==0){
 cout<<"PAR";
 }
 else {
 cout<<"IMPAR";
 }
 return 0;
}
Quais recursos seriam usados para um programa que verifica se uma letra 
informada é uma vogal ou uma consoante?
I - Um if simples / II - Um if composto / III - Operador de igualdade (==) / IV 
- Operador && / V - Operador ||
RESP -> II, III e V - é um if composto (if or else) / operador de igualdade nas
vogais / operador OR
#include <iostream>
using namespace std;
int main (int argc, char** argv){
 char letra;
 cout<<"Digite uma letra:";
 cin>>letra;
 if 
((letra=='a')||(letra=='e')||(letra=='i')||(letra=='o')||(letra=='u')){
 cout<<"\nVogal";
 }
 else {
 cout<<"\nConsoante";
 }
 return 0;
}
Analise o trecho do programa em C++ e indique a alternativa correta:
Sendo A=62 e B=32, o que o programa vai imprimir?
int main (void){
 int A, B;
 cin>>B;
 cin>>A;
 if (A > B){
 B = A + B;
 }
 if (A < B){
 A = (B%2); 
 }
 cout<<A;
 }
Página 14
AL notas de aula.txt
 return 0;
}
RESP: 0 -> O primeiro if sendo executado, a variável B receberá a soma de A e B,
ou seja, 94, tornando B uma variável maior que A. Como não existe o else, o 
segundo if será executado, e como a condição dele é verdadeira, será executada o
segundo bloco de comando, modificando o valor da variável A para o resto da 
divisão de B por 2. Sendo B a valor obtido da soma no bloco de comando anterior,
94, o resta de sua divisão por 2 é 0. Portanto, o programa imprime 0, e não 62 
que seria o valor inicial de A.
Escolha a condição que fará o número 13 ser impresso:
int main (void){
 int num1, num2;
 num1 = 13;
 num2 = 22;
 if (_______){
 cout<<num2;
 else
 cout<<num1;
 }
 return 0;
}
Para o 13 ser impresso a condição tem que ser falsa. Nas alternativas, temos na 
E -> (num1<num2)&&(num2<20) 
A primeira é verdadeira (13<22) e a segunda falsa (22<20). Como temos o operador
&& (and) na expressão, ela só será verdadeira se as duas partes forem 
verdadeiras. Como a expressão é falsa, o else será excutado imprimindo o num1.
Analise as afirmativas abaixo e escolha a opção certa.
I Se tivermos que fazer um teste e só executar um bloco, que pode ter uma 
instrução ou mais instruções, o if simples deverá ser escolhido. 
II Se tivermos duas possibilidades de respostas, não poderemos usar dois if(s) 
simples, onde o teste de um é o complementa o do outro, porque poderão sair duas
respostas. 
III Se tivermos três possibilidades de respostas, podemos usar um if simples e 
um if composto que não teremos problemas com as respostas. 
IV Quando temos 10 possibilidades de respostas, poderemos usar 10 if(s) simples,
embora usar ifs encadeados seria mais eficiente.
RESPOSTA - I e IV são verdadeiras
TC: 63%
ALG - A6 _________________________________________________________________
NA: Estruturas de decisão em C++ >> if / if-else / switch / operador ternário
> “if-then-else” >> teste condicional de uma maneira completa: “se o teste for 
verdadeiro, então faça isso, senão faça aquilo”
>> p.e.:
Página 15
AL notas de aula.txt
 #include <iostream>
 ***#include BBPORTUGUES
 using namespace std;
 int main(void){
 int n;
 cout<<"Digite um número. Vou te dizer se ele é par ou ímpar"<<endl;
 cin>>n;
 if(n%2==0){
 cout<<"Número PAR."<<endl;
 }
 else{
 cout<<"Número ÍMPAR."<<endl;
 }
 system ("pause");
 return 0;
 }
> Operador ternário > Simplificando as linhas de comando IF ELSE, p.e.:
#include <iostream>
#include <locale.h>
 
 using namespace std;
 int main(void){
 int n;
 cout<<"Digite um número. Vou te dizer se ele é par ou ímpar"<<endl;
 cin>>n;
 (n%2==0)?cout<<"Numero PAR."<<endl:cout<<"Numero IMPAR."<<endl;
 system("pause");
 return 0;
 }
** 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: 
 (condição)? verdadeiro : falso
 | | |
 aqui vai a condição | |
 quando a condição é verdadeira |
 expressão quando a condição é falsa, depois do :
> São três operandos: 
• A condição, que é o teste ló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 
Página 16
AL notas de aula.txt
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 / Tudo o que vier após o “:” e antes do final da 
linha “;” será executado / Também só é permitido um comando
>> Esse operador também é útil quando vamos atribuir um valor a uma variável 
como resultado de um if:
 if (x == 10) // Se x for igual a 10
 y = 20; // então faço y receber valor 20
 else 
 y = 30; // senão faço y receber valor 30
Usando o operador condicional ternário, poderíamos escrever: 
y = (x == 10) ? 20 : 30; // y recebe, se x for igual a 10 então 20, senão 30
> aninhamento ou encadeamento de ifs >> colocar um if dentro do outro >> é usado
em várias linguagens de programação e também com outros comandos -> ver arquivo 
a06_t04.pdf
> p.e. >> 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!”.
> Switch >> solução para o programa dos meses -> ver arquivo a06_t05.pdf
> exemplo de sintaxe do switch:
switch (variável){
 case constante1:
 Instruções;
 break;
 case constante2:
 Instruções;
 break;
 default:
 Instruções;
}
>> usado para substituir vários ifs e deixar o código mais legível
Página 17
AL notas de aula.txt
>> 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
** É muito importante usar o comando break após cada bloco de execução do case 
-> O comando break interrompe o switch e o programa volta ao fluxo de execução 
após o fechamento do comando switch
> retomando o programa dos meses -> se o usuário digitar um mês negativo ou 
outro valor [29, p.e.] que não esteja dentro das cláusulas case [valores de 1 a 
12], o programa executa corretamente a cláusula default, mas imprime na tela a 
mensagem da linha 51 ["O mês 29 tem 0 dias."] 
> Seria melhor que essa linha não fosse impressa quando o valor for inválido. E 
agora?
> 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)
>> No exemplo dos meses, precisamos criar uma condição que não deixe que o 
programa aceite valores abaixo de 1 E acima de 12 
>> Se fosse nas aulas de Matemática, seria fácil: poderíamos criar uma expressão
assim: 
1<=mês<=12
>> Em C++, precisamos transformar essa condição de acordo com a sintaxe da 
linguagem: (mes>=1) && (mes<=12)
> Solução >> o programa verifica a entrada do usuário e, dependendo do númeroque ele inserir, que corresponde a um mês específico, será retornada a 
quantidade de dias do mês escolhido
>> Como não existe mês maior que 12 nem negativo, precisamos barrar estes 
valores e não permitir que o programa seja executado
>> Existem várias formas de se fazer isso, mas vamos usar uma com o if e com o 
switch, por meio de operadores lógicos -> ver arquivo a06_t07.pdf
 10 if ((mes>=1)&&(mes<=12)){ 
>> Como vemos, na linha 10 é feito um teste: se o valor da variável mês estiver 
entre 1 e 12, o switch é executado; caso contrário, o programa não imprimirá 
nada na tela
** Você pode perceber que, mesmo assim, deixamos o default na linha 48 / Embora 
tenhamos a certeza de que o programa não alcançará esta linha quando o valor 
estiver fora do intervalo, é bom deixá-la, em favor das boas práticas de 
programação
> Outra solução >> colocar uma instrução na clásula default para informar o 
usuário que o valor é inválido -> ver arquivo a06_t08a.pdf
 
 53 if(!invalido){
 54 cout<<"O mês "<<mes<<" tem "<<dias<<" dias.";
Página 18
AL notas de aula.txt
> numero++ -> significa que o número deve ser incrementado, ou seja, somar 1:
>> p.e. numero = 7; 
 cout<<numero++<<endl;
 saída será "8" 
> numero-- -> significa que o número deve ser decrementado, ou seja, subtrair 
1:
>> p.e. numero = 7; 
 cout<<numero--<<endl;
 saída será "6"
VA: > Alternativas em relação ao desvios condicionais >> operador ternário (pode
dificultar a leitura da programação, em if-else é mais fácil)
>> pode aparecer em C, C++, Java...
> aninhando ifs, p.e: um programa com duas variáveis: o gênero e a idade
IF >> se é homem ou mulher maior ou igual a 18 --> "pode dirigir" 
 IF >> se é homem maior ou igual a 18 --> "tem de fazer serviço militar"
ELSE >> se for homem ou mulher menor que 18
 IF >> se é homem ou mulher maior ou igual a 16 --> "pode votar"
 ELSE >> se é homem ou mulher menor que 16 --> "não pode votar e" "nem 
dirigir"
> exemplo switch:
#include <cstdlib>
#include <iostream>
using namespace std;
int main (int argc, char *argv[]){
 int valor = 4
 switch (valor){
 case 0;
 cout<<"Valor e igual a 0"<<endl;
 break;
 case 1;
 cout<<"Valor e igual a 1"<<endl;
 break;
 case 2;
 cout<<"Valor e igual a 2"<<endl;
 break;
 default:
 cout<<"Nenhuma das anteriores"<<endl;
 }
 system("pause")
 return EXIT_SUCCESS;
}
> Dominar os operadores lógicos: || OR && AND ! NOT
> Operadores de incremento ++ e decremento -- >> Pós e pré:
>> ++ >> significa incrementar o valor da variável com 1 e tem o mesmo 
significado de x=x+1 e de x += 1
Página 19
AL notas de aula.txt
> Pós var++ >> Significa que o valor é copiado antes de ser incrementado de 1 
(no final da equação)
> Pré ++var >> Significa incrementar primeiro valor da variável de 1 (antes de 
tudo)
>> -- >> significa decrementar o valor da variável de 1 e tem o mesmo 
significado de x=x-1 e de x -= 1
> Pós var-- >> Significa que o valor é copiado antes de ser decrementado de 1 
(no final da equação)
> Pré --var >> Significa decrementar primeiro valor da variável de 1 (antes de 
tudo)
>> p.e.:
#include <iostream>
#include <cstdlib>
 using namespace std;
 int main()
 {
 int a,b,c,d;
 a = 3; cout << "\nValor de a: " << a << endl; //EXIBE 3
 b =a++; //Copia primeiro e depois a
é incrementado **ordem importa
 cout << "\nValor de b: " << b << endl; //EXIBE 3
 cout << "\nValor de a: " << a << endl; //EXIBE 4
 c=8;cout << "\nValor de c: " << c << endl; //EXIBE 8
 d =--c; //Decrementa primeiro e 
depois uma cópia é armazenada
 cout << "\nValor de d: " << d << endl; //EXIBE 7 
 cout << "\nValor de c: " << c << endl; //EXIBE 7
 system("pause");
 return EXIT_SUCCESS;
 }
/*SAÍDA
Valor de a: 3
Valor de b: 3
Valor de a: 4
Valor de c: 8
Valor de d: 7
Valor de c: 7
Pressione qualquer tecla para continuar. . .*/
>> mais exemplo:
#include <iostream>
#include <cstdlib>
Página 20
AL notas de aula.txt
 using namespace std;
 int main()
 { int x, i;
 x = 3;
 cout << x<<" "; //EXIBE 3
 i = 6;
 x = x++ + i; //O valor de x [3] é somado ao de i [6] = 9, e depois 
incrementado de 1 [9+1] = 10
 cout << x<<" "; //EXIBE 10
 if ( x <= 7) //Não é menor que o 7. Logo, vai para o ELSE
 {
 cout << x<<" ";
 x = x + 10;
 }
 else
 cout<< ++x; //Primeiro, x é incrementado de 1 [10+1]. Logo, EXIBE 
11
 system("pause");
 return EXIT_SUCCESS;
 }
/* SAÍDA 3 10 11 Pressione qualquer tecla para continuar. . .*/
AT: > O que o seguinte programa imprime na tela? Suponha que:
 int main (void){
 int numero = 7;
 numero >=0 ? numero++ : numero--;
 cout<<"O novo valor e:"<<numero<<endl;
 return 0;
 }
RESPOSTA: 8
> Quando estudamos sobre a estrutura do se ... entao...senao, sempre nos é dito 
que, quando tivermos duas possibilidades de respostas, devemos escolher a 
estrutura do se composto ao invés de usar duas estruturas do se simples.
Observe as afirmativas abaixo e, depois, escolha a resposta que respalda o uso 
do se composto pelo que foi dito acima ao invés do se simples.
I Maior clareza no código, mas não influência na eficiência do mesmo
II Maior eficiência porque diminui o número de testes no código (RESPOSTA 
CORRETA)
III Maior eficiência somente porque o código fica mais legível, visto que o 
resultado final é o mesmo
IV Somente uma escolha do desenvolvedor, visto que o resultado o resultado final
é o mesmo
> Verifique o trecho de código abaixo e marque a alternativa que apresenta a 
melhor construção para as condições abaixo, utilizando uma estrutura de decisão 
composta.
if(a > 0) cout < < "pertinente";
if(a < 5) cout < < "pertinente";
if(a > =5) cout < < "não pertinente";
Página 21
AL notas de aula.txt
 Err. if(a > 0 || a < 5) cout < < "pertinente";
 else cout < < " não pertinente";
 Cor. if(a > 0 && a < 5) cout < < "pertinente";
 else cout < < " não pertinente";
> Considere o trecho de programa em C++. O que é impresso na tela? 
int x = 10, y = 3, z, k; 
y = x + y - 1; 
z = x/y; 
k = y % x; 
if ( k != 0) 
cout << "x = " << x << " y = " << y << " z = " << z << " k = " << k << "\n"; 
RESPOSTA x = 10 y = 12 z = 0 k = 2
TC: 75%
ALG - A7 _________________________________________________________________
NA: > estruturas de repetição > na programação, cada repetição é chamada de laço
ou loop 
> 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 -> esta variável tem que ser inteira
> ver arquivo a07_t03.pdf
>> a sintaxe do for em C++:
 for(inicialização ; condição ; incremento) <comandos>
> O comando for em C++ é composto por três partes, e cada uma delas é separada 
por ponto e vírgula:
>> 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.
> p.e > um programa que conta de 1 a 10: 
#include <iostream>
using namespace std;
 int main (void){
 for (int i=1; 1<=10; i++)
 cout<<i<<", ";
 return 0;
}
Página 22
AL notas de aula.txt
>> mais exemplosde aplicação do for:
1) Alterar a variável de controle de 1 a 100 incrementando de 1
 >> for (int i=1; i<=100; i++)
2) Alterar a variável de controle de 100 a 1 em decrementos de 1 >> 
for (int i=100; i>=1; i--)
3) Alterar a variável de controle de 8 a 88 em incrementos de 8
 >> for (int i=8; i<=88; i+=8)
4) Alterar a variável de controle de 20 a 2 em decrementos de 2
 >> for (int i=20; i>=2; i-=2)
5) Alterar a variável de controle sobre uma sequência de valores - p.e: 
2,5,8,11,14,17,20 >> 
for (int i=2; i<=20; i+=3)
6) Alterar a variável de controle sobre uma sequência de valores - p.e: 
99,88,77,66,55,44,33,22,11,0
 >> for (int i=99; i>=0; i -=11)
> p.e > um programa que soma valores: 
#include <iostream>
using namespace std;
 int main (void){
 int total = 0; /* <- simplificação de duas linhas: int total; 
total = 0; [valor incial da variável]*/
 for (int n=2; n<=20; n+=2){ /*variável=int começa com 2; termina com 20; 
incremento de 2*/
 total +=n; /*soma o resultado com a variável -> total = 
total + n*/
 }
 cout<<"Soma = "<<total; 
 return 0;
}
SOLUÇÃO: ??? ***DUVIDA
> ver arquivo a07_t04.pdf
VA: > tipo de estrutura de controle > repetição ou looping
> estrutura >> for > significa para 
> operadores >> incremento ou decremento > operadores do tipo unário
> sintaxe for >> for (declaração de variável que vai contar as vezes de 
repetição condição inicial; condição de parada ou final; operador){ mais de um 
comando a chave é obrigatória }
> p.e. >> for (int i=1; i<=10; i++)
 int -> variável inteira
Página 23
AL notas de aula.txt
 i=1 -> condição inicial
 i<=10 -> condição final
 i++ -> incremento de 1
>> pré incremento: incrementa o valor de n por 1 (soma 1) e depois usa o novo 
valor de n na expressão em que reside n
>> pós incremento: usa o valor atual de n na expressão em que reside n e depois 
incrementa por 1 no resultado
> p.e.
#include <iostream>
using namespace std;
 int main (void){
 int i;
 i=5;
 cout<<i<<endl; /*primeira saída é o valor puro do i -> 5*/
 cout<<i++<<endl; /*pós incremento, por isso o valor primeiro é 
apresentado igual -> 5*/
 cout<<i<<endl; /*nessa saída o valor é o resultado do pós 
incremento -> 6*/
 cout<<"----------"<<endl; /*saída mostra os traços para dividir a tela*/
 i=5;
 cout<<i<<endl; /*primeira saída é o valor puro do i -> 5*/
 cout<<++i<<endl; /*pré incremento, por isso o valor primeiro já é 
apresentado com a soma -> 6*/
 cout<<i<<endl; /*nessa saída o valor é o i mais recente, mantendo
o resultado do incremento -> 6*/ 
 return 0;
}
>> para incrementar em 2 -> i+=2 [traduzindo, i = i + 2]
 " " " 3 -> i+=3 [que seria, i = i + 3] e assim por diante
>> ou seja, para incrementar em n -> variável+=n
>> p.e: supondo x=4, y=6, z=5, w=7, t=13
 x+=7 -> x = x + 7 -> x=11
 y-=4 -> y = y - 4 -> y=2
 z*=5 -> z = z * 5 -> z=25
 w/=7 -> w = w / 7 -> w=1
 t%=4 -> t = t % 4 -> t=1
AT: > int conta, num = 1, prod = 1; 
 for (conta = 4; conta > 0; conta--) { 
 prod = prod *num; 
 num++; 
 } 
 cout << "Prod = " << prod << " num = " << num << endl; 
Página 24
AL notas de aula.txt
RESPOSTA
num = 1, prod = 1;
Declara as variáveis e inicializa prod e num com 1 
for (conta = 4; conta > 0; conta--) {
Primeira VEZ, conta =4
Segunda VEZ, conta =3 
Terceira VEZ, conta =2
Quarta VEZ, conta =1 
e Depois para em 0
prod = prod *num;
Primeira VEZ, prod = 1 * 1 logo, prod = 1 
Segunda VEZ, prod= 1 * 2 logo, prod = 2 
Terceira VEZ, prod= 2 * 3 logo, prod = 6 
Quarta VEZ, prod= 6 * 4 logo, prod = 24 
num++;
Primeira VEZ, num=2 
Segunda VEZ, num=3
Terceira VEZ, num=4 
Quarta VEZ, num=5 
 
cout << "Prod = " << prod << " num = " << num << endl; 
EXIBE Prod = 24 num = 5
> Marque a opção correta. Considere o trecho de programa feito em C++. O valor 
final de s e o valor final de num, são respectivamente: 
 int conta, num=1, s=0; 
 for(conta = 10; conta < = 40; 
 conta= conta+10){ 
 s= s+num; num= num +2; 
 }
RESPOSTA: Analisando o código, percebemos que temos uma estrutura de repetição 
onde a variável conta foi inicializada com 10, 
irá repetir até 40 e está sendo incrementada de 10 em 10
Temos duas linhas de comandos que estão sendo executadas dentro da estrutura de 
repetição
Uma linha de comando é uma variável acumuladora, ou seja, está somando os 
valores que estão armazenados em num 
e a outra linha de comando está incrementando a variável num de dois em dois 
então, 
vejamos o teste de mesa: 
Inicialmente temos os seguintes valores: S = 0 Num = 1 
 A variável conta = 10 S = 1 num = 3
 A variável conta = 20 S = 4 num = 5 
 A variável conta = 30 S = 9 num = 7 
 A variável conta = 40 s = 16 num = 9 
Quando a repetição for encerrada, teremos armazenados os valores na variável s =
16 e na variável num = 9
Página 25
AL notas de aula.txt
> int x; 
for (x = 5; x > 0; x--) 
if (x % 3 == 0) 
cout << x - 1 << " "; 
else 
cout << x + 1 << " "; 
RESPOSTA: O for é uma estrutura de repetição controlada por uma variável 
contadora
Sua estrutura é: para ( ; ; ) { < bloco de comandos > } 
O programa que gerou a dúvida temos: for (x = 5; x > 0; x--) 
Ou seja, a variável x foi inicializada com o valor 5, 
a repetição será enquanto o valor de x for maior que zero e será decrementado de
1 em 1
Quando x = 5, faremos: 
if (x % 3 == 0) , 5 % 3 ( o resto da divisão será 2) 2 == 0, o resultado lógico 
é falso então,
executaremos a linha de comando do else: 
cout << x + 1 << " "; 
Será impresso na tela 6 ( 5 + 1), e também será impresso um espaço
Quando x = 4, faremos: if (x % 3 == 0) , 4 % 3 ( o resto da divisão será 1) 1 ==
0, 
o resultado lógico é falso então, executaremos a linha de comando do else: 
cout << x + 1 << " "; 
Será impresso na tela 5 ( 4 + 1), e também será impresso um espaço
Quando x = 3, faremos: if (x % 3 == 0) , 3 % 3 ( o resto da divisão será 0) 0 ==
0, 
o resultado lógico é verdadeiro então, executaremos a linha de comando: 
cout << x - 1 << " "; 
Será impresso na tela 2 (3 - 1), e também será impresso um espaço
Quando x = 2, faremos: if (x % 3 == 0) , 2 % 3 ( o resto da divisão será 2) 2 ==
0, 
o resultado lógico é falso então, executaremos a linha de comando: 
cout << x + 1 << " "; 
Será impresso na tela 3 (2 + 1), e também será impresso um espaço
Quando x = 1, faremos: if (x % 3 == 0) , 1 % 3 ( o resto da divisão será 1) 1 ==
0, 
o resultado lógico é falso então, executaremos a linha de comando: 
cout << x + 1 << " "; 
Será impresso na tela 2 (1 + 1), e também será impresso um espaço
Quando x = 0, para a repetição, pois zero não é maior que zero 
Logo foi impresso na tela os valores: 6 5 2 3 2
** Considere a estrutura for ( ; ; ), e assinale a afirmação correta: 
É um laço infinito. >> Então simplesmente o formato for ( ; ; ) pode ser 
considerado um loop infinito 
RESPOSTA: A estrutura do for tem a seguinte sintaxe: 
 para ( ; ; ) { < bloco de comandos > } 
Quando colocamos os parâmetros no for, p.e. for( x = 1 ; x <= 10; x++) 
-> estamos dizendo que a variável contadora x começa com o valor 1 e irá repetir
enquanto x for menor ou igual a 10
Página 26
AL notas de aula.txt
Sendo incrementada de um em um
>> Mas quando não colocamos parâmetros: for ( ; ; )
-> teremos um laço infinito, pois não tem a variável contadora sendo 
inicializada, 
não tem a condição e não tem o incremento ou decremento então, 
teremos uma repetição infinita
> Leia atentamente o trecho de código abaixo e diga o que ele retornaria ao 
usuário: 
 int main ( ) { 
 int i; 
 double x, y = 0; 
 for (i = 0; i< 10; i++){ 
 cout << "Digite um numero: "; 
 cin >> x; 
 if ((x % 2) == 1){ 
 y = y + x; } 
 cout << "Numero: " << y << "\n"; 
 system("PAUSE"); 
 return 0;
 }
 O maior de todos os elementos digitados 
 A soma de todos os elementos 
 A soma dos elementos ímpares 
 A média dos elementos digitados 
 A quantidade de elementos digitados
> Leia atentamente o trecho de código abaixo e diga o que ele retornaria ao 
usuário:
 int main ( ) {
 int i = 0;
 double x, y = 0;
 cout << "Digite um numero: ";
 cin >> x;
 while (x != 0){
 i = i + 1;
 y = y + x;
 cout << "Digite um numero: ";
 cin >> x;
 }
 y = y / i;
 cout << "Numero: " << y << "\n";
 system("PAUSE");
 return 0;
 }
 Cor. A média dos elementos digitados
> Leia atentamente o trecho de código abaixo e diga o que ele retornaria ao 
usuário:
Página 27
AL notas de aula.txt
 int main ( ) {
 int i = 0;
 double x, y = 0;
 cout << "Digite um numero: ";
 cin >> x;
 while (x != 0){
 i = i + 1;
 y = y + x;
 cout << "Digite um numero: ";
 cin >> x;
 }
 y = y / i;
 cout << "Numero: " << x << "\n";
 system("PAUSE");
 return 0;
 }
 Cer. O último digitado, ou seja, zero
> Leia atentamente o trecho de código abaixo e diga o que ele retornaria ao 
usuário:
 int main ( ) {
 int i = 0;
 double x, y = 0;
 cout << "Digite um numero: ";
 cin >> x;
 while (x != 0){
 i = i + 1;
 y = y + x;
 cout << "Digite um numero: ";
 cin >> x;
 }
 y = y / i;
 cout << "Numero: " << i << "\n";
 system("PAUSE");
 return 0;
 }
 Cer. A quantidade de elementos digitados
RESPOSTA: A variável i é um contador que é incrementado de 1 
e como está dentro do bloco que será repetido pela estrutura while() enquanto x 
for diferente de 0, 
ele será incrementado toda vez que um número diferente de 0 for digitado
Logo, i contem, ao final a quantidade de números digitados.
TC: 63%
ALG - A8 _________________________________________________________________
NA: > estruturas de repetição 
> o for tem uma peculiaridade: ele é usado quando sabemos o número de vezes que 
uma repetição será executada
> Repetição com Limite do Contador Determinado pelo Usuário >> o usuário que 
Página 28
AL notas de aula.txt
determina a condição final >> com o comando o while (enquanto) 
>> sintaxe:
 while (<condição>) {
 <bloco de comandos>
 }
> no exemplo a seguir, o fluxo chega a uma condição (decisão) no qual será 
avaliada:
 _ _
 | | <__________________________________________________ 
 
 ->>| decisão | __> [verdadeira] _______> [instrução executada] ___|
 |_ _| __> [falsa] _________________________________________> 
[segue o programa]
>> Se for verdadeira, o fluxo passa para as instruções a serem executadas e 
volta à condição 
 [looping -> Enquanto a condição for verdadeira, o fluxo ficará “preso” a esse
laço] 
>> Quando a condição for falsa, então ele se liberta e continua o programa
>> Portanto, evite criar condições que deixem o programa preso para sempre no 
looping [looping infinito]
>> p.e. >> folha de pagamento -> 
O algoritmo consiste em ler do usuário um número de funcionários, que será o 
contador -> Para cada funcionário, será pedido o salário mensal, e este valor 
será somado ao valor da folha:
1 #include <iostream>
2 using namespace std;
3
4 int main (void){
5 int num_funcionarios, i=1; */i=1 -> significa 
inicializar o contador em 1/*
6 float salario, valor_folha=0; */valor_folha=0 -> valor 
inicial da folha em 0/*
7
8 cout<<"Digite o número de funcionários da empresa"<<endl;
9 cin>>num_funcionarios;
10
11 while (i<=num_funcionarios){ */i<=num_funcionarios -> 
condição para repetir/*
12 cout<<"Funcionario "<<i<<". Qual o salário deste 
funcionário?"<<endl;
13 cin>>salario; 
14 valor_folha+=salario; */ valor_folha = 
valor_folha + salario/*
15 i++; */nunca esquecer de 
incrementar o valor do contador... /* 
16 } 
Página 29
AL notas de aula.txt
*/...evita o looping infinito/*
17 cout<<"Valor da folha de pagamento: R$"<<valor_folha;
18 return 0;
19 }
** Veja que, na linha 11 até a 16, temos o while sendo controlado 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 + salario
 Observe também o operador de incremento na linha 15
 Ver -> oc8_programa folha salario.png
> outro tipo de repetição >> quando a repetição não é controlada pelo 
programador nem pelo usuário, mas o próprio programa
> p.e. >> O MDC [máximo divisor comum] -> MDC entre 12 e 18, é representado por:
MDC (12,18) = 6
>> exemplo de uso: 
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 funcionário deve cortar 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
>> pelo comando do-while -> O seu objetivo é avaliar uma condição após um bloco 
de programação >> Se a condição for verdadeira, o loop repete; se for falsa, o 
loop para e prossegue com o fluxo do programa
>> A sintaxe do comando é assim:
 do {
 comando;
 comando;
 ...
 } while (condição);
>> Veja que obrigatoriamente pelo menos uma vez o bloco será executado -> Esta é
a maior característica dessa estrutura * ver -> a08_t04.pdf
> programa MDC:
1 #include <iostream>
2 using namespace std;
Página 30
AL notas de aula.txt
3
4 int main (void){
 5 int num1, num2, resto;
 6 cout<<"Digite dois números, em ordem crescente"<<endl;
 7 cin>>num1;
 8 cin>>num2;
9
 10 do {
11 resto = num2%num1;
 12 cout<<"Numero 2 = "<<num2<<" - Numero 1 = "<<num2<<" - Resto = 
"<<resto<<endl;
13 num2 = num1;
 14 num1 = resto;
 15 } while(num1>0);
 16 cout<<"MDC = "<<num2;
 17 return 0;
18 }
> 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 **ver -> a08_t05.pdf
* 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 Respostado Usuário >> No exemplo foi criado um menu
de um programa que ficará em execução até que a tecla ‘0’ seja pressionada *ver 
-> a08_t06.pdf
>> o programa “gira” em torno de uma estrutura do-while até a condição de 
controle pela resposta (opcao!=0) -> o usuário deve digitar '0'
>> O menu é implementado por uma estrutura switch e, dependendo da opção 
escolhida pelo usuário, o case correspondente será executado
>> Em todos os cases, exceto o 3 [“Repetir o menu”], existe um comando que até 
agora não foi usado, o system(“cls”) -> Como você percebeu, a finalidade dele é 
apagar a tela para que novas informações sejam impressas / Ele dá um efeito 
visual simples e bastante bacana para o programa
>> O maior ensinamento desse exemplo é mostrar que a repetição é controlada pela
resposta do usuário e a opção digitada pelo usuário mostra isso e determina a 
quantidade de vezes que o programa será executado
> loopings aninhados >> Em várias situações, é necessário criar um algoritmo de 
repetição dentro do qual há outra repetição >> possíveis sintaxes:
>> Com o comando for
Página 31
AL notas de aula.txt
for (início; condição; incremento){
 for (início; condição; incremento){
 comandos
 }
 comandos
}
>> Com o comando while
while (condição){
 while (condição){
 comandos
 }
 comandos
}
>> Com o comando do-while
do {
 comandos
 do {
 comandos
 } while (condição);
} while (condição);
*ver ex -> a08_t07.pdf
*** fazer o programa -> a08_t08.pdf
VA: > programação estruturada tem três tipos >> estrutura sequencial / 
estrutura de decisão / estrutura de repetição
> em repetição vemos dois comandos na aula: while e do-while
> while = enquanto -> enquanto uma condição for verdadeira, o bloco de comandos 
será executado
>> é utilizado em situações em que se não sabe o número de repetições
> do-while = faça enquanto -> primeiro o bloco de comandos será executado e a 
condição é testada no final > se a condição for satisfeita, ele volta a execução
do bloco (looping) -> o teste é feito no FIM do programa
>> é utilizado em situações em que se não sabe o número de repetições, mas 
obrigatoriamente terá ao menos uma repetição
** o FOR é utilizado quando já conhecemos o número de repetições que serão 
feitas
AT: > O seguinte código deve imprimir os valores de 1 a 10:
 
 n=1;
 while (n<10)
 cout<<n++;
RESP - Não, a condição correta para imprimir de 1 a 10 é n<=10
Página 32
AL notas de aula.txt
 > *ver -> al8_representacao while dowhile for.png
 >* No comando do-while, a expressão lógica associada ao while é avaliada 
após a execução do bloco de comandos; no while-do, a expressão lógica de 
controle é avaliada antes >> a expressão lógica do while é avaliada em primeiro 
lugar e, depois, se for verdadeira, executa o bloco. No do-while, a expressão 
lógica é avaliada após o bloco
> Leia atentamente o trecho de código abaixo e diga o que ele retornaria ao 
usuário:
int main ( ) {
 int i = 0;
 double x, y = 0;
 cout << "Digite um numero: ";
 cin >> x;
 while (x != 0){
 i = i + 1;
 y = y + x;
 cout << "Digite um numero: ";
 cin >> x;
 }
 y = y / i;
 cout << "Numero: " << i << "\n";
 system("PAUSE");
 return 0;
}
RESPOSTA = A quantidade de elementos digitados
> Leia atentamente o trecho de código abaixo e diga o que ele retornaria ao 
usuário:
int main ( ) {
 int i = 0;
 double x, y = 0;
 cout << "Digite um numero: ";
 cin >> x;
 while (x != 0){
 i = i + 1;
 y = y + x;
 cout << "Digite um numero: ";
 cin >> x;
 }
 y = y / i;
 cout << "Numero: " << x << "\n";
 system("PAUSE");
 return 0;
}
RESPOSTA = O último digitado, ou seja, zero
> Considere o trecho abaixo sabendo que num é um variável inteira.
Página 33
AL notas de aula.txt
num = 11;
do {
 if (num % 2 == 0)
 cout << num << "\n";
 num = num -1 ;
} while (num != 0);
RESPOSTA: O trecho fornecido pára quando num for zero e os números exibidos são 
todos os pares de 10 até 2, nesta ordem
> Leia atentamente o trecho de código abaixo e diga o que ele retornaria ao 
usuário:
int main ( ) {
 int i = 0;
 double x, y = 0;
 cout << "Digite um numero: ";
 cin >> x;
 while (x != 0){
 i = i + 1;
 y = y + x;
 cout << "Digite um numero: ";
 cin >> x;
 }
 y = y / i;
 cout << "Numero: " << y << "\n";
 system("PAUSE");
 return 0;
}
RESPOSTA = A média dos elementos digitados
> As estruturas de repetição permitem executar mais de uma vez um mesmo trecho 
de código. Trata-se de uma forma de executar blocos de comandos somente sob 
determinadas condições, mas com a opção de repetir o mesmo bloco quantas vezes 
forem necessárias. As estruturas de repetição são úteis, por exemplo, para 
repetir uma série de operações semelhantes que são executadas para todos os 
elementos de uma lista ou de uma tabela de dados, ou simplesmente para repetir 
um mesmo processamento até que uma certa condição seja satisfeita. Sejam as 
seguintes afirmativas:
I - Toda estrutura de repetição apresenta um teste no início e um na saída.
II - Toda estrutura de repetição pode ser substituída por um conjunto de 
estruturas de decisão, onde não haja testes ou condições.
III - Toda estrutura de repetição apresenta um critério de parada.
IV- Toda estrutura de repetição apresenta fluxo de execução invertido devido a
diversas interações.
Marque a alternativa que representa apenas as afirmativas CORRETAS: 
RESPOSTA = somente a III
> Assinale a alternativa correta em relação a quantidade de vezes que a palavra 
Página 34
AL notas de aula.txt
"PAZ" será impressa, no trecho de código abaixo: 
x = 50;
do{
y = 8;
do{
cout<<"PAZ \n";
y++;
} while ( y < 10);
x--;
} while ( x > 48);
RESPOSTA = 4 vezes
TC: 56%
ALG - A9 _________________________________________________________________
NA: > Um dos grandes objetivos da programação de computadores é criar programas 
simples e que sejam facilmente entendidos por outras pessoas > Porém, é muito 
comum que os programas tenham 500, 1000 ou mais linhas de código > Às vezes este
número é necessário; outras vezes percebemos que ele pode ser reduzido > Será 
que não existem partes de um programa que poderíamos separar e tratar como um 
programa à parte, ou um subprograma? Desta forma, toda vez que aquela parte 
fosse necessária, chamaríamos somente ela > 
Isso é possível e tem um nome: procedimentos e funções
> p.e. o funcionamento de um app de smartphone >> o celular funciona como um 
grande laço:
- Enquanto o botão de desligar não for acionado, espere algum comando do 
usuário;
- SE o ícone de fazer ligação for pressionado, ENTÃO abra a tela de chamadas;
- SE o ícone do navegador for pressionado, ENTÃO abra o navegador;
- E assim por diante.
>> Acontece que o programa do celular não é sequencial -> Não podemos prever o 
que o usuário vai fazer, então precisamos criar subprogramas que são chamados à 
medida que o usuário faz uma determinada ação
> 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
> 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
> o comando system(“cls”) é um procedimento
>> p.e. -> No código a seguir, o programa segue oseu fluxo normal, imprime a 
mensagem “Digite o seu nome”, lê o valor do usuário e chama em seguida o 
Página 35
AL notas de aula.txt
procedimento system(“cls”)
cout<<”Digite o seu nome: “<<endl;
cin>>nome;
system(“cls”);
cout<<”Ola “<<nome<<”, tudo bem?”<<endl;
> Internamente, a execução do programa é interrompida, o fluxo é desviado para o
código do procedimento system(“cls”), o qual usa vários comandos internos para 
limpar a tela, e depois devolve o fluxo para o programa principal e imprime a 
mensagem “Olá... tudo bem?”
* É igual ao programa do celular do exemplo -> 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 >> 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”
> Porque usar Funções:
-> Para uma melhor legibilidade
-> 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:
 Tipo_da_função nome_da_função(lista_de_parâmetros){
 Corpo 
da função
 }
>> Tipo da função -> configura um valor que a função retornará quando terminar /
O valor é enviado ao módulo que chamou a função / Caso o tipo da função não seja
especificado, o compilador assumirá que o tipo retornado é int
>> Lista de parâmetros -> é a relação de variáveis e seus tipos / Ela é 
opcional, não é toda função que tem parâmetros
> ver exemplo de programa -> a09_t06.pdf
* A 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 
Página 36
AL notas de aula.txt
a função, é necessário incluir a biblioteca no programa
> 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 >> p.e.:
void soma(float a, int b) {
 float result;
 result = a+b;
 cout<<"A soma de “<<a<<” e “<<b<<” eh “<<result;
 }
> ver exemplo de program -> a09_t07.pdf
> 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 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() no exemplo:
1 #include <iostream>
2 using namespace std;
3 */toda função aparece sempre antes do 
programa principal/*
4 float soma(int n1, float n2){ */a função recebe o valor da variável 
n1 [inteiro] e de n2 [float]/*
5 float resultado; */em seguida ele cria uma variável 
Página 37
AL notas de aula.txt
chamada resultado/*
6 resultado = n1+n2; */em resultado faz a conta [a soma no 
caso] entre n1 e n2/* 
7 return resultado; */toda vez que a função for iniciada 
com um tipo.../* 
8 } */... de variável obrigatoriamente tem 
que usar o return .../*
9 */... no final da função /*
10 int main (void){ */programa principal/*
11 int a = 100;
12 float b = 25.5;
13 float retorno; */cria uma variável chamada retorno/*
14 retorno = soma(a,b); */chamada da função no programa 
principal/*
15 cout<<"Valor da soma: "<<retorno;
16 }
>> Veja que agora a declaração da função, na linha 4, tem o tipo do retorno da 
função: float
>> E obrigatoriamente temos que ter a palavra reservada return dentro da função 
para indicar o valor que será devolvido como resultado da função
>> Nesse caso, o valor é devolvido e atribuído à variável retorno na linha 13
>> Portanto, quando não tiver valor de retorno, a função tem um void na sua 
declaração
>> Quando retornar algum valor, ela tem que ter o tipo do retorno e usar o 
return dentro da função
> 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
> ver exemplo de program -> a09_t09.pdf
> 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 C++ 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()
> ver exemplo de program -> a09_t11.pdf
VA: programação modular > criação e uso

Continue navegando