5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 1/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
UNIDADE I
Introdução aos Algoritmos1
Definição de algoritmos:
Dado um problema, um algoritmo é a especificação de uma sequência de ações cuja execução
resulta na resolução do problema.
Dada a definição de algoritmos, vemos que os algoritmos não são específicos do domínio da
computação. Algoritmos fazem parte do dia‐a‐dia das pessoas, mesmo que elas não saibam o que
são algoritmos. Por exemplo, abaixo está um algoritmo de como preparar uma “Picanha de sol”:
Modo
de
preparo
(algoritmo)
da
“Picanha
de
sol”
1º ‐ Numa tigela coloque 1 kg de sal grosso, 1 peça de picanha cortada ao meio no sentido do comprimento e cubra
com mais 1 kg de sal grosso. Deixe descansando por 24 horas em local arejado.
2º ‐ Depois de 24 horas, retire o excesso de sal grosso e mergulhe a picanha em 2 litros de leite. Deixe repousar por
mais 24 horas para dessalgar.
3º ‐ Passado este período, retire a picanha do leite e seque‐a bem com um papel toalha. Corte a picanha em fatias e
numa chapa com manteiga de garrafa, grelhe‐os rapidamente OU coloque as fatias de picanha numa assadeira untada
e asse em forno pré‐aquecido a 180º C por 35 minutos.
4 º‐ Sirva com vinagrete de feijão verde, ou purê de banana da terra, ou farofa, ou mandioca cozida ou chips de
mandioca.
Fonte: http://receitas.maisvoce.globo.com/Receitas/Carnes/0,,REC25021 ‐7770‐23+PICANHA+DE+SOL,00.html
Outros exemplos de algoritmos na nossa vida cotidiana podem ser citados:
‐ algoritmo de como tomar um medicamento; ‐ algoritmo de como ir de um ponto a outro numa cidade; ‐ algoritmo de como montar uma bicicleta.
Algoritmos e Lógica:
Via de regra, a elaboração de um algoritmo para solucionar um determinado problema
envolve definir os passos intermediários numa seqüência lógica.
Exemplo: Um senhor está numa das margens de um rio com três cargas: uma raposa, um galo e um saco de
milho. Ele deve atravessar o rio com suas três cargas e dispõe de um barco que comporta apenas
ele próprio e uma de suas cargas de cada vez. Especifique uma sequência de viagens tal que o
problema seja solucionado.
1 Material baseado no conteúdo desenvolvido pelo professor Marco Aurélio Guimarães Moreira
1
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 2/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
A tabela a seguir mostra uma possível seqüência de operações cuja execução resulta na solução
para o problema. Observe que, dependendo da ordem das operações, o galo pode ficar sozinho
com a raposa ou o milho pode ficar sozinho com o galo. Isso implicaria perda de uma das cargas, o
que vai contra os requisitos da solução.
Cargas do lado esquerdo
depois da operação
Operação Cargas do lado direito depois da operação
galo, raposa, milho, senhor Início
raposa, milho Atravesse com o galo galo, senhor
raposa, milho, senhor Volte sozinho Galo
Milho Atravesse com a raposa Raposa, galo, senhor
galo, milho, senhor Volte com o galo Raposa
Galo Atravesse com o milho Milho, raposa, senhor
Galo, senhor Volte sozinho Milho, raposa
Atravesse com o galo Galo, raposa, milho, senhor
Algoritmo de como construir um algoritmo:
Podemos definir alguns passos básicos para a construção de um algoritmo:
Passo 1) Dado um problema, faça uma análise preliminar e entenda o problema com a maior
precisão possível;
Passo 2) Desenvolva um algoritmo para resolver o problema;
Passo 3) Execute o algoritmo para vários testes cujos resultados sejam conhecidos, ou seja, faça um
Teste de Qualidade;
Passo 4) Caso o resultado seja satisfatório, o algoritmo está pronto para ser implementado;
Passo 5) Caso contrário, volte ao passo 2.
Algoritmos e programas:
Os programas de computador são algoritmos implementados numa linguagem de
programação (C, C++, Pascal, Java, C# etc.). Normalmente, um programa de computador é
composto por um conjunto de algoritmos, cada um dos quais responsável pela solução de um sub‐
problema. Existem duas principais diferenças entre escrever um algoritmo a ser seguido por um ser
humano e escrever um algoritmo e ser seguido por um computador. A primeira delas está na
linguagem utilizada. Enquanto para um ser humano podemos utilizar o português, no caso dos
computadores, estamos restritos às linguagens de programação, que, por sua vez, são convertidas
em linguagem de máquina pelos compiladores. A segunda principal diferença está no fato de que
uma pessoa consegue tomar decisões por conta própria na ocorrência de situações inesperadas na
execução de um algoritmo. Quando escrevemos um algoritmo para ser executado por um
computador, todas as situações devem ser previstas e o tratamento adequado para cada uma delas
deve ser especificado.
2
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 3/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Aplicações de algoritmos em Engenharia:
Freqüentemente, a solução de problemas de engenharia pode ser descrita como uma
seqüência sistematizada de passos. Nesses casos, podemos escrever algoritmos para solucioná‐los
e deixar o trabalho repetitivo para ser realizado pelo computador.
Exemplos: ‐ algoritmo para cálculo das correntes num circuito; ‐ algoritmo para o processo de mistura de duas substâncias; ‐ algoritmo para determinar uma seqüência de movimentos de um manipulador robótico
num processo de solda. Percebe‐se que o domínio das técnicas de construção de algoritmos é uma ferramenta
essencial para um engenheiro.
Nível de abstração:
Abstração se refere à omissão de detalhes. Um algoritmo pode ser escrito com diferentes
níveis de abstração. Considere, por exemplo, o algoritmo para ir de um ponto a outro numa cidade. Podemos especificar apenas os principais pontos de passagem (algoritmo em alto nível de
abstração). Por outro lado, pode‐se também especificar cada rua do caminho, cada mudança de
faixa que o motorista deve efetuar. Os níveis de abstração estão também ligados com a linguagem de programação adotada.
Dependendo da linguagem, um procedimento conceitualmente simples pode se transformar em
dezenas de linhas de código. Linguagens de mais alto nível são mais próximas da linguagem
humana (Português, Inglês etc.). Por outro lado, linguagens de mais baixo nível são mais próximas
ao que o computador consegue processar (0s e 1s).
Descrição de Algoritmos:
Um mesmo problema pode ser resolvido por diferentes algoritmos. Por exemplo, para ir de
um ponto a outro, pode‐se adotar diferentes caminhos ou ainda diferentes meios de transporte. Cada algoritmo, por sua vez, pode ser descrito de diferentes maneiras.
Considere, como exemplo, o problema de construir um algoritmo para calcular a corrente no circuito abaixo:
3
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 4/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
A resolução do problema (especificação de um conjunto de ações que definem o algoritmo) pode, por exemplo, ser descrita de forma narrativa.
Descrição Narrativa:
‐ Obtenha do usuário o valor de V
‐ Obtenha do usuário o valor de R
‐ Calcule I por I = V/R
‐ Informe ao usuário o valor de I
Descrição por fluxograma:
O mesmo algoritmo pode ser descrito na forma de um fluxograma:
Fluxograma é uma representação gráfica de algoritmos, onde formas geométricas
diferentes implicam ações (instruções e/ou comandos) distintos. As formas geométricas diferentes
facilitam o entendimento das idéias.
Descrição por pseudocódigos:
O pseudocódigo é a escrita, por meio de regra predefinida, dos passos a serem seguidos
para a resolução de um problema exposto em um enunciado. A conversão de um algoritmo de pseudocódigo para uma linguagem de programação é um
passo fácil. Basta, para isso, o conhecimento do vocabulário e regras sintáticas da
linguagem/idioma desejado.
Exemplo: Resolução do problema do cálculo da corrente.
4
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 5/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Algoritmo CalculaCorrente
Variáveis R: Real V: Real
I: Real Início
Escreva “Informe a tensão: “
Leia V
Escreva “Informa a resistência: “
Leia R
I ← V/R
Escreva “A corrente é de: “, I Fim
Observe no código acima que os comandos entre os delimitadores Início e Fim têm um
alinhamento deslocado à direita comparando aos delimitadores. Esse recurso é denominado
indentação (também chamada de endentação ou identação). A indentação aumenta a legibilidade
do código, torna mais fácil identificar o conteúdo de cada porção do código. Outro recurso para
aumentar a legibilidade é utilizar nomes significativos para as variáveis. As variáveis, R, V e I, por
exemplo, poderiam se chamar “carro”, “ônibus” e “bicicleta”. O algoritmo funcionaria da mesma
forma e produziria os mesmos resultados. No entanto, um programador que tivesse que dar
manutenção no código teria grande dificuldade em entender o seu funcionamento.
Exercícios para praticar EM AULA:
Exercício 1: Com base no exemplo do algoritmo CalculaCorrente, faça um algoritmo em pseudocódigo para
calcular o tempo gasto por um veículo num trajeto, dados a velocidade (constante) e a distância
percorrida.
Exercícios para praticar EM CASA:
Exercício 2: Dadas as medidas de uma sala em metros (comprimento e largura), informe a sua área em metros
quadrados.
5
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 6/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
UNIDADE II
Tipos de dados, variáveis e constantes
Variável:
Uma variável é um local (um endereço) na memória principal que armazena um conteúdo. Para facilitar a programação, nos é permitido dar nome a esse endereço. No exemplo do algoritmo
de cálculo de corrente, V, R e I podem ser classificados como variáveis. Um dado é classificado
como variável quando existe a possibilidade de que seja alterado em algum instante no decorrer
do tempo, ou seja, durante a execução do algoritmo/programa. Em C++ todas as variáveis devem ser declaradas antes de serem usadas. Uma declaração
especifica um tipo, e é seguida por uma lista de uma ou mais variáveis daquele tipo. A declaração
de uma variável tem a seguinte forma geral:
<tipo> <nome> = <valor>; Exemplos:
int inicio, fim, numero; float valor; short int codigo; char c, linha [100];
float media=0;
Os tipos de dados (int, float, short, char, etc.) serão explicados mais a frente. O <valor> é
facultativo, ou seja, não é obrigatório em toda a declaração. O <valor> será muito útil na
inicialização de variáveis, assunto que será abordado, mais tarde, quando iniciarmos a unidade de
Estruturas de Repetição.
Constante:
Em oposição às variáveis, uma constante é um valor que não varia ao longo da execução de
um algoritmo/programa. Por exemplo, um programa para calcular a área de um círculo, a área seria dada por:
A = PI*R*R
R é variável (é um valor que depende do raio do círculo que o usuário informa) PI é constante (vale sempre 3,14159265...) A é variável (representa a área e depende do raio que o usuário informa) Em C++ , utilizamos o prefixo const associado a um tipo, um nome e um valor para definir
uma constante. A declaração de uma constante
tem a seguinte forma geral:
const <tipo> <nome> = <valor>; 6
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 7/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Exemplos:
const int eterna = 256; const float PI =3.14159265;
Nomenclatura de variáveis:
Toda variável deve ser declarada antes de ser utilizada (em pseudocódigo ou em C). Declarar uma variável significa reservar um espaço na memória no computador utilizando uma
nomenclatura apropriada, para que os dados (lidos do teclado ou calculados por expressões)
possam ser guardados e acessados sempre que necessário. O nome dado às variáveis deve obedecer às seguintes regras:
‐ deve começar com uma letra ou sublinhado “_”; ‐ todo o nome só pode conter letras, números ou sublinhado; ‐ Letras maiúsculas e minúsculas são consideradas diferentes (Soma é diferente de soma); ‐ Palavras reservadas não podem ser usadas como nomes de variáveis (veja as palavras
reservadas no ANEXO I); ‐ Variáveis podem ter o tamanho de até 32 caracteres.
Exemplo: Variáveis com nomes válidos:
Soma, _acumulador j1, R, V, I, hg123, HG123, INPS, IR.
Exemplo: Variáveis com nomes inválidos:
1soma
e(2, j%, aq*, joao&Maria, João
É boa prática (mas não é regra) escolher nomes que indiquem a função da variável. Para
uma variável que representa velocidade, poderia ser dado o nome “p”. No entanto, isso dificultaria
a leitura do código. Nomes mais indicados seriam “v”, “vel”, ou mesmo “velocidade”. Outro ponto de suma importância: C é "case sensitive", ou seja, maiúsculas e minúsculas
fazem diferença. Se declararmos uma variável com o nome ‘soma’ ela será diferente de Soma, SOMA, SoMa ou sOmA. Da mesma maneira, os comandos (todas as palavras reservadas) da
linguagem C if e for, por exemplo, só podem ser escritos em minúsculas, pois senão o compilador
não irá interpretá‐los como sendo comandos, mas sim como variáveis. Por exemplo, se escreve If ou invés if , o compilador irá acusar um erro de “variável não declarada” e, consequentemente,
não irá executar o algoritmo até que o erro seja corrigido, e o programa seja compilado novamente.
7
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 8/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Tipos de dados:
Os dados manipulados por variáveis em um programa em C podem ser do tipo numérico, literal ou literal.
Dados numéricos inteiros: São aqueles que não possuem componentes decimais ou fracionários, podendo ser
positivos ou negativos. Tentam representar o conjunto dos números inteiros da Matemática.
Exemplo: Variáveis que seriam declaradas como do tipo inteiro:
O que representa Um possível nome Um possível valor
Número de filhos na escola n_filhos 2
Número de carros de uma empresa n_carros 50
Número de peças vendidas Pecas 0
Pontos por infração de trânsito ptos_infracao ‐3
Dados numéricos reais: São aqueles que podem possuir componentes decimais ou fracionários, e podem também
ser positivos ou negativos. Aproximam o conjunto dos números reais da Matemática.
Exemplo: Variáveis que seriam declaradas como do tipo real:
O que representa Um possível nome Um possível valor
Corrente em um circuito I 2.03
Força aplicada F 50.0
Altitude altitude 1010.1
Dados literais: Constituídos por uma sequência de caracteres contendo letras, dígitos e/ou símbolos
especiais. Este tipo de dados é também muitas vezes chamado de cadeia de caracteres ou string. É
comum, em algumas linguagens, a diferenciação entre a representação de um único dado literal, que é chamado de caractere (por exemplo, ‘a’) e um conjunto de caracteres (por exemplo, “abacate”. Para um único caractere, utilizam‐se aspas simples; para uma cadeia de caracteres,
aspas duplas.
Exemplo: Variáveis que seriam declaradas como do tipo literal
O que representa Um possível nome Um possível valor
Primeira letra do nome primeira_letra ‘A’
Nome nome “Astrogildo”
Mensagem de erro mensagem_erro “operação inválida”
Dados lógicos: São caracterizados como tipos lógicos os dados com valores Verdadeiro (1) ou Falso
(0), sendo que este tipo de dado pode apresentar apenas um dos dois valores. A linguagem C não
apresenta um tipo de dados especial para armazenar variáveis do tipo lógico. Normalmente, esse
8
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 9/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
tipo de informação é armazenada em variáveis do tipo inteiro (int). Valores diferentes de zero
representam Verdadeiro; Falso é representado pelo valor 0 (zero).
Exemplo:
Variáveis que seriam declaradas como do tipo lógico
O que representa Um possível nome Um possível valor
Porta está aberta porta_aberta Verdadeiro
Nível acima de 10 metros nivel10 Falso
Sistema ligado ligado Falso
Declaração dos vários tipos de variáveis em pseudocódigo e em C:
Declaração em pseudocódigo Declaração correspondente em C
Variáveis:
a: Inteiro
b: Real c: Caractere
d: Literal e: Lógico
int a; float b; char c; char d[20]; int e;
Obs.: Uma variável real pode ser declarada em C como do tipo float ou como do tipo
double. Dessa forma, a declaração “float b;” poderia ser substituída por “double b;”. A diferença é
que o tipo float ocupa metade do espaço em memória do tipo double. Por outro lado, variáveis do
tipo double são representadas com maior precisão. A utilização do tipo double é recomendada
apenas em casos específicos, como análise numéricas muito complexas são necessárias para
garantir precisão.
Operadores: São elementos funcionais que atuam sobre operandos e produzem um resultado. Como
exemplo, na expressão 20 + 30, os números 20 e 30 são operandos relacionados pelo operador de
adição (+). Os operadores são classificados quanto a dois critérios principais: ‐ número de operandos sobre os quais atuam: unários, binários e ternários. ‐ tipos de operandos sobre os quais atuam: aritméticos, lógicos, relacionais e literais.
Expressões: Combinação de variáveis, constantes e operadores que, uma vez avaliada, resulta em um
valor. As expressões podem ser do tipo aritméticas ou lógicas.
Expressões aritméticas: São aquelas cujo resultado é do tipo numérico, seja ele inteiro ou real. Somente o uso de
operadores aritméticos e variáveis numéricas é permitido em expressões desse tipo.
Operação Operador em
pseudocódigo
Operador
em C
Tipo Prioridade Exemplo
Inversão de sinal ‐ ‐ Unário 1 ‐(‐1) = 1
Manutenção de sinal + + Unário 1 +1 = 1
9
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 10/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Multiplicação * * Binário 3 6*7=42
Divisão / / Binário 3 8/2=4
Adição + + Binário 4 1+2=3
Subtração ‐ ‐ Binário 4 4‐5=‐1
A tabela de operadores aritméticos é válida tanto na convenção de pseudocódigo quanto
em linguagem C. O valor na coluna de “Prioridade” define a ordem com que os operadores são
aplicados. Em expressões com operadores de mesma prioridade, são executados os operadores da
esquerda primeiro. Exemplos:
1 + 2 * 3 = 1 + (2*3) = 7
1 + 2 – 3*20/5 = (1+2) – ((3*20)/5)
Note que a multiplicação é normalmente representada pelo símbolo * ao invés do símbolo
x, que é mais comum em expressões aritméticas no contexto da Matemática. Em algumas
linguagens de programação, a exponenciação é por vezes representada pelo símbolo “^” ou com o
uso de função. Exemplos:
Em Matlab: 3^2
Em Java: Math.pow(3,2); Em C: pow(3,2);
Expressões lógicas: São aquelas cuja avaliação resulta em um valor lógico (verdadeiro ou falso).
Operação Operador em
pseudocódigo
Operador em C
Tipo Prioridade Exemplo
em C
Exemplo em
pseudocódigo
Disjunção OU || Binário 3 (3) || (0) Verdadeiro OU Falso
Conjunção E && Binário 2 (2) && (1) Verdadeiro E Verdadeiro
Negação NÃO ! Unário 1 !1 NÃO Verdadeiro
Tabela Verdade do Operador NÃO (NOT) Primeira condição Resultado
Verdadeira Falso
Falsa Verdadeiro
Tabela Verdade do Operador E (AND) Primeira Condição Segunda Condição Resultado
Falsa Falsa Falso
Verdadeira Falsa Falso
Falsa Verdadeira Falso
Verdadeira Verdadeira Verdadeiro
Tabela Verdade do Operador OU (OR)
Primeira Condição Segunda Condição Resultado
Falsa Falsa Falso
10
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 11/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Verdadeira Falsa Verdadeiro
Falsa Verdadeira Verdadeiro
Verdadeira Verdadeira Verdadeiro
Expressões Relacionais: Realizam uma comparação entre duas variáveis de mesmo tipo e retornam um valor do tipo
lógico.
Comparação Operador em
pseudocódigo
Operador em C
Tipo Exemplo
em C
Exemplo em
pseudocódigo
Igual = == Binário (a==b) (a=b)
Diferente <> != Binário (a!=b) (a<>b)
Menor < < Binário (a<b) (a<b)
Menor ou igual <= <= Binário (a<=3) (a<=3)
Maior > > Binário (b>20) (b>20)
Maior ou igual >= >= Binário (c>=b) (c>=b)
Estrutura Básica de um Programa em C++ (Programando com Dev C++):
Temos abaixo a estrutura básica de um programa escrito na linguagem C++
#include <stdio.h>
#include <iostream>
/* Um Primeiro Programa */
main() {
printf ("OLA! EU ESTOU VIVO! \n"); //Escreve na tela a frase entre aspas
system ("PAUSE"); return 0; }
Explicando cada parte
#include <stdio.h>
#include <iostream>
O cabeçalho #include<> serve para indicar ao compilador todas as bibliotecas que este
programa utilizará. Na maioria dos programas que escreveremos durante esta apostila, utilizaremos o #include <stdio.h> e o #include <iostream>. A stdio.h contém as principais funções, comandos e classes de entrada e saída de C++, necessárias para realizar programas que, por
exemplo, recebam dados via teclado e enviem dados via monitor. A iostream contém outras
funções importantes como a de pausar o sistema para que possamos ver os resultados no
monitor. Leia mais no ANEXO II, sobre as bibliotecas da linguagem C.
/* Um Primeiro Programa */
11
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 12/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Quando fazemos um programa, uma boa idéia é usar comentários que ajudem a elucidar o
funcionamento do mesmo. No exemplo apresentado temos um comentário: /*Um Primeiro
Programa*/. O compilador desconsidera qualquer coisa que esteja começando com /* e
terminando com */. Um comentário pode, inclusive, ter mais de uma linha. Aliás, se o comentário
for de apenas uma linha, pode se usar //.
int main() { ..... }
main() indica que estamos definindo uma função de nome main. Todos os programas em C
têm que ter uma função main, pois é esta função que será chamada quando o programa for
executado. No exemplo, a função main não recebe argumentos (os parênteses estão vazios). Após
o main () inicia‐se um {. Esta chave irá delimitar que o corpo (conteúdo) da função main e os
comandos pertencentes a mesma. No final de todos os comandos um } deverá ser adicionado para
finalizar a função main. Sendo assim, o O código que estiver dentro das chaves será executado
seqüencialmente quando a função for chamada.
printf ("OLA! EU ESTOU VIVO! \n"); //Escreve na tela a frase entre aspas
Esta é a linha de comando do código que chama a função printf(), passando a string (uma
string é uma seqüência de caracteres, como veremos a seguir) "Ola! Eu estou vivo!\n" como
argumento. É por causa do uso da função printf() pelo programa que devemos incluir o arquivo
cabeçalho stdio.h. A função printf( ) neste caso irá apenas colocar a string na tela do computador. O \n é uma constante chamada de constante barra invertida. No caso, o \n é a constante barra
invertida de "new line" e ele é interpretado como um comando de mudança de linha, isto é, após
imprimir “Ola! Eu estou vivo!” o cursor passará para a próxima linha. É importante observar
também que os comandos do C terminam com ; e que strings são delimitadas por aspas duplas. Note também que após a função printf há uma linha de comentário iniciada por // para indicar um
comentário sobre a linha de comando.
system ("PAUSE");
A linha “system(“PAUSE”)” é uma chamada de função própria de C++. A função system( ) recebe argumentos como o PAUSE que na verdade são comandos para o sistema operacional. Neste caso, ela recebe o comando “PAUSE” para pausar a execução do programa até que o
usuário aperte uma tecla qualquer. Utilizamos este recurso para que a tela do programa não seja
terminada automaticamente pelo sistema, impedindo que vejamos os resultados do programa. Nota: É por causa do uso da função system() pelo programa que devemos incluir o arquivo
cabeçalho iostream.h. Obs.: Quando estiver digitando seu código adicione após PAUSE (dentro das aspas) o
comando > null e veja o acontece.
return 0;
12
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 13/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
A última linha do programa, return(0); , indica o número inteiro que está sendo retornado
pela função, no caso o número 0. O comando “return 0” é a “resposta” da função main para o
sistema. Quase toda função retorna um valor para o sistema ou programa que a chamou, por
exemplo, uma função pode retornar o resultado de uma operação matemática executada por ela.
No caso da função main, ela retorna um valor para o sistema operacional que executou o
programa. Esse valor é interpretado pelo sistema como uma mensagem indicando se o programa
foi executado corretamente ou não. Um valor de retorno 0 indica que o programa foi executado
sem problemas; qualquer outro valor de retorno indica problemas. Quando o programa é
executado até o fim, ele retorna 0 ao sistema operacional, indicando que ele foi executado e
terminado corretamente. Quando o programa encontra algum erro ou é terminado antes da hora, ele retorna um valor qualquer ao sistema, indicando erro durante a execução.
Saída de dados em Linguagem C: Operações de saída de dados referem‐se a quaisquer valores exibidos ou retornados ao
usuário. Esses valores podem ser uma mensagem de orientação, o resultado de uma expressão, um valor constante ou o conteúdo de uma variável. Conforme visto no algoritmo CalculaCorrente,
em pseudocódigo, a saída de dados será representada pelo comando Escreva. Por exemplo:
Escreva “O valor da corrente é de “, I Escreva “O programa executou uma operação inválida e será finalizado”
Em linguagem C, a saída de dados, equivalente a “escreva” é feita pela função printf().
Exemplos: printf(“O valor da corrente é de %f“, I); // variável real printf(“Maria tem %d filhos”, n_filhos); // variável inteira
printf(“A primeira letra do nome é %c”, letra); // variável caractere
printf(“%s”, nome); // variável string (cadeia de caracteres)
A função printf( ) tem a seguinte forma geral:
printf (string_de_controle, lista_de_argumentos); Teremos, na string
de
controle, uma descrição de tudo que a função vai colocar na tela. A string de controle mostra não apenas os caracteres que devem ser colocados na tela, mas também
quais os tipos de variáveis serão exibidas e suas respectivas posições. Isto é feito usando‐se os
códigos de controle, que usam a notação %. Na string de controle indicamos quais, de qual tipo e
em que posições estão as variáveis a serem apresentadas. É muito importante que, para cada
código de controle, tenhamos um argumento na lista de argumentos. Resumindo, a função printf() converte, formata e imprime seus argumentos na saída padrão (normalmente a tela) sob o
controle da string_de_controle.
Exemplos de printf( ) e o que eles exibem:
printf ("Teste %% %%") Teste % %
printf ("%f",40.345) 40.345
13
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 14/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
printf ("%.2f",52.4578) 52.46
printf ("Um caractere %c e um inteiro %d",'D',120) Um caractere D e um inteiro 120
printf ("%s eh um exemplo","Este") Este eh um exemplo
printf ("%s%d%%","Juros de ",10) Juros de 10%
Note que nos exemplos acima, os valores as serem exibidos são diretamente caracteres ou
números. Porém você poderia exibir os valores de uma variável que acabou de armazenar o
resultado de um cálculo. Por exemplo:
printf ("Media das temperatura lidas: %f", media)
Neste caso, assumimos, por exemplo que o valor da media calculdado foi 78,45. Assim, o
printf acima irá exibir:
Media das temperaturas lidas: 78.45
Entrada de dados:
Uma operação de entrada de dados refere‐se a qualquer valor que seja informado
(digitado) pelo usuário, ou seja, fornecido através da digitação pelo teclado. Este valor pode ser um
numérico ou literal e será armazenado, obrigatoriamente, em uma variável de seu respectivo tipo. Conforme visto no algoritmo CalculaCorrente, em pseudocódigo, a entrada de dados será
representada pelo comando Leia. Por exemplo:
Leia V; Leia R;
Em C, a operação de entrada de dados é realizada pela função scanf().
Exemplos: scanf(“%f”, &I); // guarda valor digitado do teclado na variável real I scanf(“%d”, &n_filhos); // guarda valor digitado do teclado na variável inteira n_filhos
scanf(“%c”, &letra); // guarda valor digitado do teclado na variável caracter letra
scanf(“%s”, &nome); // guarda valor digitado do teclado na variável string nome
A função scanf ( ) tem a seguinte forma geral:
scanf (string_de_controle, lista_de_argumentos); A função scanf( ) lê caracteres da entrada padrão (normalmente o teclado), interpretando‐
os de acordo com o formato especificado na string_de_controle, e armazena os resultados nos
argumentos descritos de acordo com % descrito. Abaixo uma descrição dos principais tipos %
(f,c,f,s) chamados de “máscaras”.
Tipos de Máscaras:
14
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 15/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Observe que tanto a função printf() como a função scanf() exige uma máscara diferente (“%f”, “%d”, “%c”, “s”) para cada tipo de dado (int, float, char ou cadeia de caracteres). Na tabela a seguir
são apresentados alguns dos códigos %:
Códigos
de
Barra
Invertida:
Além dos códigos de controle, existem também os códigos especiais, tais como o '\n' que
executam tarefas especiais. Os códigos de barra invertida são descritos na string de controle e
servem para efeitos de apresentação/formatação de texto/dados na tela do computador. Na
tabela abaixo estão listados esses códigos especiais:
Exemplos para praticar EM AULA:
15
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 16/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Exercício 1
Vamos transformar o algoritmo de Corrente Elétrica em código de C++:
Em pseudocódigo Código em C++
Algoritmo CalculaCorrente
Variáveis R: Real V: Real I: Real
Início
Escreva “Informe a tensão: “
Leia V
Escreva “Informa a resistência: “ Leia R
I ← V/R
Escreva “A corrente é de: “, I Fim
//Programa para cálculo da corrente de um
circuito elétrico V=RI
#include <stdio.h>
#include <iostream>
float V; float R; float I;
int main () {
printf("\nInforme a tensao: "); scanf ("%f",&V); printf("\nInforme a resistencia: "); scanf ("%f",&R); I = V/R; printf("\nO valor da corrente eh de: %f\n",I ); system ("PAUSE"); return 0;
}
Após compilar e executar o programa corretamente vá fazendo as seguintes mudanças, uma de
cada vez. Após cada mudança, separadamente, compile e execute o programa e tente visualizar o
que mudou.
1. Na linha printf("\nO valor da corrente eh de: %f\n",I ); troque o %f por %.2f Explique o que mudou.
2. Retire os “\n” das linhas com a função printf();
Explique o que mudou.
3. Na linha system ("PAUSE"); acrescente > null após o PAUSE (ainda dentro das aspas). Explique o que mudou.
4. “Enxugue” seu código declarando todas as variáveis em uma só linha: float V, R, I; Exercício 2
Agora, junto com um colega, tente implementar em o código C++ o pseudocódigo do exercício da
aula anterior para calcular o tempo gasto por um veículo num trajeto, dados a velocidade
(constante) e a distância percorrida.
Dica: Utilize nomes de variáveis mais significativos como temo, velocidade_media,
16
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 17/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
distancia_percorridada, etc.
Exercício 3:
Faça agora um programa para calcular a área de um círculo (A=π*r2), onde:
A = área a ser calculada
π = constante (3.141592653) r = raio da circunferência a ser fornecido pelo usuário
Obs: Utilize o recurso de declaração da constante π conforme visto neste aula.
Exemplos para praticar EM CASA:
Em casa, altere os códigos dos programas desenvolvidos no exemplo acima, de forma que eles
fiquem mais claros para os programadores e para os usuários do programa. Exemplos: ‐ Utilize linhas de comentários para explicar o que determinada linha de comando está
executando, caso esta seja de extrema importância para o programa. Ex.: //Nesta linha, a corrente do circuito está sendo calculada....
‐ Informe ao usuário (quando estiver usando a função printf()) sobre o que se trata o
programa. Ex.: Este programa foi feita para calcular.... ‐ Informe ao usuário as unidades dos valores que eles devem fornecer. Exemplo: Entre com
a distância percorrida em Km. ‐ Informe ao usuário a unidade do valor calculado. Exemplo: O tempo gasto pelo veículo no
trajeto foi de ...... horas (segundos, minutos).
‐ Se quiser incremente ainda mais com informando ao usuário: O tempo gasto pelo veículo no trajeto de ..... Km a uma velocidade média de ..... Km/h foi de ...... horas.
‐ Não se esqueça de controlar o número de casas decimais para que o valor mostrado fique
muito grande.
17
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 18/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
UNIDADE III
Estruturas de Decisão
Estrutura Condicional Simples:
As estruturas de decisão permitem que o fluxo de execução das instruções siga diferentes
caminhos dependendo do resultado da avaliação de uma expressão lógica (reveja o que é uma
expressão lógica na unidade anterior). A estrutura condicional simples é aquela que determina
uma condição para que um grupo de instruções possa ser executado. Se essa condição não for
atendida, o fluxo de execução é deslocado para a instrução seguinte ao fim do bloco de condição.
Em pseudocódigo (algoritmo), a forma geral de uma estrutura condicional simples é:
Se (Condição) então
{instruções a serem executadas caso a condição seja verdadeira}
FimSe
Exemplo: Vejamos um algoritmo abaixo que informe na tela um aviso de alarme de temperatura.
Algoritmo AlarmeDeTemperatura1
Variáveis
Temperatura: Real Início
Escreva “Informe a temperatura: ”
Leia Temperatura
Se (Temperatura > 120) então
Escreva “Atenção: temperatura acima do máximo permitido”
Escreva “Verifique o estado da válvula de ar frio”
FimSe
Fim
No algoritmo acima, se a temperatura informada pelo usuário for maior do que 120, o programa imprime na tela mensagens de alerta. Caso a condição (Temperatura > 120) não seja
satisfeita, o programa não faz nada.
Em C, a estrutura condicional simples tem a seguinte forma:
if (condição) {
Instrução 1 a ser executada caso a condição seja verdadeira Instrução 2 a ser executada caso a condição seja verdadeira ....
Instrução n a ser executada caso a condição seja verdadeira
} 18
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 19/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
As chaves delimitam o início e fim do bloco de instruções a ser executado. Caso o bloco de
instruções seja composto por apenas uma instrução não é obrigatório o uso das chaves (mas
recomenda‐se regular em todas as situações).
O algoritmo AlarmeDeTemperatura1 teria a seguinte forma em código C
#include <stdio.h>
#include <iostream>
float temperatura;
int main() {
printf(“Informe a temperatura: ”); scanf(“%f”, &temperatura); if (temperatura > 120) {
printf(“Atenção: temperatura acima do máximo permitido”); printf(“Verifique o estado da válvula de ar frio”);
} system (“PAUSE”); return 0;
}
Estrutura Condicional Composta:
A estrutura condicional composta trabalha sempre com uma condição e duas
possibilidades de deslocamento do fluxo de execução do algoritmo: o primeiro bloco de
instruções, logo após a verificação, será executado sempre que a condição for atendida
(verdadeira) e, caso contrário, o segundo bloco de instruções será executado (condição falsa).
A estrutura condicional composta em pseudocódigo tem a forma:
Se (Condição) então
{instruções a serem executadas caso a condição seja verdadeira}
Senão
{instruções a serem executadas caso a condição seja falsa}
FimSe
Exemplo: Vamos ver como ficaria o algoritmo temperatura, caso queiramos adicionar outra instrução (aviso
na tela) para o caso da condição não ser atendida (falsa).
Algoritmo AlarmeDeTemperatura2
Variáveis Temperatura: Real
19
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 20/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Início
Escreva “Informe a temperatura: ”
Leia Temperatura
Se (Temperatura > 120) então
Escreva “Atenção: temperatura acima do máximo permitido”
Escreva “Verifique o estado da válvula de ar frio”
Senão
Escreva “Temperatura está dentro da faixa esperada” FimSe
Fim
Comparando o algoritmo AlarmeDeTemperatura1 e o algoritmo AlarmeDeTemperatura2, a
diferença é que o segundo imprime a mensagem “Temperatura está dentro da faixa esperada”, no
caso de a condição (Temperatura > 120) ser falsa enquanto o algoritmo AlarmeDeTemperatura1
não executa nenhuma instrução.
Em C, a estrutura condicional composta tem a seguinte forma:
if (condição) {
Instrução 1 a ser executada caso a condição seja verdadeira Instrução 2 a ser executada caso a condição seja verdadeira .... Instrução n a ser executada caso a condição seja verdadeira
} else {
Instrução 1 a ser executada caso a condição seja falsa Instrução 2 a ser executada caso a condição seja falsa .... Instrução n a ser executada caso a condição seja falsa
} O algoritmo AlarmeDeTemperatura2 pode ser implementado em C da seguinte maneira:
#include <stdio.h>
#include <iostream>
float temperatura;
int main() {
printf(“Informe a temperatura: ”); scanf(“%f”, &temperatura);
if (temperatura > 120) {
printf(“Atenção: temperatura acima do máximo permitido”);
20
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 21/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
printf(“Verifique o estado da válvula de ar frio”); } else
{
printf(“Temperatura está dentro da faixa esperada”); } system (“PAUSE”); return 0;
}
Na estrutura condicional composta sempre um, e apenas um, dos blocos de instruções será
executado, ou o bloco que segue o teste if (condição) ou o bloco correspondente ao else. As
estruturas de decisão permitem, portanto, que o fluxo de execução de um programa não seja mais
sequencial conforme vimos até o momento, onde todas as instruções necessariamente serão
executadas. Com as estruturas de decisão, somente um trecho da condição será satisfeito e o(s) outro(s) trecho(s) jamais serão executados para aquela execução.
Estrutura condicional com múltiplas possibilidades de escolha (Aninhado):
A estrutura condicional com múltiplas possibilidades de escolha é bastante útil em
programação. São também conhecidas como condições “aninhadas”, pois consistem de uma
combinação de condições se...então agrupadas.
A estrutura geral em pseudocódigo é:
Se (Condição1) então
{conjunto de instruções caso condição1 seja verdadeira}
Senão Se (Condição2) então
{conjunto de instruções caso condição2 seja verdadeira}
Senão Se (Condição3) então
{conjunto de instruções caso condição3 seja verdadeira}
.
.
.
Senão Se (CondiçãoN) então
{conjunto de instruções caso condiçãoN seja verdadeira}
Senão
{conjunto de instruções caso nenhuma das N condições testadas seja verdadeira}
FimSe
Nessa estrutura condicional, são testadas N condições. Para cada uma delas, existe um
conjunto de instruções que será executado caso a condição seja verdadeira. Apenas um conjunto
de instruções será executado, aquele correspondente à primeira condição avaliada como
verdadeira. Se nenhuma das condições for verdadeira, será executado o conjunto de instruções do
correspondente ao Senão. Vale ressaltar que o comando Senão é opcional, ou seja, pode ou não existir.
21
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 22/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Exemplo:
Vejamos o algoritmo que informe o porte demográfico de uma cidade de acordo com o número de
habitantes informados:
Algoritmo TamanhoDaCidade
Variáveis Populacao: Inteiro
Início
Escreva “Informe o número de habitantes da cidade: ”
Leia Populacao
Se (Populacao < 100000) então
Escreva “Cidade pequena”
Senão Se ( (Populacao >=100000) E (Populacao <500000) )
Escreva “Cidade de porte médio”
Senão
Escreva “Cidade grande”. FimSe
Fim
Em C, a estrutura condicional com múltiplas possibilidades de escolha tem a forma:
if (condição1) {
Instrução 1 a ser executada caso a condição 1 seja verdadeira Instrução 2 a ser executada caso a condição 1 seja verdadeira .... Instrução n a ser executada caso a condição 1 seja verdadeira
} else if (condição2) {
Instrução 1 a ser executada caso a condição 2 seja verdadeira Instrução 2 a ser executada caso a condição 2 seja verdadeira .... Instrução n a ser executada caso a condição 2 seja verdadeira
} else if (condição3) {
Instrução 1 a ser executada caso a condição 3 seja verdadeira Instrução 2 a ser executada caso a condição 3 seja verdadeira .... Instrução n a ser executada caso a condição 3 seja verdadeira
} else if (condiçãoN)
22
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 23/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
{ Instrução 1 a ser executada caso a condição N seja verdadeira Instrução 2 a ser executada caso a condição N seja verdadeira .... Instrução n a ser executada caso a condição N seja verdadeira
} else {
Instrução 1 a ser executada caso todas as N condições seja falsa Instrução 2 a ser executada caso todas as N condições seja falsa .... Instrução n a ser executada caso todas as N condições seja falsa
} O algoritmo TamanhoDaCidade teria a seguinte implementação em C:
#include <stdio.h>
#include <iostream>
int populacao;
int main() {
printf(“Informe o número de habitantes na cidade: ”);
scanf(“%d”, &populacao); if (populacao < 100000)
printf(“Cidade Pequena”);
else if ( (populacao >=100000) && (populacao <500000) ) {
printf(“Cidade de médio porte”; } else
printf(“Cidade grande”); return 0;
system (“PAUSE”); }
Estrutura condicional com múltiplas possibilidades de escolha (“Escolha...Caso”):
Nos exemplos anteriores de estrutura condicional com múltiplas possibilidades de escolha, foi tratada a estrutura Se... Senão Se... FimSe. No entanto, quando as múltiplas possibilidades de
desvio de fluxo são escolhidas pela comparação de igualdade entre uma expressão única e uma
constante, pode‐se também utilizar a estrutura Escolha... Caso para que o código fique mais
“enxuto” e menos complexo, com maior clareza de entendimento para quem analisa sua execução
posteriormente.
Em pseudocódigo a forma geral da estrutura é:
23
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 24/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Escolha (expressão)
Caso <rótulo 1>: <bloco de instruções caso expressão seja igual a rótulo 1>
Caso <rótulo 2>: <bloco de instruções caso expressão seja igual a rótulo 2>
Caso <rótulo 3>: <bloco de instruções caso expressão seja igual a rótulo 3>
... Caso <rótulo N>:
<bloco de instruções caso expressão seja igual a rótulo N>
Senão
<bloco de instruções caso expressão seja diferente de todos os rótulos
de 1 a N>
FimEscolha
Compara‐se a expressão (no comando Escolha) com cada um dos rótulos de 1 a N. Se a
expressão for igual a algum dos rótulos, o bloco de instruções correspondente àquele rótulo será
executado. Caso a expressão não seja igual a nenhum dos rótulos será executado o bloco de
instruções que segue a palavra reservada Senão. O bloco do Senão é opcional. Caso não exista, nenhum comando é executado se a expressão for diferente de todos os rótulos.
Exemplo: Algoritmo que informa o nome do dia da semana de acordo com número digitado pelo usuário.
Algoritmo DiaDaSemana
Variáveis dia: Inteiro
Início
Escreva “Informe o número do dia da semana: ”
Leia dia
Escolha (dia) Caso 1:
Escreva “Domingo”
Caso 2: Escreva “Segunda‐feira”
Caso 3: Escreva “Terça‐feira”
Caso 4: Escreva “Quarta‐feira”
Caso 5: Escreva “Quinta‐feira”
Caso 6: Escreva “Sexta‐feira”
Caso 7: Escreva “Sábado”
Senão
24
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 25/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Escreva “Dia ”, dia, “não existe!”
FimEscolha
Fim
No algoritmo DiaDaSemana, o usuário digita o número do dia da semana. Se o número for
igual a algum dos inteiros de 1 a 7, exibe‐se a mensagem do dia correspondente. Se o número não
corresponder a um dia válido, a execução do algoritmo cai no bloco de instruções Senão, que
informa ao usuário que o dia não existe.
Em linguagem C, a estrutura Escolha... Caso é implementada pelos comandos switch... case, que
têm a forma geral:
switch (expressão) {
case <rótulo 1>: Instrução 1 a ser executada caso a expressão seja rótulo 1 Instrução 2 a ser executada caso a expressão seja rótulo 1 .... Instrução n a ser executada caso a expressão seja rótulo 1 break;
case <rótulo 2>: Instrução 1 a ser executada caso a expressão seja rótulo 2 Instrução 2 a ser executada caso a expressão seja rótulo 2 .... Instrução n a ser executada caso a expressão seja rótulo 2 break;
case <rótulo 3>: Instrução 1 a ser executada caso a expressão seja rótulo 3 Instrução 2 a ser executada caso a expressão seja rótulo 3 .... Instrução n a ser executada caso a expressão seja rótulo 3 break;
... case <rótulo N>:
Instrução 1 a ser executada caso a expressão seja rótulo N Instrução 2 a ser executada caso a expressão seja rótulo N .... Instrução n a ser executada caso a expressão seja rótulo N break;
default: Instrução 1 a ser executada caso expressão seja diferente de todos os rótulos Instrução 2 a ser executada caso expressão seja diferente de todos os rótulos .... Instrução n a ser executada caso expressão seja diferente de todos os rótulos break;
} 25
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 26/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Comparando as estruturas em pseudocódigo e em C, temos a seguinte equivalência:
Palavra‐chave em pseudocódigo Palavra‐chave em C
Escolha switch
Caso case
Senão default
Em C temos ainda um comando break no final de cada case. O comando break evita que se
façam outras comparações entre rótulos e expressão de teste assim que encontrarmos um rótulo
igual à expressão de teste, ou seja, após o rótulo da expressão atendido, seu bloco de intruções é
executado e o break força o programa a sair da estrutura switch case, sem testar nenhuma
condição a mais.
O algoritmo DiaDaSemana é equivalente ao seguinte código em C:
#include <stdio.h>
#include <iostream>
int dia;
int main() {
printf("Informe o número do dia da semana: ");
scanf("%d", &dia);
switch (dia) {
case 1: printf("\nDomingo"); break;
case 2: printf("\nSegunda‐feira"); break;
case 3: printf("\nTerça‐feira"); break;
case 4: printf("\nQuarta‐feira"); break;
case 5: printf("\nQuinta‐feira"); break;
case 6:
printf("\nSexta‐feira"); break;
case 7:
26
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 27/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
printf("\nSábado"); break;
default: printf("\nDia %d não existe!", dia);
}
system (“PAUSE”); return 0;
}
Porém, o código acima poderia também ser perfeitamente ter sido implementado com if... else if..., conforme a seguir:
#include <stdio.h>
int dia;
int main() {
printf("Informe o número do dia da semana: "); scanf("%d", &dia);
if (dia == 1) printf("\nDomingo");
else if (dia == 2) printf("\nSegunda‐feira");
else if (dia == 3) printf("\nTerça‐feira");
else if (dia == 4) printf("\nQuarta‐feira");
else if (dia == 5) printf("\nQuinta‐feira");
else if (dia == 6) printf("\nSexta‐feira");
else if (dia == 7) printf("\nSábado");
else
printf("\nDia %d não existe!", dia); system (“PAUSE”); return 0;
}
Cabe, então ao programador (você) a escolher a forma mais conveniente ou apropriada ao
seu problema.
Lembre‐se que um dos critérios para um código ser considerado bom ou “enxuto”, o
mesmo deve utilizar o menor número de linhas possíveis.
27
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 28/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Exemplos para praticar EM AULA:
Exercício 1
Faça um algoritmo que e informe se a pessoa é considerada obesa baseado no IMC (Índice de
Massa Corpórea) fornecido pelo usuário. Nota: Para ser considerado obeso o IMC deve ser
superior a 30.
Exercício 2
Agora, junto com um colega, tente implementar em o código C++ um programa para entrar com
um número e: ‐ escreva a raiz quadrada do número, caso seja positivo
‐ escreva o quadrado dele caso seja negativo. Dica: Neste caso, precisaremos da função sqrt () para fazer a raiz quadrada e pow() para fazer o
quadrado do número. Será necessário também a inclusão da biblioteca math.h para executar essa
funções.
Exercício 3: Escreva um algoritmo que analise novamente o IMC de uma pessoa. Caso seja maior ou igual 30
informar “Obesidade”, caso seja menor do 30 ou maior que 18, informar “Dentro da faixa Normal”
e caso seja menor ou igual, informar “Abaixo do Peso”.
Exercício 4: Dado uma letra (S,C, D ou V), informe o estado civil (Solteiro, Casado, Divorciado ou Viúvo).
Para praticar EM CASA:
Exercício 5
Numa fábrica, uma máquina precisa de manutenção sempre que o número de peças defeituosas
supera 10% da produção Dados o total de peças produzidas e o total de peças defeituosas
(fornecidos pelo usuário), faça um programa em C++ que informe se a máquina precisa de
manutenção.
Exercício 6
No exercício 2, o que acontecerá se o usuário entrar com o número 0 (zero)? Veja que não é
positivo e nem negativo. Como o programa o tratará? Como resolver esse problema, informando ao usuário que ele entrou com um número nulo (zero)? Altere o código do exemplo 1 para
resolver essa situação utilizando uma das estruturas de decisão com múltiplas possibilidades de
escolha. Qual a melhor? Por quê?
Exercício 7
Implemente em código C++, um programa no qual o usuário fornece dois números reais e um
caracter (A,S,M,D), representando adição, subtração, multiplicação e divisão respectivamente. Calcule e infome o resultado da operação escolhida. Faça também a previsão para um caracter
diferente das opções fornecidas (A,S,M, D) e informe ao usuário “Opção Inválida”.
Dica: para resolver essa situação utilize uma das estruturas de decisão com múltiplas possibilidades de escolha. Qual a melhor? Por quê?
28
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 29/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
UNIDADE IV
Estruturas de repetição:
Todos os programas vistos até aqui seguem uma estrutura linear de comandos, ou seja, os
comandos são executados na ordem em que são digitados. As estruturas de repetição permitem
que determinada parte do código seja executada repetidas. Nesse caso, o fluxo de execução não é
mais linear, pois pode permite que o programa volte a um inicial e repita se uma sequencia de
instruções novamente.
Existem três tipos principais de estruturas de repetição:
‐ repetição contada (repetição controlada por variável);
‐ repetição condicional com teste no início; ‐ repetição condicional com teste no final.
Estrutura de repetição contada (repetição controlada por variável):
A repetição contada é utilizada principalmente em situações em que sabemos a priori quantas vezes ela irá ocorrer.
Exemplo: Suponha que queiramos imprimir todos os números inteiros de 1 a 100. Com o conhecimento que
temos até aqui, o código para fazer um programa desses seria extremamente deselegante:
Algoritmo Imprime1a100VersaoLinear
Variáveis Início
Escreva 1
Escreva 2
Escreva 3
... Escreva 100
Fim
Utilizando a estrutura de repetição contada, poupamos muitas linhas de código e deixamos
o programa menos sujeito a erros de digitação:
Algoritmo Imprime1a100VersaoRepContada
Variáveis i: Inteiro
Início
Para i = 1 Até 100
Escreva i FimPara
Fim
29
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 30/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
No algoritmo Imprime1a100VersaoRepContada, a variável i funciona como um contador. Inicialmente, assume o valor 1 e depois é incrementada de um em um até que atinja o valor 100, condição que determina o término da repetição (loop). Para cada valor de i , executa‐se o comando
Escreva i . Isso é equivalente ao pseudocódigo abaixo:
Algoritmo Imprime1a100VersaoLinearEquivalenteRepeticao
Variáveis i : Inteiro
Início
i ←1
Escreva i
i ← i +1
Escreva i
i ← i +1
Escreva i
... i ← i +1
Escreva i Fim
É importante notar que a quantidade de vezes que o laço (loop) Para será executado pode
ser determinada em tempo de execução. Por exemplo, ao invés de imprimir os números inteiros de
1 a 100, poderíamos imprimir os números de 1 a N, em que N é um valor informado pelo usuário.
Veja o algoritmo a seguir:
Algoritmo Imprime1aN
Variáveis I, N: Inteiro
Início
Escreva “Informe quantos números deseja imprimir: ” Leia N
Para I = 1 Até N
Escreva I
FimPara
Fim
Em linguagem C, a repetição contada é feita pelo comando for. O comando for tem três
partes principais: inicialização, condição e incremento. A forma geral do comando for é:
for (<inicializacao>; <condicao>; <incremento>)
{ Instrução 1 a ser executada Instrução 2 a ser executada .... Instrução n a ser executada
}
30
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 31/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
As chaves do comando for podem ser omitidas caso o bloco de comandos seja composto
por apenas um comando. O código a seguir é o equivalente em C ao algoritmo para imprimir números de 1 a N:
/* Codigo fonte para imprimir numeros de 1 a N */
#include <stdio.h>
#include <iostream>
int i, N;
int main() {
printf(“Informe quantos numeros deseja imprimir: ”); scanf(“%d”, &N);
for (i = 1; i<=N; i++) printf(“%d ”, i);
system (“PAUSE”); return 0;
}
Loop Infinito Caso nada seja feito para tornar a condição se torne falsa, os comandos do laço se repetirão
infinitas vezes e teremos um loop infinito. Por exemplo, se omitíssemos o comando de incremento, o loop for seria executado infinitamente. Veja abaixo o código que cai em loop infinito.
/* Codigo fonte com problemas e que cai em loop infinito */
#include <stdio.h>
#include <iostream>
int i, N;
int main() {
printf(“Informe quantos numeros deseja imprimir: ”); scanf(“%d”, &N);
for (i = 1; i<=N; ) printf(“%d ”, i);
system (“PAUSE”); return 0;
}
31
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 32/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Veja que no algoritmo anterior, i seria sempre igual a 1 e, portanto, a condição para
finalização I<=N jamais seria alcançada.
Loop Flexível O loop for é bastante flexível. Poderíamos, por exemplo, mudar o comando de incremento
para imprimir apenas os números ímpares:
/* Codigo fonte para imprimir todos os numeros impares de 1 a N */
#include <stdio.h>
#include <iostream>
int i, N;
int main() {
printf(“Informe o maior numero da sequencia: ”); scanf(“%d”, &N);
for (i = 1; i<=N; i=i+2) // incremento de 2
printf(“%d ”, i);
system (“PAUSE”);
return 0; }
Poderíamos ainda imprimir os números de 1 a N em ordem decrescente:
/* Codigo fonte para imprimir todos os numeros de 1 a N em ordem decrescente */
#include <stdio.h>
#include <iostream>
int i, N;
int main() {
printf(“Informe quantos numeros deseja imprimir: ”); scanf(“%d”, &N);
for (i = N; i>0; i‐‐) // incremento de ‐1
printf(“%d ”, i);
system (“PAUSE”); return 0;
}
32
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 33/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Programa que calcula o fatorial de um número inteiro e positivo informado pelo usuário:
/* Programa que calcula o fatorial de N */
#include <stdio.h>
#include <iostream>
int main() {
int i; // contador int N; // numero para calcular fatorial int fat = 1; // valor do fatorial
printf("Informe N, o numero cujo fatorial deve ser calculado: "); scanf("%d", &N);
for (i = 2; i<=N; i++) {
fat = fat * i; }
printf("\nO valor do fatorial de %d eh %d", N, fat);
system (“PAUSE”); return 0;
}
Variável Auxiliar Programa que calcula a soma dos números inteiros compreendidos num intervalo
informado pelo usuário. Veja que necessitamos de uma variável auxiliar que permite que valores
entre duas variáveis sejam trocados entre si, sem a perda de nenhum deles.
/* Programa que calcula o fatorial de N */
#include <stdio.h>
#include <iostream>
int i; // contador
int aux; // variável auxiliar int lim1; // primeiro limite do intervalo
int lim2; // segundo limite do intervalo
int soma = 0; // resultado desejado
int main() {
33
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 34/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
printf("Informe o primeiro limite: "); scanf("%d", &lim1);
printf("\nInforme o segundo limite: ");
scanf("%d", &lim2);
if (lim2 < lim1) // trocar lim1 por lim2
{ aux = lim2; lim2 = lim1; lim1 = aux;
}
for (i = lim1; i<=lim2; i++)
{ soma = soma + i;
}
printf("\nO valor da soma eh %d ", soma);
system (“PAUSE”); return 0;
}
Estrutura de repetição condicional com teste no início:
Conforme o próprio nome indica, na estrutura de repetição condicional com teste no início, um bloco de comandos é executado dependendo da inspeção de uma expressão condicional colocada antes do bloco. Os comandos só são executados se a expressão for verdadeira e
enquanto ela for verdadeira os comandos do bloco continuam a ser executados.
Exemplo: Considere novamente o problema de mostrar todos os números inteiros de 1 a 100. Utilizando a
estrutura de repetição condicional com teste no início, a solução seria:
Algoritmo Imprime1a100VersaoEnquanto
Variáveis k: Inteiro
Início
k ← 1
Enquanto (k <= 100) Faça
Escreva k
k ← k+1
FimEnquanto
Fim
34
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 35/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Conforme se observa nesse problema de exemplo, a estrutura de repetição com teste no
início pode, com algumas adaptações, ser equivalente à estrutura de repetição contada. A
diferença nesse exemplo é que as operações de inicialização e incremento da variável k (que
funciona como contador) não são parte da construção base do loop mas são adicionadas à parte.
Em linguagem C, a estrutura de repetição com teste no início é implementada pelo
comando while, que é também o comando mais utilizado em outras linguagens, tais como Java, Matlab ou Pascal.
A forma geral do comando é:
while ( <condicao>) {
Instrução 1 a ser executada Instrução 2 a ser executada .... Instrução n a ser executada
}
As chaves do comando while podem ser omitidas caso o bloco de comandos seja composto
por apenas um comando. Comparando com o comando for, vemos que no caso do comando while as etapas de
inicialização e incremento não fazem parte da sintaxe do loop, apesar de poderem ser adicionadas
ao bloco de comandos e ao código que precede o comando while.
/* Codigo fonte para imprimir numeros de 1 a 100 utilizando o comando while */
#include <stdio.h>
#include <iostream>
int k = 1;
int main() {
while (k<=100)
{ printf(“%d ”, k); k = k+1;
}
system (“PAUSE”); return 0;
}
Exemplo:
Elabore um código que solicita vários salários até quando o salário digitado for 0 (zero) e imprima: - Total de pessoas com salário menor ou igual a R$540,00
- Total de pessoas com salário maior que R$5000,00.
35
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 36/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
#include <stdio.h>
#include <iostream>
#include <stdio.h>
#include <iostream>
float salario; int conta_salmenor=0; int conta_salmaior=0;
int main () {
printf ("PROGRAMA VERIFICA FAIXA SALARIAL");
printf ("\nPara sair digite salario igual a 0(zero)"); printf("\n\nInforme seu salario mensal: "); scanf ("%f",&salario);
while (salario!=0) {
if (salario<=540) conta_salmenor=1+conta_salmenor;
else if (salario>=5000) conta_salmaior=1+conta_salmaior;
printf("\nInforme seu salario mensal: "); scanf ("%f",&salario);
}
printf("\n\nNumero de pessoas <= R$540,00 ‐‐> %d\n", conta_salmenor);
printf("\n\nNumero de pessoas >= R$5000,00 ‐‐> %d\n\n", conta_salmaior);
system ("PAUSE"); return 0;
}}
Estrutura de repetição condicional com teste no final:
Lembremo‐nos da analogia em C da estrutura de repetição condicional com teste no início:
Estrutura de repetição condicional com teste
no início
while ( <condicao>) {
//comandos
}
Nessa estrutura, faz‐se o teste no início e, caso o resultado seja verdadeiro, executam‐se os
36
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 37/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
comandos do bloco. A condição é então testada novamente e os mesmos passos são repetidos até
que a condição seja falsa.
A estrutura de repetição condicional com teste no final tem funcionamento similar. No
entanto, os comandos são executados e só depois o teste é feito. Dessa forma, os comandos são
executados pelo menos uma vez.
A forma do comando em pseudocódigo é:
Faça
{Comandos} Enquanto (<condição>)
Exemplo: Considere um programa que dá permissões de acesso especiais a usuários que tenham
conhecimento de um código secreto.
Algoritmo CodigoSecretoComFacaEnquanto
Variáveis Codigo: Inteiro
Início
Faça
Escreva “Digite o código secreto: ”
Leia Codigo
Enquanto (Codigo <> 123456)
Escreva “Bem vindo ao sistema!”
Fim
A solução para o mesmo problema usando o loop while seria um pouco mais complicada:
Algoritmo CodigoSecretoComEnquanto
Variáveis Codigo: Inteiro
Início
Escreva “Digite o código secreto: ”
Leia Codigo
Enquanto (Codigo <> 123456) Faça
Escreva “Digite o código secreto: ”
Leia Codigo
FimEnquanto
Escreva “Bem vindo ao sistema!”
Fim
Em linguagem C, o Faça‐Enquanto é representado pelo comando do‐while, cuja sintaxe é:
do
37
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 38/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
{ Instrução 1 a ser executada Instrução 2 a ser executada .... Instrução n a ser executada
} while (<condicao>)
O exemplo do código secreto ficaria assim em linguagem C:
#include <stdio.h>
#include <iostream>
int codigo;
int main() {
do
{ printf("\n\nDigite o codigo secreto: "); scanf("%d", &codigo);
} while(codigo != 123456);
printf("Bem vindo ao sistema!\n");
system (“PAUSE”); return 0;
}
Uma das aplicações do comando do‐while é para forçar que o usuário escolha uma opção
válida entre alternativas pré‐definidas.
Exemplo: Veja o código a seguir e tente descobrir o que ele faz:
#include <stdio.h>
#include <iostream>
int x, y, opcao, resultado;
int main() {
printf("Informe x: "); scanf("%d", &x);
printf("\nInforme y: "); scanf("%d", &y);
38
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 39/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
do
{ printf ("\n\nEscolha a sua opcao: \n\n");
printf ("\t(1)...Somar x + y\n"); printf ("\t(2)...Subtrair x ‐ y\n"); printf ("\t(3)...Multiplicar x * y\n\n"); scanf("%d", &opcao);
} while ( (opcao <1) || (opcao >3) );
switch (opcao) {
case 1: resultado = x+y;
break; case 2:
resultado = x‐y; break;
case 3: resultado = x*y; break;
}
printf("\n\nResultado da operacao: %d", resultado);
system (“PAUSE”); return 0;
}
Veja que no código acima, a operação (somar, subtrair ou multiplicar) só será realizada
quando o usuário digitar uma opção válida. O laço do...while só é interrompido quando o usuário
digitar um número válido, neste caso, 1 a 3.
Outra aplicação usual é repetir um mesmo programa várias vezes, até que o usuário deseje
sair. Exemplo 3:
/* Programa que calcula a media de dois numeros repetidas vezes */
#include <stdio.h>
#include <iostream>
int resposta; float n1, n2, media;
int main() {
39
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 40/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
do
{ printf("\nInforme o primeiro numero: ");
scanf("%f", &n1); printf("\nInforme o segundo numero: "); scanf("%f", &n2); media = 0.5f * ( n1 + n2 ); printf("\nA media vale: %f", media); printf("\nDeseja repetir o programa?”); printf(“Digite: 1 – para Continuar e 0 – para Sair"); scanf("%d", &resposta);
} while (resposta == 1);
return 0; }
Para praticar EM AULA:
Exercício 1
Elabore em código C++, um programa para ler o número de alunos existentes em uma turma, ler
as notas destes alunos, e calcular a média aritmética destas notas.
Exercício 2
Agora, junto com um colega, tente implementar em o código C++ um programa para entrar com
um número e:
‐ escreva a raiz quadrada do número, caso seja positivo
‐ escreva o quadrado dele caso seja negativo.
Como pode perceber esse código já foi feito na unidade anteriot, porém agora você deverá
controlar através de uma das condições de repetição a execução desse programa da seguinte
forma: enquanto os números forem positivos ou negativos, o programa deverá continuar a ser
executado ininterruptamente sempre pedindo que o usuário em com novos números. O programa
só será interrompido quando o usuário digitar “0” (zero).
Após a finalização de seu código, teste para este caso a necessidade ou não de acrescentar
o system (“PAUSE”) ou não. Justifique sua experiência.
Exemplo 3: Dadas as notas duas de um aluno, informe sua média. Seu programa deve forçar o usuário a digitar
notas na faixa de 0 a 10, para então fazer a média.
Para
praticar
EM
CASA:
Exercício 4
40
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 41/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
Dados o número de pacientes de uma clinica, escreva um programa em C++ para ler o peso de
cada um dos pacientes. Informe o peso do paciente mais pesado.
Exercício 5
Escreva um programa em C++ que solicite a idade de várias pessoas e imprima: ‐ Total de pessoas com menos de 21 anos. ‐ Total de pessoas com mais de 50 anos.
O programa termina quando a idade for ‐99.
Exercício 7
Refaça o programa do Exercício 7 da unidade III para implementar uma estrutura de repetição as
seguinte maneira. O programa deverá exibir um menu com as seguintes opções: 1 – Somar
2 – Subtrair
3 – Multiplicar
4 – Dividir
5 – Sair
Após a escolha da opção, o usuário deve fornecer dois números e o programa dever mostrar o
resultado da operação escolhida. Faça também a previsão para um número diferente das opções
fornecidas e informe ao usuário “Opção Inválida”.
41
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 42/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
ANEXO I – PALAVRAS RESERVADAS
Palavras Reservadas na Linguagem C++
Na linguagem C++ existem palavras que são de uso reservado, ou seja, que possuem
funções específicas na linguagem de programação e não podem ser utilizadas para outro fim, como por exemplo, ser usada como nome de variável. Por exemplo, a palavra reservada “for”
serve para chamar um laço de repetição, e não pode ser utilizada como nome de uma variável.
A lista abaixo relaciona as palavras reservadas da linguagem C++:
asm auto bool break case
catch char class const cast
Continue default delete do double Dynamic_cast else enum explicit export
extern false float for friend
goto if inline int long
mutable namespace new operator private
protected public register reinterpret_cast return
short signed sizeof static static_cast
struct switch template this throw
true try typedef typeid typename
union unsigned using virtual void
Volatile wchar_t while
É importante também notar que a linguagem C++ diferencia letras maiúsculas e
minúsculas, ou seja, char é uma palavra reservada de C++ mas CHAR ou ChAr não é (entretanto,
normalmente desaconselha‐se o uso dessa diferenciação por atrapalhar a legibilidade do código).
42
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 43/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
ANEXO II – FUNÇÕES DAS BIBLIOTECAS
Bibliotecas C++
Em C++, a biblioteca é uma coleção de classes, funções e variáveis escritas na própria linguagem
para facilitar o desenvolvimento de aplicações. Também incorpora bibliotecas do C.
Importante ressaltar que as bibliotecas do C++ não possuem o .h, como as bibliotecas do C.
Exemplo: <stdio.h> (biblioteca do C) <algorithm> (biblioteca do C++)
Funções das Bibliotecas do C
#include <stdio.h> ‐ Essa biblioteca é responsável pela entrada e saída "Standard In/Out", ou
melhor, entrada e saída padrão. Nela encontramos funções para esse tipo de coisa, o que pode ser a leitura do teclado, escrita formatada (ou não) na tela e operações com arquivos.
Algumas funções dessa biblioteca: fprintf, printf, fscanf, scanf, getchar, putc, getc, fopen e fclose.
#include <ctype.h> ‐ Esta biblioteca serve para testar caracteres. Testar se é maiúsculo, testar se é
minúsculo, testar se é espaço, testar dígito decimal... Além disso, essa biblioteca permite converter
maiúscula em minúscula e vice‐versa. Algumas funções dela: isupper, islower, isspace, isdigit, toupper e tolower.
#include <string.h> ‐ A biblioteca string é responsável por disponibilizar funções para trabalhar
com conjuntos de caracteres, isto é, "strings". Possui dois grupos de comandos, os que começam com str e os que começam com mem. O primeiro grupo permite, por exemplo: copiar, concatenar, comparar e ver o tamanho de uma string. As funções referentes a isso são: strcpy, strcat, strcmp e
strlen. As funções do segundo grupo mencionado fazem coisas semelhantes como copiar, mover e
comparar: memcpy, memmove, memcmp.
#include <math.h> ‐ Está biblioteca declara funções matemáticas que podem servir para: achar a
raiz quadrada, achar o seno, co‐seno, tangente, logaritmo na base 10. As funções referentes a isso
são: sqrt, sin, cos, tan, log10. Fora isso, um outro uso para declaração desta biblioteca é a
possibilidade de arredondar um número. Para isso usamos a função que retorna o valor absoluto: fabs.
#include <stdlib.h> ‐ Ela é responsável pela conversões de números, as alocações na memórias e
outras funções. Com ela podemos converter um "char" em um "double", converter um "char" para
"long", criar um número randômico, alocar na memória, realocar na memória, desalocar da
memória, execução de comandos do sistema operacional respectivamente. As funções citadas
são: atof, atol, rand, malloc, realloc, free e system. Também não podia deixar de falar que ela
retorna o valor absoluto de um número inteiro usando abs.
#include <time.h> ‐ Esta biblioteca declara funções para manipularmos a data e hora. Podemos
usar esta biblioteca para pegar o horário do processador, pegar o horário do sistema, fazermos a
diferença
entre
dois
horários.
As
funções
referentes
são:
clock,
time
e
difftime.
#include <stddef.h> ‐ Este arquivo define macros e tipos de uso geral em programas: NULL, offsetof, ptrdiff_t, size_t e muitos outros.
43
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 44/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
#include <windows.h> ‐ Todas as definições de janelas: criar, abrir, etc. É um arquivo cabeçalho
grande com cerca de 500 mega de definições. Saiba que o lcc‐win32 incorpora neste arquivo
muitos dos arquivos que normalmente são individualizados em outras distribuições (como o
winbase.h, por exemplo).
Outras bibliotecas do C: #include <assert.h>, #include <complex.h>, #include <ctype.h>, #include
<errno.h>, #include <fenv.h>, #include <float.h>, #include <inttypes.h>, #include <iso646.h>, #include <limits.h>, #include <locale.h>, #include <setjmp.h>, #include <signal.h>, #include
<stdarg.h>, #include <stdbool.h>, #include <stddef.h>, #include <stdint.h>, #include <stdint.h>, #include <tgmath.h>, #include <wchar.h>, #include <wctype.h>
Funções das Bibliotecas do C++
#include <algorithm> ‐ Este cabeçalho fornece diversos algoritmos genéricos úteis para busca, ordenação e transformação de containers (estruturas de dados), entre outros.
#include <fstream> ‐ É um manipulador de fluxos de dados de arquivos de computador
especializado para o tipo de dado nativo char. Ele permite ler e escrever em modo de texto. A
biblioteca padrão também fornece classes para casos de uso de (std::fstream) somente para leitura
(std::ifstream) ou somente para escrita (std::ofstream).
#include <functional> ‐ Este cabeçalho fornece suporte para funções‐objeto, classes que
encapsulam funções de forma que a instância da classe possa ser invocada tal qual uma função
qualquer. O cabeçalho ainda define algumas funções‐objeto de uso geral tais como operações
aritméticas e
lógicas.
Um
exemplo
é
equal_to,
uma
função
‐objeto
binária
que
testa
se
dois
valores
são iguais. Nada mais é que uma função de comparação genérica encapsulada em uma classe.
#include <iostream> ‐ Este cabeçalho é responsável pela manipulação de fluxo de dados padrão do
sistema (entrada padrão, saída padrão e saída de erros padrão) e representa uma evolução do
cabeçalho <stdio.h> da linguagem C. São apresentados os objetos cin, cout, cerr e clog para o envio
e recebimento de dados dos fluxos de entrada, saída, erro sem buffer e erro com buffer, respectivamente;
#include <locale> ‐ Este cabeçalho manipula diversas convenções culturais do utilizador, como a
representação de números, moeda e datas, para efeitos de internacionalização. A biblioteca faz
uso da faceta, uma interface para um serviço dum locale específico. Cada locale possui um conjunto de facetas. O construtor padrão da classe std::locale define uma cópia do locale da
máquina executando o programa, com as convenções atuais do utilizador.
#include <map> ‐ O container std::map<Key, Data, Compare, Alloc> é um conjunto associativo
ordenado que mapeia objetos do tipo Key (a chave) em objetos do tipo Data (o valor). As chaves
são únicas: se um objeto é inserido com uma chave já existente, o valor presente é substituído pelo
valor inserido. Internamente, os elementos do mapa são ordenados através das chaves. Uma
variação do container é o std::multimap, que permite chaves repetidas.
#include <set> ‐ O container std::set<Key, Compare, Alloc> é um conjunto associativo que permite
acesso aleatório rápido aos dados. Difere do container std::map pois os valores dos elementos
também são suas chaves. Por esse motivo, cada valor (e, portanto, sua chave) é único, não pode
repetir. O container pode ser acessado de forma bidirecional, a partir do começo ou do fim. A
44
5/10/2018 Notasdeaula Algoritmoseprogramacao Ele Eca - slidepdf.com
http://slidepdf.com/reader/full/notasdeaula-algoritmoseprogramacao-ele-eca 45/45
Faculdade Pitágoras Engenharia Elétrica / Automação
Algoritmos e Programação 2º semestre 2011
Professora: Silvana Diniz NOTAS DE AULA
45
implementação interna do container geralmente é uma árvore de busca binária. Uma variação do
container é o std::multiset, um multiconjunto associativo, que permite valores repetidos.
#include <sstream> ‐ std::stringstream é um manipulador de fluxos de dados de cadeias de
caracteres especializado para o tipo de dado nativo char. Ele permite ler e escrever em modo de texto. A biblioteca padrão também fornece classes para casos de uso de std::stringstream somente
para leitura (std::istringstream) ou somente para escrita (std::ostringstream).
#include <string> ‐ O container std::string é uma cadeia de caracteres especializada para o tipo de
dado nativo char. Ele remove vários dos problemas introduzidos pela linguagem C ao confiar no
programador no gerenciamento de cadeias de caractere, encapsulando internamente rotinas e
considerações que o programador não precisa tomar conhecimento.
#include <vector> ‐ O container std::vector é um arranjo e generaliza o conceito dum vetor em C. Pode ser acessado através de índices para os elementos assim como em C (através de uma
sobrecarga do operador adequado) e sua memória é alocada de forma contígua. Entretanto, diferente dum vetor em C, o tamanho do container é dinâmico com gerenciamento automático e
há uma flexibilidade maior para adicionar elementos.
Outras bibliotecas do C++: #include <functional>, #include <iterator>, #include <locale>, #include
<memory>, #include <stdexcept>, #include <utility>, #include <fstream>, #include <ios>, #include
<iostream>, #include <iosfwd>, #include <iomanip>, #include <istream>, #include <ostream>, #include <sstream>, #include <streambuf>, #include <complex>, #include <numeric>, #include
<valarray>, #include <cassert>, #include <cctype>, #include <cerrno>, #include <cfloat>, #include
<climits>, #include <cmath>, #include <csetjmp>, #include <csignal>, #include <cstdlib>, #include
<cstddef>, #include <cstdarg> ,#include <ctime>, #include <cstdio>, #include <cstring>, #include <cwchar>, #include <cwctype>
Top Related