Buscar

Introdução à Lógica de Programação

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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 67 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 67 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 67 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

Universidade Federal da Bahia 
 
 
Departamento de Ciência da Computação 
 
 
 
 
 
 
 
 
 
 
 
 
IN T R O D U Ç Ã O À LÓ G I C A D E 
 
PR O G R A M A Ç Ã O 
 
MAT 146 
 
 
 
 
 
 
 
 
 
 
 
Revisada em Janeiro de 2004 
 
Claudia Gama 
claudiag@ufba.br 
UFBa - Introdução à Lógica de Programação MAT 146 
 
Caro Aluno: 
 
Esta apostila foi elaborada a partir das minhas notas de aula e dos livros da 
bibliografia recomendada. Ela visa auxiliar na compreensão dos conceitos 
abordados ao longo do curso, bem como promover a prática de algoritmos com 
exercícios de fixação e exercícios propostos. Nela você vai encontrar: 
• Resumo dos principais tópicos 
• Referências bibliográficas 
• Exercícios de fixação 
• Exercícios propostos (alguns incluem solução) 
 
Mas atenção: esta apostila deve ser usada somente como material complementar e 
nunca como única fonte de estudo. 
 
Profª. Claudia Gama 
 
 
 
Legenda 
 
Na apostila são usados alguns símbolos para chamar a atenção de partes relevantes 
e ajudar na organização do conteúdo da apostila. Veja os símbolos e seus 
significados abaixo. 
 
 
	 Sugestão de leitura de capítulo ou seções de um livro. A leitura é sugerida para 
obter-se um entendimento completo do tópico apresentado na apostila. 
 
� Sugestões de pesquisas na Internet de assuntos complementares ou 
curiosidades. 
 
, Exercícios de Fixação: são exercícios simples para verificação do entendimento 
de conceitos. 
 
" Sugestão de Exercícios Complementares em livros da bibliografia. 
 
h Exercícios Propostos: exercícios para solidificar o entendimento. Altamente 
recomendáveis! 
 
 
 
Texto Complementar e Exercícios 2
UFBa - Introdução à Lógica de Programação MAT 146 
ÍNDICE 
 
 
Parte I - Introdução à Lógica de Programação 
 
 
1. Algoritmos ---------------------------------------------------------------------- 6 
1.1. Exemplo: Construindo um Algoritmo ------------------------------- 6 
h Exercícios Propostos----------------------------------------------------- 8 
2. Resolução de Problemas através de Computadores ----------------------- 9 
2.1. Programação ------------------------------------------------------------ 9 
3. Algoritmos Computacionais -------------------------------------------------11 
3.1. Diretrizes para Elaboração de Algoritmos -------------------------11 
3.2. Descrição de Algoritmos ---------------------------------------------12 
3.3. Estruturas de Dados --------------------------------------------------13 
3.4. Operações Básicas ----------------------------------------------------15 
,Exercícios de Fixação----------------------------------------------------17 
3.5. Estruturas de Controle ------------------------------------------------18 
,Exercícios de Fixação----------------------------------------------------21 
3.6. Considerações sobre o Uso de Variáveis em Algoritmos --------22 
3.7. Técnicas de Elaboração e Verificação de Algoritmos ------------24 
,Exercícios de Fixação----------------------------------------------------25 
h Exercícios Propostos----------------------------------------------------25 
 
 
Apêndices – Parte I 
 
 
1. SOLUÇÕES DE EXERCÍCIOS 
 
2. NOTAÇÃO PARA FLUXOGRAMAS 
 
 
Texto Complementar e Exercícios 3
UFBa - Introdução à Lógica de Programação MAT 146 
Parte II - Lógica de Programação com Pascal 
 
4. Linguagens de Programação de Alto Nível--------------------------------27 
4.1. Tipos de Linguagens de Programação ------------------------------28 
4.2. Compilação e Execução de Programas -----------------------------28 
, Exercícios de Fixação---------------------------------------------------29 
5. A Linguagem de Programação Pascal --------------------------------------30 
5.1. Estrutura Geral ---------------------------------------------------------30 
5.2. Estruturas de Dados em Pascal --------------------------------------30 
5.2.1. Tipos simples de dados----------------------------------------30 
5.2.2. Tipos simples definidos pelo usuario------------------------31 
5.3. Estruturas de Controle ------------------------------------------------32 
h Exercícios Propostos----------------------------------------------------35 
5.4. Estruturas de Dados : Tipos de Dados Estruturados --------------36 
5.4.1. Vetores ----------------------------------------------------------36 
, Exercícios de Fixação---------------------------------------------------39 
5.4.2. Matrizes ---------------------------------------------------------40 
 , Exercícios de Fixação---------------------------------------------------41 
5.5. Algoritmos de Classificação e Busca -------------------------------42 
5.6. Procedimentos e Funções---------------------------------------------44 
, Exercícios de Fixação---------------------------------------------------46 
5.7. Registros e Tabelas----------------------------------------------------49 
5.8. Arquivos Diretos e Seqüenciais -------------------------------------51 
, Exercícios de Fixação---------------------------------------------------53 
5.9. Variáveis Dinâmicas: Ponteiros -------------------------------------55 
 
 
Apêndices – Parte II 
 
 
3. SOLUÇÕES DE EXERCÍCIOS - PROGRAMAS PASCAL 
Texto Complementar e Exercícios 4
UFBa - Introdução à Lógica de Programação MAT 146 
 
 
Referências Bibliográficas 
 
 
Forbellone, André L. V. Eberspächer, Henri F. Lógica de Programação - A Construção de 
Algoritmos e Estruturas de Dados; Makron Books. 1993. 
 
Gottfried, Byron B. Programação em Pascal; Schaum / McGraw Hill, 1988. 
 
Tremblay, Jean-Paul; Bunt, Richard B. Ciência dos Computadores - Uma Abordagem 
Algoritmica; McGraw Hill. 1983. 
 
Guimarães; Lages Algoritmos e Estruturas de Dados; Livros Técnicos e Científicos Editora. 
1985 
 
Wirth, Niklaus Algoritmos e Estruturas de Dados; Editora PHB, 1986. 
 
Ziviani, Nivio Projeto de Algoritmos; Livraria Pioneira Editora 
 
Saliba, Walter L. C. Técnicas de Programação - Uma Abordagem Estruturada; Makron 
Books 
 
Carvalho, Sérgio E. R. Introdução à Programação com Pascal; Editora Campus 
 
Farrer, Harry et al. Pascal Estruturado; Editora Guanabara Dois. 1985. 
 
Shmitz, Eber; Teles, Antônio Pascal e Técnicas de Programação; Livros Técnicos e 
Científicos Editora. 1986. 
Texto Complementar e Exercícios 5
UFBa - Introdução à Lógica de Programação MAT 146 
PARTE I. INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO 
 
 
1. ALGORITMOS 
 
	 Leitura: “Lógica de Programação” - Forbellone Cap. 01 
 
Definimos Algoritmo como a seqüência de passos que visam atingir um objetivo bem 
definido. 
Os algoritmos são utilizados no dia-a-dia para a solução dos mais diversos problemas. 
 
; Alguns exemplos genéricos de algoritmos usados no nosso cotidiano são: uma 
coreografia, um manual de instruções, uma receita de bolo, a solução de uma equação do 2º 
grau, uma pesquisa na lista telefônica, etc. 
O que todas essas coisas tem em comum? 
Elas podem ser vistas como uma serie finita e bem definida de passos ou regras que, quando 
realizadas, atingem um objetivo previamente definido. 
Assim, outra definição para algoritmos poderia ser: 
 
Algoritmo é a descrição de um conjunto de ações que, obedecidas, resultam numa 
sucessão finita de passos, atingindo um objetivo esperado. 
 
Dessa forma, vemos que, o que importa no algoritmo é o efeito das ações para a obtenção do 
resultado esperado. 
� São propriedades de algoritmos: 
• ações simples e bem definidas (não ambíguas); 
• seqüência ordenada de ações; 
• seqüência finita de passos. 
 
1.1 Exemplo: Construindo um Algoritmo 
 
Considere o seguinte problema: 
Temos três hastes. Uma das hastes serve de suporte para três discos de tamanhos diferentes. 
Os discos menores são semprecolocados sobre os discos maiores. A figura abaixo mostra 
uma possível situação inicial das hastes e discos. 
 
Texto Complementar e Exercícios 6
UFBa - Introdução à Lógica de Programação MAT 146 
Desejamos mover todos discos para outra haste, porém só podemos movimentar um disco de 
cada vez e um disco maior nunca pode ser colocado sobre um disco de menor tamanho. 
Solução: Em forma narrativa 
Nomeamos as hastes como 1, 2 e 3 e os discos como p, m e g. Considera-se que inicialmente 
os discos estão na haste 1. Os passos são: 
1. move o disco p para a haste 2. 
2. move o disco m para a haste 3. 
3. move o disco p para a haste 3. 
4. move o disco g para a haste 2. 
5. move o disco p para a haste 1. 
6. move o disco m para a haste 2. 
7. move o disco p para a haste 2. 
 
Podemos também representar a solução em forma gráfica, desenhando as hastes e a posição 
dos discos a cada momento (ou passo). 
 
Como podemos ver, com 3 discos precisamos de, no mínimo, 7 passos para solucionar o 
problema. Quantos passos seriam necessários para se mover 4 discos? E para n discos? 
 
� Curiosidade: Este problema foi criado m 1883 pelo matemático francês Edouard Lucas 
(1842-1891), que também criou uma lenda curiosa para enunciar o problema. Deixo para 
vocês procurarem na Internet a lenda das Torres de Hanói. 
 
Texto Complementar e Exercícios 7
UFBa - Introdução à Lógica de Programação MAT 146 
hExercícios Propostos 
 
P1. Temos três recipientes de tamanhos distintos: o primeiro com capacidade para 8 litros, 
outro para 5 litros e o terceiro com capacidade para 3 litros. O recipiente de 8 litros está 
totalmente cheio. Deseja-se colocar 4 litros em dois recipientes. Considere que os recipientes 
não sejam graduados. 
 
P2. Numa determinada noite, acontece uma queda de energia. Você sabia que poderia 
encontrar uma vela na gaveta da cozinha, um lampião embaixo da cama, fusíveis de reserva 
no armário da sala e fósforos na estante da cozinha. Descreva a seqüência de passos que 
poderia ser utilizada para diagnosticar e resolver o problema, o que pode ser previsto em duas 
possibilidades: 
a) o fusível queimou; 
b) a queda é na estação da companhia elétrica. 
 
" Exercícios Complementares 
 
Faça pelo menos 02 Exercícios Propostos do Livro do Forbellone – Cap. 1 
 
 
� Visite o site da disciplina e tente resolver os problemas de logica sugeridos: 
http://www.im.ufba.br /mat146/ProblemaLogica 
 
Texto Complementar e Exercícios 8
UFBa - Introdução à Lógica de Programação MAT 146 
2. RESOLUÇÃO DE PROBLEMAS ATRAVÉS DE COMPUTADORES 
 
Os computadores podem ser usados de forma eficiente na solução de certos tipos de 
problemas. Os problemas que suportam tratamento por computador, em geral, envolvem 
grandes quantidades de dados ou são problemas de natureza complexa, exigindo a execução 
de um grande número de passos para alcançar a solução. Basicamente são problemas na área 
de processamento de dados e na área científica. 
� O Computador é uma ferramenta que permite a realização do processamento 
automático (ou eletrônico) de dados. 
Define-se por Processamento de Dados qualquer atividade que, utilizando informações (ou 
dados), efetua transformações para obter novas informações (ou dados) como resultado. 
 
Dados de
Entrada
Dados de
Saída
Processamento
(transformação)
 
Porém , a tarefa desempenhada pelos computadores é apenas parte do processo de solução de 
problemas. 
As etapas na solução de problemas são: 
 i) Entendimento do problema; 
 ii) Criação de uma seqüência de operações (ou ações) que, quando executadas, 
 produzem a solução para o problema; 
iii) Execução desta seqüência de operações. 
iv) Verificação da adequação da solução. 
 
As etapas de entendimento do problema, criação de seqüência de ações e verificação da 
adequação da solução são tarefas desempenhadas por pessoas. Já a execução das operações 
pode ser desempenhada por computadores. 
Os computadores tem a capacidade de executar processos complicados e com grande 
quantidade de informações com rapidez e confiabilidade. 
 
2.1 Programação 
 
Programação é a seqüência de planejamento, projeto, escrita e testes de instruções 
desempenhadas pelo computador. É uma arte e uma ciência. Arte porque existem muitas 
maneiras de se realizar o trabalho de programação. Existe espaço para uma considerável dose 
de criatividade. É também uma ciência, porque existem algumas regras que devem ser 
seguidas, porque é necessário o uso de lógica e porque existem alguns métodos rigorosos de 
programação que asseguram a eficiência, economia e a utilidade dos programas gerados. 
O trabalho de programação pode se tornar mais fácil se o dividirmos sistematicamente em 
partes menos complexas (esta técnica denomina-se “dividir para conquistar”). 
Texto Complementar e Exercícios 9
UFBa - Introdução à Lógica de Programação MAT 146 
Um programa é considerado confiável quando conseguir fazer com que o computador cumpra 
com o objetivo proposto. Os programas construídos devem ser eficazes, realizando a tarefa 
definida e eficientes, utilizando os melhores meios para realizá-la. 
 
O maior problema na construção de programas é a complexidade; esta complexidade 
representa a quantidade de situações diferentes que um problema pode apresentar e que 
devem ser previstas na solução do mesmo. Portanto, ao se construir um programa, o objetivo 
principal é vencer a complexidade do problema a ser solucionado. 
 
A fim de lidar com esta complexidade, podemos dividir a programação em duas fases 
distintas: 
 
Problema
Solução na forma
de Algoritmo
Solução como
um programa
de computador
1
2
Fase de Resolução do Problema
Fase de Implementação (ou Codificação) do
Algoritmo em alguma Ling. de Programação 
 
 
c Modelização (ou Resolução) do Problema : determinação do modelo de solução para o 
problema proposto na forma de um algoritmo computacional. 
Assim, a elaboração de um algoritmo é o primeiro passo para a preparação de um programa 
de computador. Este algoritmo deve ser independente da linguagem de programação que será 
utilizada. 
d Implementação: é a transformação (ou codificação) do algoritmo em alguma Linguagem 
de Programação adequada ao modelo elaborado. 
 
	 Leitura complementar: definição de Programação no livro “Algoritmos e Estruturas de 
Dados” (Wirth) 
 
Definições Importantes: 
"Programas são formulações completas de algoritmos abstratos, baseados em representações 
específicas de dados." [Wirth] 
"Programação Estruturada é a arte ou técnica de construir e formular algoritmos de forma 
sistemática." [Wirth] 
Texto Complementar e Exercícios 10
UFBa - Introdução à Lógica de Programação MAT 146 
 
� Quem foi Nicklaus Wirth? Em 1984 ele recebeu o mais prestigioso prêmio técnico da 
ACM (Association for Computing Machinery) – o “A.M. Turing Award” por sua valiosa 
contribuição para a computação. O resto deixo para vocês pesquisarem. Aproveite e procure 
saber também sobre a ACM. Qual a relevância dessa associação? O que ela faz? 
 
3. ALGORITMOS COMPUTACIONAIS 
 
O algoritmo é uma seqüência de instruções, onde cada instrução representa uma AÇÃO que 
deve ser entendida e realizada. Surge então uma Questão: 
 
Como saber se já temos detalhes suficientes em um algoritmo 
para que a AÇÃO possa ser entendida e realizada ? 
 
Vai depender do agente que irá executar o Algoritmo. No caso de algoritmos 
computacionais, sabemos que o computador possui um conjunto limitado de instruções e o 
algoritmo deve ser expresso nos termos destas instruções. 
O computador utiliza dois conceitos básicos para construir e interpretar algoritmos: 
9 Estruturas de Dados Ö para manipulação das informações 
9 Estruturas de ControleÖ para manipulação das ações 
 
3.1 Diretrizes para a Elaboração de Algoritmos 
 
As diretrizes apresentadas abaixo são genéricas e podem ser usadas ou adaptadas na 
organização dos passos que comporão a solução de um determinado problema (ou seja, na 
criação de um algoritmo para atingir um objetivo determinado). 
1. Identificação do problema: determinar o que se quer resolver ou qual objetivo a ser 
atingido. 
2. Identificação das “entradas de dados”: informações fornecidas, a partir das quais se 
desenvolverão os cálculos. 
3. Identificação das “saídas de dados”: as informações a serem geradas como resultado. 
4. Identificação das regras e limitações do problema ou das limitações do agente 
executante (ex: se o agente fosse uma calculadora não-científica, iriam existir 
limitações no cálculo de funções, por exemplo). 
5. Determinação do que deve ser feito para transformar as “entradas” em “saídas”. Neste 
ponto deve ser determinada a seqüência de ações que leve à solução do problema. Para 
isto é preciso: 
5.1. observar as regras e limitações já identificadas; 
5.2. determinar ações possíveis de serem realizadas pelo agente. 
Texto Complementar e Exercícios 11
UFBa - Introdução à Lógica de Programação MAT 146 
6. Construção do Algoritmo, utilizando uma das formas de representação de algoritmos 
(ver Tópico 3.2) 
7. Teste da solução - execução de todas as ações do algoritmo, seguindo o fluxo 
estabelecido para verificar se ele está realmente gerando os resultados esperados ou 
detectar possíveis erros em sua descrição (veja detalhes sobre Teste de Algoritmos no 
Tópico 3.7) 
 
Exemplo: 
Imagine o seguinte problema: Calcular a média final dos alunos da 6ª Série. Os alunos 
realizarão quatro provas: P1, P2, P3 e P4. A Média Final é calculada por: 
 (P1 + P2 + P3 + P4) / 4. 
Para montar o algoritmo proposto, faremos três perguntas: 
a) Quais são os dados de entrada? 
R: Os dados de entrada são P1, P2, P3 e P4 
b) Qual será o processamento a ser utilizado? 
R: O procedimento será somar todos os dados de entrada e dividi-los por 4 (quatro) 
(P1 + P2 + P3 + P4)/4 
c) Quais serão os dados de saída? 
R: O dado de saída será a média final 
 
3.2 Descrição de Algoritmos 
 
A descrição de um algoritmo de forma clara e fácil de ser seguida ajuda no seu 
desenvolvimento, depuração (correção de erros) e a subsequente transformação do mesmo 
num programa. 
 
‰ Descrição Narrativa 
Especificação verbal dos passos em linguagem natural. 
Desvantagens: a linguagem natural é prolixa e imprecisa e freqüentemente pouco confiável 
como um veículo de transferir informação. 
Sua utilização pode ser adotada, entretanto, para a apresentação de comentários sobre o 
algoritmo (ou parte dele), esclarecendo ou realçando pontos específicos. 
 
‰ Fluxograma 
Uso de ilustrações gráficas para transmitir informações (Ex. Gerais: mapas, diagramas 
explicativo para montagem de aparelhos, etc.). 
Um fluxograma mostra, de forma gráfica, a lógica de um algoritmo, enfatizando passos 
individuais e o fluxo de execução. 
Texto Complementar e Exercícios 12
UFBa - Introdução à Lógica de Programação MAT 146 
Desvantagens: utilização questionável de fluxogramas detalhados, pois obscurecem a 
estrutura do programa. 
Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja 
Apêndice II no final ). 
 
‰ Linguagem Algorítmica ou Pseudolinguagem 
Linguagem especial para expressão de algoritmos; funciona como uma "linguagem 
simplificada de programação", utilizando expressões concisas e pré-definidas para representar 
as ações e o fluxo de execução. É uma descrição textual, estruturada e regida por regras que 
descrevem os passos executados no algoritmo. Utiliza-se palavras-chaves, indentação, apenas 
um passo por linha, normalmente usa-se um símbolo para indicar o final de um passo (como 
por exemplo o ponto-e-virgula “;”), etc. 
 
Usaremos o Portugol, pois ela possui uma estrutura similar ao Pascal. 
 
; Exemplo: Duas representações para o algoritmo do problema das medias dos alunos da 6ª 
Série. 
 
1. Receba a nota da prova1 
2. Receba a nota da prova2 
3. Receba a nota da prova3 
4. Receba a nota da prova4 
5. Some todas as notas e divida 
o resultado por 4 
6. Mostre o resultado da divisão 
 
3.3 Estruturas de Dados 
 
	 Leitura: “Lógica de Programação” - Forbellone Cap. 02 
 
Um aspecto fundamental na construção de algoritmos computacionais são as estruturas de 
dados, que representam as informações do problema a ser resolvido. 
Tais estruturas estão organizadas em tipos distintos de informações. Dentro do escopo das 
estruturas de dados, definimos os termos CONSTANTE, VARIÁVEL e IDENTIFICADOR. 
 
‰ Tipos Primitivos de Dados 
 
Texto Complementar e Exercícios 13
UFBa - Introdução à Lógica de Programação MAT 146 
São os grupos de informações que o computador manipula. Podem ser: 
1. Numéricos 
a) inteiros Ex: 1 -4 100 0 -905 ... 
b) reais Ex: 1,3 816,97 3,0 -0,0055 ... 
 
1. Não-numéricos 
a) alfanuméricos Ex: “CASA” “livro” “18” ‘R$ 55,36’ .... 
b) lógicos ou booleanos Ex: Falso, Verdadeiro (ou False, True) 
 
; Obs: O delimitador usado para alfanuméricos pode ser : “ ” ou ‘ ’ 
 
‰ Constantes 
 
Representam valores constantes, ou seja, que não variam no decorrer do algoritmo. 
Ex: 148, “Opção:”, -8.69, “Tecle algo para continuar”, Falso ... 
 
‰ Variáveis 
 
Representam informações cujos valores são modificados ao longo do tempo (Ex. Genérico: a 
idade de um indivíduo). Podemos definir variáveis também como um local onde um 
determinado valor (de um dos tipos definidos) é armazenado. Assim, a variável é composta de 
dois elementos básicos: 
9 conteúdo - valor atual da variável 
9 identificador - nome dado à variável para possibilitar sua manipulação 
 
O conceito de variável, na verdade, corresponde a “posições de memória RAM”, onde serão 
armazenados os dados manipulados pelo programa quando este for implementado. 
 
 
Endereço = Posição na memória
Conteúdo = Informação armazenada
Memória RAM ... Variável 
Identificador = Nome da variável
Conteúdo da variável 
X 
 
 
‰ Identificador 
 
Nome de um local onde se pode colocar qualquer valor do conjunto de valores possíveis de 
um tipo básico associado. Usado para manipular todos os dados variáveis do algoritmo. Pode 
também ser usado para rotular valores constantes (ex: uso do identificador PI para representar 
o valor constante 3,14). 
 
Regras para Definição de Identificadores em Pseudolinguagem (Portugol): 
9 devem começar por um caracter alfabético (uma letra); 
9 pode ser seguido de letras e/ou dígitos; 
9 é permitido o uso do caracter especial “_” situado entre letras e/ou dígitos. 
 
Ex. de identificadores válidos: Operador, Nome, X, y, ENDEREÇO, Aluno_01 
 
Texto Complementar e Exercícios 14
UFBa - Introdução à Lógica de Programação MAT 146 
; O identificador deve representar de forma significativa o conteúdo desejado, ou seja, deve 
ser um MNEMÔNICO. 
 
� Procure a definição de “mnemônico” num dicionário. Depois descubra como este termo 
e’ empregado em programação. O que são variáveis mnemônicas? 
 
‰ Declaração de Variáveis 
 
É a criação (ou definição) de locais na memória rotulados com o identificador da variável (ou 
constante) que será utilizada no algoritmo para a manipulação de um determinado tipo de 
informação. 
Sintaxe Geral em Portugol: 
 
Lista de Variáveis : Tipo ; 
 
O Tipo pode ser inteiro, real, caracter (alfanumérico) ou booleano. 
 
Ex: NUM, X : inteiro; 
 parcela : real; 
 resposta : booleano; 
 PI : real; { definição de uma constante real } 
 NOME, ENDEREÇO : caracter; 
 
; Neste momento, as variáveis aindanão contém nenhum valor associado a elas. 
 
; A declaração de variáveis deve ser feita antes da definição das ações do algoritmo. 
 
; Os comentários representam qualquer texto que explique uma ação ou um dado usado no 
algoritmo. Eles podem ser colocados em qualquer ponto do algoritmo, utilizando { } ou * * 
como delimitadores. 
 
 
3.4 Operações Básicas 
 
‰ Comando de Atribuição 
 
Serve para atribuir (ou associar) um valor a uma variável ou constante. 
Sintaxe Geral em Pseudolinguagem: 
 
identificador Å expressão ; 
 
onde expressão pode ser um(a): Constante, Variável, Expressão matemática, Função 
matemática, Expressão booleana, etc. 
 
Ex: NOME Å ‘Fulano de Tal’ 
 PI Å 3.14 
 Erro Å Verdadeiro (ou, simplesmente, Erro Å T) 
 Media Å (P1 + P2)/2 
Texto Complementar e Exercícios 15
UFBa - Introdução à Lógica de Programação MAT 146 
 
‰ Funções Matemáticas 
 
nome da função (argumento) 
 
; O argumento é a informação que é dada à função para que ela possa ser efetuada 
adequadamente. Pode ser uma constante ou uma variável. 
 
Exemplos de Funções Matemáticas que utilizaremos: 
 
 Sin (X) - Função que calcula o seno da variável X 
 SQRT (y) - Função que calcula a raiz quadrada de y 
 int (z) - Função que retorna a parte inteira da variável z 
 (que deve ser do tipo real) 
 
‰ Operadores Aritméticos + - (unários) 
 ** exponenciação 
 * multiplicação 
 / divisão 
 + - soma e subtração (binários) 
 div divisão truncada (ou inteira) (ex: x div y) 
 mod resto da divisão inteira 
 
‰ Operadores Relacionais < <= > >= = < > (diferente) 
 
‰ Operadores Lógicos not and or 
 
** Podemos usar parênteses para alterar ordem de prioridade das operações. 
 
	 Ver resumo dos operadores e a ordem de prioridade das operações em “Lógica de 
Programação” – Forbellone Cap. 02 
 
 
‰ Comandos de Entrada e Saída de Dados 
 
Representam as ações básicas de algoritmos para recebimento e apresentação de dados, 
respectivamente. 
Entrada de Dados: informações que são fornecidas ao programa pelo “usuário” durante a 
resolução do problema. 
Representação em Portugol: 
 
leia (identificador, identificador, ...) ; 
 
Ex: leia (altura, idade, sexo); 
 
Saída de Dados: informações que são mostradas ao usuário como resposta ao problema. 
Representação em Pseudolinguagem: 
 
Escreva (expressão, expressão, ...) ; 
Texto Complementar e Exercícios 16
UFBa - Introdução à Lógica de Programação MAT 146 
 
Ex: escreva (‘ Seu peso ideal eh : ’ , peso_ideal) ; 
 escreva (‘ Media final = ’, (P1 + P2)/2) ; 
 
‰ Esquema Genérico de Algoritmos em PseudoLinguagem 
 
Declaração de Variáveis / Constantes 
INICIO 
 inicialização de variáveis / constantes 
 {comentários} 
 bloco de comandos de entrada de dados 
 {comentários} 
 bloco de comandos de cálculo 
 {comentários} 
 bloco de comandos de saída de dados 
FIM 
 
Exemplo: Algoritmo em pseudolingugem para o problema do cálculo da média final dos 
alunos da 6ª Série. 
 
* declaração de variáveis 
Real: P1, P2, P3, P4, Media; 
Inicio 
* comandos de entrada de dados 
 Leia (p1); 
 Leia (p2); 
 Leia (p3); 
 Leia (p4); 
 * processamento- Calculo da media 
 Media Å (P1 + P2 + P3 + P4)/4; 
 * saída de dados 
 Escreva (‘ Media final = ’, Media); 
Fim 
 
,Exercícios de Fixação 
 
F1. Faça 02 exemplos para cada um dos conceitos abaixo: 
 a) entrada de dados 
 b) saída de dados 
 c) declaração de variáveis 
 d) inicialização de variáveis 
 e) atribuição do resultado de uma expressão aritmética a uma variável 
 
F2. Utilizando tipos primitivos de dados, crie declarações de variáveis, que armazenem as 
seguintes informações: o nome de uma figura geométrica, a quantidade de lados, a área, o 
perímetro e se a figura é regular ou não. 
 
" Exercícios Complementares: Livro Forbellone - Cap. 02 - Exercícios Propostos 
 
Texto Complementar e Exercícios 17
UFBa - Introdução à Lógica de Programação MAT 146 
 
 
3.5 Estruturas de Controle: Sequencial, Condicional e de Repetição 
 
 
 
	 Leitura: “Lógica de Programação” - Forbellone Cap. 03 
 
 
‰ Estrutura de Controle Seqüencial 
 
Conjunto de comandos que são executados numa seqüência linear, de cima para baixo, na 
mesma ordem em que aparecem. 
 
Sintaxe Geral: 
Comando 1; 
Comando 2; 
Comando 3; 
.... 
 
 
‰ Estrutura de Controle Condicional ou de Seleção 
 
Permite a escolha de um grupo de ações para serem executadas de acordo com a aceitação ou 
não de certas condições. 
 
São testados parâmetros e, a depender de seus valores, tomamos um caminho ou outro. 
As condições que são testadas num Algoritmo são do tipo lógica (booleana), portanto podem 
ter somente dois resultados: Verdadeiro ou Falso. Assim, a seleção de ações pode seguir, no 
máximo, duas alternativas: uma se a condição for verdadeira e outra se a condição testada for 
falsa. Existem seleções mais simples e seleções compostas outras seleções. 
 
Seleções Simples 
 
Opção 1: Sintaxe Geral 
 
 Se condição Então 
 bloco de comandos 1 
 Fim se 
 
 
 
Opção 2 
 Se condição Então 
 bloco de comandos 1 
 senão 
 bloco de comandos 2 
 Fim se 
Texto Complementar e Exercícios 18
UFBa - Introdução à Lógica de Programação MAT 146 
 
 
Seleções Compostas: Aninhamento de condições 
 
 Se condição1 Então 
 bloco de comandos 1 
 senão 
 Se condição2 Então 
 bloco de comandos 2 
 Fim se 
 Fim se 
 
; Observação: as palavras sublinhadas na Sintaxe Geral são chamadas de “palavras 
reservadas” e sempre aparecem na estrutura. As palavras em itálico são indicações do tipo de 
expressão ou comando que devem ser usados. 
 
 
‰ Estrutura de Repetição 
 
Podemos ter repetições condicionais ( a repetição ocorre condicionada a uma condição lógica) 
e incondicionais (que tem um número pré-definido de repetições). 
 
a) Repetição Condicional: existem dois tipos distintos de Repetição Condicional. 
 
Tipo 1 - Condição testada no início da repetição 
 
Sintaxe Geral: 
 Enquanto condição faça 
 bloco de comandos 
 Fim enquanto 
 
Características: 
• Testa a condição antes da execução do bloco. 
• Enquanto a condição for verdadeira, o bloco de comandos é executado. Assim, o bloco 
de comandos pode ser executado 0 ou mais vezes. 
• Pára a execução do bloco quando a condição se tornar falsa. 
 
; Exemplo: 
 
Elabore um algoritmo para determinar o menor número fornecido de um conjunto de valores 
inteiros positivos dados. Considere que o número zero indica o encerramento do conjunto de 
dados de entrada. 
 
valor, menor : inteiro 
Início 
 leia (valor) 
 menor Å valor * inicialização da variável que vai guardar o menor valor * 
 Enquanto ( valor < > 0 ) faça 
 Se valor < menor então 
 menor Å valor 
Texto Complementar e Exercícios 19
UFBa - Introdução à Lógica de Programação MAT 146 
 fim se 
 leia (valor) * entrada do próximo elemento do conjunto * 
 fim enquanto 
 escreva (‘ O menor valor do conjunto é ‘, menor) 
Fim 
 
 
Tipo 2 - Condição testada no final da repetição 
 
 Repita 
 bloco de comandos 
 até condição 
 
Características: 
• Testa a condição após da execução do bloco. 
• Enquanto a condição for verdadeira, o bloco de comandos é executado. Assim, o bloco 
de comandos é executado pelo menos uma vez. 
• Pára a execução do bloco quando a condição se tornar verdadeira (denominada de 
Condição de Parada). 
 
 
b) Repetição Incondicional - N.º pré-definido de repetições 
 
Sintaxe Geral: 
 Para variável de controle = valor inicial até valor final Faça 
 bloco de comandos 
 Fim para 
 
 
• Repete o bloco de comandos (valor final - valor-inicial + 1) vezes 
• Incrementa automaticamente a variável de controle cada vez que o bloco é 
executado(incremento “default” de 1 até alcançar o valor final) 
• Se o valor final definido for menor que o valor inicial, o laço de repetição não é 
executado nenhuma vez. 
• A variável de controle deve ser do tipo primitivo inteiro. 
• A variável usada como controle da estrutura não pode ser modificada dentro do 
bloco! 
Texto Complementar e Exercícios 20
UFBa - Introdução à Lógica de Programação MAT 146 
; Exemplo: 
 
Elabore um algoritmo para calcular o fatorial de N, onde N é um número inteiro (maior ou 
igual a zero). 
Considere que: Se N > 0 então N! = 1x 2 x 3 x .... x N 
N= 0 então N! = 1 
 
Algoritmo em Pseudolinguagem 
 
n, fat, acum : inteiro 
 
{ acum e’ a variável de controle } 
 
Início 
 leia (n) 
 * inicialização de fat 
 fat Å 1 
 Para acum = 2 até n faça 
 fat Å fat * acum 
 fim para 
 escreva (‘ o fatorial de ’, n , 
‘ é ‘, fat ) 
Fim 
... e em Fluxograma: 
 
 
 
Teste da Solução: Testando o algoritmo acima para os seguintes valores de n: 0, 1 e 3 
 
N Fat acum Escreva ... 
0 1 X fatorial = 1 
1 1 X fatorial = 1 
3 1 2 
 1*2 3 
 1*2*3 4 fatorial = 6 
 
 
, Exercícios de Fixação 
 
F1. Faça 02 exemplos para cada um dos conceitos abaixo: 
a) condição lógica composta 
b) estrutura de seleção simples 
c) estrutura de seleção encadeada 
d) estrutura de seleção de múltipla escolha 
 
 
 
Texto Complementar e Exercícios 21
UFBa - Introdução à Lógica de Programação MAT 146 
F2. Observe o algoritmo e responda: 
 
X, N : inteiro 
Inicio 
 leia (N , X) 
 Y Æ 1 
 Enquanto ( X > 0 ) faça 
 inicio 
 Y Æ Y * N 
 X Æ X - 1 
 fim 
 Fim enquanto 
 escreva ( Y ) 
Fim 
 
a) Qual o objetivo do algoritmo acima (i.e.: qual o problema que ele está solucionando)? 
b) O algoritmo está correto? Como você fez para testá-lo? 
c) Altere o algoritmo, utilizando a Estrutura Repita ... Até 
d) Altere o algoritmo, utilizando a Estrutura Para ... Faça 
e) Qual das três opções de algoritmo é a melhor na sua opinião? Por que? 
 
 
3.6 Considerações sobre o Uso de Variáveis em Algoritmos 
Computacionais 
 
As variáveis representam a informação manipulada pelo algoritmo, e portanto, pode aparecer 
em diversas situações: 
 
1.Armazenar dados que são fornecidos pelo usuário 
 Ex: leia (DIA, MES, ANO) 
 
2. Armazenar resultados de expressões 
 Ex: RESULT Å (A + B * C) / (D - E) 
 
3. Acumuladores: Acumular valores 
 Ex: ACUMULA Å 1 
 Enquanto ACUMULA < 100 faça 
 leia (NUM) 
 ACUMULAÅ ACUMULA + NUM 
 Fim enquanto 
 
4. Contadores: Contar valores 
Ex: CONTA Å 0 
 Repita 
 CONTA Å CONTA + 1 
 escreva (“Repeti o laço ”, CONTA, “ vezes ” ) 
 até CONTA > 20 
 
5. Finalizadores: Finalizar repetições 
Texto Complementar e Exercícios 22
UFBa - Introdução à Lógica de Programação MAT 146 
Ex1: leia (NUM) 
 Enquanto NUM < > 0 faça {condição para parada »» NUM = 0 } 
 Seno Å SIN (NUM) 
 escreva (Seno) 
 leia (NUM) 
 Fim enquanto 
Ex2: Repita 
 leia (oper1, oper2) 
 divis Å oper1/oper2 
 escreva (‘ Continuar (sim/nao) : ‘) 
 leia (resp) 
 ate resp = ‘nao’ {condição de parada} 
 
 
6. Sinalizadores ou Flags: Sinalizar erros, condições de falha de teste, etc. 
Variável que informa que uma determinada situação foi alcançada. 
Ex: INVALIDA Å 0 
 Se (dia<1 or dia>31) or (mes<1 or mes>12) então 
 INVALIDA Å 1 
 senão 
 ..... 
 fim se 
 Se INVALIDA = 0 então 
 escreva (‘ Data válida ‘) 
 senão 
 escreva (‘ Data inválida ‘) 
 fim se 
 
; Muitas vezes são usadas variáveis do tipo booleano como sinalizadores. 
Ex: INVALIDA: booleano 
 ... 
 Leia (dia, mes, ano) 
 * inicializa a variavel booleana com um valor False ou True 
 INVALIDA Å False 
 Se (dia<1 or dia>31) então 
 * Muda o valor do flag para sinalizar um erro ou mudança de estado 
 INVALIDA Å True 
 senão 
 Se (mes<1 or mes>12) então 
 INVALIDA Å True 
 fim se 
 * Note que a condição não usa operadores lógicos do tipo (Invalida = True) 
 Se INVALIDA então 
 escreva (‘ Erro na Data - dia invalido ou mes invalido ’) 
 fim se 
Texto Complementar e Exercícios 23
UFBa - Introdução à Lógica de Programação MAT 146 
3.7 Técnicas de Elaboração e Verificação de Algoritmos 
 
	 Leitura: “Ciência dos Computadores - Uma abordagem algorítmica” - Tremblay 
 Cap. 07 
 
 
‰ Refinamentos Sucessivos “top-down” 
 
Esta é uma técnica de elaboração de algoritmos que divide o desenvolvimento do mesmo em 
diferentes fases. O problema inicial é subdividido em subproblemas menores, e estes em 
partes ainda menores, e assim sucessivamente. A cada divisão são levados em conta mais 
detalhes sobre a especificação do problema. Esta é uma maneira de lidar com a complexidade 
do problema. Mais adiante, quando falarmos de Procedimentos e Funções veremos na prática 
o uso de Refinamentos Sucessivos Top-Down. 
 
‰ Regras para tornar seu algoritmo mais claro e legível 
 
a) Utilize comentários. 
Escreva os comentários no momento que estiver escrevendo o algoritmo. Um programa mal 
documentado é um dos piores erros que um programador pode cometer. O melhor momento 
para se escrever os comentários é aquele em que o programador tem maior intimidade com o 
algoritmo, ou seja, durante a sua confecção. Existem 02 tipos de comentários que devem ser 
usados. 
Prólogo ou Cabeçalho: são comentários que contém uma identificação geral do algoritmo. 
• O que faz o algoritmo (programa ou módulo); 
• Como chamá-lo ou utilizá-lo; 
• Significado dos parâmetros, variáveis de entrada, de saída e variáveis mais 
importantes; 
• Arquivos utilizados; 
• Outros módulos utilizados; 
• Métodos especiais utilizados, com referências nas quais possa se encontrar mais 
informações; 
• Autor, data de escrita e última atualização; 
Comentários de linha: são comentários de passos que podem ser mais obscuros para o leitor, 
como o uso de variáveis como acumuladores, contadores, flags, etc. 
 
b) Utilize identificadores mnemônicos: escolha nomes representativos para variáveis, funções, 
constantes, tipos, etc. Evite usar letras quando a variável representa algo concreto (ex: X Å 
Y + Z é muito menos claro que Preco Å Custo + Lucro). Também evite identificadores 
longos (ex: use nome ou nAluno ao invés de nome_do_aluno para representar “nome de 
aluno”). 
 
c) Utilize indentação para mostrar a estrutura lógica do programa. Crie suas regras básicas de 
indentação e procure seguí-las ao escrever um algoritmo. Uma boa regra é indentar blocos de 
comandos internos a uma estrutura de controle. 
 
d) Utilize espaços em branco para melhorar a legibilidade. Os espaços em branco são valiosos 
para melhorar a aparência de um programa. Você pode por exemplo: 
Texto Complementar e Exercícios 24
UFBa - Introdução à Lógica de Programação MAT 146 
• Deixar uma linha em branco entre as declarações e o corpo do programa; 
• Separar grupos de comandos que executam funções lógicas distintas por uma ou mais 
linhas em branco. 
Um comando por linha é suficiente. A utilização de vários comandos por linha é prejudicial 
por vários motivos, dentre eles destacam-se o fato do programa tornar-se mais ilegível e ficar 
mais difícil de ser depurado. 
 
‰ Testes 
 
Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser 
feito através de uma simulação do mesmo, aonde são dados valores para os dados de entrada e 
vai-se preenchendo uma tabela aonde são colocadas todas as variáveis e constantes do 
algoritmo. Segue-se o fluxo de execução (como se estivesse executando o algoritmo em um 
computador imaginário). A cada comando de atribuição ou cálculo de expressão o valor das 
variáveis deve ser atualizado. Ao final do teste podemos ter as seguintes situações: 
9 o resultado esperadofoi alcançado; ou 
9 foram detectados erros nos comandos; ou 
9 foram detectados erros no fluxo de execução - erro nas estruturas de controle. 
 
Procure fazer testes relevantes como, por exemplo, aqueles que verificam casos extremos e 
casos de exceções. Com o teste é possível identificar se e em que ponto o algoritmo está 
falhando e fazer a correção. Algoritmos errados podem gerar resultados errados ao serem 
executados por um computador ou mesmo não gerar nada, se o computador detectar erros 
graves na seqüência de operações. 
 
 
 
, Exercícios de Fixação 
 
Teste o algoritmo abaixo. Faça um Teste de Mesa, usando a tabela ao lado do algoritmo. 
* lembre-se de testar os “casos críticos” (casos extremos e casos de exceções)! 
 
X, N : inteiro 
Inicio 
 leia (N , X) 
 Y Æ 1 
 Enquanto ( X > 0 ) faça 
 inicio 
 Y Æ Y * N 
 X Æ X - 1 
 fim 
 Fim enquanto 
 escreva ( Y ) 
Fim 
 
 
 
 
 
 
N X Y ( X > 0 ) 
 
 
 
 
 
h Exercícios Propostos 
 
P1. Elabore um algoritmo que verifique se um número positivo é primo ou não. Faça um teste 
exaustivo da solução encontrada. 
 
Texto Complementar e Exercícios 25
UFBa - Introdução à Lógica de Programação MAT 146 
P2. Elabore um algoritmo que calcule os 20 primeiros termos da Série de Fibonacci. A série 
de Fibonacci é formada pela seguinte seqüência: 1, 1 ,2, 3, 5, 8, 13, ... etc. Inclua um 
teste de mesa do algoritmo. 
 
P3. Determine o maior e o menor valor de um conjunto de números inteiros positivos. 
Considere que o conjunto de dados de entrada termina quando é fornecido o número -5. 
 
P4. Escreva um algoritmo que leia n números inteiros e determine se cada um deles é um 
número da seqüência de Fibonacci ou não. 
 
P5. O algoritmo abaixo tem como objetivo determinar o valor do somatório S, dado pela série 
S = X - X2 / 3! + X4 / 5! - X6 / 7! + ..... usando os 20 primeiros termos da série, porém o 
algoritmo não está correto. Corrija os erros encontrados (se preciso, rescreva o algoritmo) 
e acrescente comentários para aumentar a legibilidade do algoritmo. Faça um Teste de 
Mesa. 
inteiro : X , F , S 
Inicio 
 leia ( X ) 
 S ← 1 
 Fat ← 1 
 Para I = 1 até 20 faça 
 Para F = 1 até ( 2 * I ) faça 
 Fat = Fat * F 
 Fim Para 
 S ← ( S + (X ** (2 * I) ) ) / Fat 
 Fim Para 
 Escreva ( " O somatório e' " , S ) 
Fim 
 
P6. Elabore um algoritmo que leia uma massa de dados contendo SEXO , DATA DE 
NASCIMENTO e ESTADO CIVIL (Casado/ Solteiro/ Divorciado/ Outros) de um grupo 
de 100 pessoas e determine, ao final: 
a) Média de Idade das mulheres 
b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrência 
 
P7. Foi feita uma pesquisa de audiência de canal de TV em várias casas numa certa cidade, 
num certo dia. Para cada casa visitada é fornecido o número do canal (4, 5, 7 ,11) e o 
número de pessoas que estavam assistindo TV. 
Elabore um algoritmo que leia um número indeterminado de dados (terminando quando 
for lido um canal igual a zero) e calcule a percentagem de audiência para cada emissora, 
mostrando ao final, o número de cada canal e sua respectiva audiência. 
 
No Apêndice I encontra-se a solução de alguns dos exercícios propostos 
 
" Exercícios Complementares 
 
Livro do Forbellone - Cap. 03 Exercícios de Fixação e Exercícios Propostos
Texto Complementar e Exercícios 26
UFBa - Introdução à Lógica de Programação MAT 146 
Texto Complementar e Exercícios 27
II. LÓGICA DE PROGRAMAÇÃO COM PASCAL 
 
 
	 Leitura: 
 “Engenharia de Software” - Roger S. Pressman 
 Cap 16 - “Linguagens de Programação e Codificação” (exceto 16.2) 
 “Introdução à Programação com Pascal”- Sérgio E. R. Carvalho 
 “Informatica – Novas Aplicacoes com Microcomputadores”- Antonio Meirelles 
 (pag. 72 a 79) 
 
 
4. As Linguagens de Programação 
 
A linguagem de programação é o meio pelo qual podemos indicar os “passos” que devem 
ser realizados pelo computador para resolver problemas. Utilizando as linguagens de 
programação, colocamos algoritmos numa forma que o computador possa interpretá-los, ou 
seja, na forma de programas computacionais. 
Para que o computador execute o algoritmo proposto, as operações devem ser transcritas para 
uma linguagem que a máquina consiga compreender. Na realidade, os computadores só 
podem executar algoritmos expressos em linguagem de máquina que constitui-se de um 
conjunto de instruções capazes de ativar diretamente os dispositivos eletrônicos do 
computador. 
Características da Linguagem de Máquina: 
• diferente para cada tipo de computador, dependendo de sua arquitetura; 
• extremamente rudimentar, onde até as operações mais simples têm que ser expressas 
em termos de registros, acumuladores e outros dispositivos de máquina; 
• totalmente expressa em forma numérica - sistema de numeração binário (0s e 1s) ou 
hexadecimal. 
 
Consequentemente, é uma linguagem de difícil aprendizado e pouco expressiva para as 
pessoas. 
Para tornar a atividade de programação mais acessível, foram desenvolvidas outras 
linguagens, denominadas de “Linguagens de Programação”, que funcionam como uma forma 
alternativa de se comunicar com o computador. 
 
‰ Como Funcionam as Linguagens de Programação? 
 
As linguagens de programação são compostas por um grupo de elementos e regras que 
permitem a construção das instruções utilizadas para resolver os problemas computacionais. 
Com elas construímos programas que devem ser, posteriormente, transformados em 
instruções em Linguagem de Máquina. Para realizar a transformação, cada linguagem de 
programação possui um programa-suporte denominado, genericamente, de TRADUTOR. 
 
 
 
 
UFBa - Introdução à Lógica de Programação MAT 146 
 
4.1 Tipos de Linguagens de Programação 
 
As linguagens de programação podem ser divididas em dois grupos básicos: 
 
9 Linguagens de Programação de Baixo Nível 
9 Linguagens de Programação de Alto Nível 
 
 
4.1.1 Linguagem de Programação de Baixo Nível 
 
Conhecida como Linguagem Assembler ou Linguagem de Montagem, ou ainda, Linguagem 
Simbólica. 
Utiliza números binários, hexadecimais, alguns símbolos e letras para compor os programas. 
Está muito próxima da Linguagem de Máquina, onde cada instrução simbólica corresponde, 
praticamente, a uma instrução de máquina. 
Para transformar o programa escrito em Linguagem Assembler em código de máquina 
executável, é utilizado um programa-suporte denominado de MONTADOR. 
 
 
4.1.2 Linguagens de Programação de Alto Nível 
 
São linguagens de programação que utilizam notações matemáticas e grupos de palavras para 
representar as instruções de máquina, tornando o processo de programação mais próximo do 
entendimento humano. 
Muitas destas linguagens foram desenvolvidas para atender os problemas de áreas de 
aplicação específicas, como, por exemplo, linguagens para aplicações comerciais, científicas, 
administrativas, de ensino, etc. 
A primeira linguagem de alto nível foi desenvolvida em 1957 - denominada de FORTRAN 
(Formula Translator) - e destina-se a aplicações científicas e de engenharia. 
De acordo com seu período de surgimento e características particulares adotadas em sua 
composição, as ling. de alto nível são divididas em GERAÇÕES (Linguagens de 2ª Geração, 
3ª Geração e 4ª Geração ). 
 
Vantagens das linguagens de Alto Nível: 
• facilidade de entendimento e uso; 
• independência de máquina (é praticamente a mesma, não importando o 
computador utilizado). 
 
Para transformar os programas escritos com Linguagens de Alto Nível em códigos de 
máquina, é usado um programa-suporte denominado TRADUTOR (Compilador ou 
Interpretador). 
 
 
4.2 Compilação e Execução de Programas 
 
Para executarmos um programa escrito numa linguagem de alto nível é preciso primeiro 
traduzir o código-fontepara código-objeto. O processo de tradução pode dar-se em tempo de 
execução caso a linguagem use um interpretador (traduz e executa instrução a instrução), ou 
Texto Complementar e Exercícios 28
UFBa - Introdução à Lógica de Programação MAT 146 
todas as instruções podem ser traduzidas antes que se inicie a execução do programa, o que 
ocorre no caso de linguagens que usam tradutores do tipo compilador. 
 
 Código Objeto Código Fonte Tradutor
 
 
Compilador: No sentido mais geral, qualquer programa que transforme um conjunto de 
símbolos em outro obedecendo a uma série de regras sintáticas e semânticas; no sentido mais 
comum, um programa que traduz todo o código-fonte de programas escritos numa linguagem 
de alto nível em código-objeto antes da execução do programa. O código-objeto é o código de 
máquina, ou alguma variação do código de máquina. 
 
Código-fonte: não é executável diretamente pelo processador - permite apenas que o 
programador consiga definir o programa em uma forma legível aos humanos. 
 
Código-objeto: é o código produzido pelo compilador; é uma forma intermediária, similar a 
linguagem de máquina do computador. Apesar de estar representado em binário, não é 
executável diretamente pelo processador, pois normalmente, o código-objeto referencia partes 
de programa que não estão necessariamente definidas no mesmo arquivo que o gerou, por 
exemplo, arquivos de bibliotecas de sub-rotinas. 
 
Editores de ligação (ou linkeditores): Um programa que reúne módulos compilados e 
arquivos de dados para criar um programa executável. Os linkeditores têm também outras 
funções, como a criação de bibliotecas. 
 
 
, Exercícios de Fixação 
 
F1. Faça um quadro comparativo para: 
 b) Linguagem de Alto Nível e Linguagem de Baixo Nível 
 c) Programa Fonte e Programa Objeto 
 
F2. Faça um diagrama que descreva o processo de compilação e execução de programas, 
indicando que "ferramentas" (softwares) são utilizados em cada etapa e suas respectivas 
funções. 
 
� Pesquise sobre Linguagens de Programação de Alto Nível e responda: 
 
a) A que geração de linguagens PASCAL pertence? 
b) Quais a características marcantes das linguagens de 3ª geração? 
c) Cite exemplos de linguagens atuais para aplicações comerciais e de ensino. 
 
 
Texto Complementar e Exercícios 29
UFBa - Introdução à Lógica de Programação MAT 146 
5. A Linguagem de Programação Pascal 
 
 
	 Leitura: “Programação em Pascal” - Byron Gottfried Cap. 2 
 
 
5.1 Estrutura Geral dos Programas em Pascal 
 
|-----Significado ------------------------------ estrutura do programa -------------------------------| 
Cabeçalho PROGRAM <identificador> ; 
Bloco 
 Declarações: Constantes CONST <lista de constantes>; 
 Tipos TYPE <tipos definidos pelo usuário>; 
 Variáveis VAR <lista de variáveis>; 
 Procedimentos PROCEDURE {descrição do procedimento} 
 Funções FUNCTION {descrição da função } 
 
 Instruções BEGIN 
 {Bloco principal de comandos} 
 END. 
 
* PROGRAM, CONST, etc. são palavras reservadas da linguagem Pascal; isto é, são termos 
que tem um significado pré-definido e, portanto, só devem ser usados da forma especificada 
na linguagem (por exemplo, você não poderia criar uma variável com o nome “var”). 
 
5.2 Estrutura de Dados em Pascal 
 
A linguagem Pascal tem a capacidade de tratar muitos tipos de dados, permitindo inclusive 
que o programador defina novos tipos a partir de tipos básicos existentes (na cláusula TYPE), 
aumentando assim o número de aplicações que podem ser implementadas com a linguagem. 
 
) Os Tipos de Dados podem ser divididos em: 
 
 1. Tipos Simples 
 2. Tipos Definidos pelo usuário 
 2.1 Simples 
 2.2 Estruturados 
 3. Tipos Estruturados 
 4. Tipo Apontador 
 
 
5.2.1 Tipos de Dados Simples 
 
São elementos individuais associados a um identificador simples. Representam locais de 
memória individuais ocupados por valores simples (números, cadeia de caracter, etc.) 
 
� Inteiro (integer) 
Texto Complementar e Exercícios 30
UFBa - Introdução à Lógica de Programação MAT 146 
* A operação de divisão (/) efetuada com valores do tipo inteiro resultam em um valor do 
tipo REAL. 
* Não existe operador exponencial ! 
 
� Real (real) 
* Os operadores DIV e MOD não podem ser usados com dados do tipo real. 
 
� Caracter (char) 
São cadeias de caracteres individuais, ou seja, caracteres individuais escritos entre apóstrofos 
(‘ ’). 
* ‘ ’ representa o caracter branco. 
* Quando queremos representar o caracter apóstrofo, devemos escrevê-lo duas vezes (‘‘’’). 
* Correspondem os caracteres da Tabela ASCII. Assim cada caracter corresponde a um 
código numérico, podendo ser comparados uns com os outros, baseados em sua ordem 
relativa dentro do conjunto de caracteres. 
 
� Booleano (boolean) 
A este tipo são atribuídos os valores TRUE ou FALSE, que representam um conjunto 
ordenado onde o valor falso precede o verdadeiro. 
* Nas operações lógicas compostas devem ser utilizados parênteses (obrigatoriamente) 
para determinar a precedência de realização das operações. 
 
 
5.2.2 Tipos Definidos pelo Usuário - Tipos Simples 
 
Podem ser criados a partir de um grupo de valores específicos (Subrange) ou Enumerados. Os 
tipos estruturados são definidos a partir de tipos primitivos ou tipos definidos anteriormente 
(tipos de tipos). 
* Uso de cláusula TYPE para declaração de tipos definidos pelo usuário. 
* Deve preceder a declaração de variáveis (ver esquema geral de programas pascal-item 5.1 ) 
 
� Subrange (grupo de valores) 
É um subconjunto contínuo e ordenado, formado a partir de um tipo original de dados simples 
e ordenado. Isto inclui os tipos inteiros, booleanos, char e dados enumerados previamente 
definidos. 
 
• Sintaxe Geral: 
TYPE nome_tipo = primeiro_elemento ...último_elemento; 
 
Ex1: Type maiuscula = ‘A’.. ‘Z’; 
 Var letra_m: maiuscula; 
 
Ex2: Type Dia = 1..31; 
 Var 
 dia_data: dia; 
 mes_data: 1..12; 
 ano_data: 90..95; 
 
� Enumerados 
Texto Complementar e Exercícios 31
UFBa - Introdução à Lógica de Programação MAT 146 
Tipos enumerados definem conjuntos ordenados de valores, através da enumeração de 
identificadores que representam estes valores. Sua ordem segue a sequência na qual os 
identificadores são enumerados. 
 
• Sintaxe Geral: 
TYPE nome = (identif, identif, ..., identif ); 
 
* Os identificadores na definição do tipo tornam-se constanes do tipo enumerado. 
* A primeira constante é associada à posição 0, a segunda à posição 1 e assim por diante. 
* Os tipos enumerados são uma subclasse dos tipos ordinais. 
 
 Ex1: type Naipe = (Ouros, Espada, Paus, Copas); 
 
* Dada esta declaração, Copas, por exemplo, é uma constante do tipo Naipe. 
 
* A função do Pascal ORD retorna a posição (ou ordinalidade) de uma constante do tipo 
enumerado. 
 Ord(Ouros) = 0 
 Ord(Espada) = 1 
 Ord(Paus) = 2 
 
 
Mais adiante veremos os outros tipos de dados (Tipos Estruturados, Tipo Apontador, etc.) 
 
 
5.3 Estruturas de Controle 
 
 
† Seleção: IF ... THEN ... ELSE 
 
IF <expressão booleana> THEN 
 <bloco de instruções> ; 
 
<bloco de instruções> pode ser somente uma instrução ou um conjunto de instruções 
delimitadas pelas palavras reservadas BEGIN e END que definem um bloco. 
 
IF <expressão booleana> THEN 
 <bloco de instruções> 
ELSE 
 <bloco de instruções> ; 
 
* Não deve haver um terminador (;) antes do ELSE. Caso haja mais de uma instrução antes do 
ELSE, estas devem ser delimitadas por BEGIN e END (sem o ; apos o end). 
 
 
† Seleção: CASE 
 
 
Texto Complementar e Exercícios 32
UFBa - Introdução à Lógica de Programação MAT 146 
CASE <expressão> OF 
 Label1: <bloco de instruções1> ; 
 Label2:<bloco de instruções2> ; 
 … ….. 
 ELSE 
 <bloco de instruções> ; 
END; 
 
* <expressão> : se for uma variável, ela não pode ser do tipo real e se for uma expressão, não 
pode gerar resultado do tipo real 
* Label: deve ser um valor relacionado com o tipo da variável ou resultado da expressão 
(números inteiros, caracteres, valores booleanos ) 
* na estrutura CASE, não se coloca o begin, mas é preciso colocar o end; 
 
† Repetição: condicional 
 
WHILE <expressão booleana> DO 
 <bloco de instruções> ; 
 
REPEAT 
 <instruções> ; 
UNTIL <expressão booleana> ; 
 
* Não é preciso delimitar as instruções da Estrutura REPEAT com as palavras reservadas 
BEGIN e END. 
 
† Repetição: incondicional (número pré-definido de vezes) 
 
FOR var_controle := Vi TO / DOWNTO Vf DO 
 <bloco de instruções> ; 
 
* Usando TO : Enquanto Vi <= Vf executa o laço de repetição 
* Usando DOWNTO: Enquanto Vi >= Vf executa o laço de repetição 
* <var_controle>: deve ser do tipo inteiro e não pode ser alterada dentro do laço. 
 
Ex: 
 Program ListaNumeros; 
 VAR lin, col, n : integer; 
 Begin 
 Readln(n); 
 For lin := 1 to n do 
 begin 
 For col:= lin to (n + lin –1) do 
 write(col, ‘ ‘); 
 writeln; 
 end; 
 End. 
Por exemplo, se N = 4 
O programa vai gerar a 
seguinte saida de dados: 
 
1 2 3 4 
2 3 4 5 
3 4 5 6 
4 5 6 7 
 
Texto Complementar e Exercícios 33
UFBa - Introdução à Lógica de Programação MAT 146 
; Exemplo: Exercício no. 14 pag. 63 - Cap 03 Forbellone (2a. edição) 
 
Program Pesquisa; 
Uses crt; { indicação do uso de biblioteca de funções do Turbo Pascal que 
 manipula o hardware : video, teclado, etc. } 
 
Var { declaração de variáveis } 
 sexo,olhos,cabelos :char; 
 idade, maioridade, conta, total: integer; 
 perc: real; 
Begin 
 
 total := 0; { inicialização de variáveis } 
 conta := 0; 
 maioridade := 0; 
 clrscr; { limpa a tela } 
 gotoxy (5,3); { Posiciona cursor na coluna 5, linha 3 da tela} 
 write ('Pesquisa de Caracteristicas Fisicas na Popula‡ao '); 
 gotoxy(10,5); 
 write('digite a idade:'); 
 readln(idade); 
 While idade <> -1 do { laço de repetição - Finaliza quando idade = -1} 
 begin 
 gotoxy(10,6); 
 write('digite o sexo (F/M):'); 
 readln(sexo); 
 gotoxy(10,7); 
 write('digite a cor dos olhos (A:azuis/V:verdes/C:castanhos) :'); 
 readln(olhos); 
 olhos := upcase(olhos); 
 gotoxy(10,8); 
 write('digite a cor dos cabelos (L:louro/C:castanhos/P:pretos) :'); 
 readln(cabelos); 
 cabelos := upcase(cabelos); 
 If (upcase(sexo)='F') and (olhos='V') and (cabelos='L') and 
 (idade >= 18) and (idade <= 35) then 
 conta:= conta + 1; 
 If idade > maioridade then 
 maioridade := idade; 
 total := total + 1; 
 gotoxy(10,5); 
 write('digite a idade:'); 
 readln(idade); 
 end; 
 perc := conta * 100 / total; 
 clrscr; 
 gotoxy(1,7); { Apresentação de Resultados } 
 writeln('A maior idade encontrada na populaçao foi de ', maioridade,' anos'); 
 writeln('Perc. mulheres de 18 a 35 anos c/ cabelos louros e olhos verdes=',perc:5:2,'%'); 
End. 
 
 
 
Texto Complementar e Exercícios 34
UFBa - Introdução à Lógica de Programação MAT 146 
 
h Exercícios Propostos 
 
 
2 Exemplo de programa sem entrada de dados 
1. Faça um programa Pascal que calcule e escreva o número de grãos de milho que se pode 
colocar num tabuleiro de xadrez, colocando um milho no primeiro quadro e, nos quadros 
seguintes, o dobro do quadro anterior. 
2 Exemplo de programa com repetições (número pré-definido de vezes) 
2. Um número primo é aquele que não é divisível por nenhum número menor do que ele 
exceto a unidade. Deseja-se ler N números e mostrar todos os divisores de cada um deles. 
Para os primos, imprimir um asterisco( * ) do lado. 
 Ex.: 10 → 1 5 10 
 15 → 1 3 5 15 
 11 → 1 * 
 
2 Exemplo de programa com repetições (número indefinido de vezes) e uso de variáveis 
de apoio a estatísticas 
3. Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou não de 
um novo produto lançado. Para isto, forneceu o sexo do entrevistado e sua resposta (sim ou 
não). Sabendo-se que foram entrevistadas 200 pessoas, fazer um programa que calcule e 
mostre: a) o número de pessoas que disseram SIM 
 b) o número de pessoas que disseram NÃO 
 c) a percentagem de pessoas do sexo feminino que responderam SIM 
 d) a percentagem de pessoas do sexo masculino que responderam NÃO 
 
2 Exemplo de programa aplicado a matemática 
 
4. Fazer um programa que calcule o volume e a área de uma esfera usando as fórmulas 
abaixo: 
 V = 4π r3 / 3 
 A = 4π r2 
 
2 Um desafio de Lógica !!! 
 
5. São fornecidos o início e o fim de uma atividade em termos de DIA, MÊS e ANO. Deseja-
se imprimir o número de meses e dias decorridos desde o início até o final da atividade. 
" Exercícios Complementares 
 
Forbellone (2a Edição) - pag. 62 a 65 Exercícios Propostos Î 1, 9, 13, 16 
Texto Complementar e Exercícios 35
UFBa - Introdução à Lógica de Programação MAT 146 
5.4 Tipos de Dados Estruturados 
 
 
	 Leitura: “Lógica de Programação” - Forbellone Cap. 04 
 
Os tipos estruturados são compostos por múltiplos elementos relacionados entre si. Cada 
grupo de elementos está relacionado a um identificador. Os elementos do grupo podem estar 
também relacionados a identificadores individuais. 
Representam vários locais de memória que guardam vários valores, que podem ser acessados 
em conjunto ou individualmente. Podem ser: 
� String 
� Vetores 
� Registros 
� Arquivos 
� Conjuntos 
 
 
� String 
São cadeias (ou sequência) de caracteres (letras, dígitos e caracteres especiais) entre 
apóstrofos (‘ ’). 
* Nas cadeias podem ser usadas letras maiúsculas e minúsculas. 
* O número máximo de caracteres que pode ser incluído numa cadeia varia de acordo com 
a versão do Pascal, sendo que a maioria permite um comprimento máximo de 255 
caracteres. 
* Especificação do tipo String: 
 string [n ] , onde n é a quantidade de caracteres da cadeia. 
* Cada elemento da cadeia pode ser manipulado separadamente. 
 
Ex: Var cadeia: string[15]; 
 Begin 
 read(cadeia); { manipulação de toda a cadeia } 
 write(‘esta foi a informação digitada:’, cadeia); 
 write(‘primeiro elemento (ou letra) da cadeia :’, cadeia[1] ); 
 
 
h Exercício Proposto: 
 
Pesquise as Funções do Pascal para Manipulação de Strings. Explique seu objetivo, tipos de 
parâmetros e reultados e dê um exemplo. 
 
 Ex. de funções: Length( ), Copy (string, índice, contador) 
 
 
 
5.4.1 Vetores (ARRAY) 
 
Definem agregados de dados homogêneos (todos os elementos são do mesmo tipo). Cada 
elemento ocupa uma posição definida no agregado e pode ser referenciado através dela. 
 
 
Texto Complementar e Exercícios 36
UFBa - Introdução à Lógica de Programação MAT 146 
• Declaração de Vetores 
 
ARRAY [tipo_índice] OF tipo_elemento ; 
 
tipo_índice é um tipo simples ordenado (inteiro, caracter, booleano, enumerado) 
É formado por: [li..ls ] , onde li: limite inferior e ls: limite superior 
 
Este tipo pode ser utilizado tanto na declaração de variáveis como também na definição de 
novos tipos (sessão TYPE). 
 
Ex1: Var lista: array [1..100] of real; 
 { o identificador do vetor é lista e ele poderá conter 100 elementos do tipo real } 
 
Ex2: Type índice = 1..100; { tipo definido pelo usuário - tipo subrange } 
 Var lista: array [índice] of real; 
 
Ex3: Type max = 300; 
 vetor = array[1..max] of string[20]; 
 
 Var endereço: vetor; { a variável endereço está associada ao tipo vetor } 
 
Ex4: Var dados: array[‘A’..’Z’] of integer; 
 
 
• Definição de Vetorescomo Constantes (Const) 
 
Sintaxe geral: identificador_constante : tipo_array = (lista de valores) 
 
Ex1: Const 
 vetconst : array [1..3] of integer = (0, 1, 2); 
 
Ex2: Type 
 vetsemana: array [1..7] of string [3]; 
 Const 
 dias_semana: vetsemana = (‘DOM’, ‘SEG’, ‘TER’, ‘QUA’, ‘QUI’, 
 ‘SEX’, ‘SAB’); 
 
 
ª Obs: Os valores das constantes array de tipo Char podem ser especificadas ou como 
valores caracteres simples ou como um string . 
 
Ex: 
 Const dígito: array [0..9] of char = (‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’); 
 ou 
 Const dígito: array [0..9] of char = ‘0123456789’; 
 
 
 
 
Texto Complementar e Exercícios 37
UFBa - Introdução à Lógica de Programação MAT 146 
• Manipulação de vetores nos programas Pascal 
 
identificador_array[posição_elemento] 
 
posição_elemento (ou índice) pode ser expresso com uma constante, variável ou expressão, 
devendo ser do tipo correto (correspondente à definição do array) e estar dentro do intervalo 
pré-definido. 
Ex: lista[5] 
 lista[i], onde i é uma variável inteira com valores variando de 1 a 100. 
 lista[i+j], onde i e j são variáveis inteiras cuja soma não ultrapassa 100. 
 
Os elementos do ARRAY podem ser usados em expressões, instruções de atribuição, 
instruções read e write, etc. 
 
• Programa Exemplo: 
 
 
 Program ExVetor; 
 
 Type 
 VetorNotas: array [1..40] of real; 
 Var 
 Nota: vetorNotas; 
 i: integer; 
 
 Begin 
 i := 1; media := 0; 
 Repeat 
 write (‘Digite a Nota :’); 
 read(Nota[i]); 
 media:= media + Nota[i]; 
 i:= succ(i); { função que incrementa a variável ⇒ i Å i + 1 } 
 until i > 40; 
 writeln (‘Notas dos Alunos ’); 
 For i:= 1 to 40 do 
 writeln (Nota[i]); 
 writeln (‘Media da Turma:’, media/40:5:2); 
 End. 
 
Texto Complementar e Exercícios 38
UFBa - Introdução à Lógica de Programação MAT 146 
, Exercícios de Fixação 
 
1. Elabore um programa que leia dois vetores inteiros de 20 elementos cada, depois some seus 
elementos, gerando um terceiro vetor. Ao final, mostre o novo vetor gerado. 
 
2. Considere um vetor VET com 30 elementos. Verificar se existe um elemento igual a K no 
vetor. Se existir mostrar a posição em que se encontra, senão imprimir "não encontrei K no 
vetor". 
 
3. Elabore um programa que leia um conjunto A com 50 números reais e construa um 
conjunto B, onde os elementos de ordem (posição) par são os elementos correspondentes 
de A divididos por 2 e os de ordem (posição) ímpar correspondem aos elementos de A 
multiplicados por 3. Ao final, mostre os dois conjuntos de números. 
 
4. Fazer um programa Pascal que, ao ser fornecida uma data no formato DD/MM/AA, 
mostre-a por extenso. 
 Ex: Entrada Data: 12/ 06 / 95 
 Saída 12 de junho de 1995 
 
5. Defina um vetor de 100 elementos inteiros e elabore um programa que preencha 
VETOR[i] com 1 , se i é um quadrado perfeito e, com 0 , nos demais casos. 
 
6. Elabore um programa que utilize dois vetores V1 e V2, formados de números reais com 20 
posições cada um, e efetue neles as operações indicadas no vetor OP, cujos elementos são 
caracteres que indicam as quatro operações aritméticas básicas (+, -, *, /) . O resultado 
obtido das operações devem ser colocados num vetor resultante VR e mostrado ao final do 
programa. 
 
Texto Complementar e Exercícios 39
UFBa - Introdução à Lógica de Programação MAT 146 
5.4.2 Vetores Multidimensionais (Matrizes) 
 
• Sintaxe Geral: 
 
nome_array [dim1, dim2, dim3...] of tipo_elemento 
 
 
Onde as dimensões são definidas como: dim1 = li1..ls1 , dim2 = li2..ls2, dim3 = li3..ls3 , etc. 
 
Ex1: TRIDIMENSIONAL: array [1..10, 1..20, 1..40] of real; Ö define matriz 
tridimensional onde a 1ª dimensão tem 10 elementos, a 2ª tem 20 elementos e a 3ª tem 
40 elementos. 
 
 
Ex2: BIDIMENSIONAL: array [1..5,1..9] of char; Ö define matriz bidimensional com 5 
elementos do tipo char na 1ª dimensão e 9 na 2ª dimensão. 
 
 
• Manipulação de matrizes nos programas Pascal 
 
identificador_array[posição_dim1, posição_dim2, ...] 
 
 
posição_dim1, posição_dim2... podem ser expressos com constantes, variáveis ou expressões, 
devendo ser do tipo correto (correspondente à definição do array) e estar dentro do intervalo 
pré-definido. 
 
 
Ex: tridim[5,4,8] 
 bidim[i,9], onde i é uma variável inteira com valores variando de 1 a 5. 
 
Os elementos da MATRIZ podem ser usados em expressões, instruções de atribuição, 
instruções read e write, etc. 
 
 
• Programa Exemplo : 
 
Program Matrizes; 
 
Var Matriz: array [1..20, 1..10] of integer; 
 lin, col : integer; 
Begin 
 For lin := 1 to 20 do 
 For col := 1 to 10 do 
 read (matriz[lin,col]); 
... 
 
 
Texto Complementar e Exercícios 40
UFBa - Introdução à Lógica de Programação MAT 146 
,Exercícios de Fixação 
 
 
1. Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de 
dimensões 3x5 cada, calcule e imprima a matriz soma MSOMA. 
2. Calcule e imprima a soma dos elementos situados abaixo da diagonal principal da matriz A 
(dimensões 10x10), incluindo os elementos da própria diagonal. 
3. Escreva um programa que leia duas matrizes reais A e B de dimensões 3x5 e 5x3, 
respectivamente, calcule e imprima o produto delas. 
4. Dada uma matriz A de dimensões 5x4 formada de elementos numéricos reais, calcule e 
mostre sua matriz transposta T. 
5. Dada uma matriz B formada por números inteiros com 10 linhas por 15 colunas, 
determinar o elemento de maior valor algébrico. Mostre tal elemento e sua posição na 
matriz (linha e coluna). 
 
Texto Complementar e Exercícios 41
UFBa - Introdução à Lógica de Programação MAT 146 
5.5 Algoritmos de Classificação e Busca 
 
 
⌦Algoritmos de Classificação 
 
Existem diversos métodos para classificar (ou ordenar) uma estrutura de dados, dentre eles 
temos: 
9 Método da Bolha (Bubble Sort) 
9 Método da Seleção Direta 
9 Método Quick Sort 
 
 
Exemplo: Método da Bolha na ordenação de um vetor de “nomes de objetos” 
 
Program BubbleS; 
Uses crt; 
Const N=5; 
Type 
 letras = string[10]; 
 vet_letras= array[1..N] of letras; 
Var 
 objetos :vet_letras; 
 aux :letras; 
 I,J,cont:integer; 
Begin 
 clrscr; 
 Gotoxy(22,2); 
 Write('>>> Exercicio - Ordenacao de Vetores com metodo da Bolha<<<'); 
 Gotoxy(7,4); 
 write('Digite ',n,' nomes de objetos para compor o conjunto'); 
 For i:=1 to N do 
 begin 
 gotoxy(7,6+i); 
 write ('Digite o elemento Objetos(',i,') : '); 
 readln( objetos[i] ); 
 gotoxy(33,6); 
 write(' '); 
 end; 
{***************** Ordenação do Vetor *******************} 
 For i:= 2 to N do 
 for j:= N downto i do 
 if objetos[j] < objetos[j-1] then 
 begin 
 aux := objetos[j]; 
 objetos[j] := objetos[j-1]; 
 objetos[j-1]:= aux 
 end; 
{********************* Saida Ordenada ******************} 
 gotoxy(7,15); 
 writeln ('Vetor Ordenado :'); 
 for i:=1 to N do 
 begin 
 gotoxy(20,15+i); 
 writeln( objetos[i] ); 
Texto Complementar e Exercícios 42
UFBa - Introdução à Lógica de Programação MAT 146 
 end; 
End. 
 
⌦Algoritmo de Busca Sequencial 
 
Exemplo: Considere um vetor A com 50 elementos. Verificar se existe um elemento igual a 
K no vetor. Se existir mostrar a posição em que se encontra, senão imprimir "não encontrei K 
no vetor". 
 
Program Procura_K; 
Uses crt; 
CONST 
 Max=10; {Indica o numero maximo de elementos do ARRAY NUM} 
VAR 
 I,K : integer; 
 achou : boolean; 
 NUM : Array [1..Max] of integer; 
Begin 
 clrscr; 
 Gotoxy(10,7);Writeln('Digite ',Max,' numeros inteiros'); 
 For i:=1 to Max do 
 begin 
 Gotoxy(10,9); 
 Write('Digite o elemento (',i,') : '); 
 read(NUM[i]); 
 gotoxy(34,9); { posiciona no local onde esta o numero digitado} 
 write(' '); { limpa o campo de digitacao do numero } 
 end; 
 Gotoxy(10,12); 
 Write('Digite o numero que deseja procurar no conjunto: '); 
 read(k); 
 achou:=false; 
 i:=1; 
 While (not achou) and (i<=Max) do 
 if Num[i]=k then 
 achou:=true 
 else 
 i:=i+1; 
 gotoxy(12, 16); 
 If achou then 
 write('Achei o numero ',k,' na posicao (',i,') do vetor !!!') 
 else 
 write('Nao achei o numero ',k,' no vetor !!!'); 
End. 
 
� Pesquise outro algoritmo de busca e faça um exemplo em Pascal. 
(Ex. Algoritmo de Pesquisa Binária) 
 
Texto Complementar e Exercícios 43
UFBa - Introdução à Lógica de Programação MAT 146 
Texto Complementar e Exercícios 44
5.6 Procedimentos e Funções 
 
	 Leitura: “Programação em Pascal” – B. S. Gottfried Cap. 07 
 
 
Dentre as técnicas de programação estruturada, encontra-se a modularização. Esta técnica 
consiste em decompor um programa global em uma série de subprogramas individuais. A 
vantagem de se usar a modularização é que ela permite o reuso de partes do programa num 
mesmo programa ou mesmo em novos programas (ex: imagine um trecho de programa que 
verifica se uma data é valida ou não. Este módulo pode ser usado várias vezes num mesmo 
programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que 
serão escritos). Outras conseqüências positivas do uso de modularização é o aumento de 
clareza e concisão do programa, pois o comprimento do programa diminui com o uso de 
módulos. 
 
Em Pascal existem dois tipo de módulos de programas: Procedimentos e Funções. 
 
Indicamos a leitura dos livros textos para um amplo entendimento das características 
dos procedimentos e funções e diferenças entre eles. Abaixo encontram-se exemplos de 
programas que usam modularização. 
 
� Exemplo1: Programa para calcular o dígito verificador de contas correntes 
 
Utilização de funções definidas pelo programador: 
 
1. Funções Principais: 
• Função Digito(cc): recebe como entrada o número da conta corrente e retorna seu dígito 
verificador. 
• Função Inverso(n, tam): recebe o número n de tamanho tam e retorna o inverso do 
número. 
 
2. Funções Auxiliares: 
• Função Exponenc(n,p) : calcula a potência de um número ( = n p) 
• Função Tamanho(n) : determina a quantidade de algarismos de um número 
 
 
Program Conta_Corrente; 
 
Var { -----> Declaração de Variáveis Globais } 
 cc: longint; 
 
{ *** Função que simula a operação de potenciação 
 Parâmetros Formais 
 valor: numero que desejamos elevar a potência 
 pot : potência elevada *** } 
 
FUNCTION Exponenc (valor, pot : integer) : longint; 
 Var 
 fator: longint; 
UFBa - Introdução à Lógica de Programação MAT 146 
 i : integer; 
 Begin 
 if pot = 0 then 
 Exponenc:=1 {usa-se o próprio nome da Função para assinalar o valor a ser retornado} 
 else 
 begin 
 fator:= valor; 
 for i := 2 to pot do 
 fator:= fator * valor; 
 Exponenc := fator 
 end; 
 End; 
 
 
{ *** Função que retorna a quantidade de algarismos de um numero 
 Parâmetros Formais 
 num : numero desejado *** } 
FUNCTION Tamanho(num : longint): integer; 
 Var 
 x: string; 
 Begin 
 str(num,x); {--> Procedure do Pascal que transforma um número numa string} 
 Tamanho := length(x); 
 End; 
 
 
{ *** Função que retorna o inverso do numero dado Ex: 34 Inverso = 43 
 Parâmetros Formais 
 n: numero (de -2.147.483.648 a 2.147.483.647 ) 
 tam: quantidade de algarismos do numero *** } 
 
FUNCTION Inverso (n : longint ; tam : integer) : longint; 
 Var 
 d : integer; 
 inv: longint; 
 
 Begin 
 inv := 0; 
 Repeat 
 d:= n mod 10; 
 inv:= inv + d * Exponenc(10, tam-1); 
 dec(tam); { --> Procedure do Pascal que decrementa um número} 
 n:= n div 10; 
 Until tam = 0; 
 Inverso := inv; 
 End; 
 
Texto Complementar e Exercícios 45
UFBa - Introdução à Lógica de Programação MAT 146 
{ *** Função que calcula o digito verificador da c/c 
 Parâmetros Formais 
 conta: numero da c/c *** } 
 
FUNCTION Digito (conta : longint) : integer; 
 Var 
 soma : longint; 
 tam_soma, ordem, result, d : integer; 
 Begin 
 soma := conta + Inverso(conta,Tamanho(conta)); 
 tam_soma := Tamanho(soma); 
 result := 0; 
 For ordem := tam_soma downto 1 do 
 begin 
 d := soma mod 10; 
 result := result + d * ordem; 
 soma := soma div 10; 
 end; 
 Digito := result mod 10; 
 End; 
 
 
{ ------------ PROGRAMA PRINCIPAL ------------ } 
Begin 
 write('Entre com a Conta Corrente (5 digitos) : '); 
 readln (cc); 
 writeln; 
 writeln('O digito verificador da C/C : ',Digito(cc)); 
End. 
 
 
Texto Complementar e Exercícios 46
UFBa - Introdução à Lógica de Programação MAT 146 
,Exercícios de Fixação 
 
1. Quantos números o programa abaixo imprimirá na tela? 
 
Program Pares; 
 Var contador : Integer; 
 
 Function NumeroPar(numero : Integer) : Boolean;
 Begin 
 NumeroPar := (numero mod 2) = 0; 
 End; 
 
Begin 
 For contador := 1 To 100 Do 
 If (NumeroPar(contador)) Then 
 WriteLn(contador); 
End. 
 
2. O que o programa abaixo imprimirá na tela? 
 
Program Linhas; 
 Var contador : Integer; 
 
 Procedure ImprimeLinha(linha : Integer);
 Var contador : Integer; 
 Begin 
 For contador := 1 To linha Do 
 Write(contador); 
 WriteLn; 
 End; 
 
Begin 
 For contador := 1 To 10 Do 
 ImprimeLinha(contador); 
End. 
 
3. O que o programa abaixo faz? Quantas vezes o procedimento AcertaPosicao será 
executado? Quantas vezes o procedimento Troca será executado? 
 
Program Numeros; 
 Const LIMITE = 5; 
 Var contador : Integer; 
 numeros : Array[1..LIMITE] Of Integer; 
 
 Procedure Troca(x, y : Integer); 
 Var temporario : Integer; 
 Begin 
 temporario := numeros[x]; 
 numeros[x] := numeros[y]; 
 numeros[y] := temporario; 
 End; 
 
 Procedure AcertaPosicao(posicao : Integer); 
 Var indice : Integer; 
 Begin 
 For indice := posicao + 1 To LIMITE Do 
 If (numeros[indice] < numeros[posicao]) Then 
Troca(posicao indice);
Texto Complementar e Exercícios 47
UFBa - Introdução à Lógica de Programação MAT 146 
 End; 
 
 Procedure LeNumeros; 
 Var indice : Integer; 
 Begin 
 WriteLn('Digite ', LIMITE, ' numeros: '); 
 For indice := 1 To LIMITE Do 
 ReadLn(numeros[indice]); 
 End; 
 
 Procedure MostraNumeros; 
 Var indice : Integer; 
 Begin 
 Write('O resultado e: '); 
 For indice := 1 To LIMITE Do 
 Write(numeros[indice]:6); 
 WriteLn; 
 End; 
 
Begin 
 LeNumeros; 
 For contador := 1 To 4 Do 
 AcertaPosicao(contador); 
 MostraNumeros; 
End. 
 
4. Descreva uma função POTENCIA que realize a operação de potenciação e que contenha os 
seguintes parâmetros formais: 
 VALOR: número inteiro que se deseja elevar à potência 
 POT : potência elevada 
 
Ex: Na chamada da função POTENCIA (5, 3), o resultado seria 125. 
Na chamada da função POTENCIA (2, 0), o resultado seria 1. 
 
 
5. Escrever uma função DIGITO (N , K) que determine o valor do k-ésimo dígito da direita

Continue navegando