Buscar

Aula 01 09ago2017

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmos e Programac¸a˜o Computacional
Aula 01 - 08/ago/2017
Wilson H. Hirota
Universidade Federal de Sa˜o Paulo
wilson.hirota@gmail.com
Apresentac¸a˜o do Curso
• Objetivos Gerais
◦ Capacitar o aluno na elaborac¸a˜o de algoritmos computacionais e
te´cnicas elementares de programac¸a˜o computacional
• Objetivos espec´ıficos
◦ Apresentar os principais conceitos de algoritmos computacionais e
linguagens de programac¸a˜o
◦ Capacitar os alunos a utilizarem as ferramentas dispon´ıveis para as
demais unidades curriculares do curso
• Metodologia
◦ Aulas teo´ricas expositivas e aulas pra´ticas, com resoluc¸a˜o e discussa˜o de
exerc´ıcios
• Moodle
◦ Algoritmos e Programac¸a˜o Computacional
◦ Co´digo de inscric¸a˜o:
2 / 63
Datas
Agosto
D S T Q Q S S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Novembro
D S T Q Q S S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Setembro
D S T Q Q S S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Dezembro
D S T Q Q S S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Outubro
D S T Q Q S S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Aulas Pra´ticas
19/set. - Laborato´rio 01
24/out. - Laborato´rio 02
14/nov. - Laborato´rio 03
21/nov. - Laborato´rio 04
Aulas pra´ticas: salas de informa´tica da unidade Eldorado
3 / 63
Datas
Agosto
D S T Q Q S S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Novembro
D S T Q Q S S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Setembro
D S T Q Q S S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Dezembro
D S T Q Q S S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Outubro
D S T Q Q S S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Provas
10/outubro - Prova 01
28/novembro - Prova 02
05/dezembro - Substitutiva
12/dezembro - Exame
1. Prova de conteu´do acumulativo
2. Prova substitutiva fechada
4 / 63
Crite´rios de avaliac¸a˜o e aprovac¸a˜o
M.Ex.: Me´dia aritme´tica
dos Exerc´ıcios (Aula
Pra´tica)
M.L =
L1 + L2 + 2× L3
4
M.P. =
P1 + 2× P2
3
Contato
Laborato´rio de Engenha-
ria de Controle Ambiental
(LENCA)
Unidade Jose´ de Alencar,
3o andar
wilson.hirota@gmail.com
5 / 63
Cuidados / Dicas
• O grande problema apresentado pelos estudantes na˜o sa˜o as
linguagens de programac¸a˜o ou a descric¸a˜o de algoritmos, mas sim a
dificuldade em abstrair e descrever as soluc¸o˜es do problema
contando apenas com poucas e simples estruturas
• O que deve ser percebido e´ que um novo problema de programac¸a˜o
pode ser gerado a partir de um ja´ existente, alterando-se apenas
poucos elementos de seu enunciado
Cuidado
Dessa forma, e´ um erro decorar as soluc¸o˜es, pois podem na˜o
servir para outros problemas, que com certeza sera˜o diferentes
6 / 63
Cuidados / Dicas
• O que deve ser procurado e´ o entendimento de como foi obtida uma
soluc¸a˜o, armazena´-la na memo´ria e, enta˜o, utilizar essa experieˆncia
adaptando-a a outras situac¸o˜es, por analogia, generalizac¸a˜o ou
especializac¸a˜o
• A grande dica e´ que um problema pode ser diferente de outro, mas
consegue-se aproveitar grande parte da experieˆncia obtida em
problemas passados em novos desafios
• Em programac¸a˜o, na˜o existe uma “fo´rmula ma´gica” para resolver
problemas. De qualquer forma, apresenta-se a seguir um conjunto de
dicas que podem ser utilizadas durante o processo de racioc´ınio
empregado na resoluc¸a˜o de problemas
7 / 63
Cuidados / Dicas
• Ao se deparar com um problema novo, tente entendeˆ-lo. Para
auxiliar, pense no seguinte:
◦ O que se deve descobrir ou calcular? Qual o objetivo?
◦ Quais sa˜o os dados dispon´ıveis? Sa˜o suficientes?
◦ Quais as condic¸o˜es necessa´rias e suficientes para resolver o problema?
◦ Fac¸a um esboc¸o informal de como ligar os dados com as condic¸o˜es
◦ Se poss´ıvel, modele o problema de forma matema´tica
8 / 63
Cuidados / Dicas
• Crie um plano com a soluc¸a˜o
◦ Consulte sua memo´ria e verifique se voceˆ ja´ resolveu algum problema
similar. A sua soluc¸a˜o pode ser aproveitada: i) por analogia, quando o
enunciado for diferente, mas a estrutura em si guarda similaridades; ii)
por generalizac¸a˜o quando se tem uma soluc¸a˜o particular e deseja uma
soluc¸a˜o geral; iii) por especializac¸a˜o, quando se conhece alguma
soluc¸a˜o geral que serve como base para uma particular
◦ Verifique se e´ necessa´rio introduzir algum elemento novo no problema,
como um problema auxiliar
◦ Se o problema for muito complicado, tente quebra´-lo em partes menores
e solucionar essas partes
9 / 63
Cuidados / Dicas
• Formalize a soluc¸a˜o
◦ Crie um algoritmo informal com passos que resolvam o problema
◦ Verifique se cada passo desse algoritmo esta´ correto
◦ Escreva um algoritmo formalizado por meio de um fluxograma ou
pseudoco´digo
10 / 63
Cuidados / Dicas
• Examine os resultados
◦ Teste o algoritmo com diversos dados de entrada e verifique os
resultados (simulac¸a˜o)
◦ Se o algoritmo na˜o gerou resultado algum, o problema esta´ na sua
sintaxe e nos comandos utilizados. Volte e tente encontrar o erro
◦ Se o algoritmo gerou resultados, estes esta˜o corretos? Analise sua
consisteˆncia
◦ Se na˜o esta˜o corretos, alguma condic¸a˜o, operac¸a˜o ou ordem das
operac¸o˜es esta´ incorreta. Volte e tente encontrar o erro
11 / 63
Introduc¸a˜o
• Um programa de computador e´ um conjunto de instruc¸o˜es e
dados criado por um ser humano que, ao ser executado por alguma
ma´quina, cumpre um determinado objetivo
• Os dados sa˜o organizados em um computador de acordo com sua
representac¸a˜o bina´ria, isto e´, sequeˆncias de 0s e 1s. Portanto, a
principal tarefa do computador e´ extrair as informac¸o˜es resultantes
das execuc¸o˜es das intruc¸o˜es de um programa 1
• Parte dos dados processados durante a execuc¸a˜o de um software e´
fornecida pelo ser humano (ou outra ma´quina) e denominada dados
de entrada. Por outro lado, os dados de sa´ıda sa˜o aqueles
fornecidos ao ser humano (ou outra ma´quina) apo´s o processamento
dos dados de entrada
• O software deve ser encarado como um produto de um processo
bem-definido e controlado de engenharia
1
Dado e´ um valor qualquer armazenado em um computador enquanto a informac¸a˜o representa a
interpretac¸a˜o desse dado, ou seja, qual o seu significado
12 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• O estudo de algoritmos e de lo´gica de programac¸a˜o e´ essencial no
contexto do processo de criac¸a˜o de um software, pois permite
verificar, em um n´ıvel maior de abstrac¸a˜o, se o software esta´ correto
ou na˜o; permite, inclusive, averigar se o software atendera´ a`s
especificac¸o˜es originalmente propostas. Assim, evita-se partir
diretamente para a etapa de implementac¸a˜o, o que podera´ ocasionar
mais erros no produto final
• Muitas definic¸o˜es podem ser dadas a` palavra algoritmo. Atualmente,
tem-se associado algoritmo a` computac¸a˜o, mas este na˜o e´ um termo
restrito a` computac¸a˜o ou que tenha nascido com ela
• Na realidade, a palavra algoritmo vem do nome do matema´tico
iraniano Abu Abdullah Mohammad Ibn Musa al-Khawarizmi, nascido
em Khawarizm, ao sul do mar Aral, que viveu no se´culo XVII.
Tambe´m e´ considerado o fundador da a´lgebra, cujo nome derivou de
seu livro Al-Jabr wa-al-Muqabilah
13 / 63
Algoritmos e Lo´gica de Programac¸a˜o• O termo algoritmo tambe´m e´ utilizado em outras a´reas, como
engenharia, administrac¸a˜o, entre outras. Vejamos algumas definic¸o˜es
de algoritmo
Definic¸a˜o 1
1. Mat. Processo de ca´lculo ou de resoluc¸a˜o de um grupo de problemas
semelhantes, em que se estipulam, com generalidade e sem restric¸o˜es, re-
gras formais para a obtenc¸a˜o do resultado ou da soluc¸a˜o do problema. 2.
Inform. Conjunto de regras e operac¸o˜es bem definidas e ordenadas, desti-
nadas a` soluc¸a˜o de um problema ou de uma classe de problemas, em um
nu´mero finito de etapas.
14 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• O termo algoritmo tambe´m e´ utilizado em outras a´reas, como
engenharia, administrac¸a˜o, entre outras. Vejamos algumas definic¸o˜es
de algoritmo
Definic¸a˜o 2
Sequeˆncia na˜o amb´ıgua e ordenada de instruc¸o˜es destinada a` soluc¸a˜o de
um problema, ou uma classe de problemas, em um nu´mero finito de passos.
• Em outras palavras, um algoritmo na˜o representa necessariamente um
programa de computador, mas o caminho de soluc¸a˜o para um
problema
• Dessa forma, uma receita de bolo e´ um exemplo de um algoritmo, pois
descreve as regras necessa´rias para a conclusa˜o de um objetivo: a
preparac¸a˜o de um bolo. Se essas instruc¸o˜es tiverem sua ordem
trocada ou a quantidade dos ingredientes alterada, o resultado vai
divergir do original
15 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Das definic¸o˜es expostas anteriormente, pode-se extrair as seguintes
caracter´ısticas evidentes
◦ Um algoritmo representa uma sequeˆncia de regras.
◦ Essas regras devem ser executadas em uma ordem preestabelecida.
◦ Cada algoritmo possui um conjunto finito de regras.
◦ Essas regras devem possuir um significado e ser formalizadas segundo
alguma convenc¸a˜o.
• Todo algoritmo possui as seguintes propriedades
◦ Valores de entrada: todo algoritmo deve possuir zero, uma ou mais
entradas de dados. A receita de bolo representa um algoritmo que
possui zero entradas, pois seu algoritmo opera com quantidades fixas de
ingredientes.
◦ Valores de sa´ıda: todo algoritmo possui uma ou mais sa´ıdas, que
simboliza(m) seu(s) resultado(s). Por exemplo, a sa´ıda da receita de
bolo e´ o pro´prio bolo.
16 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Todo algoritmo possui as seguintes propriedades
◦ Finitude: todo algoritmo possui um in´ıcio, meio e fim. Portanto, todo
algoritmo deve ser finito, isto e´, deve possuir um in´ıcio e um conjunto de
passos que, ao serem executados, levara˜o sempre ao seu te´rmino,
executando a tarefa a que se propo˜e. Deve-se dedicar uma atenc¸a˜o
especial a essa propriedade. Muitas vezes, por erros de lo´gica, pode-se
criar um algoritmo que nunca chegara´ a um resultado (loop infinito).
◦ Passos elementares: um algoritmo computacional deve ser explicitado
por meio de operac¸o˜es elementares (operac¸o˜es matema´ticas e
comparac¸o˜es)
◦ Correc¸a˜o: um algoritmo deve ser correto, isto e´, deve permitir que,
com sua execuc¸a˜o, se chegue a`(s) sa´ıda(s) com resultados coerentes com
a(s) entrada(s). Para saber se um algoritmo esta´ correto ou na˜o, deve-se
realizar testes com diversos valores de entrada (Simulac¸a˜o), cujos
valores ja´ se conhece a priori e, enta˜o, comparar esses resultados com os
valores produzidos pelo algoritmo em questa˜o
17 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• O processo de criac¸a˜o de um algoritmo e´ uma tarefa
essencialmente intelectual e envolve os seguintes passos:
◦ Ana´lise e s´ıntese do problema: na fase de ana´lise, o problema e´
entendido de forma que se descubra o que deve ser solucionado, quais
sa˜o os dados necessa´rios e as condic¸o˜es para resolveˆ-lo. Nessa fase, faz-se
uso direto de processos de abstrac¸a˜o, o que significa elaborar modelos
mentais do problema em questa˜o e do encaminhamento de sua soluc¸a˜o.
Portanto, como resultado dessa fase, tem-se a elaborac¸a˜o de um plano
de ac¸a˜o. Na fase de s´ıntese, executa-se o plano definido na etapa de
ana´lise, representando o passo-a-passo por meio de um algoritmo. E´
importante que a soluc¸a˜o seja verificada e comprovada, por meio da
execuc¸a˜o do algoritmo. Essa execuc¸a˜o e´ feita percorrendo-se o algoritmo
do seu in´ıcio ate´ o seu fim, e verificando, a cada passo, se o resultado
esperado foi obtido. Caso tenha sido encontrada alguma discrepaˆncia,
deve-se procurar saber qual foi sua causa e eventualmente analisar
novamente o problema, repetindo-se assim esse ciclo ate´ que a soluc¸a˜o
tenha sido obtida
18 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Modelagem: nas cieˆncias exatas, o uso da linguagem matema´tica e´
fundamental, principalmente pela eliminac¸a˜o de duplos sentidos que
acontecessem nessa pra´tica. O mesmo ocorre na computac¸a˜o, com o
emprego de linguagens de descric¸a˜o de algoritmos (como fluxogramas) e
de linguagens de programac¸a˜o (como linguagem C/C++). Como um
exemplo de modelagem, considere o seguinte problema:
Compraram-se 30 canetas iguais, que foram pagas com uma nota de R$
100,00, obtendo-se R$ 67,00 como troco. Quanto custou cada caneta?
19 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Modelagem
Compraram-se 30 canetas iguais, que foram pagas com uma nota de R$
100,00, obtendo-se R$ 67,00 como troco. Quanto custou cada caneta?
• Este problema e´ bem simples; pore´m como pode ser mostrada a soluc¸a˜o?
Uma poss´ıvel resposta:
Se eu tinha R$ 100,00 e recebi como troco R$ 67,00, o custo total das
canetas e´ a diferenc¸a entre os R$ 100,00 que eu tinha e os R$ 67,00
do troco. Ora, isto vale R$ 33,00; portanto, esse valor foi o total pago
pelas canetas. Para saber quanto custou cada caneta, basta dividir os
R$ 33,00 por 30. Assim, cada caneta custou o equivalente a R$ 1,10.
20 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Modelagem
• Esse racioc´ınio e´ matematicamente demonstrado por: seja x o custo de
cada caneta, enta˜o quanto gastei = 30x. Como quanto gastei + troco = R$
100,00, tem-se:
30x + 67 = 100
30x = 100− 67
30x = 33
x = 33/30
x = 1.1
• De uma forma mais curta e universalmente entendida, pode-se tambe´m
dizer que o caminho pode ser obtido pelo seguinte algoritmo:
INICIO
Pegar os valores 30, 100 e 67
Subtrair 67 de 100 e dividir o resultado por 30
Mostrar o resultado final
FIM
21 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Modelagem
• Deve-se observar que o algoritmo acima resolve apenas uma instaˆncia
particular do problema. Para solucionar um caso geral, tem-se o
seguinte:
Compraram-se N canetas iguais, que foram pagas com uma nota de Z
reais, obtendo-se Y reais como troco. Quanto custou cada caneta?
• Nesse caso, basta que sejam fornecidos os valores das varia´veis N , Z e Y
que a soluc¸a˜o do problema e´ a mesma que a anterior e seu algoritmo pode
ser escrito da seguinte forma:
INICIO
Ler os valores de N, Y e Z
Subtrair Y de Z e dividir o resultado por N
Mostrar o resultado final
FIM
22 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Modelagem
INICIO
Ler os valores de N, Y e Z
Subtrair Y de Z e dividir o resultado por N
Mostrar o resultado final
FIM
◦ No entanto, o algoritmo acima tem uma se´rie de restric¸o˜es:
• O que acontece se algue´m pensar em comprar zero canetas, ou -3 canetas?
Faz algum sentido?
• Suponha que algue´m execute o algoritmo com os seguintes dados N = 10,
Z = 10 e Y = 15. O valor de cada caneta sera´ de -R$ 0.50. Isso faz sentido?
23 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Enta˜o, para que a soluc¸a˜o geral seja realmente consistente, devemos
levar em considerac¸a˜o as seguintes condic¸o˜es:• Que o valor pago pelas canetas seja sempre maior que o troco recebido
(Z > Y )
• Que o valor pago e a quantidade de canetas seja sempre maiores que zero
(Z > 0 e N > 0)
• Que o troco seja maior ou igual a zero (Y ≥ 0)
24 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Se essas condic¸o˜es na˜o forem todas verdadeiras, enta˜o, o algoritmo deve
terminar sinalizando, de alguma forma, a raza˜o de seu fracasso.
INICIO
Ler os valores de N, Y e Z
Se Z > Y e N > 0 e Y ≥ 0 e Z > 0 Ent~ao
Subtrair Y de Z e dividir o resultado por N
Mostrar o resultado final
Sen~ao
Exibir a mensagem: "Erro: os valores s~ao inconsistentes"
Fim Se
FIM
25 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Lo´gica em Programac¸a˜o
• Lo´gica e´ uma a´rea da Matema´tica cujo objetivo e´ investigar a veracidade
de suas proposic¸o˜es
• Considere, por exemplo, o caso em que temos as seguintes proposic¸o˜es
1. Se estiver chovendo, eu pegarei meu guarda-chuva
2. Esta´ chovendo
• O que se conclui dessas duas proposic¸o˜es? Parece que a conclusa˜o o´bvia e´:
”eu pegarei o meu guarda-chuva”
• Essa conclusa˜o seguiu o fato de que existe uma implicac¸a˜o lo´gica na
primeira proposic¸a˜o, a qual afirma que ”se estiver chovendo”implica ”eu
pegarei o meu guarda-chuva”. Essa implicac¸a˜o age como uma
”regra”, que conduz a` deduc¸a˜o do fato
26 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Lo´gica em Programac¸a˜o
• ...e se as proposic¸o˜es fossem:
1. Se estiver chovendo, eu pegarei o meu guarda-chuva
2. Eu peguei o meu guarda-chuva
• O que se conclui? A conclusa˜o poderia ser: ”Na˜o se pode afirmar com
precisa˜o que esta´ chovendo so´ porque voceˆ pegou seu guarda-chuva, mas e´
plaus´ıvel que esteja chovendo”
• Esses dois exemplos fornecem uma ideia, embora simplificada, do que a
lo´gica se preocupa em estudar
• Toda lo´gica proposta tambe´m deve ser formalizada em elementos
sinta´ticos (especificam como escrever suas proposic¸o˜es) e elementos
semaˆnticos (avaliam o significado das proposic¸o˜es)
27 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Lo´gica em Programac¸a˜o
• No caso da lo´gica cla´ssica, o resultado da avaliac¸a˜o de suas proposic¸o˜es
pode ser somente um entre dois valores: VERDADEIRO ou FALSO
O papel da lo´gica em programac¸a˜o
O papel da lo´gica em programac¸a˜o esta´ relacionado com a correta sequeˆncia de ins-
truc¸o˜es que devem ser definidas para que o programa atinja seu objetivo. Serve como
instrumento para a verificac¸a˜o do programa escrito, provando se este esta´ correto ou
na˜o.
• Em um algoritmo em execuc¸a˜o, o valor das suas varia´veis a cada instante
representa o seu estado. Com a execuc¸a˜o dessas instruc¸o˜es, esse estado vai
sendo alterado
• Um algoritmo correto e´ aquele que, a partir de um estado inicial de
suas varia´veis, consegue, com a execuc¸a˜o de suas instruc¸o˜es, chegar a um
estado final, no qual os valores das varia´veis esta˜o de acordo com a
soluc¸a˜o esperada
28 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Processo de criac¸a˜o de um algoritmo
◦ Lo´gica em Programac¸a˜o
• Voltando ao algoritmo geral para a soluc¸a˜o do problema das canetas,
podemos conferir sua soluc¸a˜o analisando a lo´gica empregada em cada passo:
Ler os valores de N, Y e Z → Nesse ponto temos treˆs valores quaisquer de N, Y e Z
Se Z > Y e N > 0 e Y ≥ 0 e Z > 0 Ent~ao → Nesse ponto, garante-se que Z > Y, N
> 0, Y ≥ 0 e Z > 0
Subtrair Y de Z e dividir o resultado por N → Como Z > Y, Y ≥ 0 e Z > 0
enta˜o Z - Y > 0 e sendo N > 0, o resultado existe e e´ maior que zero
Mostrar o resultado final→ E´ exibido o resultado, que existe e e´ maior que zero
Sen~ao
Exibir a mensagem: "Erro: os valores s~ao inconsistentes"→ Esse comando
e´ executado quando, pelo menos, uma das condic¸o˜es do problema na˜o foi atendida.
Fim Se
29 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Estruturac¸a˜o de algoritmos
◦ Grac¸as ao surgimento das linguagens de programac¸a˜o de alto n´ıvel2, as
linguagens de programac¸a˜o se afastaram da linguagem de ma´quina e se
aproximaram da ”lo´gica humana”.
Cuidado
Diferentemente da linguagem natural, a linguagem de programac¸a˜o e´ dirigida a
orientar uma ma´quina e na˜o pessoas. Ma´quinas na˜o podem tomar deciso˜es com
base em premissas. Ma´quinas na˜o podem escolher alternativas, mesmo que estas
parec¸am o´bvias a um ser humano. Ma´quinas na˜o podem corrigir comandos mal
redigidos. Ma´quinas na˜o podem descobrir a intenc¸a˜o do programador, mesmo
que ela seja (ou pelo menos parec¸a) clara no contexto.
2
As linguagens de alto n´ıvel sa˜o independentes do processador em que sera˜o executadas. Suas
caracter´ısticas principais sa˜o que seu co´digo e´ mais elaborado, contemplando operac¸o˜es mais complexas e
mais pro´ximas da ”lo´gica humana”. Para que possam ser processadas por um computador, os comandos da
linguagem precisara˜o ser traduzidos para a linguagem de ma´quina. Essa traduc¸a˜o e´ feita por meio de um
compilador ou de um interpretador.
30 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Estruturac¸a˜o de algoritmos
◦ Por isso, a linguagem de programac¸a˜o precisa ter algumas caracter´ısticas
que a linguagem natural na˜o tem. Veja-as a seguir:
• Rigidez sinta´tica: O compilador e´ um tradutor relativamente limitado,
que so´ consegue fazer as traduc¸o˜es sobre um idioma bastante limitado, com
construc¸o˜es muito bem definidas. Apesar de encontrarmos palavras
pertencentes a` linguagem natural, elas na˜o sera˜o usadas com a mesma
liberdade
• Rigidez semaˆntica: o computador definitivamente na˜o pode lidar com
ambiguidades. Por isso na˜o adianta o programador ter uma intenc¸a˜o se na˜o
conseguir exprimi-la de forma exata. Podemos dizer que o computador e´
um o´timo cumpridor de ordens, pore´m na˜o tem ide´ia de quais ordens esta´
cumprindo, nem o contexto em que essas ac¸o˜es esta˜o inseridas.
Diferentemente da linguagem de programac¸a˜o, a linguagem natural
apresenta ambiguidades. Por exemplo, considere a seguinte afirmac¸a˜o:
A crianc¸a ouviu o barulho da janela
31 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Estruturac¸a˜o de algoritmos
A crianc¸a ouviu o barulho da janela
◦ Essa afirmac¸a˜o curta pode ser interpretada de pelo menos treˆs maneiras:
• A crianc¸a ouviu o barulho produzido pela janela
• A crianc¸a estava junto a` janela e ouviu o barulho
• A crianc¸a ouviu o barulho que veio atrave´s da janela
◦ Uma ma´quina seria incapaz de interpretar o que realmente esta´
acontecendo, mesmo que o contexto pudesse ajudar. Por isso, a rigidez
semaˆntica e´ ta˜o crucial e consequentemente a linguagem natural na˜o
pode ser utilizada como ferramenta para a construc¸a˜o de algoritmos
computacionais
◦ A segunda alternativa seria escrever o algoritmo diretamente na
linguagem de programac¸a˜o. Pore´m a rigidez sinta´tica e semaˆntica
tornam a escrita de algoritmos uma tarefa bastante dif´ıcil, pois as
pessoas na˜o esta˜o acostumadas a essas exigeˆncias para expressar ordens.
Muitas vezes, mesmo em linguagem natural, esta na˜o e´ uma tarefa
trivial.32 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Estruturac¸a˜o de algoritmos
Dilema
Chegamos a um dilema: a linguagem natural na˜o e´ adequada porque na˜o
tem rigidez sinta´tica e semaˆntica e a linguagem de programac¸a˜o na˜o e´ ade-
quada justamente por ter essas caracter´ısticas. Parece claro que devemos
encontrar uma terceira alternativa para estruturar algoritmos computaci-
onais.
◦ Na realidade, ja´ existem algumas alternativas. Duas delas sera˜o
abordadas mais adiante: o fluxograma e o pseudoco´digo
◦ Independentemente da estrutura, e´ importante formalizar a descric¸a˜o
do algoritmo segundo alguma convenc¸a˜o,para que todos possam
entendeˆ-lo da mesma forma
33 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Em primeiro lugar, e´ necessa´rio definir um conjunto de regras que
regulem a escrita do algoritmo, isto e´, regras de sintaxe
◦ Em segundo, e´ preciso estabelecer as regras que permitam interpretar
um algoritmo, que sa˜o as regras semaˆnticas
◦ A sintaxe de um algoritmo resume-se nas regras para escreveˆ-lo
corretamente
◦ Em computac¸a˜o, as regras indicam quais sa˜o os tipos de comandos
que podem ser utilizados e tambe´m como neles escrever expresso˜es
◦ As expresso˜es de um comando em um algoritmo realizam algum tipo de
operac¸a˜o com os dados envolvidos, isto e´, operam com valores e
resultam em outros valores que sa˜o usados pelo algoritmo
34 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Os tipos de comandos de um algoritmo sa˜o tambe´m denominados
estruturas de programac¸a˜o.
◦ Existem apenas treˆs tipos de estruturas que podem ser utilizadas para
escrever qualquer programa:
• Estruturas sequenciais
• Estruturas de decisa˜o
• Estruturas de repetic¸a˜o (lac¸os ou loops)
35 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Estrutura Sequencial
A Torre de Hano´i e´ um quebra-cabec¸a que consiste em uma base com 3 a
5 pinos, em um dos quais sa˜o dispostos alguns discos empilhados de baixo para
cima por tamanho decrescente. O desafio consiste em transferir todos os discos
de um pino para outro qualquer, sob as restric¸o˜es de que apenas um disco e´
movido de cada vez, e em momento algum um disco maior pode ser colocado
sobre um disco menor. Um terceiro pino esta´ dispon´ıvel para apoiar os discos
temporariamente.
36 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Estrutura Sequencial
◦ Vamos supor que voceˆ tenha o seguinte problema:
Inicialmente teˆm-se 3 pinos, A, B e C, e no pino A repousam treˆs discos
de diaˆmetros diferentes, em ordem decrescente por diaˆmetro. Deseja-se
transferir os 3 discos do pino A para o pino C, usando o pino B como pino
auxiliar. Queremos desenvolver um algoritmo que gere a sequeˆncia exata
de transfereˆncias de pino, disco a disco
37 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Estrutura Sequencial
As u´nicas informac¸o˜es para resolver esse problema sa˜o os estados inicial e
final dos discos e as regras de movimento. Uma soluc¸a˜o poderia ser a seguinte
sequencia de movimentos
Um poss´ıvel algoritmo para resolver o problema das Torres de Hanoi com 3 discos
INICIO
1. Mover disco 1 do pino A para o pino C
2. Mover disco 2 do pino A para o pino B
3. Mover disco 1 do pino C para o pino B
4. Mover disco 3 do pino A para o pino C
5. Mover disco 1 do pino B para o pino A
6. Mover disco 2 do pino B para o pino C
7. Mover disco 1 do pino A para o pino C
FIM
38 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Estrutura Sequencial
Um poss´ıvel algoritmo para resolver o problema das Torres de Hanoi com 3 discos
INICIO
1. Mover disco 1 do pino A para o pino C
2. Mover disco 2 do pino A para o pino B
3. Mover disco 1 do pino C para o pino B
4. Mover disco 3 do pino A para o pino C
5. Mover disco 1 do pino B para o pino A
6. Mover disco 2 do pino B para o pino C
7. Mover disco 1 do pino A para o pino C
FIM
O algoritmo acima e´ um bom exemplo de estrutura sequencial, pois sua
execuc¸a˜o e´ direta, imperativa, na˜o havendo nenhum tipo de condic¸a˜o a ser
verificada e nenhum desvio em seu caminho
39 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Estrutura Sequencial
Agora, considere o seguinte problema:
Inicialmente teˆm-se 3 pinos, A, B
e C, e no pino A repousam QUA-
TRO discos de diaˆmetros diferentes,
em ordem decrescente por diaˆmetro.
Deseja-se transferir os 4 discos do
pino A para o pino C, usando o pino
B como pino auxiliar. Queremos de-
senvolver um algoritmo que gere a
sequeˆncia exata de transfereˆncias de
pino, disco a disco
40 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Estrutura Sequencial
Um poss´ıvel algoritmo para resolver o problema das Torres de Hanoi com 4 discos
INICIO
1. Mover disco 1 do pino A para o pino B
2. Mover disco 2 do pino A para o pino C
3. Mover disco 1 do pino B para o pino C
4. Mover disco 3 do pino A para o pino B
5. Mover disco 1 do pino C para o pino A
6. Mover disco 2 do pino C para o pino B
7. Mover disco 1 do pino A para o pino B
8. Mover disco 4 do pino A para o pino C
9. Mover disco 1 do pino B para o pino C
10. Mover disco 2 do pino B para o pino A
11. Mover disco 1 do pino C para o pino A
12. Mover disco 3 do pino B para o pino C
13. Mover disco 1 do pino A para o pino B
14. Mover disco 2 do pino A para o pino C
15. Mover disco 1 do pino B para o pino C
FIM
41 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Estrutura Sequencial
Como essas soluc¸o˜es foram obtidas?
• Primeiro, e´ importante entender o enunciado do problema e as regras que
foram impostas. Dessa forma, na˜o e´ poss´ıvel especificar os movimentos nos
quais uma pec¸a que esteja abaixo de outra seja movida e nem mover mais
de uma pec¸a por vez
• Segundo, e´ importante verificar a cada passo definido se a soluc¸a˜o esta´ se
aproximando do objetivo final
• Terceiro, o nu´mero de movimentos dobra cada vez que se acrescenta uma
nova pec¸a. Portanto, a generalizac¸a˜o desse algoritmo, na forma em que esta´
sendo descrito, e´ impratica´vel para grandes valores de n (nu´mero de
discos)
42 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Estrutura Sequencial
Por exemplo: Se n for igual a 64 discos, o nu´mero de movimentos
que devera˜o ser descritos sera´ igual a, aproximadamente, 2, 0 × 1019,
ou seja, e´ humanamente imposs´ıvel listar todos os movimentos para
resolver o problema
• E´ poss´ıvel mostrar por Progressa˜o Geome´trica (e tambe´m pelo Princ´ıpio da
Induc¸a˜o) que existe uma relac¸a˜o matema´tica entre o nu´mero de discos do
problema (n) com o nu´mero mı´nimo de movimentos executados (m). Esta
relac¸a˜o e´ dada pela seguinte fo´rmula:
m(n) = 2n − 1
• Enta˜o, surge a seguinte pergunta: ... e se for considerado o mesmo
problema, pore´m, com n discos postados inicialmente na haste A, como
desenvolver um algoritmo que gere a sequeˆncia exata de transfereˆncias de
pino, disco a disco?
43 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Modularizac¸a˜o / Recursa˜o
• Se tive´ssemos que resolver esse problema com a ajuda de me´todos
convencionais, ficar´ıamos preso na administrac¸a˜o dos discos rapidamente.
Em vez disso, se atacarmos o problema com a recursa˜o em mente, o
problema imediatamente se tornara´ mais resolu´vel.
• Mover n discos pode ser visto em termos de mover apenas n− 1 (e da´ı a
recursa˜o) discos da seguinte forma:
Mova n−1 discos do pino A para o pino B, usando o pino C como a´rea de manutenc¸a˜o
tempora´ria
Mova o u´ltimo disco (o maior) do pino A para o pino C
Mova os n−1 discos do pino B para o pino C, usando o pino A como a´rea de manutenc¸a˜o
tempora´ria
44 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo
◦ Exemplo 1: Torre de Hano´i - Modularizac¸a˜o / Recursa˜o
1. Mova n−1 discos do pino A para o pino B, usando o pino C como a´rea demanutenc¸a˜o
tempora´ria
2. Mova o u´ltimo disco (o maior) do pino A para o pino C
3. Mova os n − 1 discos do pino B para o pino C, usando o pino A como a´rea de
manutenc¸a˜o tempora´ria
• Essa soluc¸a˜o funciona para qualquer valor de n tal que n ≥ 1. Apesar de ser
um algoritmo geral que resolve todos os casos para o problema das Torres
de Hano´i, ainda existem algumas dificuldades nas sua forma de descric¸a˜o:
i) Existe um tratamento informal dos comandos: por exemplo, o
computador na˜o entende o significado da palavra mova
ii) As operac¸o˜es descritas sa˜o u´teis para uma pessoa interpretar, mas na˜o
para um ma´quina. E´ necessa´rio modelar melhor o problema de forma que seja
facilmente traduzido para uma ma´quina
45 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo: Fluxogramas
Definic¸a˜o
Fluxograma: Inform. (fluxo+grama). 1. Diagrama para representac¸a˜o de um algo-
ritmo. 2. Representac¸a˜o gra´fica, por s´ımbolos especiais, da definic¸a˜o, ana´lise ou me´todo
de soluc¸a˜o de um problema
◦ Os fluxogramas apresentam os algoritmos de forma gra´fica. Sa˜o
formados por s´ımbolos gra´ficos que conteˆm as instruc¸o˜es a serem
executadas. Tais s´ımbolos gra´ficos sa˜o ligados por setas que indicam o
fluxo das ac¸o˜es
◦ Todo fluxograma deve possuir uma sintaxe e uma semaˆntica
bem-definidas. A sintaxe de um fluxograma e´ definida pela forma
correta de empregar seus elementos, os quais sa˜o:
• s´ımbolos gra´ficos espec´ıficos;
• expresso˜es admiss´ıveis a serem escritas no interior dos s´ımbolos;
• sub-rotinas predefinidas que podem ser utilizadas nas expresso˜es
46 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo: Fluxogramas
S´ımbolo Uso
Terminador Representa a sa´ıda para ou a entrada do ambiente externo,
por exemplo, in´ıcio ou fim do programa
Processo Representa a execuc¸a˜o de uma operac¸a˜o que resulta na mu-
danc¸a de valor, forma ou localizac¸a˜o de uma informac¸a˜o ou
valor
Entrada/Saı´da Representa os dados, tanto de entrada como de sa´ıda, qual-
quer que seja o meio utilizado
Decis~ao
Representa uma decisa˜o ou um desvio tendo uma entrada;
pore´m pode ter uma se´rie de sa´ıdas alternativas, uma u´nica
das quais devera´ ser ativada como consequeˆncia da avaliac¸a˜o
das condic¸o˜es internas do s´ımbolo. O resultado apropriado de
cada sa´ıda devera´ ser escrito adjacente a` linha, representando
o caminho respectivo.
47 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo: Fluxogramas
◦ Os fluxogramas possuem um grande apelo visual e aplicac¸a˜o no
entendimento de processos industriais, os quais sa˜o muito importantes
na formac¸a˜o e na vida pra´tica do engenheiro
◦ De fato, a representac¸a˜o de algoritmos por meio de fluxogramas tem
uma se´rie de vantagens como, por exemplo, a facilidade proporcionada
para a compreensa˜o do funcionamento do algoritmo, mesmo para leigos
◦ Entretanto, a representac¸a˜o gra´fica na˜o e´ pra´tica por uma se´rie de
razo˜es, dentre as quais podemos destacar duas:
• A correc¸a˜o de uma linha de pensamento pode implicar a reconstruc¸a˜o de
muitas instruc¸o˜es
• A construc¸a˜o de algoritmos mais complexos e longos pode se tornar
extremamente trabalhosa, ocupando va´rias pa´ginas
48 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo: Fluxogramas
Essas caracter´ısticas acabam tornando
a utilizac¸a˜o do fluxograma
desaconselha´vel como ferramenta
principal para o desenvolvimento de
algoritmos. Todavia, a utilizac¸a˜o de
fluxograma continua sendo u´til para
apresentac¸a˜o de algoritmos em um
n´ıvel de abstrac¸a˜o alto, sem entrar nos
detalhes de sua implementac¸a˜o
inicio
ler num1, num2
num1 > num2
maior ← num1 maior ← num2
escrever maior
fim
sim na˜o
49 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo: Pseudoco´digo
◦ Algoritmos podem ser representados em co´digo diretamente em
linguagem de programac¸a˜o.
◦ E´ fato que temos algumas vantagens como o co´digo pronto para a
execuc¸a˜o e, o mais importante, a rigidez sinta´tica e a rigidez
semaˆntica, que sa˜o imprescind´ıveis para que o algoritmo possa ser lido
e executado pelo computador
◦ Contudo, a implementac¸a˜o de algoritmos diretamente em uma
linguagem de programac¸a˜o apresenta uma se´rie de desvantagens.
◦ O pseudoco´digo visa a trazer o ma´ximo poss´ıvel desses benef´ıcios,
tentando diminuir o oˆnus da utilizac¸a˜o da linguagem de programac¸a˜o.
Abre-se ma˜o do co´digo compila´vel para se ter um co´digo menos r´ıgido,
menos dependente das peculiaridades que todo compilador tem
50 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo: Pseudoco´digo
◦ Ao contra´rio da linguagem de programac¸a˜o, o pseudoco´digo tem um
grau de rigidez sinta´tica intermedia´ria entre as linguagens natural e de
programac¸a˜o. Ale´m disso, podemos utilizar o idioma nativo. Em geral,
linguagens de programac¸a˜o sa˜o constru´ıdas utilizando palavras
reservadas em ingleˆs, uma espe´cie de padra˜o de mercado
◦ Pore´m, o pseudoco´digo deve manter, tanto quanto poss´ıvel, a rigidez
semaˆntica. A ideia e´ que o pseudoco´digo seja um passo intermedia´rio
entre a linguagem natural e a linguagem de programac¸a˜o de alto n´ıvel
◦ Apo´s a construc¸a˜o do algoritmo em pseudoco´digo, e´ necessa´rio que mais
um passo seja executado: a transformac¸a˜o do pseudoco´digo em co´digo
de alguma linguagem de programac¸a˜o
◦ O pseudoco´digo e´ independente do compilador e pode ser
traduzido de uma forma quase direta para uma gama de
linguagens de programac¸a˜o
51 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Formalizac¸a˜o de um algoritmo: Pseudoco´digo
◦ Pseudoco´digo referente ao fluxograma mostrado no slide 49
inicio
ler num1, num2
num1 > num2
maior ← num1 maior ← num2
escrever maior
fim
sim na˜o
Algoritmo 1: Maior nu´mero
Entrada: num1, num2
Sa´ıda: maior nu´mero
1 in´ıcio
2 declare num1, num2, maior: inteiro;
3 ler(num1,num2);
4 se num1 > num2 enta˜o
5 maior ← num1;
6 sena˜o
7 maior ← num2;
8 fim
9 escrever(”Maior numero = ”, maior);
10 fim
52 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para tipos de dados: Constantes e varia´veis
◦ Em um computador, manipulamos informac¸o˜es que, durante a execuc¸a˜o
de um programa, ficam armazenadas temporariamente na memo´ria
◦ Para que tais valores possam ser manipulados na linguagem de
programac¸a˜o, e´ preciso que haja algum identificador informando em que
local da memo´ria (enderec¸o) esse elemento se encontra
◦ Uma analogia u´til seria entender esta porc¸a˜o de memo´ria onde o
elemento esta´ amrazenado como uma garagem que tenha uma placa de
identificac¸a˜o na frente. Assim, supondo que tive´ssemos va´rios carros
para escolher, encontrar´ıamos o que procuramos pela placa de
identificac¸a˜o
◦ Varia´veis e constantes sa˜o reposito´rios de elementos pertencentes aos
tipos. A diferenc¸a e´ que o elemento armazenado em uma constante e´
definido no in´ıcio do programa e na˜o e´ mais modificado, enquanto o da
varia´vel pode ser alterado durante a execuc¸a˜o do programa
53 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para tipos de dados: Constantes e varia´veis
◦ Tanto varia´veis como constantes teˆm algumas caracter´ısticas em comum:
ambas sa˜o identificadas por um nome
◦ Podemos compreender varia´veis e constantes como as garagens por
analogia. Os nomes devem identificar o objeto que ali esta´ guardado,
pore´m na˜o ha´ garantia de que o objeto armazenado seja o esperado
◦ Digamos que se tentarmos colocar um Fusca na garagem em que se
encontra a placa da Ferrari, conseguiremos. No entanto, quando
quisermos dar uma volta de Ferrari, acessaremos a garagem da Ferrari e
teremos uma surpresa ao nosdepararmos com o Fusca.
◦ Portanto, conve´m ao programador dar nomes significativos a`s
varia´veis e constantes de acordo com os elementos (ou valores)
que armazenara˜o. Normalmente, utilizamos mnemoˆnicos, ou
seja, nomes ou abreviaturas que lembram o uso da varia´vel no
algoritmo
54 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para tipos de dados: Constantes e varia´veis
◦ As varia´veis em um algoritmo devem ser escritas de modo claro,
intelig´ıvel. Nesse sentido, convencionam-se algumas regras para nomear
varia´veis:
• O nome de uma varia´vel pode ser constitu´ıdo por letras do alfabeto
(minu´sculas e maiu´sculas), d´ıgito (0,. . . 9) e ainda pelo caracter
underscore( ).
Cuidado 1
Evite identificadores que comecem por sublinhado ( ) simples ou duplo, porque aqueles
gerados pelo compilador e os da biblioteca-padra˜o podem usar nomes semelhantes
Cuidado 2
O primeiro caracter na˜o pode ser um d´ıgito. O primeiro caracter deve ser uma letra
• Maiu´sculas e minu´sculas representam varia´veis distintas
55 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para tipos de dados: Constantes e varia´veis
◦ As varia´veis em um algoritmo devem ser escritas de modo claro,
intelig´ıvel. Nesse sentido, convencionam-se algumas regras para nomear
varia´veis:
Boa pra´tica de programac¸a˜o
E´ tradic¸a˜o usar minu´sculas para nomes de varia´veis e maiu´sculas para nomes de cons-
tantes. Isso facilita na hora da leitura do co´digo
• Letras fora do alfabeto ocidental, como as letras gregas, na˜o sa˜o aceitas
Boa pra´tica de programac¸a˜o
A escolha de nomes significativos de varia´veis favorecera´ a elaborac¸a˜o de um programa
”autodocumentado”, isto e´, que necessitara´ de menos comenta´rios
56 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para tipos de dados: Constantes e varia´veis
◦ Antes de utilizarmos uma varia´vel dentro de uma algoritmo, e´
necessa´rio definir o tipo de valor que essa varia´vel pode
armazernar e identifica´-la com o nome pelo qual sera´ acessada
◦ Uma varia´vel de um determinado tipo so´ pode receber valores que
pertenc¸am a`quele tipo. Na analogia das garagens, podemos dizer que
uma garagem de carro so´ pode armazenar Fuscas, Ferraris e outros
carros, pore´m na˜o podem armazernar avio˜es
◦ A declarac¸a˜o de uma varia´vel em um algoritmo, segundo a nossa
notac¸a˜o, e´ feita da seguinte forma:
declare <varia´veis> : tipo
57 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para tipos de dados: Constantes e varia´veis
◦ Os principais tipos de dados sa˜o:
• inteiro: qualquer nu´mero inteiro, negativo, nulo, ou positivo. Exemplo:
-15; 0; 104
• real: qualquer nu´mero real, negativo, nulo ou positivo. Exemplo: -1.0;
-0.5; 0.0; 5.0; 9.3
• caracter: qualquer conjunto de caracteres alfanume´ricos. Exemplo: ”AB”;
”123”; ”A123”; ”prova”
• lo´gico: falso ou verdadeiro (operador booleano)
Valores lo´gicos
Os valores lo´gicos ou ainda booleanos (em homenagem a George Boole, que elabo-
rou a lo´gica booleana) sa˜o aqueles que representam apenas dois estados: um estado
verdadeiro ou um estado falso.
58 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para as expresso˜es: Atribuic¸a˜o
◦ Ja´ descrevemos onde os dados ficam armazenados, pore´m para que
possamos manipula´-los e´ necessa´rio primeiramente colocar um valor
dentro da varia´vel
◦ A atribuic¸a˜o e´ a operac¸a˜o que permite armazenar um valor em uma
varia´vel e e´ representada pelo s´ımbolo ← (seta para a esquerda)
◦ A atribuic¸a˜o e´ feita das seguintes formas:
<varia´vel> ← <valor>
ou
<varia´vel> ← <resultado de uma expressa˜o>
59 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para as expresso˜es: Atribuic¸a˜o
◦ Exemplos:
1. altura ← 1.80 (armazenar o valor 1.80 na varia´vel altura, ou ainda altura
recebe 1.80)
2. A ← 6 (armazenar o valor 6 na varia´vel A, ou ainda A recebe 6)
3. A ← A + 1 (A recebe o valor de A + 1)
Observac¸a˜o
Apenas valores pertencentes ao tipo da varia´vel podem lhe ser atribu´ıdos (p. ex. uma
varia´vel do tipo inteiro so´ pode receber valores do tipo inteiro
60 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para as expresso˜es: Operac¸o˜es aritme´ticas
◦ Em programac¸a˜o, todas as quatro operac¸o˜es aritme´ticas ba´sicas
(adic¸a˜o, subtrac¸a˜o, multiplicac¸a˜o e divisa˜o) sa˜o suportadas
◦ Essas operac¸o˜es matema´ticas sa˜o consideradas operac¸o˜es bina´rias,
pois envolvem sempre dois operandos
◦ Ja´ a operac¸a˜o troca de sinal e´ una´ria, pois altera o sinal de um
u´nico operando. O operador una´rio pode ser pensado como uma
operac¸a˜o que multiplica seu operador por -1
• Exemplos:
1. x← −x
2. y ← −b
61 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para as expresso˜es: Operac¸o˜es aritme´ticas
◦ Dependendo dos operadores e do tipo de resultado, a divisa˜o pode ser
feita de forma diferente: a divisa˜o real (operador /), a divisa˜o inteira
(operador div) e o resto da divisa˜o inteira (operador mod)
◦ Exemplos:
1. resp ← 14 div 3 (divisa˜o inteira: resp recebe 4)
2. resp ← 14 mod 3 (resto da divisa˜o inteira: resp recebe 2)
3. resp ← 14.0/3.0 (divisa˜o real: resp recebe 4.67)
◦ Um resumo das operac¸o˜es aritme´ticas e´ apresentado na tabela a seguir.
62 / 63
Algoritmos e Lo´gica de Programac¸a˜o
• Convenc¸o˜es para as expresso˜es: Operac¸o˜es aritme´ticas
Operac¸ao 1o operando 2o operando Tipo resultante Simbologia
Adic¸a˜o
inteiro inteiro inteiro
z ← x + yreal real real
real inteiro real
inteiro real real
Subtrac¸a˜o
inteiro inteiro inteiro
z ← x− yreal real real
real inteiro real
inteiro real real
Multiplicac¸a˜o
inteiro inteiro inteiro
z ← x ∗ yreal real real
real inteiro real
inteiro real real
Divisa˜o real
inteiro inteiro real
z ← x/yreal real real
real inteiro real
inteiro real real
Divisa˜o inteira inteiro inteiro inteiro z ← x div y
Resto inteiro inteiro inteiro z ← x mod y
Troca de sinal
inteiro Na˜o aplica´vel inteiro
z ← −x
real Na˜o aplica´vel real
63 / 63

Outros materiais