SlideShare uma empresa Scribd logo
1 de 121
Baixar para ler offline
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 computador nã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
a
www.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ário " ;
se ( " saia é clara " ) {
" coloque avental " ;
}
enquanto ( "número de batatas é insuficiente " ) {
"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 principal ( ) {
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 a modelagem 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
principal ( ) {
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 for 0 é par ∗/
6 imprima( i ) ;
}
8 i = i + 1; /∗ incrementa contador ∗/
}
10 } /∗ fim da função principal ∗/
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 principal ( ) {
i n t e i r o a, b;
3 leia (a) ;
leia (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 principal ( ) {
i n t e i r o nota ;
3 leia (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
principal ( ) {
2 caractere op;
leia (op) ;
4 se (op == ’+ ’ ou op == ’−’ ) {
imprima( "Operador de Baixa Prioridade " ) ;
6 } senão se (op == ’ / ’ ou op == ’∗ ’ ) {
imprima( "Operador de Alta Prioridade " ) ;
8 } senão {
imprima( "Operador Inválido " ) ;
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 comando enquanto é 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 principal ( ) {
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:
faç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
principal ( ) {
i n t e i r o i = 0;
faç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
principal ( ) {
i n t e i r o i ;
faça {
imprima( " Digite um numero entre 0 e 10: " ) ;
leia ( 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 ( inicializacao ; 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
principal ( ) {
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 principal ( ) {
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 principal ( ) {
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 principal ( ) {
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 principal ( ) {
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
principal ( ) {
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
principal ( ) {
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 laç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 principal ( ) {
string 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 inteiros
e 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 letras [ 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 letras [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
principal ( ) {
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 principal ( ) {
caractere v [5] = { ’A’ , ’E ’ , ’Y ’ , ’O’ , ’U’ } ;
3
imprima( "A primeira vogal é $v [0] " ) ;
5
v [2] = ’ I ’ ;
7
imprima( "A última 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 principal ( ) {
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 matriz : $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 principal ( ) {
real x , y , total ;
3 leia ( x ) ;
leia (y ) ;
5 total = soma( x , y ) ;
imprima( " $x + $y = $total " ) ;
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 principal ( ) {
i n t e i r o n ;
3 leia (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
principal ( ) {
2 i n t e i r o n ;
leia (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 principal ( ) {
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
Referências
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

Mais conteúdo relacionado

Mais procurados

Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
Banco de Dados II Aula 12 - Gerenciamento de transação (controle de concorrên...
Banco de Dados II Aula 12 - Gerenciamento de transação (controle de concorrên...Banco de Dados II Aula 12 - Gerenciamento de transação (controle de concorrên...
Banco de Dados II Aula 12 - Gerenciamento de transação (controle de concorrên...Leinylson Fontinele
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Mariana Camargo
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Aula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileAula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileCloves da Rocha
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Introdução à programação
Introdução à programação Introdução à programação
Introdução à programação João Piedade
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers DockerMatheus Fidelis
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01 Léo Dias
 
Aula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfAula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfMarcelo Silva
 
Sistemas Computacionais - Aula 01 - Apresentação
Sistemas Computacionais - Aula 01 - ApresentaçãoSistemas Computacionais - Aula 01 - Apresentação
Sistemas Computacionais - Aula 01 - ApresentaçãoLeinylson Fontinele
 

Mais procurados (20)

Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
Banco de Dados II Aula 12 - Gerenciamento de transação (controle de concorrên...
Banco de Dados II Aula 12 - Gerenciamento de transação (controle de concorrên...Banco de Dados II Aula 12 - Gerenciamento de transação (controle de concorrên...
Banco de Dados II Aula 12 - Gerenciamento de transação (controle de concorrên...
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Aula01 - Logica de Programação
Aula01 - Logica de ProgramaçãoAula01 - Logica de Programação
Aula01 - Logica de Programação
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }Lógica de programação { para iniciantes }
Lógica de programação { para iniciantes }
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Aula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileAula 1 - Introdução ao Mobile
Aula 1 - Introdução ao Mobile
 
Aula15 - Array PHP
Aula15 - Array PHPAula15 - Array PHP
Aula15 - Array PHP
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Introdução à programação
Introdução à programação Introdução à programação
Introdução à programação
 
Aula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e PseudocódigoAula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e Pseudocódigo
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
Aula 06 comandos linux
Aula 06   comandos linuxAula 06   comandos linux
Aula 06 comandos linux
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 
Aula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfAula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdf
 
Modelagem de Dados
Modelagem de DadosModelagem de Dados
Modelagem de Dados
 
Sistemas Computacionais - Aula 01 - Apresentação
Sistemas Computacionais - Aula 01 - ApresentaçãoSistemas Computacionais - Aula 01 - Apresentação
Sistemas Computacionais - Aula 01 - Apresentação
 

Destaque

Lógica de programação - Como estudar sem achar chato e ainda ter motivação
Lógica de programação - Como estudar sem achar chato e ainda ter motivaçãoLógica de programação - Como estudar sem achar chato e ainda ter motivação
Lógica de programação - Como estudar sem achar chato e ainda ter motivaçãoFelipe Fontoura
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Lista de exercicios algoritmos resolvida-
Lista de exercicios   algoritmos  resolvida-Lista de exercicios   algoritmos  resolvida-
Lista de exercicios algoritmos resolvida-Mauro Pereira
 
Análise Estática de Código: Aplicações
Análise Estática de Código: AplicaçõesAnálise Estática de Código: Aplicações
Análise Estática de Código: AplicaçõesRicardo Terra
 
Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Ricardo Terra
 
Aula 02 - Lógica de Programação
Aula 02 - Lógica de ProgramaçãoAula 02 - Lógica de Programação
Aula 02 - Lógica de ProgramaçãoAislan Rafael
 
aula 03 - Lógica de programação
aula 03 - Lógica de programaçãoaula 03 - Lógica de programação
aula 03 - Lógica de programaçãoAislan Rafael
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOMicrosoft
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Gercélia Ramos
 
Coletanea de-exercicios-resolvidos-em-liguagem-c
Coletanea de-exercicios-resolvidos-em-liguagem-cColetanea de-exercicios-resolvidos-em-liguagem-c
Coletanea de-exercicios-resolvidos-em-liguagem-cWilson Kushima
 
Apostila introdução-à-computação-professora-kadidja
Apostila introdução-à-computação-professora-kadidjaApostila introdução-à-computação-professora-kadidja
Apostila introdução-à-computação-professora-kadidjaFernanda Firmino
 
Sistemas Operacionais [ETEC DE ITAQUERA]
Sistemas Operacionais [ETEC DE ITAQUERA]Sistemas Operacionais [ETEC DE ITAQUERA]
Sistemas Operacionais [ETEC DE ITAQUERA]Vinicius Lopes
 
Pentest em SharePoint (ROADSEC2014)
Pentest em SharePoint (ROADSEC2014)Pentest em SharePoint (ROADSEC2014)
Pentest em SharePoint (ROADSEC2014)Victor Ribeiro
 
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...SegInfo
 
Testes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverTestes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverMaurício Linhares
 
Aula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAislan Rafael
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08André Phillip Bertoletti
 

Destaque (20)

Lógica de programação - Como estudar sem achar chato e ainda ter motivação
Lógica de programação - Como estudar sem achar chato e ainda ter motivaçãoLógica de programação - Como estudar sem achar chato e ainda ter motivação
Lógica de programação - Como estudar sem achar chato e ainda ter motivação
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Lista de exercicios algoritmos resolvida-
Lista de exercicios   algoritmos  resolvida-Lista de exercicios   algoritmos  resolvida-
Lista de exercicios algoritmos resolvida-
 
Análise Estática de Código: Aplicações
Análise Estática de Código: AplicaçõesAnálise Estática de Código: Aplicações
Análise Estática de Código: Aplicações
 
Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)
 
Aula 02 - Lógica de Programação
Aula 02 - Lógica de ProgramaçãoAula 02 - Lógica de Programação
Aula 02 - Lógica de Programação
 
aula 03 - Lógica de programação
aula 03 - Lógica de programaçãoaula 03 - Lógica de programação
aula 03 - Lógica de programação
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
 
Manual de portugol
Manual de portugolManual de portugol
Manual de portugol
 
Coletanea de-exercicios-resolvidos-em-liguagem-c
Coletanea de-exercicios-resolvidos-em-liguagem-cColetanea de-exercicios-resolvidos-em-liguagem-c
Coletanea de-exercicios-resolvidos-em-liguagem-c
 
Apostila introdução-à-computação-professora-kadidja
Apostila introdução-à-computação-professora-kadidjaApostila introdução-à-computação-professora-kadidja
Apostila introdução-à-computação-professora-kadidja
 
Sistemas Operacionais [ETEC DE ITAQUERA]
Sistemas Operacionais [ETEC DE ITAQUERA]Sistemas Operacionais [ETEC DE ITAQUERA]
Sistemas Operacionais [ETEC DE ITAQUERA]
 
Pentest em SharePoint (ROADSEC2014)
Pentest em SharePoint (ROADSEC2014)Pentest em SharePoint (ROADSEC2014)
Pentest em SharePoint (ROADSEC2014)
 
Pentest web
Pentest webPentest web
Pentest web
 
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
 
Testes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverTestes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E Webdriver
 
Aula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro Código
 
Geek night-2015
Geek night-2015Geek night-2015
Geek night-2015
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08
 

Semelhante a Lógica Programação Introdução

Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)Filipe Chagas Ferraz
 
Softwares e Aplicativos Windows
Softwares e Aplicativos WindowsSoftwares e Aplicativos Windows
Softwares e Aplicativos WindowsRobson Santos
 
Softwares E Aplicativos Robs
Softwares E Aplicativos RobsSoftwares E Aplicativos Robs
Softwares E Aplicativos RobsRobson Santos
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdfMC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdfLuanaBatista74
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfEdkallenn Lima
 
Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Pacc UAB
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)Rudá Moura
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completothomasdacosta
 
Conceitos de linguagens de programação
Conceitos de linguagens de programação Conceitos de linguagens de programação
Conceitos de linguagens de programação FabianaNKInformtica
 
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfTREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfssuser059c2c1
 
Parallel Programming no .NET 4.0
Parallel Programming no .NET 4.0Parallel Programming no .NET 4.0
Parallel Programming no .NET 4.0Comunidade NetPonto
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoFelipeDi
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoWeldir Fernando Dias
 
Algoritmos e Técnicas de Programação - Aula 01
Algoritmos e Técnicas de Programação - Aula 01Algoritmos e Técnicas de Programação - Aula 01
Algoritmos e Técnicas de Programação - Aula 01thomasdacosta
 

Semelhante a Lógica Programação Introdução (20)

Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
 
Softwares e Aplicativos Windows
Softwares e Aplicativos WindowsSoftwares e Aplicativos Windows
Softwares e Aplicativos Windows
 
Softwares E Aplicativos Robs
Softwares E Aplicativos RobsSoftwares E Aplicativos Robs
Softwares E Aplicativos Robs
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdfMC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 
Implementação
ImplementaçãoImplementação
Implementação
 
aula3_python.pptx
aula3_python.pptxaula3_python.pptx
aula3_python.pptx
 
Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completo
 
apresentacao.pdf
apresentacao.pdfapresentacao.pdf
apresentacao.pdf
 
Conceitos de linguagens de programação
Conceitos de linguagens de programação Conceitos de linguagens de programação
Conceitos de linguagens de programação
 
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdfTREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
TREINAMENTO EM LOGICA DE PROGRAMAÇÃO (Sandra Rita) (z-lib.org).pdf
 
Parallel Programming no .NET 4.0
Parallel Programming no .NET 4.0Parallel Programming no .NET 4.0
Parallel Programming no .NET 4.0
 
[Parfor] esw aula 03
[Parfor] esw   aula 03[Parfor] esw   aula 03
[Parfor] esw aula 03
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Alterao ementa tii
Alterao ementa tiiAlterao ementa tii
Alterao ementa tii
 
Algoritmos e Técnicas de Programação - Aula 01
Algoritmos e Técnicas de Programação - Aula 01Algoritmos e Técnicas de Programação - Aula 01
Algoritmos e Técnicas de Programação - Aula 01
 

Mais de Ricardo Terra

Microsserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORMMicrosserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORMRicardo Terra
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Ricardo Terra
 
Engenharia de Software: POC
Engenharia de Software: POCEngenharia de Software: POC
Engenharia de Software: POCRicardo Terra
 
Which Programming Language is the best one?
Which Programming Language is the best one?Which Programming Language is the best one?
Which Programming Language is the best one?Ricardo Terra
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática ComputacionalRicardo Terra
 
English---and LaTeX---Writing Tips
English---and LaTeX---Writing TipsEnglish---and LaTeX---Writing Tips
English---and LaTeX---Writing TipsRicardo Terra
 
Casamento de Padrões
Casamento de PadrõesCasamento de Padrões
Casamento de PadrõesRicardo Terra
 
Segurança da Internet
Segurança da InternetSegurança da Internet
Segurança da InternetRicardo Terra
 
Java Net: Interagindo com a Internet
Java Net: Interagindo com a InternetJava Net: Interagindo com a Internet
Java Net: Interagindo com a InternetRicardo Terra
 
Software Architecture
Software ArchitectureSoftware Architecture
Software ArchitectureRicardo Terra
 
Apostila Tecnologia da Informação (TI)
Apostila Tecnologia da Informação (TI)Apostila Tecnologia da Informação (TI)
Apostila Tecnologia da Informação (TI)Ricardo Terra
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTRicardo Terra
 
Java JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDBJava JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDBRicardo Terra
 
Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Ricardo Terra
 
Análise Estática de Código
Análise Estática de CódigoAnálise Estática de Código
Análise Estática de CódigoRicardo Terra
 

Mais de Ricardo Terra (20)

Microsserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORMMicrosserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORM
 
Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)Apostila Linguagens Formais e Autômatos (LFA)
Apostila Linguagens Formais e Autômatos (LFA)
 
Engenharia de Software: POC
Engenharia de Software: POCEngenharia de Software: POC
Engenharia de Software: POC
 
Which Programming Language is the best one?
Which Programming Language is the best one?Which Programming Language is the best one?
Which Programming Language is the best one?
 
Refactoring
RefactoringRefactoring
Refactoring
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática Computacional
 
English---and LaTeX---Writing Tips
English---and LaTeX---Writing TipsEnglish---and LaTeX---Writing Tips
English---and LaTeX---Writing Tips
 
Casamento de Padrões
Casamento de PadrõesCasamento de Padrões
Casamento de Padrões
 
Segurança da Internet
Segurança da InternetSegurança da Internet
Segurança da Internet
 
Java Net: Interagindo com a Internet
Java Net: Interagindo com a InternetJava Net: Interagindo com a Internet
Java Net: Interagindo com a Internet
 
Software Architecture
Software ArchitectureSoftware Architecture
Software Architecture
 
Aula Zero
Aula ZeroAula Zero
Aula Zero
 
Apostila Tecnologia da Informação (TI)
Apostila Tecnologia da Informação (TI)Apostila Tecnologia da Informação (TI)
Apostila Tecnologia da Informação (TI)
 
Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLT
 
Java JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDBJava JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDB
 
Apostila UML
Apostila UMLApostila UML
Apostila UML
 
Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)
 
Análise Estática de Código
Análise Estática de CódigoAnálise Estática de Código
Análise Estática de Código
 
Apostila XHTML
Apostila XHTMLApostila XHTML
Apostila XHTML
 
Apostila Oracle
Apostila OracleApostila Oracle
Apostila Oracle
 

Último

activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxRonys4
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresLilianPiola
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 

Último (20)

activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 

Lógica Programação Introdução

  • 1. 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
  • 2. 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
  • 3. 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
  • 4. Introdução Arquitetura de um Sistema de Computador Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 4 / 120
  • 5. 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
  • 6. Introdução – Arquitetura de um Sistema de Computador Explicando... Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 6 / 120
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. Introdução Histórico da Computação Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 11 / 120
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. Introdução Utilização dos Computadores Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 17 / 120
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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 computador nã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
  • 24. 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
  • 25. 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
  • 26. Lógica Proposicional Introdução Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 25 / 120
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. Lógica Proposicional Material Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 30 / 120
  • 32. 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 a www.dcc.ufmg.br/~nvieira Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 31 / 120
  • 33. 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
  • 34. Algoritmos e Programação Estruturada Conceitos Importantes Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 33 / 120
  • 35. 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
  • 36. 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
  • 37. 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ário " ; se ( " saia é clara " ) { " coloque avental " ; } enquanto ( "número de batatas é insuficiente " ) { "descasque uma batata " ; } " devolva a cesta ao porão" ; Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 36 / 120
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. Algoritmos e Programação Estruturada – Conceitos Importantes Programação Estruturada – Exemplo 1 principal ( ) { 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
  • 44. 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
  • 45. Algoritmos e Programação Estruturada – Conceitos Importantes Exercício Proposto Dada a modelagem 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
  • 46. 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
  • 47. Portucol Introdução Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 46 / 120
  • 48. 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
  • 49. 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
  • 50. 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
  • 51. 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
  • 52. 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
  • 53. Portucol – Introdução Comentários É recomendado e muito importante inserir comentários em seus códigos Os comentários devem estar entre /* e */ Exemplo principal ( ) { 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 for 0 é par ∗/ 6 imprima( i ) ; } 8 i = i + 1; /∗ incrementa contador ∗/ } 10 } /∗ fim da função principal ∗/ Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 52 / 120
  • 54. 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
  • 55. 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
  • 56. 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
  • 57. 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
  • 58. Portucol Comandos Básicos Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 57 / 120
  • 59. 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
  • 60. 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
  • 61. 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
  • 62. 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
  • 63. Portucol – Comandos Básicos Comandos condicionais - se 1 principal ( ) { i n t e i r o a, b; 3 leia (a) ; leia (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
  • 64. Portucol – Comandos Básicos Comandos condicionais - se Comando se podem ser aninhados 1 principal ( ) { i n t e i r o nota ; 3 leia (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
  • 65. Portucol – Comandos Básicos Exemplo se principal ( ) { 2 caractere op; leia (op) ; 4 se (op == ’+ ’ ou op == ’−’ ) { imprima( "Operador de Baixa Prioridade " ) ; 6 } senão se (op == ’ / ’ ou op == ’∗ ’ ) { imprima( "Operador de Alta Prioridade " ) ; 8 } senão { imprima( "Operador Inválido " ) ; 10 } } Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 64 / 120
  • 66. 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
  • 67. 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
  • 68. 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
  • 69. Portucol – Comandos Básicos Comandos repetição - enquanto O comando enquanto é 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
  • 70. Portucol – Comandos Básicos Comandos repetição - enquanto 1 principal ( ) { 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
  • 71. 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
  • 72. 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
  • 73. Portucol – Comandos Básicos Sintaxe: faç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
  • 74. Portucol – Comandos Básicos Comandos repetição - faça...enquanto principal ( ) { i n t e i r o i = 0; faç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
  • 75. Portucol – Comandos Básicos Exemplo principal ( ) { i n t e i r o i ; faça { imprima( " Digite um numero entre 0 e 10: " ) ; leia ( 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
  • 76. 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
  • 77. 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 ( inicializacao ; condicao ; operacao ) { comando1; comando2; . . . comandoN; } Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 76 / 120
  • 78. Portucol – Comandos Básicos Exemplo principal ( ) { 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
  • 79. Portucol – Comandos Básicos Sintaxe No laço para, a inicialização, condição e operação são todas opcionais Exemplo 1 principal ( ) { 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
  • 80. 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 principal ( ) { 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
  • 81. 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 principal ( ) { 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
  • 82. 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 principal ( ) { 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
  • 83. 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 principal ( ) { 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
  • 84. Portucol – Comandos Básicos Comando de repetição - para Logicamente, pode-se utilizar abandone e continue conjuntamente Exemplo principal ( ) { 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 laço mais interno ∗/ } 12 } } Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 83 / 120
  • 85. 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
  • 86. 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
  • 87. 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 principal ( ) { string 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
  • 88. Portucol Arranjos Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 87 / 120
  • 89. 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 inteiros e strings Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 88 / 120
  • 90. 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 letras [ 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 letras [5] = { ’A’ , ’E ’ , ’ I ’ , ’O’ , ’U’ } ; Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 89 / 120
  • 91. 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 principal ( ) { 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
  • 92. 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 principal ( ) { caractere v [5] = { ’A’ , ’E ’ , ’Y ’ , ’O’ , ’U’ } ; 3 imprima( "A primeira vogal é $v [0] " ) ; 5 v [2] = ’ I ’ ; 7 imprima( "A última vogal é $v [4] " ) ; 9 } Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 91 / 120
  • 93. 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
  • 94. Portucol – Arranjos Arranjo Bidimensional – Exemplo Declarando e inicializando uma matriz 3x2 e imprimindo a soma dos valores 1 principal ( ) { 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 matriz : $soma" ) ; } matriz 1 4 5 6 9 -11 Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 93 / 120
  • 95. 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
  • 96. 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
  • 97. Portucol Funções Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 96 / 120
  • 98. 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
  • 99. 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
  • 100. 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
  • 101. 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
  • 102. 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
  • 103. 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
  • 104. Portucol – Funções Exercício - Soma 1 principal ( ) { real x , y , total ; 3 leia ( x ) ; leia (y ) ; 5 total = soma( x , y ) ; imprima( " $x + $y = $total " ) ; 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
  • 105. Portucol – Funções Exercício - Fatorial 1 principal ( ) { i n t e i r o n ; 3 leia (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
  • 106. Portucol – Funções Exercício - Escreve Maior principal ( ) { 2 i n t e i r o n ; leia (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
  • 107. Portucol – Funções Exercício - Retorna Menor Elemento 1 principal ( ) { 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
  • 108. 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
  • 109. Algoritmos com Qualidade Introdução Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 108 / 120
  • 110. 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
  • 111. Algoritmos com Qualidade Boas práticas de programação Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 110 / 120
  • 112. 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
  • 113. 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
  • 114. 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
  • 115. 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
  • 116. 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
  • 117. 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
  • 118. Algoritmos com Qualidade Metodologia para o desenvolvimento de algoritmos Ricardo Terra (rterrabh [at] gmail.com) Lógica de Programação Abril, 2011 117 / 120
  • 119. 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
  • 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
  • 121. Referências 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