Buscar

Algoritmos e Lógica de Programação

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

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

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ê viu 3, do total de 121 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

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

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ê viu 6, do total de 121 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

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

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ê viu 9, do total de 121 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

Prévia do material em texto

Lógica de Programação
Ricardo Terra
rterrabh [at] gmail.com
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 1 / 120
CV
Nome: Ricardo Terra
Email: rterrabh [at] gmail.com
www: ricardoterra.com.br
Twitter: rterrabh
Lattes: lattes.cnpq.br/ 0162081093970868
Ph.D. (UFMG/UWaterloo),
Post-Ph.D. (INRIA/Université Lille 1)
Background
Acadêmico : UFLA (desde 2014), UFSJ (1 ano ), FUMEC (3 anos ), UNIPAC (1 ano ), FAMINAS (3 anos )
Profissional : DBA Eng. (1 ano ), Synos (2 anos ), Stefanini (1 ano )
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 2 / 120
Conteúdo
1 Introdução
Arquitetura de um Sistema de Computador
Histórico da Computação
Utilização dos Computadores
2 Lógica Proposicional
3 Algoritmos e Programação Estruturada
4 Portucol
5 Algoritmos com Qualidade
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 3 / 120
Introdução
Arquitetura de um Sistema de Computador
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 4 / 120
Introdução – Arquitetura de um Sistema de Computador
Nessa seção, veremos:
Arquitetura de um sistema de computação
Memória
Unidade Central de Processamento (CPU)
Periféricos (dispositivos de entrada e saída)
Teclado
Mouse
Monitor
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 5 / 120
Introdução – Arquitetura de um Sistema de Computador
Explicando...
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 6 / 120
Introdução – Arquitetura de um Sistema de Computador
Periféricos (dispositivos de entrada e saída)
Objetivo: prover dados ao computador e obter respostas
do processamento
Dispositivos
Teclado e mouse
Dispositivos de entrada comum. Existe mais algum?
Monitor
Dispositivo de saída comum. Existe mais algum?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 7 / 120
Introdução – Arquitetura de um Sistema de Computador
Memória
Objetivo: armazenar dados ou programas (sequências de
instruções) em um base temporária ou permanente
Dispositivos
ROM, RAM, HD... Existe mais algum?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 8 / 120
Introdução – Arquitetura de um Sistema de Computador
Unidade Central de Processamento (CPU)
Também conhecido como processador
É a parte de um computador que realiza a maior parte do
processamento
CPU e memória constituem a parte central de um
computador, no qual os periféricos serão anexados
Veremos a arquitetura Von Neumann
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 9 / 120
Introdução – Arquitetura de um Sistema de Computador
Resumo do que realmente importa
Programas residem na memória
As instruções de um programa – soma, divisão, atribuição,
laços de repetição, instruções condicionais etc – são
executadas pela CPU
Os dados necessários para execução do programa são
obtidos pelos dispositivos de entrada (mouse, teclado, por
exemplo) e os resultados são apresentados através dos
dispositivos de saída (monitor, por exemplo)
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 10 / 120
Introdução
Histórico da Computação
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 11 / 120
Introdução – Histórico da Computação
Nessa seção, veremos:
Histórico da Computação
Existem mil modos de abordar esse assunto, mas aqui vamos
falar o mais relevante ao curso
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 12 / 120
Introdução – Histórico da Computação
Arquitetura Von Neumann
Von Neumann, temático húngaro, naturalizado
norte-americano, propôs nos anos 40 do século XX, um
padrão de arquitetura de computadores utilizado até os
dias de hoje
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 13 / 120
Introdução – Histórico da Computação
Necessidade
Antigamente, processamentos em geral, como cálculos
matemáticos complexos, folhas de pagamento etc
Atualmente, sistemas bancários, ERP, sistemas de gestão,
sistemas web etc
Necessidade
Enfim, o que um computador faz bem?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 14 / 120
Introdução – Histórico da Computação
Necessidade
Antigamente, processamentos em geral, como cálculos
matemáticos complexos, folhas de pagamento etc
Atualmente, sistemas bancários, ERP, sistemas de gestão,
sistemas web etc
Necessidade
Enfim, o que um computador faz bem? REPETIÇÃO!
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 14 / 120
Introdução – Histórico da Computação
Paradigmas de Programação
Procedural (imperativo) – Antigamente e atualmente
É um paradigma de programação que descreve a
computação como ações (instruções) que mudam o estado
(variáveis) de um programa. Muito parecido com o
comportamento imperativo das linguagens naturais que
expressam ordens, programas imperativos são uma
sequência de comandos para o computador executar
Orientado a objetos – Atualmente
É um paradigma de programação que utiliza “objetos” e a
interação entre eles para projetar aplicações e programas
de computador. Suas técnicas de programação podem
incluir características como encapsulamento, polimorfismo e
herança. Esse paradigma não era comumente usado no
desenvolvimento de aplicações de grande porte até início
de 1990. Atualmente, várias linguagens modernas suportam
POO
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 15 / 120
Introdução – Histórico da Computação
Linguagens – Evolução
Assembly
Pascal
C
C++
PHP
Java
.NET (C#, J#...)
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 16 / 120
Introdução
Utilização dos Computadores
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 17 / 120
Introdução – Utilização dos Computadores
Nessa seção, veremos:
Conceito de programa e sistema
Linguagem de alto nível e baixo nível
Compiladores / Interpretadores
Codificação ASCII
Áreas de aplicação dos computadores
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 18 / 120
Introdução – Utilização dos Computadores
Programa x Sistema
Programa
Concretização de um algoritmo em alguma linguagem de
programação
ou
Uma sequência de instruções que descrevem uma tarefa a
ser realizada por um computador
Sistema
Grupo de componentes de hardware e sistemas de software,
projetados e montados para executar uma função
específica ou grupo de funções
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 19 / 120
Introdução – Utilização dos Computadores
Níveis de linguagem
Representa o nível de abstração da linguagem
Quanto mais longe do código de máquina (ou, em outras
palavras, quanto mais próximo à linguagem humana) mais
alto é o seu nível
Níveis:
Alto: Pascal, COBOL, Java...
Médio: C, C++...
Baixo: Assembly...
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 20 / 120
Introdução – Utilização dos Computadores
Compiladores X Interpretadores
Interpretador lê o código-fonte linha a linha, executando a
instrução específica daquela linha
Compilador lê o programa inteiro, converte-o em um
código-objeto (ou código de máquina) de modo que o
computador consiga executá-lo diretamente
Qual é mais rápido?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 21 / 120
Introdução – Utilização dos Computadores
Codificação ASCII
Códigos ASCII representam texto em computadores,
equipamentos de comunicação e outros dispositivos que
utilizam texto
Por exemplo, o computadornão sabe o que é A, mas se
você informar 65 e dizer que é um caractere, ele saberá
que refere-se ao caractere A
Na verdade, na verdade mesmo, ele nem sabe o que é 65,
sabe o que é 01000001
Veja a tabela ASCII em: http://www.asciitable.com
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 22 / 120
Introdução – Utilização dos Computadores
Áreas de aplicação de computadores
Praticamente TODAS, alguns exemplos:
Sistemas de grande porte
Sistemas web
Banco de dados
Bolsa de valores
Processamentos pesados
Estatística
...
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 23 / 120
Conteúdo
1 Introdução
2 Lógica Proposicional
Introdução
Material
3 Algoritmos e Programação Estruturada
4 Portucol
5 Algoritmos com Qualidade
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 24 / 120
Lógica Proposicional
Introdução
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 25 / 120
Lógica Proposicional – Introdução
Introdução
Antes de entrarmos com desenvolvimento de algoritmos, é
interessante aprendermos a organizar nossas ideias e saber
como organizá-las
Nesse intuito, é apresentada um pouco da lógica
proposicional para que vocês treinem formalização em
linguagens não naturais
No caso, uma linguagem matemática
No futuro, Portugol e C
Este capítulo servirá como uma base forte para a nossa
disciplina, cujos resultados começarão a logo perceber
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 26 / 120
Lógica Proposicional – Introdução
Problema do Bezerro
Em uma fazenda existem 20 vacas e seus 21 bezerros. Nenhuma
possui dois bezerros.
É possível existir tal fazenda?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 27 / 120
Lógica Proposicional – Introdução
Paradoxo do Barbeiro
Em uma determinada cidade:
Todo homem que é capaz de se barbear, o faz
O barbeiro da cidade faz a barba daqueles – e apenas
daqueles – que não são capazes de se barbear
É possível existir tal cidade?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 28 / 120
Lógica Proposicional – Introdução
Problema do Peão e do Cavaleiro
Peões mentem, cavaleiros dizem a verdade.
Em um grupo, você pergunta para a pessoa A: “Quantos de vocês
são cavaleiros?”. A responde, mas você não entende a resposta.
Você então pergunta para a pessoa B: “O que ele disse?” e a
resposta é: “Ele disse que exatamente dois de nós somos peões”.
Então, C comenta: "Ele (B) está mentindo".
C é um cavaleiro ou um peão?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 29 / 120
Lógica Proposicional
Material
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 30 / 120
Lógica Proposicional – Material
Material
Iremos utilizar o material do Prof. Dr. Newton José Vieiraa,
um dos melhores e mais renomados professores da
Universidade Federal de Minas Gerais (UFMG)
Vejam materiais:
logicaproposicional_apostila.pdf
logicaproposicional_slides.pdf
awww.dcc.ufmg.br/~nvieira
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 31 / 120
Conteúdo
1 Introdução
2 Lógica Proposicional
3 Algoritmos e Programação Estruturada
Conceitos Importantes
4 Portucol
5 Algoritmos com Qualidade
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 32 / 120
Algoritmos e Programação Estruturada
Conceitos Importantes
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 33 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Nessa seção, veremos:
Algoritmos e Programação Estruturada
Algoritmo
Estrutura de dados
Programação estruturada
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 34 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Algoritmo
“Um algoritmo é a descrição de um padrão de
comportamento, expressado em termos de um repertório
bem definido e finito de ações “primitivas”, das quais
damos por certo que elas podem ser executadas.”
ou
“Um algoritmo é, em outras palavras, uma norma
executável para estabelecer um certo efeito desejado, que
na prática será geralmente a obtenção de uma solução a
um certo tipo de problema.”
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 35 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Exemplo – Algoritmo para descascar as batatas para o jantar
" traga a cesta com batatas do porão" ;
"pegue a panela no armár i o " ;
se ( " saia é clara " ) {
" coloque avental " ;
}
enquanto ( " número de batatas é in su f ic ien te " ) {
" descasque uma batata " ;
}
" devolva a cesta ao porão" ;
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 36 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Estrutura de dados
Representam as informações do problema a ser resolvido
A formulação do algoritmo e a definição das estruturas de
dados estão intimamente ligadas
Enfim
“decisões sobre a estruturação de dados não podem ser
feitas sem conhecimento dos algoritmos aplicados a eles”
e
“a estrutura e a escolha dos algoritmos depende muitas
vezes fortemente da estrutura dos dados”
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 37 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Estrutura de dados
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 38 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Qual das estruturas de dados anteriores é melhor para:
retornar os elementos ordenados?
pesquisar um elemento?
acrescentar um elemento?
inserir um elemento?
remover um elemento?
alterar o valor de um elemento?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 39 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Programa
Programas são formulações concretas de algoritmos
abstratos, baseados em representações e estruturas
específicas de dados
Programar é basicamente construir algoritmos
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 40 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Programação Estruturada
Basicamente, uma metodologia de projeto de programas
visando:
Facilitar a escrita dos programas
Facilitar a leitura (o entendimento) dos programas
permitir a verificação a priori dos programas
facilitar a manutenção e modificação dos programas
Todos os programas podem ser reduzidos a apenas três
estruturas:
sequência
decisão
iteração
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 41 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Programação Estruturada – Exemplo
1 pr incipal ( ) {
i n t e i r o i = 1; /∗ Declarando um i n t e i r o ∗/
3 imprima ( "Números pares até 100: " ) ;
enquanto ( i <= 100) {
5 se ( i mod 2 == 0) {
imprima ( i ) ;
7 }
i = i + 1;
9 }
}
Observações
Observe a sequência, a decisão e a iteração
Não se preocupe com sintaxe, veremos o PortuCol logo
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 42 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Exercícios Propostos
Escreva um algoritmo para:
Ler um número e dizer se é par ou ímpar
Ler dois números x e y e imprimir xy
Ler um caractere e dizer se é vogal ou consoante
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 43 / 120
Algoritmos e Programação Estruturada – Conceitos Importantes
Exercício Proposto
Dada amodelagem acima, pense em um algoritmo para:
descobrir o menor caminho entre duas cidades (Dijsktra)
resolver o problema do caixeiro viajante
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 44 / 120
Conteúdo
1 Introdução
2 Lógica Proposicional
3 Algoritmos e Programação Estruturada
4 Portucol
Introdução
Comandos Básicos
Arranjos
Funções
5 Algoritmos com Qualidade
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 45 / 120
Portucol
Introdução
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 46 / 120
Portucol – Introdução
Nessa seção, veremos:
Portucol
Introdução à linguagem (adaptação do Portugol para C)
Sintaxe e semântica dos comandos básicos
Leitura e escrita de algoritmos
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 47 / 120
Portucol – Introdução
Portucol
Pseudolinguagem de programação inspirada no
conhecido Portugol
Objetivo:
Obter uma notação para algoritmos a ser utilizada na
definição, na criação, no desenvolvimento e na
documentação de um programa
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 48 / 120
Portucol – Introdução
Regras Básicas
Os comandos devem ser escritos sempre em caixa baixa
Ao final de cada comando deverá ser colocado um ponto
e vírgula (;)
Os nomes das variáveis e identificadores devem:
ser compostos por letras (caixa baixa) e números, mas
devem começar com uma letra
Ex: idade, nome, a4...
O algoritmo deve ser escrito de forma estruturada e
indentada
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 49 / 120
Portucol – Introdução
Tipos de Dados
Inteiro
qualquer número inteiro, negativo, nulo ou positivo
Ex: -5, 0, 12 ...
Real
qualquer número real, negativo, nulo ou positivo
Ex: -5, 30.5, 0, 40.1, -5.2 ...
Caractere
um caractere alfanumérico, exemplo: ‘A’, ‘a’, ‘0’ ...
String
conjunto de caracteres alfanuméricos
Ex: “Lógica”, “LP”, “Carnaval” ...
Lógico
verdadeiro ou falso
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 50 / 120
Portucol – Introdução
Declaração de variáveis
inteiro idade;
real preco;
caractere inicial;
String nome;
lógico flag;
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 51 / 120
Portucol – Introdução
Comentários
É recomendado e muito importante inserir comentários em
seus códigos
Os comentários devem estar entre /* e */
Exemplo
pr incipal ( ) {
2 i n t e i r o i = 1; /∗ Declarando um i n t e i r o ∗/
imprima ( "Números pares até 100: " ) ;
4 enquanto ( i <= 100) {
se ( i mod 2 == 0) { /∗ se o resto fo r 0 é par ∗/
6 imprima ( i ) ;
}
8 i = i + 1; /∗ incrementa contador ∗/
}
10 } /∗ f im da func´ão pr inc ipal ∗/
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 52 / 120
Portucol – Introdução
Operadores
= atribuição
+ soma
- subtração
* multiplicação
/ divisão
% resto (pode ser mod também)
Funções mais comuns
sqrt raiz quadrada ex: sqrt(4)
pow exponenciação ex: pow(3,2) (equivale a 32)
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 53 / 120
Portucol – Introdução
Operadores Relacionais
== comparação
!= diferente
<= menor ou igual
>= maior ou igual
> maior
< menor
Operadores Lógicos
e conjunção
ou disjunção
não negação
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 54 / 120
Portucol – Introdução
Precedência
1 ( )
2 funções
3 * /
4 + -
5 ==, !=, <, <=, >, >=
6 não
7 e
8 ou
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 55 / 120
Portucol – Introdução
Comando de entrada
leia
Faz a leitura de qualquer variável
Ex: leia(x)
imprima
Faz a impressão de qualquer variável e texto
Exemplos:
imprima(x);
imprima(“O valor digitado foi $x”)
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 56 / 120
Portucol
Comandos Básicos
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 57 / 120
Portucol – Comandos Básicos
Comandos condicionais - se
Sintaxe do comando se
se ( condicao ) {
comando1;
comando2;
comando3;
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 58 / 120
Portucol – Comandos Básicos
Observações:
Os parênteses que envolvem a condição são
OBRIGATÓRIOS
A condição deverá retornar um tipo lógico
Os comandos somente serão executados se a condição for
verdadeira
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 59 / 120
Portucol – Comandos Básicos
Comandos condicionais - se
O uso dos braços NÃO é obrigatório caso seja apenas um
único comando
Porém, a boa prática recomenda a utilização de braços
independente do número de comandos
Melhor indentação do código
se ( verdade ) comando;
equivale a:
se ( verdade ) {
comando;
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 60 / 120
Portucol – Comandos Básicos
Comandos condicionais - se
Como faço o conhecido:
se verdade então . . . senão . . .
se ( condicao ) {
comando1;
comando2;
comando3;
} senão {
comando4;
comando5;
comando6;
}
Pergunta-se
Quais comandos serão executados se a condição for
verdadeira? E se for falsa?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 61 / 120
Portucol – Comandos Básicos
Comandos condicionais - se
1 pr incipal ( ) {
i n t e i r o a, b;
3 le ia (a ) ;
le ia (b ) ;
5 se ( a >= b ) {
imprima ( "$a e maior ou igual a $b ! " ) ;
7 } senão {
imprima ( "$a e menor que $b ! " ) ;
9 }
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 62 / 120
Portucol – Comandos Básicos
Comandos condicionais - se
Comando se podem ser aninhados
1 pr incipal ( ) {
i n t e i r o nota ;
3 le ia (nota ) ;
se ( nota >= 90 ) {
5 imprima ( " Nota A" ) ;
} senão se ( nota >= 80 ) {
7 imprima ( " Nota B " ) ;
} senão se ( nota >= 70 ) {
9 imprima ( " Nota C" ) ;
} senão {
11 imprima ( "Reprovado" ) ;
}
13 }
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 63 / 120
Portucol – Comandos Básicos
Exemplo se
pr incipal ( ) {
2 caractere op;
le ia (op ) ;
4 se (op == ’+ ’ ou op == ’−’ ) {
imprima ( " Operador de Baixa Prior idade " ) ;
6 } senão se (op == ’ / ’ ou op == ’∗ ’ ) {
imprima ( " Operador de Alta Pr ior idade " ) ;
8 } senão {
imprima ( " Operador Invál ido " ) ;
10 }
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 64 / 120
Portucol – Comandos Básicos
Exercício de Fixação 01
Crie um algoritmo que leia dois números inteiros e imprima a
soma, a subtração, a multiplicação, a divisão e o resto da
divisão entre esses dois números.
Observe que o valor do segundo número não deve ser 0,
portanto faça um se para evitar isto.
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 65 / 120
Portucol – Comandos Básicos
Exercício de Fixação 02
Crie um algoritmo que leia os dois catetos de um triângulo
(números reais a e b) e calcule a hipotenusa:
h2 = a2 + b2
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 66 / 120
Portucol – Comandos Básicos
Comandos repetição (enquanto, faça...enquanto e para)
Comandos de repetição são utilizados para repetir um
bloco de código
Veremos três comandos de repetição:
enquanto
faça...enquanto
para
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 67 / 120
Portucol – Comandos Básicos
Comandos repetição - enquanto
O comandoenquanto é utilizado para repetir um bloco de
acordo com uma condição
É considerado um loop de pré-teste
Isto é, testa a condição antes de executar o bloco
Sintaxe:
enquanto ( condicao ) {
comando1;
comando2;
comandoN;
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 68 / 120
Portucol – Comandos Básicos
Comandos repetição - enquanto
1 pr incipal ( ) {
i n t e i r o i = 0;
3
enquanto ( i < 10 ) {
5 imprima ( i ) ;
i = i + 1;
7 }
}
Pergunta-se
Qual a saída?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 69 / 120
Portucol – Comandos Básicos
Exercício de Fixação
Faça um algoritmo que liste todos os números de 0 a 100
divisíveis por 3
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 70 / 120
Portucol – Comandos Básicos
Comandos repetição - faça...enquanto
O comando faça...enquanto é semelhante ao enquanto,
contudo é um comando de repetição de pós-teste
Isto é, somente ao final da execução do bloco que se
verifica a condição
Geralmente, é utilizado quando se deseja testar a
condição somente a partir da segunda iteração
Por exemplo, uma leitura da opção de um menu. Pede para
digitar uma primeira vez. Somente se não digitar uma opção
válida que pede para digitar novamente
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 71 / 120
Portucol – Comandos Básicos
Sintaxe:
fac´a {
comando1;
comando2;
comandoN;
} enquanto ( condicao ) ;
Observe o ponto-e-vírgula após os parênteses da condição. Não o esqueça!
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 72 / 120
Portucol – Comandos Básicos
Comandos repetição - faça...enquanto
pr incipal ( ) {
i n t e i r o i = 0;
fac´a {
imprima ( i ) ;
} enquanto ( 1 != 1 ) ;
}
Pergunta-se
Qual a saída?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 73 / 120
Portucol – Comandos Básicos
Exemplo
pr incipal ( ) {
i n t e i r o i ;
fac´a {
imprima ( " D ig i te um numero entre 0 e 10: " ) ;
le ia ( i ) ;
} enquanto ( i < 0 ou i > 10 ) ;
imprima ( " "Numero digitado : $ i " ) ;
}
Pergunta-se
Qual a saída?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 74 / 120
Portucol – Comandos Básicos
Exercício de Fixação
Faça um algoritmo que estipule um número mágico (entre 0 e
100) e peça para o usuário digitar números até que ele acerte.
Quando não acertar, diga se o número mágico é menor ou
maior que o número que ele digitou.
Por exemplo:
Número mágico estipulado: 7
1a tentativa: 90 (número mágico é menor)
2a tentativa: 4 (número mágico é maior)
3a tentativa: 7 (parabéns!)
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 75 / 120
Portucol – Comandos Básicos
Comandos de repetição - para
Comando de repetição mais poderoso do Portucol
É composto por:
Inicialização: executado uma única vez no início do loop
Condição: executado sempre antes de cada iteração. Se
verdadeira, o bloco é executado. Se falsa, é finalizado
Operação : executado sempre ao término de cada iteração
Sintaxe
para ( i n ic ia l i zacao ; condicao ; operacao ) {
comando1;
comando2;
. . .
comandoN;
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 76 / 120
Portucol – Comandos Básicos
Exemplo
pr incipal ( ) {
2 i n t e i r o i ;
4 para ( i = 0; i < 10; i = i +1) {
imprima ( i ) ;
6 }
}
Pergunta-se
Qual a saída?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 77 / 120
Portucol – Comandos Básicos
Sintaxe
No laço para, a inicialização, condição e operação são
todas opcionais
Exemplo
1 pr incipal ( ) {
i n t e i r o i ;
3
para ( ; ; ) {
5 imprima ( i ) ;
}
7 }
Pergunta-se
Qual a saída?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 78 / 120
Portucol – Comandos Básicos
Comandos de repetição - para
Podemos ter um para dentro de outro, e outro dentro de
outro, e outro dentro de outro...
1 pr incipal ( ) {
i n t e i r o i , j ;
3
para ( i = 0; i <= 2; i = i +1) {
5 para ( j = 0; j < 2; j = j +1) {
imprima ( " $ i $ j " )
7 }
}
9 }
Pergunta-se
Qual a saída?
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 79 / 120
Portucol – Comandos Básicos
Comandos de repetição - para
Um comando para pode ter várias inicializações, uma
condição complexa e várias operações
Exemplo
1 pr incipal ( ) {
i n t e i r o i , d ;
3
para ( i = 1 , d = 2 ∗ i ; i <= 10 ou d == 22; i = i +1 , d = i ∗ 2) {
5 imprima ( " $ i $d " ) ;
}
7 }
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 80 / 120
Portucol – Comandos Básicos
Comando abandone
Inserido dentro de um bloco de repetição (pode também
ser enquanto ou faça...enquanto)
Caso seja executado, o bloco de repetição é finalizado
Exemplo
1 pr incipal ( ) {
i n t e i r o i = 0;
3
para ( ; i < 10; i = i + 1) {
5 se ( i == 3) {
abandone ;
7 }
imprima ( i ) ;
9 }
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 81 / 120
Portucol – Comandos Básicos
Comando continue
Inserido dentro de um bloco de repetição
Caso seja executado, a iteração atual do bloco de
repetição é interrompida e parte para a próxima iteração
Exemplo
pr incipal ( ) {
2 i n t e i r o i ;
4 para ( i = 0; i < 10; i = i + 1) {
se ( i == 3 ou i == 5) {
6 continue ;
}
8 imprima ( i ) ;
}
10 }
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 82 / 120
Portucol – Comandos Básicos
Comando de repetição - para
Logicamente, pode-se utilizar abandone e continue
conjuntamente
Exemplo
pr incipal ( ) {
2 i n t e i r o i , j ;
4 para ( i = 0; i < 3; i = i + 1) {
se ( i == 1) {
6 continue ;
}
8 para ( j = 0; j < 2; j ++) {
imprima ( " $ i $ j " ) ;
10 abandone ; /∗ abandona sempre o lac´o mais interno ∗/
}
12 }
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 83 / 120
Portucol – Comandos Básicos
Exercício de Fixação
Faça um algoritmo que leia diversas idades e depois exiba a
média.
Duas considerações:
- O algoritmo deverá ignorar idades acima de 120 anos;
- O algoritmo só para de ler idades quando receber o valor -1.
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 84 / 120
Portucol – Comandos Básicos
Funções importantes
tamanho retorna o tamanho de um string ou arranjo. Por
exemplo, suponha que str contenha “ANA”, assim
tamanho(str) retornará 3
encerra encerra o programa abruptamente
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 85 / 120
Portucol – Comandos Básicos
Importante
Ao ler um string, você pode acessar cada posição
utilizando colchetes [ ]
Índices vão de 0 a tam-1
Exemplo
1 pr incipal ( ) {
s t r i n g s t r = "ANA" ;
3 i n t e i r o i , contador = 0;
para ( i =0; i < tamanho( s t r ) ; i = i + 1 ) {
5 se ( s t r [ i ] == ’A’ ) {
contador = contador + 1;
7 }
}
9 imprime ( "Numero de A’ s : $contador " ) ;
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 86 / 120
Portucol
Arranjos
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 87 / 120
Portucol – Arranjos
Arranjos - Conceito
Arranjos – também conhecidos como vetor, array etc – são
coleções de um mesmo tipo em sequência
Arranjos podem ser de qualquer tipo visto (inteiro, real,
caractere, string ou lógico)
Pode se ter um arranjo de inteiros ou um arranjo de
caracteres ou um arranjo de arranjo de reais
Contudo, não se pode ter um arranjo que contenha inteirose strings
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 88 / 120
Portucol – Arranjos
Arranjos - Declaração
Declaração:
i n t e i r o notas [ 5 ] ; /∗ Arranjo de 5 i n t e i r o s ∗/
2 caractere l e t r a s [ 5 ] ; /∗ Arranjo de 5 caracteres ∗/
Assim como variáveis comuns, os elementos do arranjo não
são inicializados automaticamente. Contudo, você pode
declarar já inicializando:
i n t e i r o notas [5 ] = {4 ,6 ,6 ,9 ,8 } ;
2 caractere l e t r a s [5 ] = { ’A’ , ’E ’ , ’ I ’ , ’O’ , ’U ’ } ;
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 89 / 120
Portucol – Arranjos
Arranjos - Declaração
Um arranjo de tamanho n, tem suas posições indexadas de
0 a n-1
Para obter o tamanho de um arranjo, basta chamar a
função tamanho
Exemplo
pr incipal ( ) {
2 i n t e i r o v [5 ] = {1 , 2 , 3 , 4 , 5 } ;
i n t e i r o i ;
4 para ( i =0; i < tamanho(v ) ; i = i + 1 ) {
imprima ( v [ i ] ) ;
6 }
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 90 / 120
Portucol – Arranjos
Arranjos - Acesso aos elementos
Arranjos permite recuperar ou alterar qualquer um de seus
elementos
Os arranjos sempre iniciam-se na posição 0
Isto indica que ele termina em uma posição inferior ao
tamanho (n-1)
Exemplo
1 pr incipal ( ) {
caractere v [5 ] = { ’A’ , ’E ’ , ’Y ’ , ’O’ , ’U ’ } ;
3
imprima ( "A primeira vogal é $v [0 ] " ) ;
5
v [2 ] = ’ I ’ ;
7
imprima ( "A últ ima vogal é $v [4 ] " ) ;
9 }
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 91 / 120
Portucol – Arranjos
Arranjos Multidimensionais
Pode-se criar um arranjo de arranjos
O mais comum é o bidimensional que vemos como uma
matriz
A declaração é somente acrescentar o número de colunas
Por exemplo: inteiro matriz[4][3] declara-se uma
matriz de 4 linhas e 3 colunas
matriz[4][3] = {{1,0,0},{0,1,2},{2,3,4},{0,6,7}};
Representação :
1 0 0
0 1 2
2 3 4
0 6 7
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 92 / 120
Portucol – Arranjos
Arranjo Bidimensional – Exemplo
Declarando e inicializando uma matriz 3x2 e imprimindo a
soma dos valores
1 pr incipal ( ) {
i n t e i r o v [ 3 ] [ 2 ] = { {1 , 4 } , {5 , 6 } , {9 , −11} } ;
3 i n t e i r o i , j , soma = 0;
para ( i =0; i < tamanho(v ) ; i = i + 1 ) {
5 para ( j =0; j < tamanho( v [ i ] ) ; j = j + 1 ) {
soma = soma + v [ i ] [ j ] ;
7 }
}
9 imprima ( "Soma da matr iz : $soma" ) ;
}
matriz
1 4
5 6
9 -11
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 93 / 120
Portucol – Arranjos
Exercício de Fixação 01
Crie um algoritmo que declare e leia cada posição de um
arranjo de inteiros de tamanho 5 e imprima a soma e a média
aritmética
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 94 / 120
Portucol – Arranjos
Exercício de Fixação 02
Crie um algoritmo que declare e leia cada posição de um
arranjo de reais de tamanho 10 e imprima a soma total deste
arranjo considerando a seguinte fórmula:
soma = 1 * array[0] + 2 * array[1] + ... +
9 * array[8] + 10 * array[9]
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 95 / 120
Portucol
Funções
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 96 / 120
Portucol – Funções
Função
Um algoritmo é uma coleção de funções
Uma das funções deve se chamar principal
por onde começa a execução do algoritmo
Uma função pode:
receber parâmetros
declarar variáveis locais
conter instruções executáveis
retornar um valor
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 97 / 120
Portucol – Funções
Função
O comando retorna efetua o retorno (término) da função
Uma função pode ou não ter um retorno
Uma função pode ou não ter parâmetros formais
Exemplos
m1( ) { . . . } /∗ sem retorno e sem parãmetros formais ∗/
2
m2( real x ) { . . . } /∗ sem retorno e com um par . formal ∗/
4
i n t e i r o m3( ) { . . . } /∗ com retorno e sem parãmetros formais ∗/
6
i n t e i r o m4( caractere c, i n t e i r o i ) { . . . } /∗ com retorno e 2 par . ∗/
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 98 / 120
Portucol – Funções
Função
Sintaxe:
retorno nome ( < param { , param} > ) { corpo }
Exemplos
1 imprimir ( ) { . . . }
3 i n t e i r o dobro ( i n t e i r o x ) { . . . }
5 real somar ( real a, real b) { . . . }
7 l i s t a r ( i n t e i r o notas [ ] ) { . . . }
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 99 / 120
Portucol – Funções
Função
Retorno de funções
Uma função pode retornar valores de qualquer tipo
Uma função que retorna nada, não declara retorno
A expressão que segue o retorna, é o valor retornado pela
função
não é necessário parênteses
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 100 / 120
Portucol – Funções
Função
Término de uma função
Ao encontrar a chave de fechamento
Ao ser retornada (retorna)
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 101 / 120
Portucol – Funções
Exercícios de Fixação
Implementar as funções:
soma
fatorial
escreveMaior
retornaMenorElemento
retornaMaiorElemento
retornaMedia
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 102 / 120
Portucol – Funções
Exercício - Soma
1 pr incipal ( ) {
real x , y , to ta l ;
3 le ia ( x ) ;
le ia ( y ) ;
5 to ta l = soma( x , y ) ;
imprima ( " $x + $y = $tota l " ) ;
7 }
9 real soma ( real x , real y ) {
retorna x+y ;
11 }
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 103 / 120
Portucol – Funções
Exercício - Fatorial
1 pr incipal ( ) {
i n t e i r o n ;
3 le ia (n ) ;
imprima ( fat (n) ) ;
5 }
7 i n t e i r o fat ( i n t e i r o n) {
i n t e i r o i , resultado = 1;
9 se (n == 0 ou n == 1) {
retorna 1;
11 }
para ( i =2; i <= n ; i = i +1 ) {
13 resultado = resultado ∗ i ;
}
15 retorna resultado ;
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 104 / 120
Portucol – Funções
Exercício - Escreve Maior
pr incipal ( ) {
2 i n t e i r o n ;
le ia (n ) ;
4 retornaMaior ( n ) ;
}
6
retornaMaior ( i n t e i r o n) {
8 i n t e i r o i ;
para ( i = n ; i >= 1; i = i − 1) {
10 imprime ( i ) ;
se ( i != 1 ) {
12 imprime ( " > " ) ;
}
14 }
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 105 / 120
Portucol – Funções
Exercício - Retorna Menor Elemento
1 pr incipal ( ) {
i n t e i r o v [5 ] = { 2 , 4 , 5 , 1 , 3 } , min ;
3 min = menorElemento(v ) ;
imprima ( "Menor elemento : $min " ) ;
5 }
7 i n t e i r o retornaMenorElemento ( i n t e i r o v [ ] ) {
i n t e i r o i ;
9 i n t e i r o menor = v [ 0 ] ;
para ( i = 1; i < tamanho( v ) ; i = i +1) {
11 se ( v [ i ] < menor) {
menor = v [ i ] ;
13 }
}
15 retorna menor ;
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 106 / 120
Conteúdo
1 Introdução
2 Lógica Proposicional
3 Algoritmos e Programação Estruturada
4 Portucol
5 Algoritmos com Qualidade
Introdução
Boas práticas de programação
Metodologia para o desenvolvimento de algoritmos
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 107 / 120
Algoritmos com Qualidade
Introdução
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 108 / 120
Algoritmos com Qualidade – Introdução
Nessa seção, veremos:
Boas práticas de programação
Metodologia para o desenvolvimento de algoritmos
Ricardo Terra (rterrabh[at] gmail.com) Lógica de Programação Abril, 2011 109 / 120
Algoritmos com Qualidade
Boas práticas de programação
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 110 / 120
Algoritmos com Qualidade – Boas práticas de programação
1. Algoritmos devem ser feitos para serem lidos por seres
humanos
Outras pessoas poderão ter que corrigí-lo, adaptá-lo,
modificá-lo...
Ainda, talvez você mesmo tenha que entendê-lo depois de
um ano que escreveu
2. Comente seu código
Comentário é sinal de saber desenvolver
Facilita o entendimento do código
Existem coisas que você faz que – poucos segundos depois
– nem lembra como fez
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 111 / 120
Algoritmos com Qualidade – Boas práticas de programação
3. No entanto, comentários devem acrescentar algo não
apenas frasear os comandos
Comentários não dizem o que está sendo feito, mas sim, por
quê
Exemplo de comentário que não se deve fazer:
imprima( total ); /* imprime o total */
Exemplo de comentário que se deve fazer:
/* implementação da RN021 */
se ( taxaJuros < 3.0 e selic > taxaJuros ) {
...
}
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 112 / 120
Algoritmos com Qualidade – Boas práticas de programação
4. Use comentários no prólogo de funções
É interessante que funções tenham comentários contendo:
um descrição sucinta do que faz
autor
data de escrita
5. Utilize espaços em branco para melhorar a legibilidade
melhoram substancialmente a aparência de algoritmos
principalmente no início do algoritmo, pois pode ser que
haja a necessidade de mais variáveis
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 113 / 120
Algoritmos com Qualidade – Boas práticas de programação
6. Variáveis com nomes representativos
Nomes de variáveis devem identificar o que representam
Por exemplo, x = y + z é muito menos claro que preco =
custo + lucro
Outras dicas:
Para variáveis de iteração, use i, j, k...
Para variáveis auxiliares, use aux
7. Um comando por linha
Vários comandos por linha, prejudicam a legibilidade
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 114 / 120
Algoritmos com Qualidade – Boas práticas de programação
8. Utilize parênteses para aumentar a legibilidade e prevenir
erros bobos
Por exemplo:
A * B * C / (D * E * F)
seria ainda mais claro se fosse:
(A * B * C) / (D * E * F)
9. Identação é imprencidível
Melhora a legibilidade
Apresenta a estrutura lógica do algortimo
Deve seguir o padrão (novos blocos são identados)
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 115 / 120
Algoritmos com Qualidade – Boas práticas de programação
10. Alteração no algoritmo→ Alteração no comentário
Sempre que um algoritmo for alterado, os comentários
também devem ser alterados, não apenas os comandos
Antes não comentar do que deixar um comentário errado
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 116 / 120
Algoritmos com Qualidade
Metodologia para o desenvolvimento de algoritmos
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 117 / 120
Algoritmos com Qualidade – Metodologia para o
desenvolvimento de algoritmos
Uma boa sequência a ser seguida:
Passo 1: leia o enunciado do problema até o final (sem
fazer nenhum tipo de anotação)
Passo 2: repita o “Passo 1” até entender
Passo 3: levantar e analisar todas as saídas do problema
Passo 4: levantar e analisar todas as entradas do problema
Passo 5: levantar as variáveis necessárias
Passo 6: pensar como transformar entradas em saídas
Passo 7: testar cada parte do algoritmo (simule entradas e
confira saídas)
Passo 8: testar o algoritmo como um todo (simule entradas
e confira saídas)
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 118 / 120
Algoritmos com Qualidade – Metodologia para o
desenvolvimento de algoritmos
Exercício de Fixação
De acordo com a metodologia, desenvolva um algoritmo que
leia as três variáveis da equação de 2o grau (a, b e c) e imprima
se a parábola gerada pela equação toca o eixo das abcissas
ou não. Se tocar, imprima também as raízes resultantes
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 119 / 120
Referencias
Angelo de Moura Guimarães e Newton Albert de
Castilho Lages.
Algoritmos e Estruturas de Dados.
Editora LTC, 1994.
Victorine Viviane Mizrahi.
Treinamento em Linguagem C.
Prentice-Hall, 2 edition, 2008.
Newton José Vieira.
Lógica aplicada à computação.
http://homepages.dcc.ufmg.br/ nvieira/cursos/ldt/
notas-de-aulas/logica1.pdf, 2007.
Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 120 / 120
	Introdução
	Arquitetura de um Sistema de Computador
	Histórico da Computação
	Utilização dos Computadores
	Lógica Proposicional
	Introdução
	Material
	Algoritmos e Programação Estruturada
	Conceitos Importantes
	Portucol
	Introdução
	Comandos Básicos
	Arranjos
	Funções
	Algoritmos com Qualidade
	Introdução
	Boas práticas de programação
	Metodologia para o desenvolvimento de algoritmos

Outros materiais

Outros materiais