- 1
Ementa:
• Conceito de Lógica. Lógica Aplicada a Programação
• Tipos de Algoritmos
• Conceitos de variáveis e constantes
• Tipos primitivos de dados
• Operadores: aritméticos, relacionais e lógicos
• Estruturas de Seleção
• Estrutura de Controle e Repetição
Objetivos:
• Preparar o aluno para o desenvolvimento de soluções computacionais
eficientes. Capacitar o aluno ao desenvolvimento de algoritmos capazes
de resolver problemas simples.
Metodologia:
• Utilização do quadro negro, retroprojetor e aulas práticas em 2
laboratórios.
Conteúdo Programático
• Limite de falta: 10
5
Informática I
Introdução a Lógica de
Programação
Profº Halysson
halysson@unimar.br
- 6
Lógica
Início
1. Tirar o fone do gancho;
2. Esperar até ouvir o sinal de linha;
3. Teclar o número desejado;
4. Se der o sinal de chamar:
4.1. Conversar;
4.2. Desligar;
5. Se não der o sinal de chamar:
5.1. Desligar;
5.2. Repetir desde o passo 1
Fim. 12
Exemplo – Algoritmo – Trocar Lâmpada
Início
1. Pegar uma escada;
2. Posicionar a escada debaixo da lâmpada;
3. Pegar uma lâmpada nova;
4. Subir na escada;
5. Retirar a lâmpada velha;
6. Colocar a lâmpada nova;
7. Descer na escada;
8. Acionar o interruptor;
9. Se a lâmpada não acender:
13
9.1. Repetir desde o passo 3;
Fim.
Três fases fundamentais do Algoritmo
15
Exemplo – Algoritmo
18
Representação de Algoritmo - DNS
19
Representação de Algoritmo - Gráficos
Fluxograma
20
Representação de Algoritmo - Gráficos
Entrada de
Dados
Procedimento
Interno
21
Representação de Algoritmo
Português
Estruturado
22
VisuAlg – Editor e Interpretador de Algoritmos
algoritmo
23
VisuAlg – Editor e Interpretador de Algoritmos
Novo
algoritmo
Executar o
algoritmo 24
Exemplo de Algoritmo no VisuAlg
escreval
Mostra
mensagem
na tela
25
Exercícios de Lógica
Início
1.LEIA o código da peça;
2.LEIA o valor da peça;
3.LEIA a quantidade de peças;
4.EFETUE o cálculo:
Total da Peça <-(Quantidade * Valor da peça)
5.IMPRIMA o valor total da peça
26
Fim.
Exercícios de Lógica
1.INICIO
2.LEIA 1º Numero
3.LEIA 2º Numero
4.EFETUE o Calculo: Resultado <- (1ºNumero + 2ºNumero)
* 1ºNumero
5.IMPRIMA Resultado
6.FIM
27
Exercícios de Lógica
28
Exercícios de Lógica
1.INICIO
2. Move disco 1 para a haste c
3. Move disco 2 para a haste b
4. Move disco 1 para a haste b
5. Move disco 3 para a haste c
6. Move disco 1 para a haste a
7. Move disco 2 para a haste c
8. Move disco 1 para a haste c
9. FIM
29
Exercícios de Lógica
30
Exercícios de Lógica
• 1. INICIO
• 2. Atravessar um jesuíta e um canibal para a margem B
• 3. Voltar o jesuíta para a margem A
• 4. Atravessar dois canibais para a margem B
• 5. Voltar um canibal para a margem A
• 6. Atravessar dois jesuítas para a margem B
• 7. Voltar um jesuíta e um canibal para a margem A
• 8. Atravessar dois jesuítas para a margem B
• 9. Voltar um canibal para a margem A
• 10. Atravessar dois canibais para a margem B
• 11. Voltar um canibal para a margem A
• 12. Atravessar dois canibais para a margem B 31
• 13. FIM
Linguagem de Programação
32
Linguagem de Programação
Análise do problema:
• Deve-se estudar minuciosamente o problema,
eliminando possíveis ambigüidades e assegurando o
completo entendimento das especificações de entrada e
saída.
34
Linguagem de Programação
35
Linguagem de Programação
36
Tipos Primitivos
Exemplos: a 10
b 2 * a + (a / 4)
a a+1
43
Exemplo Prático
algoritmo "Media"
// Função : Entrar com Ra, N1, N2, escreva("Digite a Nota 2.:")
// Calcular a Media e Mostra leia(N2)
// Autor : H.G.M
// Data : 25/01/2014 //Calcula a Media - Processamento
// Seção de Declarações Media <- (N1 + N2) / 2
var //Saida de Dados
Ra : Inteiro escreval("A Media do Aluno é ra ", Ra,
N1, N2, Media : Real " = ", Media)
inicio fimalgoritmo
//Entrada de Dados
escreva("Digite o Ra.....: ")
leia(Ra)
47
escreva("Digite a Nota 1.:")
leia(N1)
Exercícios - Práticos
1. Faça um algoritmo que receba dois números e exiba o
resultado da sua soma.
algoritmo “SomaDoisNumeros"
// Função : Faça um algoritmo que receba dois números e exiba o resultado
da sua soma.
var
NUM1,NUM2 : Inteiro
Inicio
escreva("Digite o Primeiro Número: ")
leia(NUM1)
escreva("Digite o Segundo Número: ")
leia(NUM2)
escreva("A soma dos dois número é ", NUM1 + NUM2)
fimalgoritmo 49
Exercício 2
algoritmo "TrocaValorAB"
// Função : Trocar valor de A e B
var
A,B,AUX : Inteiro
Inicio
escreva("Digite o Valor de A: ")
leia(A)
escreva("Digite o Valor de B: ")
leia(B)
escreval("Os valor digitado de A foi",A," e o valor de B foi",B)
AUX <- A
A <- B
B <- AUX
escreval("Os valores trocados ficou: de A =",A," e de B =",B) 50
fimalgoritmo
Exercício 3
algoritmo "ConverteTemperatura“
// Função : Converte a temperatura de Graus Celsius para
Fahrenheit
var
Graus_C, Graus_F : Real
inicio
escreva("Digite a temperatura em graus Celsius : ")
leia(Graus_C)
Graus_F <- (9 * Graus_C + 160) / 5
escreval("Temperatura em graus Celsius:",Graus_C)
escreval("Temperatura em graus Fahrenheit:",Graus_F) 51
fimalgoritmo
Operadores relacionais
• são utilizados para realizar comparações entre dois
valores.
• São eles: = > < <= >= <> (respectivamente: igual,
maior que, menor que, menor ou igual a, maior ou igual
a e diferente).
• Sempre retornam VERDADEIRO ou FALSO.
Exemplos: ( a >= 10 )
( c <> d )
5 >=3 (resulta em VERDADEIRO)
52
Operadores lógicos
• são utilizados para combinar relações.
• São eles: e ou não xou.
• Também retornam VERDADEIRO ou FALSO.
Exemplos: ( (a > b) e (c > d) )
( (s = 10) ou (x = -15))
nao(Media >= 7)
Operador unário de negação. nao VERDADEIRO = FALSO, e nao FALSO =
nao VERDADEIRO. Tem a maior precedência entre os operadores lógicos.
Equivale ao NOT do Pascal.
Operador que resulta VERDADEIRO quando um dos seus operandos lógicos
ou
for verdadeiro. Equivale ao OR do Pascal.
Operador que resulta VERDADEIRO somente se seus dois operandos lógicos
e
forem verdadeiros. Equivale ao AND do Pascal.
Operador que resulta VERDADEIRO se seus dois operandos lógicos forem 53
xou diferentes, e FALSO se forem iguais. Equivale ao XOR do Pascal. Ex.
se (2<3) xou (3>5) entao ... fimse
Estrutura de Seleção (Comando Se)
• Na lógica de programação sempre existe a necessidade
de somente executar um bloco de comandos após a
avaliação de uma determinada condição.
• Em nossa linguagem algorítmica utilizamos o comando
Se... entao. A sintaxe deste comando é descrita a seguir:
Exemplos:
se <condição > entao
comando 1
comando 2 // seqüência de comandos
comando n 54
fimse
Estrutura de Seleção Composta
• Quando tivermos situações em que duas alternativas
dependem de uma mesma condição, uma da condição
ser verdadeira e outra da condição ser falsa
• A seleção composta de um bloco de comandos é
realizada através do comando se... entao ... Senao.
• A sintaxe deste comando é descrita a seguir:
Exemplos: se <condição > entao
comando 1
comando n
senao
comando 1
comando n 55
fimse
Exemplo Prático
leia(N2)
algoritmo "Media" //Calcula a Media - Processamento
// Função : Media <- (N1 + N2) / 2
// Autor : //Saida de Dados
// Data : escreval("A Media = ", Media)
// Seção de Declarações se Media >= 7 entao
var escreva("Aprovado")
Ra : Inteiro senao
N1, N2, Media : Real escreva("Reprovado")
inicio fimse
//Entrada de Dados fimalgoritmo
escreva("Digite o Ra.....: ")
leia(Ra)
escreva("Digite a Nota 1.:")
56
leia(N1)
escreva("Digite a Nota 2.:")
Exemplo Prático - Seleção Encadeada
leia(N2)
algoritmo "Media" //Calcula a Media - Processamento
// Função : Media <- (N1 + N2) / 2
// Autor : //Saida de Dados
// Data : escreval("A Media = ", Media)
// Seção de Declarações se Media >= 7 entao
var escreval("Aprovado")
Ra : Inteiro senao
N1, N2, Media : Real se (Media >= 4) e (Media < 7) entao
inicio escreval("Exame")
//Entrada de Dados senao
escreva("Digite o Ra.....: ") escreval("Reprovado")
leia(Ra) fimse
escreva("Digite a Nota 1.:") fimse
57
leia(N1) fimalgoritmo
escreva("Digite a Nota 2.:")
Exercícios - Práticos
1. Faça um algoritmo que receba um número e mostre uma
mensagem caso este número seja maior que 10.
58
Exercício 1
algoritmo “MaiorQue10“
var numero: inteiro
Inicio
escreva("Digite um número: ")
leia(numero)
se numero > 10 entao
escreval("O número é maior que 10")
fimse
fimalgoritmo
59
Exercício 2
algoritmo “EstaEntre100e200“
var numero: inteiro
Inicio
escreva("Digite um número: ")
leia(numero)
se (numero >= 100) e (numero <= 200) entao
escreval("O número está no intervalo entre 100 e 200")
senao
escreval("O número não está no intervalo entre 100 e 200")
fimse
fimalgoritmo 60
Exercício 3
algoritmo “Maior2Num“
var num1, num2: inteiro
Inicio
escreva("Digite o primeiro número: ")
leia(num1)
escreva("Digite o segundo número: ")
leia(num2)
se num1 > num2 entao
escreva("O 1º número ",num1," é maior que o 2º ",num2)
senao
escreva("O 2º número",num2," é maior que o 1º ",num1)
fimse 61
fimalgoritmo
Estrutura de Seleção (Múltipla Escolha)
• Quando um conjunto de valores discretos precisa ser
testado e ações diferentes são associadas a esses valores,
estamos diante de uma seleção encadeada homogênea
do tipo se – entao – se.
• Como esta situação é bastante freqüente na construção
de algoritmos que dependem de alternativas,
utilizaremos uma estrutura específica para estes casos
que é a seleção de múltipla escolha.
Exemplo: escolha <expressão_de_seleção>
caso V1
...
caso V2
...
62
fimescolha
Estrutura de Seleção (Múltipla Escolha)
• A sintaxe utilizada para esta estrutura é a seguinte:
escolha <expressão_de_seleção>
caso V1
Comando1
caso V2
Comando2
caso V3
Comando3
caso V4
Comando4
outrocaso
Comando5
fimescolha 63
Estrutura de Seleção (Múltipla Escolha)
Algoritmo "Menu"
var op : inteiro caso 2
Inicio escreval("Opção 2 - Cadastrar Filme")
caso 3
escreval("******** M E N U ********")
escreval("Opção 3 - Locação")
escreval("(1) Cadastrar Cliente") caso 4
escreval("(2) Cadastrar Filme") escreval("Opção 4 - Devolução")
escreval("(3) Locação") caso 5
escreval("(4) Devolução") escreval("Opção 5 - Relatórios")
caso 0
escreval("(5) Relatórios")
escreval("Opção 6 - Sair")
escreval("(0) Sair") outrocaso
escreva("opção->") escreval("Opção Inválida!!!")
leia(op) fimescolha
escolha op
Fimalgoritmo
caso 1 64
escreval("Opção 1 - Cadastrar Cliente")
Exercícios - Práticos
1. Elabore um algoritmo que leia a idade de um nadador e
imprima a categoria que ele pertence:
idade < 8 anos - Infantil A
idade >=8 e < 13 - Infantil B
idade >=13 e < 18 - Juvenil A
idade >=18 e < 21 - Juvenil B
2. Elabore um algoritmo que leia os lados de um triângulo
( a, b, c), verifique se as medidas permitem formar um
triângulo ( a < b + c, b < a + c e c < a + b). Se for
triângulo, determinar se é equilátero, isósceles ou
escaleno.
Triângulo Equilátero: os três lados são iguais;
65
Triângulo Isóscele: dois lados são iguais;
Triângulo Escaleno: três lados diferentes.
Exercício 1
algoritmo "IdadeNadador" caso 13,14,15,16,17
var escreval("Juvenil A")
idade:inteiro caso 18,19,20,21
inicio escreval("Juvenil B")
escreva("Digite a idade do outrocaso
nadador:") escreval("Nada consta")
leia(idade) fimescolha
escolha idade fimalgoritmo
caso 0,1,2,3,4,5,6,7
escreval("Infantil A")
caso 8 ate 12 66
escreval("Infantil B")
Exercício 2
algoritmo "Triangulo" escreval("É um triângulo escaleno")
var fimse
a, b, c: inteiro fimse
inicio senao
escreva("Digite o lado A do triângulo: ") escreva("Medidas para o triângulo
leia(a) inválido!!")
escreva("Digite o lado B do triângulo: ") fimse
leia(b) fimalgoritmo
escreva("Digite o lado C do triângulo: ")
leia(c)
se (a < (b+c)) e (b < (a+c)) e (c < (a+b)) entao
se (a = b) e (b = c) entao
escreval("É um triângulo equilátero!")
senao
se (a = b) ou (a = c) ou (b = c) entao
67
escreval("É um triângulo isósceles")
senao
Estruturas de Repetição
2
Repetição com Teste no Início
5
Exercícios 1
algoritmo "20numMaiorMenor" se (Num > Maior) entao
var Maior <- Num
Num, i, Maior, Menor: inteiro fimse
Inicio i <- i + 1
i <- 1 fimenquanto
enquanto (i<=20) faca escreval("O Menor é o ", Menor)
escreva("Digite um número: ") escreval("O Maior é o ", Maior)
leia(Num) fimalgoritmo
se (i = 1) entao
Menor <- Num
senao
se (Num < Menor) entao
Menor <- Num 6
fimse
fimse
Exercício 2
algoritmo "10numParImpar" escreval("Qtde de Par: ", Par)
var escreval("Qtde de Impar ", Impar)
Num, i, Par, Impar: inteiro fimalgoritmo
Inicio
Par <- 0
Impar <- 0
i <- 1
enquanto (i<=10) faca
escreva("Digite um número: ")
leia(Num)
se (Num % 2 = 0) entao
Par <- Par + 1
senao
Impar <- Impar + 1
fimse
7
i <- i + 1
fimenquanto
Exemplo Validação - Prático
algoritmo "validasexo"
var
Sexo : caracter
inicio
enquanto (Sexo <> "M") e (Sexo <> "F") faca
limpatela
escreva("Digite o Sexo (M ou F): ")
leia(Sexo)
fimenquanto
escolha Sexo
Caso "M"
escreval("Sexo: Masculino")
Caso "F"
escreval("Sexo: Feminino") 8
fimescolha
fimalgoritmo
Estruturas de Repetição
Repetição com Teste no Final
Deve ser interpretado da seguinte forma: Repita o bloco de comandos até que
a <condição> seja verdadeira
10
Exemplo Prático
algoritmo "Ex1"
var i, s: inteiro
inicio
s<-0
i<-1
repita
s <- s + i
i <- i + 1
ate (i > 100)
escreva("A soma é =", s) 11
fimalgoritmo
Estruturas de Repetição
Repetição com Variável de Controle
algoritmo "Ex1"
passo 2
var i, s: inteiro Para i de 1 ate 100 passo 2 faca
inicio
s <- 0
para i de 1 ate 100 faca
s <- s + i
fimpara
escreva("A soma é =", s)
fimalgoritmo 13
Estruturas de Repetição
Comando INTERROMPA
15
Declaração de Vetor
var num: vetor[1..10] de inteiro num[6] = 7
1 3 6 1 5 7 7 9 0 2
Posições 1 2 3 4 5 6 7 8 9 10
16
Estrutura de repetição PARA
algoritmo "Ex1"
var i: inteiro
num: vetor [1..3] de inteiro
inicio
para i de 1 ate 3 faca
escreva("Digite um Número na posição ",i,": ")
leia(num[i])
fimpara
para i de 1 ate 3 faca
escreval("Posição",i," Valor",num[i])
fimpara
17
fimalgoritmo
Exercício
18
Exercício
18
algoritmo "ExVet1"
var i,Soma:inteiro
num: vetor[1..5] de inteiro
inicio
para i de 1 ate 5 faca
escreva("Digite um número para a posição", i, ": ")
leia(num[i])
fimpara
Soma <- 0
para i de 1 ate 5 faca
Soma <- Soma + num[i]
fimpara
escreval("A soma é = ", Soma)
escreval("A média é = ", Soma/5)
fimalgoritmo 19
Exercício
20
algoritmo "ExVetMaior"
var i,Maior:inteiro
num: vetor[1..10] de inteiro
inicio
para i de 1 ate 10 faca
escreva("Digite um número para a posição", i, ": ")
leia(num[i])
fimpara
Maior <- 0
para i de 1 ate 10 faca
se num[i] > Maior entao
Maior <- num[i]
fimse
fimpara
escreval("O maior é o ", Maior) 21
fimalgoritmo
Exercício
22
algoritmo "ExVetMaior" para i de 1 ate 5 faca
var i,Soma1,Soma2:inteiro Soma1 <- Soma1 + vet1[i]
vet1: vetor[1..5] de inteiro Soma2 <- Soma2 + vet2[i]
vet2: vetor[1..5] de inteiro fimpara
inicio escreval("Soma vetor 1 é = ", Soma1)
para i de 1 ate 5 faca escreval("Soma vetor 2 é = ", Soma2)
escreva("Digite um número para a se Soma1 > Soma2 entao
posição", i, " do primeiro vetor: ") escreval("O vetor 1 é o maior")
leia(vet1[i]) senao
fimpara se Soma2 > Soma1 entao
para i de 1 ate 5 faca escreval("O vetor 2 é o maior")
escreva("Digite um número para a senao
posição", i, " do segundo vetor: ") escreval("Os dois são iguais")
leia(vet2[i]) fimse
fimpara fimse
Soma1 <- 0 fimalgoritmo
Soma2 <- 0
23
Exercício
24
algoritmo "ExVetOrdenar" para i de 1 ate 10 faca
var i,j,aux:inteiro para j de i+1 ate 10 faca
vet: vetor[1..10] de inteiro se (vet[j] < vet[i]) entao
inicio aux <- vet[i]
para i de 1 ate 10 faca vet[i] <- vet[j]
escreva(“Nº para a posição", i, ": ") vet[j] <- aux
leia(vet[i]) fimse
fimpara fimpara
fimpara
escreval("Antes")
para i de 1 ate 10 faca escreval("Depois")
escreval("Posição",i," Valor",vet[i]) para i de 1 ate 10 faca
fimpara escreval("Posição",i," Valor",vet[i])
fimpara
fimalgoritmo
25
Declaração de Matriz
var num: vetor [1..10, 1..10] de inteiro num[6,7] = 7
Linha 1 1 3 6 1 5 7 7 9 0 2
2 5 9 4 1 0 7 4 9 0 5
3 1 3 6 1 6 5 9 2 4 2
4 6 2 6 0 2 7 2 9 0 9
5 1 9 6 1 5 4 8 9 2 2
6 5 0 6 2 9 9 7 9 0 1
7 1 3 6 4 5 4 2 9 2 3
8 0 6 9 1 6 5 4 9 4 2
9 2 4 6 7 5 7 9 8 2 1
10 1 3 2 5 4 7 2 6 0 1
26
Coluna 1 2 3 4 5 6 7 8 9 10
Linha 1 5 9 4
algoritmo "Ex1"
2 1 3 6
var L,C: inteiro
Mat: vetor [1..3, 1..3] de inteiro 3 6 2 6
inicio Coluna 1 2 3
para L de 1 ate 3 faca
para C de 1 ate 3 faca
escreva("Digite um Número na posição Linha",L," e Coluna",C,": ")
leia(Mat [L,C])
fimpara
fimpara
para L de 1 ate 3 faca
escreval(" ")
para C de 1 ate 3 faca
escreval("Linha",L," Coluna",C," Valor", Mat [L,C])
fimpara
fimpara
fimalgoritmo 27
Exercício
30
Exercício
31
Exercício
32
algoritmo "ExMatrizSomaDasLinha"
var L,C,Soma:inteiro
Mat: vetor[1..4,1..4] de inteiro
inicio
para L de 1 ate 4 faca
para C de 1 ate 4 faca
escreva("Digite um Número na posição Linha",L," e Coluna",C,": ")
leia(Mat [L,C])
fimpara
fimpara
Soma <- 0
para L de 1 ate 4 faca
para C de 1 ate 4 faca
Soma <- Soma + Mat [L,C]
fimpara
escreval("Soma da linha",L," = ", Soma)
Soma <- 0
fimpara 33
fimalgoritmo