Logica Programacao
Logica Programacao
Logica Programacao
SUMÁRIO
Aula 1 – Lógica Básica ........................................................................................ 4
Lógica: ............................................................................................................. 4
Algoritmos: ....................................................................................................... 5
Português Estruturado: .................................................................................... 5
Lógica booleana: ............................................................................................. 5
Tabela Verdade: .............................................................................................. 6
Exercícios: ....................................................................................................... 8
Aula 2 – Variáveis e Constantes ......................................................................... 9
Armazenamento de dados na memória: .......................................................... 9
Definição e utilização de variáveis: .................................................................. 9
Constantes:.................................................................................................... 12
Exercícios: ..................................................................................................... 13
Aula 3 – Tipos de Dados .................................................................................... 14
Dados Numéricos: ......................................................................................... 14
Números inteiros: ........................................................................................... 14
LEIA (ano)...................................................................................................... 15
ESCREVA (idade_hoje) ................................................................................. 16
Números reais: .............................................................................................. 16
Dados Literais: ............................................................................................... 16
Dados lógicos: ............................................................................................... 17
Exercícios: ..................................................................................................... 18
Aula 4 – Tipos de Operadores ........................................................................... 19
Operadores: ................................................................................................... 19
Operadores aritméticos:................................................................................. 19
Operadores relacionais: ................................................................................. 19
Operadores lógicos: ....................................................................................... 19
Prioridades de Operadores: ........................................................................... 19
Lista de Prioridades: ...................................................................................... 20
Exemplos: ...................................................................................................... 20
Exercícios: ..................................................................................................... 20
Aula 5 – Estruturas de Controle: ....................................................................... 21
Estruturas de decisão simples: ...................................................................... 21
Estruturas de decisão simples encadeada: ................................................... 22
Exercícios: ..................................................................................................... 27
2
Aula 6 – Estruturas de Decisão Composta e Múltipla Escolha ...................... 28
Decisão Composta: ....................................................................................... 28
Pseudocódigo: ............................................................................................... 28
Estrutura de decisão composta encadeada: .................................................. 29
Exercícios: ..................................................................................................... 32
Aula 7 – Estruturas de Decisão de Múltipla Escolha....................................... 33
Exemplo: ........................................................................................................ 33
Pseudocódigo ................................................................................................ 33
Decisão de múltipla escolha ou decisão encadeada? ................................... 34
Decisão encadeada: ...................................................................................... 36
Múltipla escolha: ............................................................................................ 36
Exercícios: ..................................................................................................... 36
Aula 8 – Estruturas de Repetição ..................................................................... 37
Estrutura Básica ............................................................................................ 37
Tipos de Estruturas de Repetição: ................................................................. 38
Estrutura de Repetição com Variável de Controle: ........................................ 38
Pseudocódigo: ............................................................................................... 38
Exemplo: ........................................................................................................ 39
Repita até – Teste condicional no final: ......................................................... 42
Exercícios: ..................................................................................................... 43
Aula 9 – Vetores ................................................................................................. 44
Estruturas de dados homogêneas: ................................................................ 44
Exemplo: ........................................................................................................ 44
Vetores: ......................................................................................................... 45
Declaração de um vetor: ................................................................................ 46
Atribuição em Vetores:................................................................................... 46
Ordenação de um vetor: ................................................................................ 47
Exemplo: ........................................................................................................ 50
Exercícios: ..................................................................................................... 52
Aula 10 – Matrizes .............................................................................................. 53
Como funciona: .............................................................................................. 53
Atribuição em matrizes: ................................................................................. 55
Solução: ......................................................................................................... 55
Exercícios: ..................................................................................................... 56
3
AULA 1
LÓGICA BÁSICA
Lógica:
Nessa apostila, iremos abordar a lógica de programação. Mas o que
exatamente é lógica?
Lógica é qualquer tipo de pensamento que leva a algum objetivo e, com a
lógica da programação não é diferente. Basicamente, a lógica de programação é
a maneira com que programamos, ou seja, a maneira como utilizamos
sequências de algoritmos para atingir determinado resultados.
Para entendermos melhor o que foi dito acima, vamos observar um
exemplo de português estruturado, que nada mais é que uma descrição em
etapas de determinada ação. Como exemplo, vamos pegar uma ação que
realizamos no nosso cotidiano, como tomar um copo de água.
Para entendermos o princípio da lógica de programação, precisamos dividir
por etapas as nossas ações e descrevê-las:
1. Pegar um copo;
2. Levá-lo a uma torneira;
3. Posicionar o copo na saída de água;
4. Abrir a torneira;
5. Quando o copo estiver quase cheio, desligar a torneira;
6. Levar o copo até a boca;
7. Beber;
8. Largar o copo na pia;
4
Algoritmos:
Como dito anteriormente, os algoritmos são formas de sequenciar nossos
pensamentos com o objetivo de atingir determinado resultado. Esses algoritmos
podem ser feitos de várias maneiras, uma delas, e a mais fácil para quem está
começando é criar algoritmos em linguagem literal, ou seja, como descrevemos a
ação de tomar água anteriormente.
Português Estruturado:
Escrever algoritmos em linguagem literal é muito simples, apenas
devemos dizer os passos que temos que realizar para atingir o objetivo, sem
qualquer preocupação com a sintaxe utilizada. Outro exemplo de algoritmo literal
é o algoritmo para fritar um ovo, onde:
1. Pegar a panela;
2. Colocar óleo na panela;
3. Acender o fogo;
4. Quebrar o ovo;
5. Colocar a gema e a clara na panela;
6. Esperar ficar pronto;
7. Retirar o ovo;
8. Apagar o fogo;
Lógica booleana:
A lógica booleana foi criada por George Boole no século XIX. Por iniciativa
própria, ele passou a estudar as operações matemáticas de forma diferente,
separando todos os símbolos das coisas sobre as quais eles operavam, com o
intuito de criar um sistema simples e totalmente simbólico. Surge assim a lógica
matemática.
5
A lógica booleana é baseada apenas em dois valores, 0 e 1 ou Falso e
Verdadeiro, respectivamente. Mas pode ser representada também por quaisquer
outros valores desde que eles possuam a mesma relação que Falso e
Verdadeiro, sendo um o oposto do outro.
A lógica booleana possui 3 operadores básicos, que são:
o NOT;
o AND;
o OR;
6
Estas são as tabelas da verdade para os operadores lógicos básicos,
agora veremos os operadores lógicos que derivados.
Os 3 operadores lógicos básicos derivam mais 4 operadores lógicos, que
são:
NOR
NAND
XOR
XNOR
Note que todas as tabelas são muito simples, basta seguir as regras dos
operadores vistos anteriormente. Nas tabelas que vimos até agora utilizamos
apenas dois valores e apenas uma operação. Porém, não precisamos nos limitar
à isso, e podemos criar tabelas da verdade mais complexas, com mais
operações e com mais valores
7
EXERCÍCIOS:
3. O que é um algoritmo?
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
8
AULA 2
VARIÁVEIS E CONSTANTES
9
Veja que as gavetas estão numeradas e cada gaveta só armazena um
documento por vez. Cada número corresponde ao ‘endereço’ da gaveta.
Algumas delas estão, também, marcadas com nomes de pessoas. Essas são as
que estão reservadas.
Por exemplo, a gaveta de número 01 está reservada para armazenar um
documento de Maria. Ninguém além de Maria poderá colocar seus documentos
na gaveta 01. Veja que tem gavetas reservadas também para João, Sílvia,
Francisco e José. E há gavetas que não foram reservadas, ou seja, estão livres
para serem reservadas quando necessário (essas gavetas, porém, só podem ser
utilizadas se forem previamente reservadas). Dessa forma, se perguntarmos a
Maria onde ela guarda os seus documentos, ela responderá: “na gaveta 01 do
arquivo”. É o ‘endereço’ dos documentos dela.
O endereço ao qual nos referimos, em algoritmos, corresponde a uma
posição na memória do computador. A essa posição na memória do computador,
damos o nome de variável.
Uma variável é uma posição na memória do computador, que é reservada
para armazenar os dados que o algoritmo vai manipular.
Uma variável precisa ter um nome (ou identificador), um tipo de dado
associado a ela (tipo da variável) e a informação que ela armazena. O
identificador serve para diferenciar a variável das demais, por isso deve ser único
para cada variável.
O processo de criação de uma variável é chamado de declaração da
variável. As variáveis devem ser declaradas no algoritmo antes de serem
utilizadas, pois a declaração das variáveis permite que seja reservado um
espaço na memória para o dado que vai ser armazenado e utilizado.
Para declarar uma variável, devemos proceder da seguinte forma:
10
Veja, nos exemplos, que declaramos as variáveis “vazias”, isto é, sem
informações associadas a elas (e, então, fornecemos essas informações
posteriormente, no corpo do algoritmo). Lembre-se do exemplo das gavetas.
Para reservar uma gaveta para uma pessoa, não era necessário armazenar o
conteúdo, de imediato, na gaveta. Igualmente, só é possível armazenar conteúdo
em uma gaveta que já foi previamente reservada. Ou seja, primeiro deve-se
reservar uma gaveta e depois armazenar seu conteúdo.
Veja, também, no exemplo V, que duas ou mais variáveis de um mesmo
tipo podem ser declaradas juntas, na mesma linha, separadas por vírgula (lista
de variáveis).
Uma variável pode assumir diferentes valores, mas só pode armazenar um
valor a cada instante. Além disso, o seu conteúdo pode mudar ao longo na
execução do algoritmo.
Existem algumas regras básicas para a definição dos nomes
(identificadores) das variáveis. Vamos conhecê-las.
Comportamento do
VisuAlg durante a tentativa de
nomear uma variável com
uma palavra reservada.
O termo inicio, no
VisuAlg, é utilizado para
começar o algoritmo. Ao
tentar identificar uma variável
com o nome inicio, a resposta
do programa é o
encerramento da execução e
a linha em que está o erro é
realçada em vermelho.
Vejamos alguns exemplos de acertos e erros na
identificação de variáveis: Identificadores válidos:
a. nome1
b. ano_de_nascimento
c. salario
d. nota_aluno
e. qtd_dias
11
Identificadores inválidos:
Constantes:
Além das variáveis, em algoritmos, também lidamos com constantes.
Trata-se de valores fixos ou estáveis, que são escritos no programa de forma
literal.
No VisuAlg, temos constantes numéricos, caracteres e lógicos.
São exemplos de constantes numéricos:
a. 15
b. 250
c. 38.5
var
a : inteiro
b : inteiro
c : inteiro
d : lógico
f : literal
inicio
a <- 2 //atribuição de constante
12
f <- “Teste” //atribuição de constante
fimalgoritmo
Para resolver os exercícios á seguir, peça ao seu professor que lhe mostre
o aplicativo VisuAlg (arquivo auxiliar).
EXERCÍCIOS
13
AULA 3
TIPOS DE DADOS
Dados Numéricos:
No estudo da matemática, você aprendeu que existem diversos conjuntos
numéricos (conjunto dos números naturais, inteiros, racionais, irracionais e reais).
No estudo dos algoritmos, lidaremos apenas com os números inteiros e os
números reais.
Números inteiros:
Os números inteiros são os números positivos ou negativos que não
possuem parte decimal ou fracionária. Ex.: 15, -487, 0, 27835, -14937, 100. Em
algoritmos, os números inteiros são utilizados geralmente para expressar valores,
como quantidades ou idade.
Observe o exemplo abaixo:
Algoritmo que calcula a idade de uma pessoa, dados o ano atual e o ano
em que ela nasceu.
14
Os dados de entrada nesse algoritmo são o ano atual e o ano de
nascimento digitado pelo usuário (ano). O dado de saída é a idade atual do
usuário (idade_hoje). Todos os dados nesse algoritmo são numéricos inteiros.
Vamos analisar o código em detalhes.
Na primeira linha do algoritmo, temos:
algoritmo "calcula idade"
Nesta primeira linha, estamos nomeando o algoritmo. Veja que o nome do
algoritmo está entres aspas duplas. Na segunda linha do algoritmo, o termo var
indica o campo onde ficarão as declarações das variáveis. Nas linhas 3, 4 e 5, as
variáveis são declaradas.
Veja:
Linha 2: var
Linha 3: ano_atual: inteiro
Linha 4: ano:inteiro
Linha 5: idade_hoje: inteiro
O termo ano_atual é o nome que foi dado à variável. O símbolo “<-” (seta
para a esquerda) é um símbolo que indica atribuição. Estamos dizendo, portanto,
nessa linha de código, que está sendo atribuído o valor 2013 à variável do tipo
inteiro, que foi nomeada ano_atual.
15
Nesse momento, o objetivo do algoritmo foi atingido. A última instrução exibe na
tela o resultado encontrado:
ESCREVA (idade_hoje)
O comando escreva é utilizado para exibir, na tela, alguma informação. É
através dele que o computador comunica-se com você, informando o resultado
encontrado no algoritmo.
Números reais:
Os números reais são os números positivos ou negativos que englobam
números decimais ou fracionários. Ex.: 15, -487, 1.78, 0.254, 27835, 100, 8.50.
São também chamados de pontos flutuantes, nas linguagens de programação.
Valores reais são aplicáveis em algoritmos que manipulam dados que expressam
valores fracionários, como salário, média, preço, porcentagem, entre outros.
O algoritmo da média, que vimos nas duas primeiras aulas, utiliza dados
numéricos reais.
Observe:
Algoritmo que calcula a média do aluno:
Obs.: as casas decimais, nos números reais, devem ser separadas por
ponto (.) e não por vírgula (,). Por exemplo: use “8.5” e não “8,5”.
Dados Literais:
Os dados literais são formados por um único caractere ou uma sequência
de caracteres, que podem ser letras (maiúsculas ou minúsculas), números ou
símbolos especiais (como #, $, @, ?, &, entre outros). Os números, quando
representados como caracteres, não podem ser utilizados para cálculos.
Uma sequência de caracteres pode ser chamada também de cadeia de
caracteres ou string.
Exemplos de dados literais: “Fone: 3222-2222”, “Av. Senador Salgado Filho, Nº
1550”,
“João Silveira”, “M”, “152”, “CEP: 59052-250”, “F”.
16
Nos nossos algoritmos, representaremos todos os dados literais sempre
entre aspas duplas, sejam eles caracteres isolados ou strings, pois essa é a
convenção utilizada no VisuAlg.
Observe o exemplo abaixo, utilizando uma string (cadeia de caracteres).
algoritmo "literais"
var
nome: literal
sobrenome: literal
inicio
nome<-"Maria"
escreva ("Digite o sobrenome:")
leia (sobrenome)
escreva (nome,"",sobrenome)
fimalgoritmo
algoritmo "caractere"
var
sexo: caractere
inicio
sexo<-"F"
escreva (sexo)
fimalgoritmo
17
algoritmo "logicos"
var
igualdade: logico
inicio
igualdade<-12=10
escreva (igualdade)
fim algoritmo
EXERCÍCIOS:
18
AULA 4
TIPOS DE OPERADORES
Operadores:
Estes operadores são empregados com muita frequência em
programação. É com o seu uso (muitas vezes da combinação de vários deles) é
que são feitas as tarefas mais comuns de processamento de dados.
Operadores aritméticos:
Operadores relacionais:
Operadores lógicos:
Prioridades de Operadores:
Prioridade mais alta: * / div mod
Prioridade mais baixa: + -
Obs: Parênteses ganham prioridade.
Ex: Para a expressão 2*(4+2) o resultado será 12 e não 10, que resultaria
de:
2*4+2.
Se houver uma sequência de operadores de igual prioridade, a execução
será na ordem em que aparecerem as operações.
Atenção: o resultado da expressão 8/ (4*2) será diferente de 8/4*2. Já no
caso de 3*4/2 e 3*(4/2), o resultado será exatamente o mesmo. Na dúvida,
recomenda-se empregar parênteses para forçar a ordem de execução desejada.
19
Lista de Prioridades:
Prioridade mais alta: NOT
Prioridade média: AND
Prioridade mais baixa: OR XOR
Exemplos:
A expressão: (A>2) AND NOT (A>20) equivale a (A>2) AND (NOT
(A>20)).
Na expressão (X=0) OR (X>=2) AND (X<=5), será resolvido primeiro o
AND.
Assim, a expressão equivale a (X=0) OR ((X>=2) AND (X<=5)).
OBS: Operações com precedência igual normalmente são executadas da
esquerda para a direita, embora o compilador possa, às vezes, rearranjar os
operadores para otimização de código.
Na dúvida, é aconselhável usar parênteses para garantir a prioridade
desejada.
EXERCÍCIOS
20
AULA 5
ESTRUTURAS DE CONTROLE
INICIO
acordar
Ir à praia
FIM SE
FIM
21
A estrutura de decisão obedece à seguinte sintaxe:
Você deve recordar que uma expressão lógica só pode assumir dois
possíveis resultados: verdadeiro ou falso. Esse resultado, na estrutura de
decisão, determina qual caminho o algoritmo vai escolher. Ou seja, dependendo
do resultado da expressão lógica, o algoritmo segue para esse ou aquele
caminho.
Vamos analisar o algoritmo da média mais uma vez. Só que, dessa vez,
com comandos de desvios.
algoritmo “calcula média com desvio”
var
nota1, nota2 : real
media: real
inicio
escreva (“Digite o valor da primeira nota: ”)
leia (nota1)
escreva (“Digite o valor da segunda nota: ”)
leia (nota2)
media <- (nota1 + nota2)/2
escreval (“A média é =”,media)
22
INICIO
acordar
SE fizer sol ENTÃO //inicio do primeiro SE
Ir à praia
Pseudocódigo: Fluxograma:
Inicio
Se <condição> então
Comando 1
Comando 2
.
.
Comando n
fimse
fimalgoritmo
Observe que cada SE, na estrutura encadeada, tem a sua devida
finalização, ou seja, cada SE tem o seu respectivo FIM SE. É extremamente
importante que você esteja atento a esse detalhe, pois o compilador
23
sempre associará o FIM SE ao SE que estiver mais próximo. E se você se
esquecer de finalizar um bloco de comandos de decisão, um erro será gerado e
o seu algoritmo não será executado.
Vamos resolver o problema a seguir.
Escreva um algoritmo que solicite ao usuário que coloque os tamanhos de
três lados de um triângulo e informe se os lados de fato compõem um triângulo.
Lembre-se de que, em um triângulo, cada lado é menor que a soma dos outros
dois lados.
algoritmo “triangulo”
var
lado1, lado2, lado3 : inteiro
inicio
escreva (“Digite o valor do primeiro lado: ”)
leia (lado1)
escreva (“Digite o valor do segundo lado: ”)
leia (lado2)
escreva (“Digite o valor do terceiro lado: ”)
leia (lado3)
se (lado3<lado1+lado2) entao
se (lado2<lado1+lado3) entao
se (lado1<lado2+lado3) entao
escreva (“Os lados formam um triângulo.”)
fimse
fimse
fimse
fimalgoritmo
INICIO
Acordar INICIO
SE fizer sol acordar
SE tiver dinheiro SE (fizer sol) E (tiver dinheiro)
Ir à praia Ir à praia
FIM SE FIM SE
FIM SE FIM
FIM
24
Observando os algoritmos acima, você pode concluir que um SE
encadeado pode, algumas vezes, ser equivalente a um SE simples, com a
utilização de duas expressões lógicas combinadas. Você se lembra, que os
operadores lógicos E, NÃO e OU são utilizados para combinar duas ou mais
expressões relacionais ou lógicas?
No algoritmo da direita, vemos uma combinação de duas expressões que
podem ter por resultado um valor verdadeiro ou falso. Está fazendo sol? Além
disso, tenho dinheiro? Se as duas condições forem atendidas, eu vou à praia.
Ou seja, utilizamos apenas um comando SE, porém com uma expressão
combinada. Já no algoritmo da esquerda, como vimos anteriormente, ocorre o
mesmo, porém, utilizamos dois comandos SE separadamente.
Veja que o código exibido na área destacada, no algoritmo do triângulo,
que resolvemos há pouco, poderia ser substituído, sem alterações no resultado
final, pelo seguinte código:
Eu vou à praia
Eu vou ao clube
FIMSE
FIMSE
25
Faça um algoritmo para calcular o dobro de um número inteiro, caso seja
par e, caso o dobro seja menor do que 10, escrever seu quadrado.
26
EXERCÍCIOS
27
AULA 6
Decisão Composta:
Agora que você já sabe que a estrutura de decisão simples executa um
comando ou bloco de comandos se uma determinada condição for atendida. Se
a condição não for atendida, a estrutura é finalizada sem executar comandos.
Então, a estrutura composta segue do mesmo princípio, com diferença
que, quando a condição não é feita, há um desvio para outro comando ou até
bloco de comandos.
A estrutura de decisão composta executa um comando ou bloco de
comandos quando a condição é feita e outro comando diferente quando a
condição proposta não é feita.
Agora, você deve começar a utilizar além do SE, a palavra reservada
SENÃO. (no VisuAlg usa-se “senao”)
Vamos ver um exemplo simples para mostrar o uso do SENÂO.
Inicio
Acordar
SE fizer sol ENTÂO
Ir à praia
SENÂO
Ler um livro
FIM SE
FIM
Note que desta vez estamos tratando com uma estrutura composta. Se a
condição (fazer sol) é verdadeira eu vou à praia. Caso contrário, (falsa) faço
outra coisa: leio um livro. Ou seja, a condição não sendo verdadeira, logo, eu
executo outra atividade.
inicio
se <condição> então
comando 1
comando 2
.
.
comando n
senao
comando 1
comando 2
28
.
.
comando n
fimse
fim
Veja que, da mesma forma que na estrutura simples, o algoritmo executa
um comando ou bloco de comandos, caso a situação seja verdadeira.
Faremos um algoritmo para calcular a média aritmética de um auno e dizer
se o mesmo foi aprovado ou não.
Estrutura de decisão
composta encadeada:
Da mesma forma que
na estrutura simples, na
estrutura composta também
podemos utilizar “SE”
encadeados. Você sabe que
isso ocorre quando há várias
condições a serem testadas.
Agora, observe as duas situações abaixo:
29
Situação 01:
Inicio
Acordar
SE fizer sol ENTÂO
Ir ao shopping
SENÂO
SE estiver nublado ENTÂO
Assistir um filme
SENÂO
Está chovendo.
Ficar em casa e ler um livro
FIM SE
FIM SE
FIM
Situação 02:
INICIO
acordar
SENÂO
FIM SE
FIM
30
Na Situação 02, há uma estrutura composta inserida em outra estrutura
composta. Se fizer sol, assistirei a um filme. Se não fizer sol, não assistirei a um
filme, mas me restam duas opções possíveis: comprar uma camisa se tiver
dinheiro, ou ficar em casa e ler um livro, caso não tenha dinheiro.
Para ilustrar melhor, vamos incrementar um pouco mais o algoritmo da
média:
algoritmo “calcula média com desvio composto encadeado”
var
nota1, nota2, media: real
inicio
escreva (“Digite o valor da primeira nota: ”)
leia (nota1)
escreva (“Digite o valor da segunda nota: ”)
leia (nota2)
media <- (nota1 + nota2)/2
escreval (“A média é =”,media)
se media >= 7 entao
escreval (“Aluno aprovado! Parabéns!”)
senao
senao
escreval (“Aluno reprovado!”)
fimse
fimse
fimalgoritmo
31
EXERCÍCIOS:
32
AULA 7
ESCOLHA opção
CASO 1
escreva (“Sair de casa ás 10 horas da manhã.”)
CASO 2
escreva (“Sair de casa ás 4 horas da tarde.”)
CASO 3
escreva (“Sair de casa ás 8 horas da noite.”)
OUTROCASO
escreva (“Já que não escolheu nenhuma das opções, fique em casa
assistindo televisão.”)
FIM ESCOLHA
FIM
Pseudocódigo
Fluxograma
Inicio
33
escolha <opção>
<comandos1>
<comandos2>
<comandos>
outrocaso
<comandos_padrão>
Fimescolha
Fim
A palavra reservada outro caso pode ser entendida como um desvio, em
caso do usuário escolher uma opção não esteja entre as opções existentes. Sua
utilização é opcional. Execute o algoritmo no VisuAlg.
Para uma melhor fixação, evite copiar e colar o texto da aula. Prefira
reescrever o algoritmo no VisuAlg. Dessa forma, você ficará mais familiarizado
com a sintaxe e, logo, sua habilidade em utilizar a estrutura será melhorada.
Decisão de múltipla escolha ou decisão encadeada?
Se você compreendeu tudo o que vimos até agora sobre as estruturas de
decisão, pode estar se perguntando: “Mas, essa estrutura de múltipla escolha
não é a mesma coisa que uma estrutura de decisão composta encadeada?”.
De fato, elas podem ser similares. Os dois algoritmos abaixo fazem a
mesma coisa:
Decisão Encadeada:
algoritmo "Decisão encadeada"
var
opcao: inteiro
inicio
escreval ("O que fazer no final de semana:")
escreval ("Opções: 1 - Parque, 2 - Pizza, 3 - Churrasco, Outro Número -
Descansar")
leia (opcao)
se opcao = 1 entao
escreval ("No final de semana iremos ao parque!")
senão
se opcao = 2 entao
escreval ("No final de semana comeremos pizza!")
senão
se opcao=3 entao
34
escreval ("No final de semana iremos a churrascaria!")
senao
escreval ("No final de semana iremos descansar.")
fimse
fimse
fimse
fimalgoritmo
Decisão de Múltipla Escolha:
algoritmo "Múltipla Escolha"
var
opcao: inteiro
inicio
escreval ("O que fazer no final de semana:")
escreval ("Opções: 1 - Parque, 2 - Pizza, 3 - Churrasco, Outro Número -
Descansar")
leia (opcao)
escolha opcao
caso 1
escreval ("No final de semana iremos ao parque!")
caso 2
escreval ("No final de semana comeremos pizza!")
caso 3
escreval ("No final de semana iremos a churrascaria!")
outrocaso
escreval ("No final de semana iremos descansar.")
fimescolha
fimalgoritm
Execute os dois algoritmos no VisuAlg e veja que, em ambos os casos, a
saída é a mesma.
Cada palavra reservada que utilizamos em um algoritmo representa um
comando que o programa vai executar, desde a inicialização do algoritmo,
passando pelos comandos básicos (as instruções primitivas) e os comandos de
cada estrutura de controle, até a finalização do algoritmo. Tudo isso são
instruções que passamos para que o computador execute.
Sabendo disso, podemos ver que o algoritmo que utiliza a decisão
encadeada tem um número maior de instruções. Isso demanda uma quantidade
maior de memória e processamento do computador para executar o algoritmo, o
que afeta diretamente o desempenho.
Seria como se você precisasse caminhar de um ponto a outro, tendo duas
opções de caminho: em uma, você segue em linha reta e, na outra, você vai à
ziguezague. Em qual dessas opções você acha que chegaria mais rápido? Em
qual chegaria menos cansado?
Em um algoritmo simples, provavelmente, você não perceberá a diferença.
Mas, em programas maiores e mais complexos, fica evidente a queda no
desempenho. Por isso, é mais conveniente, nesses casos (de seleção
mutuamente exclusiva), utilizar a estrutura de múltipla escolha.
Há, também, outra diferença básica entre as duas estruturas, que pode
determinar quando utilizar uma ou outra:
35
Decisão encadeada:
Pode testar mais de um valor ao mesmo tempo. Ou seja, podem ser
utilizadas expressões relacionais.
Múltipla escolha:
Só pode testar igualdade e só testa um valor por vez, por isso, não pode
utilizar expressões lógicas ou relacionais.
EXERCÍCIOS:
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
36
AULA 8
ESTRUTURAS DE REPETIÇÃO
Estrutura Básica
Você já sabe que alguns algoritmos precisam executar instruções com
base em uma condição pré-estabelecida. Nas estruturas de decisão que vimos
nas aulas anteriores, se uma condição é verdadeira, um comando ou grupo de
comandos é executado. Depois disso, a estrutura é finalizada. Ou há o caminho
alternativo, caso a condição não seja atendida.
Nas estruturas de repetição, condições também são testadas. Mas, o que,
de fato, caracteriza essa estrutura é que um conjunto de ações é executado de
forma repetida enquanto a condição permanece válida ou não.
Por exemplo, se alguém lhe solicita que faça um algoritmo que escreva
cinco vezes a frase: “Olá, bom dia!”, de que forma você faria?
37
No algoritmo acima, criamos uma variável de controle (contador) que é
que determinam quantas vezes o comando escreval será executado. A repetição
só para quando a condição não for atendida, ou seja, quando o contador for
maior que cinco.
38
Fluxograma: Veja a seguir algumas considerações sobre a sintaxe da estrutura.
- A variável
deve ser uma variável
numérica
inteiro, pois servirá de
contador
valor incrementado a
cada passo.
- O valor inicial
corresponde ao valor
de inicialização da
variável antes da
primeira repetição.
- O valor final
corresponde ao valor
máximo que a
variável pode
alcançar.
- O valor inicial, o
valor final e
o valor de incremento
podem ser variáveis ou constantes.
- Se o valor de incremento não for definido, instantaneamente o programa
assume o valor = 1.
- O valor de incremento não pode ser nulo.
- Pode ser atribuído um valor negativo ao valor de incremento, caso se
deseje que o laço seja percorrido em ordem inversa. Nesse caso, o valor inicial e
o valor final devem ser invertidos, também, para evitar erros na execução. Ou
seja, se o valor de incremento for negativo, o valor inicial deve ser maior que o
valor final.
algoritmo
var
nota1, nota2, media: real //declaração das variáveis do alg.
contador: inteiro //declaração do contador
inicio
enquanto contador < 5 faca //inicio da estrutura de repetição escreval
(“Digite as notas do aluno “,contador,”:”) escreval (“Primeira nota:”)
leia (nota1)
escreval (“Segunda nota:”)
leia (nota2)
media <- (nota1+nota2)/2
escreval (“O aluno “,contador,” teve média igual a:”, media)
contador <- contador + 1
fimenquanto
fimalgoritmo
40
Veja que o algoritmo acima, utilizando o comando ENQUANTO, faz a
mesma coisa que o algoritmo que vimos na aula anterior, com os comandos
PARA...FAÇA.
No algoritmo da média, sabemos previamente a quantidade de repetições,
que equivale ao número de alunos da turma. Por isso, esse algoritmo pode ser
resolvido com qualquer uma das duas estruturas de repetição: o PARA ou o
ENQUANTO.
Você sabe que o comando PARA define o valor de incremento do
contador antes do início da execução. Essa definição não é feita na sintaxe do
comando ENQUANTO. Por isso, é de extrema importância que você se lembre
de incrementar o contador, antes de finalizar a estrutura.
Veja que antes do comando fim enquanto, temos a seguinte expressão.
41
O comando ENQUANTO é utilizado em estruturas de repetição em que
não sabemos previamente a quantidade de repetições do comando ou grupo de
comandos da estrutura.
Observe a sintaxe desta estrutura:
Pseudocódigo:
enquanto <condição> faca
<instruções>
fimenquanto
Fluxograma:
Atenção: se houver alguma situação em que seja possível a condição ser
sempre verdadeira, as instruções da estrutura executarão para sempre. É o que
chamamos de loop infinito. É importante que você tenha o cuidado de evitar
situações como essa.
Quer ver um exemplo de algoritmo que resulta em loop infinito? Retorne
ao algoritmo da média e tente executá-lo no VisuAlg removendo a linha em que o
contador é incrementado (contador <- contador + 1). Veja o que acontece.
Como o contador não está sendo incrementado terá sempre o valor inicial
(zero). Dessa forma, a condição (contador < 5) será sempre verdadeira,
causando, portanto, a situação de loop infinito.
Repita...até – Teste condicional no final:
Veremos novamente, o algoritmo da média:
escreva(“Segunda nota:”)
leia (nota2)
media <- (nota1 + nota2)/2
escreval (“O aluno
“,contador,” teve média
igual a:”, media)
contador <- contador + 1
ate contador > 50
fimalgoritmo
42
Na estrutura REPITA...ATÉ, a repetição continua enquanto a condição
(contador > 50) for falsa. E cessa quando essa condição se tornar verdadeira.
Veja que o problema da média pôde ser resolvido com qualquer uma das
estruturas de repetição, alterando-se somente a sintaxe.
Apesar disso, nem sempre um problema, em algoritmos, poderá ser
solucionado com qualquer uma das estruturas. Sempre haverá uma das
estruturas que se enquadre melhor na solução de determinado problema.
Ao contrário do ENQUANTO, o teste da condição verifica, na estrutura
REPITA...ATÉ, se a condição é falsa. O looping termina quando a condição é
verdadeira. Além disso, a estrutura REPITA...ATÉ sempre executa, pelo menos
uma vez, os comandos, pois o teste da condição é realizado no final.
EXERCÍCIOS:
43
AULA 9
VETORES
Nas aulas anteriores, estudamos as estruturas de controle. Você viu que
tais estruturas são utilizadas para definir o fluxo de execução dos comandos nos
algoritmos. Viu também as estruturas sequenciais, com comandos básicos e
ordem simples na execução desses comandos; as estruturas de decisão, que
estabelecem desvios na execução dos comandos, de acordo com condições
específicas; e as estruturas de repetição, em que determinados comandos são
executados em laço.
Até agora, na execução dos comandos com as estruturas de controle,
utilizamos tipos de dados básicos, com variáveis simples: real, inteiro, literal,
caractere e lógico. Nesta aula, você verá que há situações em que os tipos de
dados básicos não são suficientes para resolver os problemas que se
apresentam.
Em muitos momentos, precisaremos, para atingir a solução de tais
problemas, utilizar o que chamamos de estruturas de dados homogêneas. Você
entenderá o conceito dessas estruturas e verá que, utilizando-as, podemos
armazenar diversos dados de um mesmo tipo em uma única variável. Você
estudará a utilidade dessas estruturas e as classificaremos em vetores
(unidimensionais) e matrizes (bidimensionais), contemplando a sintaxe e a
construção de algoritmos utilizando as duas estruturas.
Estruturas de dados homogêneas:
Ao longo da nossa disciplina, você viu que uma variável é um espaço na
memória que é reservado para armazenar determinados tipos de dados. Até
agora, porém, nós trabalhamos apenas com os tipos de dados básicos (reais,
inteiros, caracteres, literais e lógicos) e variáveis simples para armazenar esses
dados.
No entanto, nem sempre os tipos de dados básicos são suficientes para
representar as estruturas de dados necessárias para resolver os problemas que
se apresentam.
Imagine, por exemplo, que você quer escrever um programa que solicita
ao usuário a entrada dos nomes de 50 alunos de uma turma de sua escola.
Parece simples, não? E é. Basta você utilizar uma das estruturas de repetição
que vimos nas aulas anteriores. Exemplo:
44
O algoritmo acima solicita que o usuário digite os nomes e lê um a um,
conforme o usuário os digita. Neste caso, precisamos apenas de uma variável
inteira que servirá como contador e uma variável do tipo literal (também
conhecida como caractere) para armazenar o nome que será digitado.
O nome é digitado, armazenado na variável, exibido ao usuário, e a
variável é liberada para armazenar o próximo nome. Se você solicitar ao
programa que exiba o conteúdo da variável nome, verá que somente o último
nome digitado será exibido, já que, da maneira como foi escrito o algoritmo, é
impossível exibir os nomes anteriores.
Mas, se quisermos que todos os nomes digitados sejam exibidos em uma
lista, imediatamente após a digitação dos mesmos? Como fazer isso?
Para que os nomes dos alunos do nosso exemplo sejam exibidos em uma
lista, eles precisam primeiro, ser acessados. E para ser acessados, é necessário
que todos eles estejam armazenados nessa lista. Para esse fim, existem as
estruturas de dados homogêneas.
Estruturas de dados homogêneas são estruturas que permitem armazenar
conjuntos de dados de um mesmo tipo (daí vem o nome “homogêneas”) em uma
única variável.
As estruturas de dados homogêneas são classificadas em dois tipos:
1. Os vetores (ou arrays), estruturas que armazenam os dados em
uma única linha e várias colunas (dizemos que são unidimensionais).
2. As matrizes, estruturas que armazenam os dados em forma de
tabela, com várias linhas e várias colunas (são bidimensionais).
Vetores:
Voltando ao nosso exemplo, como exibir os nomes dos alunos em uma
lista, utilizando as estruturas de dados homogêneas? Antes de resolver esse
problema, vamos analisar o passo a passo dessa situação.
Primeiro, devemos inserir no programa esses dados. Ou seja, devemos
escrever, um a um, os nomes dos alunos, armazenando-os em uma lista. Em
seguida, solicitamos que o programa exiba a lista dos alunos. Os dados
armazenados são, então, acessados e, em seguida, exibidos.
Se tentássemos resolver esse problema com o que aprendemos até aqui,
teríamos que declarar 50 variáveis literais para armazenar os 50 nomes e depois
teríamos que instruir o computador a ler, uma a uma, cada variável. Algo similar
ao trecho de programa abaixo:
leia (nome1,nome2,nome3,...nome50)
escreva (nome1,nome2,nome3,...nome50)
Não precisa dizer que a solução acima seria inviável, não é mesmo? Na
realidade, a solução ideal para o problema pode ser encontrada se utilizarmos
uma variável composta unidimensional, ou seja, um vetor.
45
Declaração de um vetor:
Assim como as variáveis simples, os vetores precisam ser declarados
antes de serem utilizados. A declaração de um vetor, porém, é um pouco
diferente da declaração de uma variável comum, pois se trata de uma variável
indexada. É como se estivéssemos declarando diversas variáveis dentro de uma
só, diferenciada por um índice.
Essas “variáveis” correspondem aos elementos do vetor (em nosso
exemplo, os nomes dos alunos). Já o índice é um valor numérico do tipo inteiro,
que sempre começa em 1 e corresponde à posição de cada elemento no vetor.
Exemplo de um vetor:
46
Veja a solução a seguir:
algoritmo “nomes dos alunos”
var
nomes: vetor[1..50]de literal //declaramos aqui, o vetor (o tamanho fica nos
números entre colchetes)
contador: inteiro //declaração da variável contador inicio
escreval (“Digite os nomes dos alunos:”)
para contador de 1 ate 50 passo 1 faca //inicio da primeira estrutura de
repetição escreval (“Aluno “,contador, “:”)
leia (nomes[contador]) //os dados são armazenados um a um, no vetor
fimpara
para contador de 1 ate 50 passo 1 faca //inicio da segunda estrutura de
repetição escreval (nomes[contador]) //os dados são exibidos
fimpara //fim da segunda estrutura de repetição fimalgoritmo
A > B, então:
47
Os números 01 a 05 na primeira linha da tabela representam as posições
na memória (os índices do vetor) de cada elemento. Na linha de baixo, estão os
elementos, fora de ordem.
Para ordenar os elementos, é necessário fazer a comparação entre todos
eles, da seguinte maneira: primeiro, comparamos o número do índice 01 com
cada um dos outros.
O menor é colocado na posição 01. Depois, é realizada a comparação do
segundo elemento com os restantes e assim por diante.
Porém, como cada elemento ocupa um espaço na memória, precisamos
reservar um espaço auxiliar (uma variável temporária) para armazenar um dos
elementos da comparação, quando eles tiverem que trocar de posição.
O passo a passo da troca de valores ocorre da seguinte forma:
I - Criamos uma variável auxiliar e comparamos o número do primeiro
índice com todos os demais, até encontrar o menor, armazenando-o na primeira
posição.
48
III – Ao encontrar um número menor (“1”), realizamos a troca de posições
entre os dois, da mesma forma que a troca anterior, utilizando a variável auxiliar.
49
Comparamos e trocamos o “12” com o “8”.
algoritmo “ordenação”
50
var
i:inteiro //contador1
j:inteiro //contador2
num: vetor[1..5]de inteiro //declaração do vetor que será ordenado
temp: inteiro
inicio
para i de 1 ate 5 faca
escreval (“Numero” ,i, “?”) //solicita a entrada dos números
leia (num[i])
fimpara
fimalgoritmo
51
EXERCÍCIOS:
3. Para que serve a variável temporária (usada como “temp” no exemplo) nos
métodos de ordenação?
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
52
AULA 10
MATRIZES
Como funciona:
Vimos na aula anterior, que nem sempre os tipos de dados básicos são
suficientes para representar as estruturas de dados necessárias para resolver os
problemas que se apresentam.
Viu a necessidade de, em algumas situações, exibir dados em listas. E,
para atender a essa necessidade, conhecemos os vetores, como estruturas de
dados unidimensionais, com variáveis indexadas referenciadas por um único
índice.
Você aprendeu que, armazenando os dados em um vetor e acessando-o,
em seguida, podemos exibir suas informações em uma lista.
Porém, os vetores lidam com apenas uma dimensão. Ou seja, se
fôssemos representar o vetor através de uma tabela, essa só teria uma linha com
várias colunas, ou vice-versa. Como podemos ver na tabela abaixo, que vimos
há pouco no estudo sobre vetores.
Veja:
53
Componentes [2,3] <- Pedro (componente 2 do grupo 3)
Temos, portanto, 3 grupos, cada um com 2 componentes. Fátima, por
exemplo, é o componente 1 do grupo 2. Estamos tratando, portanto, de uma
matriz.
Portanto, uma matriz é uma estrutura de dados homogênea de duas (ou
mais) dimensões. Uma matriz utiliza variáveis indexadas de mais de um índice.
Agora, passaremos isso aos algoritmos.
54
Observe que declaramos, além do vetor, dois contadores. Fizemos isso,
porque temos dois índices (um para contar os grupos e outro para contar os
componentes de cada grupo). Se tivéssemos três índices, teríamos que declarar
três contadores, e assim por diante.
Você sabe que, para percorrer os elementos do vetor, precisamos fazer
isso índice a índice. Por isso, precisamos do contador e de uma estrutura de
repetição para armazenar os dados e outra para exibi-los.
Com as matrizes ocorre o mesmo. Porém, como temos dois índices,
utilizamos duas estruturas de repetição, uma dentro da outra, para receber os
dados, e mais duas para exibi-los. Se tivéssemos três índices, teríamos que
utilizar três estruturas de repetição para cada uma dessas atividades.
Atribuição em matrizes:
Assim como com os vetores, os elementos de uma matriz também podem
ser inicializados, ou seja, ter seus valores atribuídos no momento da declaração.
Ao atribuir valores a um elemento da matriz, fazemos de modo similar aos
vetores:
<identificador>[posição] <- <valor>
Exemplos:
componentes[2,3] <- “José”
i <- 2
j <- 1
componentes [i,j] <- “João”
Solução:
Vamos ver um exemplo de como ficaria um algoritmo de Matriz para
declararmos dois grupos de uma Copa do Mundo, por exemplo.
Veja á seguir:
algoritmo "Exemplo de Matriz - Copa do Mundo"
var
componente : vetor[1..2,1..4]de literal //declaração da matriz
cont1, cont2: inteiro //declaração dos contadores
inicio
escreval ("Exemplo de Matriz - Copa do Mundo")
para cont1 de 1 ate 2 faca
para cont2 de 1 ate 4 faca
escreval ("Digite o Nome do País ",cont2," do grupo ",cont1," : ")
leia (componente [cont1, cont2]) //recebe os dados
fimpara
fimpara //estrutura para exibir os dados recebidos e armazenados
55
para cont1 de 1 ate 2 faca
escreval ("Grupo ",cont1,":") //mostra o nome do grupo para cont2 de 1 ate
4 faca
escreval (componente[cont1, cont2])
fimpara
fimpara
fimalgoritmo
EXERCÍCIOS:
3. Execute também, o algoritmo dos grupos, que vimos no começo desta aula.
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
________________________________________________________________
56
ANOTAÇÕES
_________________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
57