67
Universidade Federal da Bahia Departamento de Ciência da Computação I NTRODUÇÃO À L ÓGICA DE P ROGRAMAÇÃO MAT 146 Revisada em Janeiro de 2004 Claudia Gama [email protected] Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.

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

Embed Size (px)

Citation preview

Page 1: Introdução à Lógica de Programação - UFBA

Universidade Federal da Bahia

Departamento de Ciecircncia da Computaccedilatildeo

IN T R O D U Ccedil Atilde O Agrave LOacute G I C A D E

PR O G R A M A Ccedil Atilde O

MAT 146

Revisada em Janeiro de 2004

Claudia Gama claudiagufbabr

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 compreensatildeo dos conceitos abordados ao longo do curso bem como promover a praacutetica de algoritmos com exerciacutecios de fixaccedilatildeo e exerciacutecios propostos Nela vocecirc vai encontrar bull Resumo dos principais toacutepicos bull Referecircncias bibliograacuteficas bull Exerciacutecios de fixaccedilatildeo bull Exerciacutecios propostos (alguns incluem soluccedilatildeo) Mas atenccedilatildeo esta apostila deve ser usada somente como material complementar e nunca como uacutenica fonte de estudo

Profordf Claudia Gama

Legenda

Na apostila satildeo usados alguns siacutembolos para chamar a atenccedilatildeo de partes relevantes e ajudar na organizaccedilatildeo do conteuacutedo da apostila Veja os siacutembolos e seus significados abaixo

Sugestatildeo de leitura de capiacutetulo ou seccedilotildees de um livro A leitura eacute sugerida para obter-se um entendimento completo do toacutepico apresentado na apostila

Sugestotildees de pesquisas na Internet de assuntos complementares ou curiosidades

Exerciacutecios de Fixaccedilatildeo satildeo exerciacutecios simples para verificaccedilatildeo do entendimento de conceitos

Sugestatildeo de Exerciacutecios Complementares em livros da bibliografia

Exerciacutecios Propostos exerciacutecios para solidificar o entendimento Altamente

recomendaacuteveis

Texto Complementar e Exerciacutecios 2

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

IacuteNDICE

Parte I - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 1 Algoritmos ---------------------------------------------------------------------- 6

11 Exemplo Construindo um Algoritmo ------------------------------- 6

Exerciacutecios Propostos----------------------------------------------------- 8 2 Resoluccedilatildeo de Problemas atraveacutes de Computadores ----------------------- 9

21 Programaccedilatildeo ------------------------------------------------------------ 9 3 Algoritmos Computacionais -------------------------------------------------11

31 Diretrizes para Elaboraccedilatildeo de Algoritmos -------------------------11 32 Descriccedilatildeo de Algoritmos ---------------------------------------------12 33 Estruturas de Dados --------------------------------------------------13 34 Operaccedilotildees Baacutesicas ----------------------------------------------------15

Exerciacutecios de Fixaccedilatildeo----------------------------------------------------17 35 Estruturas de Controle ------------------------------------------------18

Exerciacutecios de Fixaccedilatildeo----------------------------------------------------21 36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos --------22 37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos ------------24

Exerciacutecios de Fixaccedilatildeo----------------------------------------------------25

Exerciacutecios Propostos----------------------------------------------------25

Apecircndices ndash Parte I 1 SOLUCcedilOtildeES DE EXERCIacuteCIOS 2 NOTACcedilAtildeO PARA FLUXOGRAMAS

Texto Complementar e Exerciacutecios 3

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Parte II - Loacutegica de Programaccedilatildeo com Pascal 4 Linguagens de Programaccedilatildeo de Alto Niacutevel--------------------------------27

41 Tipos de Linguagens de Programaccedilatildeo ------------------------------28 42 Compilaccedilatildeo e Execuccedilatildeo de Programas -----------------------------28

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------29 5 A Linguagem de Programaccedilatildeo Pascal --------------------------------------30

51 Estrutura Geral ---------------------------------------------------------30 52 Estruturas de Dados em Pascal --------------------------------------30

521 Tipos simples de dados----------------------------------------30 522 Tipos simples definidos pelo usuario------------------------31

53 Estruturas de Controle ------------------------------------------------32

Exerciacutecios Propostos----------------------------------------------------35 54 Estruturas de Dados Tipos de Dados Estruturados --------------36

541 Vetores ----------------------------------------------------------36

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------39 542 Matrizes ---------------------------------------------------------40

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------41 55 Algoritmos de Classificaccedilatildeo e Busca -------------------------------42 56 Procedimentos e Funccedilotildees---------------------------------------------44

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------46 57 Registros e Tabelas----------------------------------------------------49 58 Arquivos Diretos e Sequumlenciais -------------------------------------51

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------53 59 Variaacuteveis Dinacircmicas Ponteiros -------------------------------------55

Apecircndices ndash Parte II 3 SOLUCcedilOtildeES DE EXERCIacuteCIOS - PROGRAMAS PASCAL

Texto Complementar e Exerciacutecios 4

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Referecircncias Bibliograacuteficas Forbellone Andreacute L V Eberspaumlcher Henri F Loacutegica de Programaccedilatildeo - A Construccedilatildeo de

Algoritmos e Estruturas de Dados Makron Books 1993 Gottfried Byron B Programaccedilatildeo em Pascal Schaum McGraw Hill 1988 Tremblay Jean-Paul Bunt Richard B Ciecircncia dos Computadores - Uma Abordagem

Algoritmica McGraw Hill 1983 Guimaratildees Lages Algoritmos e Estruturas de Dados Livros Teacutecnicos e Cientiacuteficos Editora

1985 Wirth Niklaus Algoritmos e Estruturas de Dados Editora PHB 1986 Ziviani Nivio Projeto de Algoritmos Livraria Pioneira Editora Saliba Walter L C Teacutecnicas de Programaccedilatildeo - Uma Abordagem Estruturada Makron Books Carvalho Seacutergio E R Introduccedilatildeo agrave Programaccedilatildeo com Pascal Editora Campus Farrer Harry et al Pascal Estruturado Editora Guanabara Dois 1985 Shmitz Eber Teles Antocircnio Pascal e Teacutecnicas de Programaccedilatildeo Livros Teacutecnicos e Cientiacuteficos Editora 1986

Texto Complementar e Exerciacutecios 5

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

PARTE I INTRODUCcedilAtildeO Agrave LOacuteGICA DE PROGRAMACcedilAtildeO 1 ALGORITMOS

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 01

Definimos Algoritmo como a sequumlecircncia de passos que visam atingir um objetivo bem definido

Os algoritmos satildeo utilizados no dia-a-dia para a soluccedilatildeo dos mais diversos problemas

Alguns exemplos geneacutericos de algoritmos usados no nosso cotidiano satildeo uma

coreografia um manual de instruccedilotildees uma receita de bolo a soluccedilatildeo de uma equaccedilatildeo do 2ordm grau uma pesquisa na lista telefocircnica 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 definiccedilatildeo para algoritmos poderia ser

Algoritmo eacute a descriccedilatildeo de um conjunto de accedilotildees que obedecidas resultam numa sucessatildeo finita de passos atingindo um objetivo esperado

Dessa forma vemos que o que importa no algoritmo eacute o efeito das accedilotildees para a obtenccedilatildeo do resultado esperado

Satildeo propriedades de algoritmos

bull accedilotildees simples e bem definidas (natildeo ambiacuteguas)

bull sequumlecircncia ordenada de accedilotildees

bull sequumlecircncia finita de passos

11 Exemplo Construindo um Algoritmo Considere o seguinte problema

Temos trecircs hastes Uma das hastes serve de suporte para trecircs discos de tamanhos diferentes Os discos menores satildeo sempre colocados sobre os discos maiores A figura abaixo mostra uma possiacutevel situaccedilatildeo inicial das hastes e discos

Texto Complementar e Exerciacutecios 6

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desejamos mover todos discos para outra haste poreacutem soacute podemos movimentar um disco de cada vez e um disco maior nunca pode ser colocado sobre um disco de menor tamanho

Soluccedilatildeo 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 estatildeo na haste 1 Os passos satildeo

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 tambeacutem representar a soluccedilatildeo em forma graacutefica desenhando as hastes e a posiccedilatildeo dos discos a cada momento (ou passo)

Como podemos ver com 3 discos precisamos de no miacutenimo 7 passos para solucionar o problema Quantos passos seriam necessaacuterios para se mover 4 discos E para n discos

Curiosidade Este problema foi criado m 1883 pelo matemaacutetico francecircs Edouard Lucas (1842-1891) que tambeacutem criou uma lenda curiosa para enunciar o problema Deixo para vocecircs procurarem na Internet a lenda das Torres de Hanoacutei

Texto Complementar e Exerciacutecios 7

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

P1 Temos trecircs 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 estaacute totalmente cheio Deseja-se colocar 4 litros em dois recipientes Considere que os recipientes natildeo sejam graduados

P2 Numa determinada noite acontece uma queda de energia Vocecirc sabia que poderia encontrar uma vela na gaveta da cozinha um lampiatildeo embaixo da cama fusiacuteveis de reserva no armaacuterio da sala e foacutesforos na estante da cozinha Descreva a sequumlecircncia de passos que poderia ser utilizada para diagnosticar e resolver o problema o que pode ser previsto em duas possibilidades

a) o fusiacutevel queimou

b) a queda eacute na estaccedilatildeo da companhia eleacutetrica

Exerciacutecios Complementares

Faccedila pelo menos 02 Exerciacutecios Propostos do Livro do Forbellone ndash Cap 1

Visite o site da disciplina e tente resolver os problemas de logica sugeridos

httpwwwimufbabr mat146ProblemaLogica

Texto Complementar e Exerciacutecios 8

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

2 RESOLUCcedilAtildeO DE PROBLEMAS ATRAVEacuteS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na soluccedilatildeo de certos tipos de problemas Os problemas que suportam tratamento por computador em geral envolvem grandes quantidades de dados ou satildeo problemas de natureza complexa exigindo a execuccedilatildeo de um grande nuacutemero de passos para alcanccedilar a soluccedilatildeo Basicamente satildeo problemas na aacuterea de processamento de dados e na aacuterea cientiacutefica

O Computador eacute uma ferramenta que permite a realizaccedilatildeo do processamento automaacutetico (ou eletrocircnico) de dados

Define-se por Processamento de Dados qualquer atividade que utilizando informaccedilotildees (ou dados) efetua transformaccedilotildees para obter novas informaccedilotildees (ou dados) como resultado

Dados deEntrada

Dados deSaiacuteda

Processamento(transformaccedilatildeo)

Poreacutem a tarefa desempenhada pelos computadores eacute apenas parte do processo de soluccedilatildeo de problemas

As etapas na soluccedilatildeo de problemas satildeo

i) Entendimento do problema

ii) Criaccedilatildeo de uma sequumlecircncia de operaccedilotildees (ou accedilotildees) que quando executadas produzem a soluccedilatildeo para o problema

iii) Execuccedilatildeo desta sequumlecircncia de operaccedilotildees

iv) Verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo

As etapas de entendimento do problema criaccedilatildeo de sequumlecircncia de accedilotildees e verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo satildeo tarefas desempenhadas por pessoas Jaacute a execuccedilatildeo das operaccedilotildees pode ser desempenhada por computadores

Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaccedilotildees com rapidez e confiabilidade

21 Programaccedilatildeo

Programaccedilatildeo eacute a sequumlecircncia de planejamento projeto escrita e testes de instruccedilotildees desempenhadas pelo computador Eacute uma arte e uma ciecircncia Arte porque existem muitas maneiras de se realizar o trabalho de programaccedilatildeo Existe espaccedilo para uma consideraacutevel dose de criatividade Eacute tambeacutem uma ciecircncia porque existem algumas regras que devem ser seguidas porque eacute necessaacuterio o uso de loacutegica e porque existem alguns meacutetodos rigorosos de programaccedilatildeo que asseguram a eficiecircncia economia e a utilidade dos programas gerados

O trabalho de programaccedilatildeo pode se tornar mais faacutecil se o dividirmos sistematicamente em partes menos complexas (esta teacutecnica denomina-se ldquodividir para conquistarrdquo)

Texto Complementar e Exerciacutecios 9

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 2: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 compreensatildeo dos conceitos abordados ao longo do curso bem como promover a praacutetica de algoritmos com exerciacutecios de fixaccedilatildeo e exerciacutecios propostos Nela vocecirc vai encontrar bull Resumo dos principais toacutepicos bull Referecircncias bibliograacuteficas bull Exerciacutecios de fixaccedilatildeo bull Exerciacutecios propostos (alguns incluem soluccedilatildeo) Mas atenccedilatildeo esta apostila deve ser usada somente como material complementar e nunca como uacutenica fonte de estudo

Profordf Claudia Gama

Legenda

Na apostila satildeo usados alguns siacutembolos para chamar a atenccedilatildeo de partes relevantes e ajudar na organizaccedilatildeo do conteuacutedo da apostila Veja os siacutembolos e seus significados abaixo

Sugestatildeo de leitura de capiacutetulo ou seccedilotildees de um livro A leitura eacute sugerida para obter-se um entendimento completo do toacutepico apresentado na apostila

Sugestotildees de pesquisas na Internet de assuntos complementares ou curiosidades

Exerciacutecios de Fixaccedilatildeo satildeo exerciacutecios simples para verificaccedilatildeo do entendimento de conceitos

Sugestatildeo de Exerciacutecios Complementares em livros da bibliografia

Exerciacutecios Propostos exerciacutecios para solidificar o entendimento Altamente

recomendaacuteveis

Texto Complementar e Exerciacutecios 2

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

IacuteNDICE

Parte I - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 1 Algoritmos ---------------------------------------------------------------------- 6

11 Exemplo Construindo um Algoritmo ------------------------------- 6

Exerciacutecios Propostos----------------------------------------------------- 8 2 Resoluccedilatildeo de Problemas atraveacutes de Computadores ----------------------- 9

21 Programaccedilatildeo ------------------------------------------------------------ 9 3 Algoritmos Computacionais -------------------------------------------------11

31 Diretrizes para Elaboraccedilatildeo de Algoritmos -------------------------11 32 Descriccedilatildeo de Algoritmos ---------------------------------------------12 33 Estruturas de Dados --------------------------------------------------13 34 Operaccedilotildees Baacutesicas ----------------------------------------------------15

Exerciacutecios de Fixaccedilatildeo----------------------------------------------------17 35 Estruturas de Controle ------------------------------------------------18

Exerciacutecios de Fixaccedilatildeo----------------------------------------------------21 36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos --------22 37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos ------------24

Exerciacutecios de Fixaccedilatildeo----------------------------------------------------25

Exerciacutecios Propostos----------------------------------------------------25

Apecircndices ndash Parte I 1 SOLUCcedilOtildeES DE EXERCIacuteCIOS 2 NOTACcedilAtildeO PARA FLUXOGRAMAS

Texto Complementar e Exerciacutecios 3

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Parte II - Loacutegica de Programaccedilatildeo com Pascal 4 Linguagens de Programaccedilatildeo de Alto Niacutevel--------------------------------27

41 Tipos de Linguagens de Programaccedilatildeo ------------------------------28 42 Compilaccedilatildeo e Execuccedilatildeo de Programas -----------------------------28

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------29 5 A Linguagem de Programaccedilatildeo Pascal --------------------------------------30

51 Estrutura Geral ---------------------------------------------------------30 52 Estruturas de Dados em Pascal --------------------------------------30

521 Tipos simples de dados----------------------------------------30 522 Tipos simples definidos pelo usuario------------------------31

53 Estruturas de Controle ------------------------------------------------32

Exerciacutecios Propostos----------------------------------------------------35 54 Estruturas de Dados Tipos de Dados Estruturados --------------36

541 Vetores ----------------------------------------------------------36

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------39 542 Matrizes ---------------------------------------------------------40

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------41 55 Algoritmos de Classificaccedilatildeo e Busca -------------------------------42 56 Procedimentos e Funccedilotildees---------------------------------------------44

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------46 57 Registros e Tabelas----------------------------------------------------49 58 Arquivos Diretos e Sequumlenciais -------------------------------------51

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------53 59 Variaacuteveis Dinacircmicas Ponteiros -------------------------------------55

Apecircndices ndash Parte II 3 SOLUCcedilOtildeES DE EXERCIacuteCIOS - PROGRAMAS PASCAL

Texto Complementar e Exerciacutecios 4

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Referecircncias Bibliograacuteficas Forbellone Andreacute L V Eberspaumlcher Henri F Loacutegica de Programaccedilatildeo - A Construccedilatildeo de

Algoritmos e Estruturas de Dados Makron Books 1993 Gottfried Byron B Programaccedilatildeo em Pascal Schaum McGraw Hill 1988 Tremblay Jean-Paul Bunt Richard B Ciecircncia dos Computadores - Uma Abordagem

Algoritmica McGraw Hill 1983 Guimaratildees Lages Algoritmos e Estruturas de Dados Livros Teacutecnicos e Cientiacuteficos Editora

1985 Wirth Niklaus Algoritmos e Estruturas de Dados Editora PHB 1986 Ziviani Nivio Projeto de Algoritmos Livraria Pioneira Editora Saliba Walter L C Teacutecnicas de Programaccedilatildeo - Uma Abordagem Estruturada Makron Books Carvalho Seacutergio E R Introduccedilatildeo agrave Programaccedilatildeo com Pascal Editora Campus Farrer Harry et al Pascal Estruturado Editora Guanabara Dois 1985 Shmitz Eber Teles Antocircnio Pascal e Teacutecnicas de Programaccedilatildeo Livros Teacutecnicos e Cientiacuteficos Editora 1986

Texto Complementar e Exerciacutecios 5

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

PARTE I INTRODUCcedilAtildeO Agrave LOacuteGICA DE PROGRAMACcedilAtildeO 1 ALGORITMOS

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 01

Definimos Algoritmo como a sequumlecircncia de passos que visam atingir um objetivo bem definido

Os algoritmos satildeo utilizados no dia-a-dia para a soluccedilatildeo dos mais diversos problemas

Alguns exemplos geneacutericos de algoritmos usados no nosso cotidiano satildeo uma

coreografia um manual de instruccedilotildees uma receita de bolo a soluccedilatildeo de uma equaccedilatildeo do 2ordm grau uma pesquisa na lista telefocircnica 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 definiccedilatildeo para algoritmos poderia ser

Algoritmo eacute a descriccedilatildeo de um conjunto de accedilotildees que obedecidas resultam numa sucessatildeo finita de passos atingindo um objetivo esperado

Dessa forma vemos que o que importa no algoritmo eacute o efeito das accedilotildees para a obtenccedilatildeo do resultado esperado

Satildeo propriedades de algoritmos

bull accedilotildees simples e bem definidas (natildeo ambiacuteguas)

bull sequumlecircncia ordenada de accedilotildees

bull sequumlecircncia finita de passos

11 Exemplo Construindo um Algoritmo Considere o seguinte problema

Temos trecircs hastes Uma das hastes serve de suporte para trecircs discos de tamanhos diferentes Os discos menores satildeo sempre colocados sobre os discos maiores A figura abaixo mostra uma possiacutevel situaccedilatildeo inicial das hastes e discos

Texto Complementar e Exerciacutecios 6

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desejamos mover todos discos para outra haste poreacutem soacute podemos movimentar um disco de cada vez e um disco maior nunca pode ser colocado sobre um disco de menor tamanho

Soluccedilatildeo 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 estatildeo na haste 1 Os passos satildeo

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 tambeacutem representar a soluccedilatildeo em forma graacutefica desenhando as hastes e a posiccedilatildeo dos discos a cada momento (ou passo)

Como podemos ver com 3 discos precisamos de no miacutenimo 7 passos para solucionar o problema Quantos passos seriam necessaacuterios para se mover 4 discos E para n discos

Curiosidade Este problema foi criado m 1883 pelo matemaacutetico francecircs Edouard Lucas (1842-1891) que tambeacutem criou uma lenda curiosa para enunciar o problema Deixo para vocecircs procurarem na Internet a lenda das Torres de Hanoacutei

Texto Complementar e Exerciacutecios 7

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

P1 Temos trecircs 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 estaacute totalmente cheio Deseja-se colocar 4 litros em dois recipientes Considere que os recipientes natildeo sejam graduados

P2 Numa determinada noite acontece uma queda de energia Vocecirc sabia que poderia encontrar uma vela na gaveta da cozinha um lampiatildeo embaixo da cama fusiacuteveis de reserva no armaacuterio da sala e foacutesforos na estante da cozinha Descreva a sequumlecircncia de passos que poderia ser utilizada para diagnosticar e resolver o problema o que pode ser previsto em duas possibilidades

a) o fusiacutevel queimou

b) a queda eacute na estaccedilatildeo da companhia eleacutetrica

Exerciacutecios Complementares

Faccedila pelo menos 02 Exerciacutecios Propostos do Livro do Forbellone ndash Cap 1

Visite o site da disciplina e tente resolver os problemas de logica sugeridos

httpwwwimufbabr mat146ProblemaLogica

Texto Complementar e Exerciacutecios 8

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

2 RESOLUCcedilAtildeO DE PROBLEMAS ATRAVEacuteS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na soluccedilatildeo de certos tipos de problemas Os problemas que suportam tratamento por computador em geral envolvem grandes quantidades de dados ou satildeo problemas de natureza complexa exigindo a execuccedilatildeo de um grande nuacutemero de passos para alcanccedilar a soluccedilatildeo Basicamente satildeo problemas na aacuterea de processamento de dados e na aacuterea cientiacutefica

O Computador eacute uma ferramenta que permite a realizaccedilatildeo do processamento automaacutetico (ou eletrocircnico) de dados

Define-se por Processamento de Dados qualquer atividade que utilizando informaccedilotildees (ou dados) efetua transformaccedilotildees para obter novas informaccedilotildees (ou dados) como resultado

Dados deEntrada

Dados deSaiacuteda

Processamento(transformaccedilatildeo)

Poreacutem a tarefa desempenhada pelos computadores eacute apenas parte do processo de soluccedilatildeo de problemas

As etapas na soluccedilatildeo de problemas satildeo

i) Entendimento do problema

ii) Criaccedilatildeo de uma sequumlecircncia de operaccedilotildees (ou accedilotildees) que quando executadas produzem a soluccedilatildeo para o problema

iii) Execuccedilatildeo desta sequumlecircncia de operaccedilotildees

iv) Verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo

As etapas de entendimento do problema criaccedilatildeo de sequumlecircncia de accedilotildees e verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo satildeo tarefas desempenhadas por pessoas Jaacute a execuccedilatildeo das operaccedilotildees pode ser desempenhada por computadores

Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaccedilotildees com rapidez e confiabilidade

21 Programaccedilatildeo

Programaccedilatildeo eacute a sequumlecircncia de planejamento projeto escrita e testes de instruccedilotildees desempenhadas pelo computador Eacute uma arte e uma ciecircncia Arte porque existem muitas maneiras de se realizar o trabalho de programaccedilatildeo Existe espaccedilo para uma consideraacutevel dose de criatividade Eacute tambeacutem uma ciecircncia porque existem algumas regras que devem ser seguidas porque eacute necessaacuterio o uso de loacutegica e porque existem alguns meacutetodos rigorosos de programaccedilatildeo que asseguram a eficiecircncia economia e a utilidade dos programas gerados

O trabalho de programaccedilatildeo pode se tornar mais faacutecil se o dividirmos sistematicamente em partes menos complexas (esta teacutecnica denomina-se ldquodividir para conquistarrdquo)

Texto Complementar e Exerciacutecios 9

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 3: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

IacuteNDICE

Parte I - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 1 Algoritmos ---------------------------------------------------------------------- 6

11 Exemplo Construindo um Algoritmo ------------------------------- 6

Exerciacutecios Propostos----------------------------------------------------- 8 2 Resoluccedilatildeo de Problemas atraveacutes de Computadores ----------------------- 9

21 Programaccedilatildeo ------------------------------------------------------------ 9 3 Algoritmos Computacionais -------------------------------------------------11

31 Diretrizes para Elaboraccedilatildeo de Algoritmos -------------------------11 32 Descriccedilatildeo de Algoritmos ---------------------------------------------12 33 Estruturas de Dados --------------------------------------------------13 34 Operaccedilotildees Baacutesicas ----------------------------------------------------15

Exerciacutecios de Fixaccedilatildeo----------------------------------------------------17 35 Estruturas de Controle ------------------------------------------------18

Exerciacutecios de Fixaccedilatildeo----------------------------------------------------21 36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos --------22 37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos ------------24

Exerciacutecios de Fixaccedilatildeo----------------------------------------------------25

Exerciacutecios Propostos----------------------------------------------------25

Apecircndices ndash Parte I 1 SOLUCcedilOtildeES DE EXERCIacuteCIOS 2 NOTACcedilAtildeO PARA FLUXOGRAMAS

Texto Complementar e Exerciacutecios 3

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Parte II - Loacutegica de Programaccedilatildeo com Pascal 4 Linguagens de Programaccedilatildeo de Alto Niacutevel--------------------------------27

41 Tipos de Linguagens de Programaccedilatildeo ------------------------------28 42 Compilaccedilatildeo e Execuccedilatildeo de Programas -----------------------------28

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------29 5 A Linguagem de Programaccedilatildeo Pascal --------------------------------------30

51 Estrutura Geral ---------------------------------------------------------30 52 Estruturas de Dados em Pascal --------------------------------------30

521 Tipos simples de dados----------------------------------------30 522 Tipos simples definidos pelo usuario------------------------31

53 Estruturas de Controle ------------------------------------------------32

Exerciacutecios Propostos----------------------------------------------------35 54 Estruturas de Dados Tipos de Dados Estruturados --------------36

541 Vetores ----------------------------------------------------------36

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------39 542 Matrizes ---------------------------------------------------------40

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------41 55 Algoritmos de Classificaccedilatildeo e Busca -------------------------------42 56 Procedimentos e Funccedilotildees---------------------------------------------44

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------46 57 Registros e Tabelas----------------------------------------------------49 58 Arquivos Diretos e Sequumlenciais -------------------------------------51

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------53 59 Variaacuteveis Dinacircmicas Ponteiros -------------------------------------55

Apecircndices ndash Parte II 3 SOLUCcedilOtildeES DE EXERCIacuteCIOS - PROGRAMAS PASCAL

Texto Complementar e Exerciacutecios 4

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Referecircncias Bibliograacuteficas Forbellone Andreacute L V Eberspaumlcher Henri F Loacutegica de Programaccedilatildeo - A Construccedilatildeo de

Algoritmos e Estruturas de Dados Makron Books 1993 Gottfried Byron B Programaccedilatildeo em Pascal Schaum McGraw Hill 1988 Tremblay Jean-Paul Bunt Richard B Ciecircncia dos Computadores - Uma Abordagem

Algoritmica McGraw Hill 1983 Guimaratildees Lages Algoritmos e Estruturas de Dados Livros Teacutecnicos e Cientiacuteficos Editora

1985 Wirth Niklaus Algoritmos e Estruturas de Dados Editora PHB 1986 Ziviani Nivio Projeto de Algoritmos Livraria Pioneira Editora Saliba Walter L C Teacutecnicas de Programaccedilatildeo - Uma Abordagem Estruturada Makron Books Carvalho Seacutergio E R Introduccedilatildeo agrave Programaccedilatildeo com Pascal Editora Campus Farrer Harry et al Pascal Estruturado Editora Guanabara Dois 1985 Shmitz Eber Teles Antocircnio Pascal e Teacutecnicas de Programaccedilatildeo Livros Teacutecnicos e Cientiacuteficos Editora 1986

Texto Complementar e Exerciacutecios 5

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

PARTE I INTRODUCcedilAtildeO Agrave LOacuteGICA DE PROGRAMACcedilAtildeO 1 ALGORITMOS

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 01

Definimos Algoritmo como a sequumlecircncia de passos que visam atingir um objetivo bem definido

Os algoritmos satildeo utilizados no dia-a-dia para a soluccedilatildeo dos mais diversos problemas

Alguns exemplos geneacutericos de algoritmos usados no nosso cotidiano satildeo uma

coreografia um manual de instruccedilotildees uma receita de bolo a soluccedilatildeo de uma equaccedilatildeo do 2ordm grau uma pesquisa na lista telefocircnica 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 definiccedilatildeo para algoritmos poderia ser

Algoritmo eacute a descriccedilatildeo de um conjunto de accedilotildees que obedecidas resultam numa sucessatildeo finita de passos atingindo um objetivo esperado

Dessa forma vemos que o que importa no algoritmo eacute o efeito das accedilotildees para a obtenccedilatildeo do resultado esperado

Satildeo propriedades de algoritmos

bull accedilotildees simples e bem definidas (natildeo ambiacuteguas)

bull sequumlecircncia ordenada de accedilotildees

bull sequumlecircncia finita de passos

11 Exemplo Construindo um Algoritmo Considere o seguinte problema

Temos trecircs hastes Uma das hastes serve de suporte para trecircs discos de tamanhos diferentes Os discos menores satildeo sempre colocados sobre os discos maiores A figura abaixo mostra uma possiacutevel situaccedilatildeo inicial das hastes e discos

Texto Complementar e Exerciacutecios 6

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desejamos mover todos discos para outra haste poreacutem soacute podemos movimentar um disco de cada vez e um disco maior nunca pode ser colocado sobre um disco de menor tamanho

Soluccedilatildeo 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 estatildeo na haste 1 Os passos satildeo

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 tambeacutem representar a soluccedilatildeo em forma graacutefica desenhando as hastes e a posiccedilatildeo dos discos a cada momento (ou passo)

Como podemos ver com 3 discos precisamos de no miacutenimo 7 passos para solucionar o problema Quantos passos seriam necessaacuterios para se mover 4 discos E para n discos

Curiosidade Este problema foi criado m 1883 pelo matemaacutetico francecircs Edouard Lucas (1842-1891) que tambeacutem criou uma lenda curiosa para enunciar o problema Deixo para vocecircs procurarem na Internet a lenda das Torres de Hanoacutei

Texto Complementar e Exerciacutecios 7

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

P1 Temos trecircs 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 estaacute totalmente cheio Deseja-se colocar 4 litros em dois recipientes Considere que os recipientes natildeo sejam graduados

P2 Numa determinada noite acontece uma queda de energia Vocecirc sabia que poderia encontrar uma vela na gaveta da cozinha um lampiatildeo embaixo da cama fusiacuteveis de reserva no armaacuterio da sala e foacutesforos na estante da cozinha Descreva a sequumlecircncia de passos que poderia ser utilizada para diagnosticar e resolver o problema o que pode ser previsto em duas possibilidades

a) o fusiacutevel queimou

b) a queda eacute na estaccedilatildeo da companhia eleacutetrica

Exerciacutecios Complementares

Faccedila pelo menos 02 Exerciacutecios Propostos do Livro do Forbellone ndash Cap 1

Visite o site da disciplina e tente resolver os problemas de logica sugeridos

httpwwwimufbabr mat146ProblemaLogica

Texto Complementar e Exerciacutecios 8

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

2 RESOLUCcedilAtildeO DE PROBLEMAS ATRAVEacuteS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na soluccedilatildeo de certos tipos de problemas Os problemas que suportam tratamento por computador em geral envolvem grandes quantidades de dados ou satildeo problemas de natureza complexa exigindo a execuccedilatildeo de um grande nuacutemero de passos para alcanccedilar a soluccedilatildeo Basicamente satildeo problemas na aacuterea de processamento de dados e na aacuterea cientiacutefica

O Computador eacute uma ferramenta que permite a realizaccedilatildeo do processamento automaacutetico (ou eletrocircnico) de dados

Define-se por Processamento de Dados qualquer atividade que utilizando informaccedilotildees (ou dados) efetua transformaccedilotildees para obter novas informaccedilotildees (ou dados) como resultado

Dados deEntrada

Dados deSaiacuteda

Processamento(transformaccedilatildeo)

Poreacutem a tarefa desempenhada pelos computadores eacute apenas parte do processo de soluccedilatildeo de problemas

As etapas na soluccedilatildeo de problemas satildeo

i) Entendimento do problema

ii) Criaccedilatildeo de uma sequumlecircncia de operaccedilotildees (ou accedilotildees) que quando executadas produzem a soluccedilatildeo para o problema

iii) Execuccedilatildeo desta sequumlecircncia de operaccedilotildees

iv) Verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo

As etapas de entendimento do problema criaccedilatildeo de sequumlecircncia de accedilotildees e verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo satildeo tarefas desempenhadas por pessoas Jaacute a execuccedilatildeo das operaccedilotildees pode ser desempenhada por computadores

Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaccedilotildees com rapidez e confiabilidade

21 Programaccedilatildeo

Programaccedilatildeo eacute a sequumlecircncia de planejamento projeto escrita e testes de instruccedilotildees desempenhadas pelo computador Eacute uma arte e uma ciecircncia Arte porque existem muitas maneiras de se realizar o trabalho de programaccedilatildeo Existe espaccedilo para uma consideraacutevel dose de criatividade Eacute tambeacutem uma ciecircncia porque existem algumas regras que devem ser seguidas porque eacute necessaacuterio o uso de loacutegica e porque existem alguns meacutetodos rigorosos de programaccedilatildeo que asseguram a eficiecircncia economia e a utilidade dos programas gerados

O trabalho de programaccedilatildeo pode se tornar mais faacutecil se o dividirmos sistematicamente em partes menos complexas (esta teacutecnica denomina-se ldquodividir para conquistarrdquo)

Texto Complementar e Exerciacutecios 9

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 4: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Parte II - Loacutegica de Programaccedilatildeo com Pascal 4 Linguagens de Programaccedilatildeo de Alto Niacutevel--------------------------------27

41 Tipos de Linguagens de Programaccedilatildeo ------------------------------28 42 Compilaccedilatildeo e Execuccedilatildeo de Programas -----------------------------28

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------29 5 A Linguagem de Programaccedilatildeo Pascal --------------------------------------30

51 Estrutura Geral ---------------------------------------------------------30 52 Estruturas de Dados em Pascal --------------------------------------30

521 Tipos simples de dados----------------------------------------30 522 Tipos simples definidos pelo usuario------------------------31

53 Estruturas de Controle ------------------------------------------------32

Exerciacutecios Propostos----------------------------------------------------35 54 Estruturas de Dados Tipos de Dados Estruturados --------------36

541 Vetores ----------------------------------------------------------36

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------39 542 Matrizes ---------------------------------------------------------40

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------41 55 Algoritmos de Classificaccedilatildeo e Busca -------------------------------42 56 Procedimentos e Funccedilotildees---------------------------------------------44

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------46 57 Registros e Tabelas----------------------------------------------------49 58 Arquivos Diretos e Sequumlenciais -------------------------------------51

Exerciacutecios de Fixaccedilatildeo---------------------------------------------------53 59 Variaacuteveis Dinacircmicas Ponteiros -------------------------------------55

Apecircndices ndash Parte II 3 SOLUCcedilOtildeES DE EXERCIacuteCIOS - PROGRAMAS PASCAL

Texto Complementar e Exerciacutecios 4

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Referecircncias Bibliograacuteficas Forbellone Andreacute L V Eberspaumlcher Henri F Loacutegica de Programaccedilatildeo - A Construccedilatildeo de

Algoritmos e Estruturas de Dados Makron Books 1993 Gottfried Byron B Programaccedilatildeo em Pascal Schaum McGraw Hill 1988 Tremblay Jean-Paul Bunt Richard B Ciecircncia dos Computadores - Uma Abordagem

Algoritmica McGraw Hill 1983 Guimaratildees Lages Algoritmos e Estruturas de Dados Livros Teacutecnicos e Cientiacuteficos Editora

1985 Wirth Niklaus Algoritmos e Estruturas de Dados Editora PHB 1986 Ziviani Nivio Projeto de Algoritmos Livraria Pioneira Editora Saliba Walter L C Teacutecnicas de Programaccedilatildeo - Uma Abordagem Estruturada Makron Books Carvalho Seacutergio E R Introduccedilatildeo agrave Programaccedilatildeo com Pascal Editora Campus Farrer Harry et al Pascal Estruturado Editora Guanabara Dois 1985 Shmitz Eber Teles Antocircnio Pascal e Teacutecnicas de Programaccedilatildeo Livros Teacutecnicos e Cientiacuteficos Editora 1986

Texto Complementar e Exerciacutecios 5

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

PARTE I INTRODUCcedilAtildeO Agrave LOacuteGICA DE PROGRAMACcedilAtildeO 1 ALGORITMOS

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 01

Definimos Algoritmo como a sequumlecircncia de passos que visam atingir um objetivo bem definido

Os algoritmos satildeo utilizados no dia-a-dia para a soluccedilatildeo dos mais diversos problemas

Alguns exemplos geneacutericos de algoritmos usados no nosso cotidiano satildeo uma

coreografia um manual de instruccedilotildees uma receita de bolo a soluccedilatildeo de uma equaccedilatildeo do 2ordm grau uma pesquisa na lista telefocircnica 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 definiccedilatildeo para algoritmos poderia ser

Algoritmo eacute a descriccedilatildeo de um conjunto de accedilotildees que obedecidas resultam numa sucessatildeo finita de passos atingindo um objetivo esperado

Dessa forma vemos que o que importa no algoritmo eacute o efeito das accedilotildees para a obtenccedilatildeo do resultado esperado

Satildeo propriedades de algoritmos

bull accedilotildees simples e bem definidas (natildeo ambiacuteguas)

bull sequumlecircncia ordenada de accedilotildees

bull sequumlecircncia finita de passos

11 Exemplo Construindo um Algoritmo Considere o seguinte problema

Temos trecircs hastes Uma das hastes serve de suporte para trecircs discos de tamanhos diferentes Os discos menores satildeo sempre colocados sobre os discos maiores A figura abaixo mostra uma possiacutevel situaccedilatildeo inicial das hastes e discos

Texto Complementar e Exerciacutecios 6

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desejamos mover todos discos para outra haste poreacutem soacute podemos movimentar um disco de cada vez e um disco maior nunca pode ser colocado sobre um disco de menor tamanho

Soluccedilatildeo 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 estatildeo na haste 1 Os passos satildeo

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 tambeacutem representar a soluccedilatildeo em forma graacutefica desenhando as hastes e a posiccedilatildeo dos discos a cada momento (ou passo)

Como podemos ver com 3 discos precisamos de no miacutenimo 7 passos para solucionar o problema Quantos passos seriam necessaacuterios para se mover 4 discos E para n discos

Curiosidade Este problema foi criado m 1883 pelo matemaacutetico francecircs Edouard Lucas (1842-1891) que tambeacutem criou uma lenda curiosa para enunciar o problema Deixo para vocecircs procurarem na Internet a lenda das Torres de Hanoacutei

Texto Complementar e Exerciacutecios 7

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

P1 Temos trecircs 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 estaacute totalmente cheio Deseja-se colocar 4 litros em dois recipientes Considere que os recipientes natildeo sejam graduados

P2 Numa determinada noite acontece uma queda de energia Vocecirc sabia que poderia encontrar uma vela na gaveta da cozinha um lampiatildeo embaixo da cama fusiacuteveis de reserva no armaacuterio da sala e foacutesforos na estante da cozinha Descreva a sequumlecircncia de passos que poderia ser utilizada para diagnosticar e resolver o problema o que pode ser previsto em duas possibilidades

a) o fusiacutevel queimou

b) a queda eacute na estaccedilatildeo da companhia eleacutetrica

Exerciacutecios Complementares

Faccedila pelo menos 02 Exerciacutecios Propostos do Livro do Forbellone ndash Cap 1

Visite o site da disciplina e tente resolver os problemas de logica sugeridos

httpwwwimufbabr mat146ProblemaLogica

Texto Complementar e Exerciacutecios 8

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

2 RESOLUCcedilAtildeO DE PROBLEMAS ATRAVEacuteS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na soluccedilatildeo de certos tipos de problemas Os problemas que suportam tratamento por computador em geral envolvem grandes quantidades de dados ou satildeo problemas de natureza complexa exigindo a execuccedilatildeo de um grande nuacutemero de passos para alcanccedilar a soluccedilatildeo Basicamente satildeo problemas na aacuterea de processamento de dados e na aacuterea cientiacutefica

O Computador eacute uma ferramenta que permite a realizaccedilatildeo do processamento automaacutetico (ou eletrocircnico) de dados

Define-se por Processamento de Dados qualquer atividade que utilizando informaccedilotildees (ou dados) efetua transformaccedilotildees para obter novas informaccedilotildees (ou dados) como resultado

Dados deEntrada

Dados deSaiacuteda

Processamento(transformaccedilatildeo)

Poreacutem a tarefa desempenhada pelos computadores eacute apenas parte do processo de soluccedilatildeo de problemas

As etapas na soluccedilatildeo de problemas satildeo

i) Entendimento do problema

ii) Criaccedilatildeo de uma sequumlecircncia de operaccedilotildees (ou accedilotildees) que quando executadas produzem a soluccedilatildeo para o problema

iii) Execuccedilatildeo desta sequumlecircncia de operaccedilotildees

iv) Verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo

As etapas de entendimento do problema criaccedilatildeo de sequumlecircncia de accedilotildees e verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo satildeo tarefas desempenhadas por pessoas Jaacute a execuccedilatildeo das operaccedilotildees pode ser desempenhada por computadores

Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaccedilotildees com rapidez e confiabilidade

21 Programaccedilatildeo

Programaccedilatildeo eacute a sequumlecircncia de planejamento projeto escrita e testes de instruccedilotildees desempenhadas pelo computador Eacute uma arte e uma ciecircncia Arte porque existem muitas maneiras de se realizar o trabalho de programaccedilatildeo Existe espaccedilo para uma consideraacutevel dose de criatividade Eacute tambeacutem uma ciecircncia porque existem algumas regras que devem ser seguidas porque eacute necessaacuterio o uso de loacutegica e porque existem alguns meacutetodos rigorosos de programaccedilatildeo que asseguram a eficiecircncia economia e a utilidade dos programas gerados

O trabalho de programaccedilatildeo pode se tornar mais faacutecil se o dividirmos sistematicamente em partes menos complexas (esta teacutecnica denomina-se ldquodividir para conquistarrdquo)

Texto Complementar e Exerciacutecios 9

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 5: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Referecircncias Bibliograacuteficas Forbellone Andreacute L V Eberspaumlcher Henri F Loacutegica de Programaccedilatildeo - A Construccedilatildeo de

Algoritmos e Estruturas de Dados Makron Books 1993 Gottfried Byron B Programaccedilatildeo em Pascal Schaum McGraw Hill 1988 Tremblay Jean-Paul Bunt Richard B Ciecircncia dos Computadores - Uma Abordagem

Algoritmica McGraw Hill 1983 Guimaratildees Lages Algoritmos e Estruturas de Dados Livros Teacutecnicos e Cientiacuteficos Editora

1985 Wirth Niklaus Algoritmos e Estruturas de Dados Editora PHB 1986 Ziviani Nivio Projeto de Algoritmos Livraria Pioneira Editora Saliba Walter L C Teacutecnicas de Programaccedilatildeo - Uma Abordagem Estruturada Makron Books Carvalho Seacutergio E R Introduccedilatildeo agrave Programaccedilatildeo com Pascal Editora Campus Farrer Harry et al Pascal Estruturado Editora Guanabara Dois 1985 Shmitz Eber Teles Antocircnio Pascal e Teacutecnicas de Programaccedilatildeo Livros Teacutecnicos e Cientiacuteficos Editora 1986

Texto Complementar e Exerciacutecios 5

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

PARTE I INTRODUCcedilAtildeO Agrave LOacuteGICA DE PROGRAMACcedilAtildeO 1 ALGORITMOS

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 01

Definimos Algoritmo como a sequumlecircncia de passos que visam atingir um objetivo bem definido

Os algoritmos satildeo utilizados no dia-a-dia para a soluccedilatildeo dos mais diversos problemas

Alguns exemplos geneacutericos de algoritmos usados no nosso cotidiano satildeo uma

coreografia um manual de instruccedilotildees uma receita de bolo a soluccedilatildeo de uma equaccedilatildeo do 2ordm grau uma pesquisa na lista telefocircnica 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 definiccedilatildeo para algoritmos poderia ser

Algoritmo eacute a descriccedilatildeo de um conjunto de accedilotildees que obedecidas resultam numa sucessatildeo finita de passos atingindo um objetivo esperado

Dessa forma vemos que o que importa no algoritmo eacute o efeito das accedilotildees para a obtenccedilatildeo do resultado esperado

Satildeo propriedades de algoritmos

bull accedilotildees simples e bem definidas (natildeo ambiacuteguas)

bull sequumlecircncia ordenada de accedilotildees

bull sequumlecircncia finita de passos

11 Exemplo Construindo um Algoritmo Considere o seguinte problema

Temos trecircs hastes Uma das hastes serve de suporte para trecircs discos de tamanhos diferentes Os discos menores satildeo sempre colocados sobre os discos maiores A figura abaixo mostra uma possiacutevel situaccedilatildeo inicial das hastes e discos

Texto Complementar e Exerciacutecios 6

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desejamos mover todos discos para outra haste poreacutem soacute podemos movimentar um disco de cada vez e um disco maior nunca pode ser colocado sobre um disco de menor tamanho

Soluccedilatildeo 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 estatildeo na haste 1 Os passos satildeo

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 tambeacutem representar a soluccedilatildeo em forma graacutefica desenhando as hastes e a posiccedilatildeo dos discos a cada momento (ou passo)

Como podemos ver com 3 discos precisamos de no miacutenimo 7 passos para solucionar o problema Quantos passos seriam necessaacuterios para se mover 4 discos E para n discos

Curiosidade Este problema foi criado m 1883 pelo matemaacutetico francecircs Edouard Lucas (1842-1891) que tambeacutem criou uma lenda curiosa para enunciar o problema Deixo para vocecircs procurarem na Internet a lenda das Torres de Hanoacutei

Texto Complementar e Exerciacutecios 7

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

P1 Temos trecircs 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 estaacute totalmente cheio Deseja-se colocar 4 litros em dois recipientes Considere que os recipientes natildeo sejam graduados

P2 Numa determinada noite acontece uma queda de energia Vocecirc sabia que poderia encontrar uma vela na gaveta da cozinha um lampiatildeo embaixo da cama fusiacuteveis de reserva no armaacuterio da sala e foacutesforos na estante da cozinha Descreva a sequumlecircncia de passos que poderia ser utilizada para diagnosticar e resolver o problema o que pode ser previsto em duas possibilidades

a) o fusiacutevel queimou

b) a queda eacute na estaccedilatildeo da companhia eleacutetrica

Exerciacutecios Complementares

Faccedila pelo menos 02 Exerciacutecios Propostos do Livro do Forbellone ndash Cap 1

Visite o site da disciplina e tente resolver os problemas de logica sugeridos

httpwwwimufbabr mat146ProblemaLogica

Texto Complementar e Exerciacutecios 8

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

2 RESOLUCcedilAtildeO DE PROBLEMAS ATRAVEacuteS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na soluccedilatildeo de certos tipos de problemas Os problemas que suportam tratamento por computador em geral envolvem grandes quantidades de dados ou satildeo problemas de natureza complexa exigindo a execuccedilatildeo de um grande nuacutemero de passos para alcanccedilar a soluccedilatildeo Basicamente satildeo problemas na aacuterea de processamento de dados e na aacuterea cientiacutefica

O Computador eacute uma ferramenta que permite a realizaccedilatildeo do processamento automaacutetico (ou eletrocircnico) de dados

Define-se por Processamento de Dados qualquer atividade que utilizando informaccedilotildees (ou dados) efetua transformaccedilotildees para obter novas informaccedilotildees (ou dados) como resultado

Dados deEntrada

Dados deSaiacuteda

Processamento(transformaccedilatildeo)

Poreacutem a tarefa desempenhada pelos computadores eacute apenas parte do processo de soluccedilatildeo de problemas

As etapas na soluccedilatildeo de problemas satildeo

i) Entendimento do problema

ii) Criaccedilatildeo de uma sequumlecircncia de operaccedilotildees (ou accedilotildees) que quando executadas produzem a soluccedilatildeo para o problema

iii) Execuccedilatildeo desta sequumlecircncia de operaccedilotildees

iv) Verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo

As etapas de entendimento do problema criaccedilatildeo de sequumlecircncia de accedilotildees e verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo satildeo tarefas desempenhadas por pessoas Jaacute a execuccedilatildeo das operaccedilotildees pode ser desempenhada por computadores

Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaccedilotildees com rapidez e confiabilidade

21 Programaccedilatildeo

Programaccedilatildeo eacute a sequumlecircncia de planejamento projeto escrita e testes de instruccedilotildees desempenhadas pelo computador Eacute uma arte e uma ciecircncia Arte porque existem muitas maneiras de se realizar o trabalho de programaccedilatildeo Existe espaccedilo para uma consideraacutevel dose de criatividade Eacute tambeacutem uma ciecircncia porque existem algumas regras que devem ser seguidas porque eacute necessaacuterio o uso de loacutegica e porque existem alguns meacutetodos rigorosos de programaccedilatildeo que asseguram a eficiecircncia economia e a utilidade dos programas gerados

O trabalho de programaccedilatildeo pode se tornar mais faacutecil se o dividirmos sistematicamente em partes menos complexas (esta teacutecnica denomina-se ldquodividir para conquistarrdquo)

Texto Complementar e Exerciacutecios 9

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 6: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

PARTE I INTRODUCcedilAtildeO Agrave LOacuteGICA DE PROGRAMACcedilAtildeO 1 ALGORITMOS

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 01

Definimos Algoritmo como a sequumlecircncia de passos que visam atingir um objetivo bem definido

Os algoritmos satildeo utilizados no dia-a-dia para a soluccedilatildeo dos mais diversos problemas

Alguns exemplos geneacutericos de algoritmos usados no nosso cotidiano satildeo uma

coreografia um manual de instruccedilotildees uma receita de bolo a soluccedilatildeo de uma equaccedilatildeo do 2ordm grau uma pesquisa na lista telefocircnica 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 definiccedilatildeo para algoritmos poderia ser

Algoritmo eacute a descriccedilatildeo de um conjunto de accedilotildees que obedecidas resultam numa sucessatildeo finita de passos atingindo um objetivo esperado

Dessa forma vemos que o que importa no algoritmo eacute o efeito das accedilotildees para a obtenccedilatildeo do resultado esperado

Satildeo propriedades de algoritmos

bull accedilotildees simples e bem definidas (natildeo ambiacuteguas)

bull sequumlecircncia ordenada de accedilotildees

bull sequumlecircncia finita de passos

11 Exemplo Construindo um Algoritmo Considere o seguinte problema

Temos trecircs hastes Uma das hastes serve de suporte para trecircs discos de tamanhos diferentes Os discos menores satildeo sempre colocados sobre os discos maiores A figura abaixo mostra uma possiacutevel situaccedilatildeo inicial das hastes e discos

Texto Complementar e Exerciacutecios 6

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desejamos mover todos discos para outra haste poreacutem soacute podemos movimentar um disco de cada vez e um disco maior nunca pode ser colocado sobre um disco de menor tamanho

Soluccedilatildeo 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 estatildeo na haste 1 Os passos satildeo

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 tambeacutem representar a soluccedilatildeo em forma graacutefica desenhando as hastes e a posiccedilatildeo dos discos a cada momento (ou passo)

Como podemos ver com 3 discos precisamos de no miacutenimo 7 passos para solucionar o problema Quantos passos seriam necessaacuterios para se mover 4 discos E para n discos

Curiosidade Este problema foi criado m 1883 pelo matemaacutetico francecircs Edouard Lucas (1842-1891) que tambeacutem criou uma lenda curiosa para enunciar o problema Deixo para vocecircs procurarem na Internet a lenda das Torres de Hanoacutei

Texto Complementar e Exerciacutecios 7

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

P1 Temos trecircs 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 estaacute totalmente cheio Deseja-se colocar 4 litros em dois recipientes Considere que os recipientes natildeo sejam graduados

P2 Numa determinada noite acontece uma queda de energia Vocecirc sabia que poderia encontrar uma vela na gaveta da cozinha um lampiatildeo embaixo da cama fusiacuteveis de reserva no armaacuterio da sala e foacutesforos na estante da cozinha Descreva a sequumlecircncia de passos que poderia ser utilizada para diagnosticar e resolver o problema o que pode ser previsto em duas possibilidades

a) o fusiacutevel queimou

b) a queda eacute na estaccedilatildeo da companhia eleacutetrica

Exerciacutecios Complementares

Faccedila pelo menos 02 Exerciacutecios Propostos do Livro do Forbellone ndash Cap 1

Visite o site da disciplina e tente resolver os problemas de logica sugeridos

httpwwwimufbabr mat146ProblemaLogica

Texto Complementar e Exerciacutecios 8

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

2 RESOLUCcedilAtildeO DE PROBLEMAS ATRAVEacuteS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na soluccedilatildeo de certos tipos de problemas Os problemas que suportam tratamento por computador em geral envolvem grandes quantidades de dados ou satildeo problemas de natureza complexa exigindo a execuccedilatildeo de um grande nuacutemero de passos para alcanccedilar a soluccedilatildeo Basicamente satildeo problemas na aacuterea de processamento de dados e na aacuterea cientiacutefica

O Computador eacute uma ferramenta que permite a realizaccedilatildeo do processamento automaacutetico (ou eletrocircnico) de dados

Define-se por Processamento de Dados qualquer atividade que utilizando informaccedilotildees (ou dados) efetua transformaccedilotildees para obter novas informaccedilotildees (ou dados) como resultado

Dados deEntrada

Dados deSaiacuteda

Processamento(transformaccedilatildeo)

Poreacutem a tarefa desempenhada pelos computadores eacute apenas parte do processo de soluccedilatildeo de problemas

As etapas na soluccedilatildeo de problemas satildeo

i) Entendimento do problema

ii) Criaccedilatildeo de uma sequumlecircncia de operaccedilotildees (ou accedilotildees) que quando executadas produzem a soluccedilatildeo para o problema

iii) Execuccedilatildeo desta sequumlecircncia de operaccedilotildees

iv) Verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo

As etapas de entendimento do problema criaccedilatildeo de sequumlecircncia de accedilotildees e verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo satildeo tarefas desempenhadas por pessoas Jaacute a execuccedilatildeo das operaccedilotildees pode ser desempenhada por computadores

Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaccedilotildees com rapidez e confiabilidade

21 Programaccedilatildeo

Programaccedilatildeo eacute a sequumlecircncia de planejamento projeto escrita e testes de instruccedilotildees desempenhadas pelo computador Eacute uma arte e uma ciecircncia Arte porque existem muitas maneiras de se realizar o trabalho de programaccedilatildeo Existe espaccedilo para uma consideraacutevel dose de criatividade Eacute tambeacutem uma ciecircncia porque existem algumas regras que devem ser seguidas porque eacute necessaacuterio o uso de loacutegica e porque existem alguns meacutetodos rigorosos de programaccedilatildeo que asseguram a eficiecircncia economia e a utilidade dos programas gerados

O trabalho de programaccedilatildeo pode se tornar mais faacutecil se o dividirmos sistematicamente em partes menos complexas (esta teacutecnica denomina-se ldquodividir para conquistarrdquo)

Texto Complementar e Exerciacutecios 9

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 7: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desejamos mover todos discos para outra haste poreacutem soacute podemos movimentar um disco de cada vez e um disco maior nunca pode ser colocado sobre um disco de menor tamanho

Soluccedilatildeo 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 estatildeo na haste 1 Os passos satildeo

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 tambeacutem representar a soluccedilatildeo em forma graacutefica desenhando as hastes e a posiccedilatildeo dos discos a cada momento (ou passo)

Como podemos ver com 3 discos precisamos de no miacutenimo 7 passos para solucionar o problema Quantos passos seriam necessaacuterios para se mover 4 discos E para n discos

Curiosidade Este problema foi criado m 1883 pelo matemaacutetico francecircs Edouard Lucas (1842-1891) que tambeacutem criou uma lenda curiosa para enunciar o problema Deixo para vocecircs procurarem na Internet a lenda das Torres de Hanoacutei

Texto Complementar e Exerciacutecios 7

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

P1 Temos trecircs 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 estaacute totalmente cheio Deseja-se colocar 4 litros em dois recipientes Considere que os recipientes natildeo sejam graduados

P2 Numa determinada noite acontece uma queda de energia Vocecirc sabia que poderia encontrar uma vela na gaveta da cozinha um lampiatildeo embaixo da cama fusiacuteveis de reserva no armaacuterio da sala e foacutesforos na estante da cozinha Descreva a sequumlecircncia de passos que poderia ser utilizada para diagnosticar e resolver o problema o que pode ser previsto em duas possibilidades

a) o fusiacutevel queimou

b) a queda eacute na estaccedilatildeo da companhia eleacutetrica

Exerciacutecios Complementares

Faccedila pelo menos 02 Exerciacutecios Propostos do Livro do Forbellone ndash Cap 1

Visite o site da disciplina e tente resolver os problemas de logica sugeridos

httpwwwimufbabr mat146ProblemaLogica

Texto Complementar e Exerciacutecios 8

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

2 RESOLUCcedilAtildeO DE PROBLEMAS ATRAVEacuteS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na soluccedilatildeo de certos tipos de problemas Os problemas que suportam tratamento por computador em geral envolvem grandes quantidades de dados ou satildeo problemas de natureza complexa exigindo a execuccedilatildeo de um grande nuacutemero de passos para alcanccedilar a soluccedilatildeo Basicamente satildeo problemas na aacuterea de processamento de dados e na aacuterea cientiacutefica

O Computador eacute uma ferramenta que permite a realizaccedilatildeo do processamento automaacutetico (ou eletrocircnico) de dados

Define-se por Processamento de Dados qualquer atividade que utilizando informaccedilotildees (ou dados) efetua transformaccedilotildees para obter novas informaccedilotildees (ou dados) como resultado

Dados deEntrada

Dados deSaiacuteda

Processamento(transformaccedilatildeo)

Poreacutem a tarefa desempenhada pelos computadores eacute apenas parte do processo de soluccedilatildeo de problemas

As etapas na soluccedilatildeo de problemas satildeo

i) Entendimento do problema

ii) Criaccedilatildeo de uma sequumlecircncia de operaccedilotildees (ou accedilotildees) que quando executadas produzem a soluccedilatildeo para o problema

iii) Execuccedilatildeo desta sequumlecircncia de operaccedilotildees

iv) Verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo

As etapas de entendimento do problema criaccedilatildeo de sequumlecircncia de accedilotildees e verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo satildeo tarefas desempenhadas por pessoas Jaacute a execuccedilatildeo das operaccedilotildees pode ser desempenhada por computadores

Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaccedilotildees com rapidez e confiabilidade

21 Programaccedilatildeo

Programaccedilatildeo eacute a sequumlecircncia de planejamento projeto escrita e testes de instruccedilotildees desempenhadas pelo computador Eacute uma arte e uma ciecircncia Arte porque existem muitas maneiras de se realizar o trabalho de programaccedilatildeo Existe espaccedilo para uma consideraacutevel dose de criatividade Eacute tambeacutem uma ciecircncia porque existem algumas regras que devem ser seguidas porque eacute necessaacuterio o uso de loacutegica e porque existem alguns meacutetodos rigorosos de programaccedilatildeo que asseguram a eficiecircncia economia e a utilidade dos programas gerados

O trabalho de programaccedilatildeo pode se tornar mais faacutecil se o dividirmos sistematicamente em partes menos complexas (esta teacutecnica denomina-se ldquodividir para conquistarrdquo)

Texto Complementar e Exerciacutecios 9

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 8: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

P1 Temos trecircs 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 estaacute totalmente cheio Deseja-se colocar 4 litros em dois recipientes Considere que os recipientes natildeo sejam graduados

P2 Numa determinada noite acontece uma queda de energia Vocecirc sabia que poderia encontrar uma vela na gaveta da cozinha um lampiatildeo embaixo da cama fusiacuteveis de reserva no armaacuterio da sala e foacutesforos na estante da cozinha Descreva a sequumlecircncia de passos que poderia ser utilizada para diagnosticar e resolver o problema o que pode ser previsto em duas possibilidades

a) o fusiacutevel queimou

b) a queda eacute na estaccedilatildeo da companhia eleacutetrica

Exerciacutecios Complementares

Faccedila pelo menos 02 Exerciacutecios Propostos do Livro do Forbellone ndash Cap 1

Visite o site da disciplina e tente resolver os problemas de logica sugeridos

httpwwwimufbabr mat146ProblemaLogica

Texto Complementar e Exerciacutecios 8

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

2 RESOLUCcedilAtildeO DE PROBLEMAS ATRAVEacuteS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na soluccedilatildeo de certos tipos de problemas Os problemas que suportam tratamento por computador em geral envolvem grandes quantidades de dados ou satildeo problemas de natureza complexa exigindo a execuccedilatildeo de um grande nuacutemero de passos para alcanccedilar a soluccedilatildeo Basicamente satildeo problemas na aacuterea de processamento de dados e na aacuterea cientiacutefica

O Computador eacute uma ferramenta que permite a realizaccedilatildeo do processamento automaacutetico (ou eletrocircnico) de dados

Define-se por Processamento de Dados qualquer atividade que utilizando informaccedilotildees (ou dados) efetua transformaccedilotildees para obter novas informaccedilotildees (ou dados) como resultado

Dados deEntrada

Dados deSaiacuteda

Processamento(transformaccedilatildeo)

Poreacutem a tarefa desempenhada pelos computadores eacute apenas parte do processo de soluccedilatildeo de problemas

As etapas na soluccedilatildeo de problemas satildeo

i) Entendimento do problema

ii) Criaccedilatildeo de uma sequumlecircncia de operaccedilotildees (ou accedilotildees) que quando executadas produzem a soluccedilatildeo para o problema

iii) Execuccedilatildeo desta sequumlecircncia de operaccedilotildees

iv) Verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo

As etapas de entendimento do problema criaccedilatildeo de sequumlecircncia de accedilotildees e verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo satildeo tarefas desempenhadas por pessoas Jaacute a execuccedilatildeo das operaccedilotildees pode ser desempenhada por computadores

Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaccedilotildees com rapidez e confiabilidade

21 Programaccedilatildeo

Programaccedilatildeo eacute a sequumlecircncia de planejamento projeto escrita e testes de instruccedilotildees desempenhadas pelo computador Eacute uma arte e uma ciecircncia Arte porque existem muitas maneiras de se realizar o trabalho de programaccedilatildeo Existe espaccedilo para uma consideraacutevel dose de criatividade Eacute tambeacutem uma ciecircncia porque existem algumas regras que devem ser seguidas porque eacute necessaacuterio o uso de loacutegica e porque existem alguns meacutetodos rigorosos de programaccedilatildeo que asseguram a eficiecircncia economia e a utilidade dos programas gerados

O trabalho de programaccedilatildeo pode se tornar mais faacutecil se o dividirmos sistematicamente em partes menos complexas (esta teacutecnica denomina-se ldquodividir para conquistarrdquo)

Texto Complementar e Exerciacutecios 9

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 9: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

2 RESOLUCcedilAtildeO DE PROBLEMAS ATRAVEacuteS DE COMPUTADORES

Os computadores podem ser usados de forma eficiente na soluccedilatildeo de certos tipos de problemas Os problemas que suportam tratamento por computador em geral envolvem grandes quantidades de dados ou satildeo problemas de natureza complexa exigindo a execuccedilatildeo de um grande nuacutemero de passos para alcanccedilar a soluccedilatildeo Basicamente satildeo problemas na aacuterea de processamento de dados e na aacuterea cientiacutefica

O Computador eacute uma ferramenta que permite a realizaccedilatildeo do processamento automaacutetico (ou eletrocircnico) de dados

Define-se por Processamento de Dados qualquer atividade que utilizando informaccedilotildees (ou dados) efetua transformaccedilotildees para obter novas informaccedilotildees (ou dados) como resultado

Dados deEntrada

Dados deSaiacuteda

Processamento(transformaccedilatildeo)

Poreacutem a tarefa desempenhada pelos computadores eacute apenas parte do processo de soluccedilatildeo de problemas

As etapas na soluccedilatildeo de problemas satildeo

i) Entendimento do problema

ii) Criaccedilatildeo de uma sequumlecircncia de operaccedilotildees (ou accedilotildees) que quando executadas produzem a soluccedilatildeo para o problema

iii) Execuccedilatildeo desta sequumlecircncia de operaccedilotildees

iv) Verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo

As etapas de entendimento do problema criaccedilatildeo de sequumlecircncia de accedilotildees e verificaccedilatildeo da adequaccedilatildeo da soluccedilatildeo satildeo tarefas desempenhadas por pessoas Jaacute a execuccedilatildeo das operaccedilotildees pode ser desempenhada por computadores

Os computadores tem a capacidade de executar processos complicados e com grande quantidade de informaccedilotildees com rapidez e confiabilidade

21 Programaccedilatildeo

Programaccedilatildeo eacute a sequumlecircncia de planejamento projeto escrita e testes de instruccedilotildees desempenhadas pelo computador Eacute uma arte e uma ciecircncia Arte porque existem muitas maneiras de se realizar o trabalho de programaccedilatildeo Existe espaccedilo para uma consideraacutevel dose de criatividade Eacute tambeacutem uma ciecircncia porque existem algumas regras que devem ser seguidas porque eacute necessaacuterio o uso de loacutegica e porque existem alguns meacutetodos rigorosos de programaccedilatildeo que asseguram a eficiecircncia economia e a utilidade dos programas gerados

O trabalho de programaccedilatildeo pode se tornar mais faacutecil se o dividirmos sistematicamente em partes menos complexas (esta teacutecnica denomina-se ldquodividir para conquistarrdquo)

Texto Complementar e Exerciacutecios 9

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 10: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Um programa eacute considerado confiaacutevel quando conseguir fazer com que o computador cumpra com o objetivo proposto Os programas construiacutedos devem ser eficazes realizando a tarefa definida e eficientes utilizando os melhores meios para realizaacute-la O maior problema na construccedilatildeo de programas eacute a complexidade esta complexidade representa a quantidade de situaccedilotildees diferentes que um problema pode apresentar e que devem ser previstas na soluccedilatildeo do mesmo Portanto ao se construir um programa o objetivo principal eacute vencer a complexidade do problema a ser solucionado A fim de lidar com esta complexidade podemos dividir a programaccedilatildeo em duas fases distintas

Problema

Soluccedilatildeo na formade Algoritmo

Soluccedilatildeo comoum programa

de computador

1

2

Fase de Resoluccedilatildeo do Problema

Fase de Implementaccedilatildeo (ou Codificaccedilatildeo) doAlgoritmo em alguma Ling de Programaccedilatildeo

Modelizaccedilatildeo (ou Resoluccedilatildeo) do Problema determinaccedilatildeo do modelo de soluccedilatildeo para o problema proposto na forma de um algoritmo computacional

Assim a elaboraccedilatildeo de um algoritmo eacute o primeiro passo para a preparaccedilatildeo de um programa de computador Este algoritmo deve ser independente da linguagem de programaccedilatildeo que seraacute utilizada

Implementaccedilatildeo eacute a transformaccedilatildeo (ou codificaccedilatildeo) do algoritmo em alguma Linguagem de Programaccedilatildeo adequada ao modelo elaborado

Leitura complementar definiccedilatildeo de Programaccedilatildeo no livro ldquoAlgoritmos e Estruturas de Dadosrdquo (Wirth)

Definiccedilotildees Importantes

Programas satildeo formulaccedilotildees completas de algoritmos abstratos baseados em representaccedilotildees especiacuteficas de dados [Wirth]

Programaccedilatildeo Estruturada eacute a arte ou teacutecnica de construir e formular algoritmos de forma sistemaacutetica [Wirth]

Texto Complementar e Exerciacutecios 10

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 11: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Quem foi Nicklaus Wirth Em 1984 ele recebeu o mais prestigioso precircmio teacutecnico da ACM (Association for Computing Machinery) ndash o ldquoAM Turing Awardrdquo por sua valiosa contribuiccedilatildeo para a computaccedilatildeo O resto deixo para vocecircs pesquisarem Aproveite e procure saber tambeacutem sobre a ACM Qual a relevacircncia dessa associaccedilatildeo O que ela faz

3 ALGORITMOS COMPUTACIONAIS

O algoritmo eacute uma sequumlecircncia de instruccedilotildees onde cada instruccedilatildeo representa uma ACcedilAtildeO que deve ser entendida e realizada Surge entatildeo uma Questatildeo

Como saber se jaacute temos detalhes suficientes em um algoritmo para que a ACcedilAtildeO possa ser entendida e realizada

Vai depender do agente que iraacute executar o Algoritmo No caso de algoritmos computacionais sabemos que o computador possui um conjunto limitado de instruccedilotildees e o algoritmo deve ser expresso nos termos destas instruccedilotildees

O computador utiliza dois conceitos baacutesicos para construir e interpretar algoritmos

Estruturas de Dados para manipulaccedilatildeo das informaccedilotildees

Estruturas de Controle para manipulaccedilatildeo das accedilotildees

31 Diretrizes para a Elaboraccedilatildeo de Algoritmos As diretrizes apresentadas abaixo satildeo geneacutericas e podem ser usadas ou adaptadas na organizaccedilatildeo dos passos que comporatildeo a soluccedilatildeo de um determinado problema (ou seja na criaccedilatildeo de um algoritmo para atingir um objetivo determinado)

1 Identificaccedilatildeo do problema determinar o que se quer resolver ou qual objetivo a ser atingido

2 Identificaccedilatildeo das ldquoentradas de dadosrdquo informaccedilotildees fornecidas a partir das quais se desenvolveratildeo os caacutelculos

3 Identificaccedilatildeo das ldquosaiacutedas de dadosrdquo as informaccedilotildees a serem geradas como resultado

4 Identificaccedilatildeo das regras e limitaccedilotildees do problema ou das limitaccedilotildees do agente executante (ex se o agente fosse uma calculadora natildeo-cientiacutefica iriam existir limitaccedilotildees no caacutelculo de funccedilotildees por exemplo)

5 Determinaccedilatildeo do que deve ser feito para transformar as ldquoentradasrdquo em ldquosaiacutedasrdquo Neste ponto deve ser determinada a sequumlecircncia de accedilotildees que leve agrave soluccedilatildeo do problema Para isto eacute preciso

51 observar as regras e limitaccedilotildees jaacute identificadas

52 determinar accedilotildees possiacuteveis de serem realizadas pelo agente

Texto Complementar e Exerciacutecios 11

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 12: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

6 Construccedilatildeo do Algoritmo utilizando uma das formas de representaccedilatildeo de algoritmos (ver Toacutepico 32)

7 Teste da soluccedilatildeo - execuccedilatildeo de todas as accedilotildees do algoritmo seguindo o fluxo estabelecido para verificar se ele estaacute realmente gerando os resultados esperados ou detectar possiacuteveis erros em sua descriccedilatildeo (veja detalhes sobre Teste de Algoritmos no Toacutepico 37)

Exemplo

Imagine o seguinte problema Calcular a meacutedia final dos alunos da 6ordf Seacuterie Os alunos realizaratildeo quatro provas P1 P2 P3 e P4 A Meacutedia Final eacute calculada por

(P1 + P2 + P3 + P4) 4

Para montar o algoritmo proposto faremos trecircs perguntas

a) Quais satildeo os dados de entrada

R Os dados de entrada satildeo P1 P2 P3 e P4

b) Qual seraacute o processamento a ser utilizado

R O procedimento seraacute somar todos os dados de entrada e dividi-los por 4 (quatro)

(P1 + P2 + P3 + P4)4

c) Quais seratildeo os dados de saiacuteda

R O dado de saiacuteda seraacute a meacutedia final

32 Descriccedilatildeo de Algoritmos

A descriccedilatildeo de um algoritmo de forma clara e faacutecil de ser seguida ajuda no seu desenvolvimento depuraccedilatildeo (correccedilatildeo de erros) e a subsequente transformaccedilatildeo do mesmo num programa

Descriccedilatildeo Narrativa

Especificaccedilatildeo verbal dos passos em linguagem natural

Desvantagens a linguagem natural eacute prolixa e imprecisa e frequumlentemente pouco confiaacutevel como um veiacuteculo de transferir informaccedilatildeo

Sua utilizaccedilatildeo pode ser adotada entretanto para a apresentaccedilatildeo de comentaacuterios sobre o algoritmo (ou parte dele) esclarecendo ou realccedilando pontos especiacuteficos

Fluxograma

Uso de ilustraccedilotildees graacuteficas para transmitir informaccedilotildees (Ex Gerais mapas diagramas explicativo para montagem de aparelhos etc)

Um fluxograma mostra de forma graacutefica a loacutegica de um algoritmo enfatizando passos individuais e o fluxo de execuccedilatildeo

Texto Complementar e Exerciacutecios 12

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 13: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Desvantagens utilizaccedilatildeo questionaacutevel de fluxogramas detalhados pois obscurecem a estrutura do programa

Para algoritmos computacionais usaremos os Diagramas de Nassi-Schneidermman (Veja Apecircndice II no final )

Linguagem Algoriacutetmica ou Pseudolinguagem

Linguagem especial para expressatildeo de algoritmos funciona como uma linguagem simplificada de programaccedilatildeo utilizando expressotildees concisas e preacute-definidas para representar as accedilotildees e o fluxo de execuccedilatildeo Eacute uma descriccedilatildeo textual estruturada e regida por regras que descrevem os passos executados no algoritmo Utiliza-se palavras-chaves indentaccedilatildeo apenas um passo por linha normalmente usa-se um siacutembolo para indicar o final de um passo (como por exemplo o ponto-e-virgula ldquordquo) etc Usaremos o Portugol pois ela possui uma estrutura similar ao Pascal

Exemplo Duas representaccedilotildees para o algoritmo do problema das medias dos alunos da 6ordf Seacuterie

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 divisatildeo

33 Estruturas de Dados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 02

Um aspecto fundamental na construccedilatildeo de algoritmos computacionais satildeo as estruturas de dados que representam as informaccedilotildees do problema a ser resolvido

Tais estruturas estatildeo organizadas em tipos distintos de informaccedilotildees Dentro do escopo das estruturas de dados definimos os termos CONSTANTE VARIAacuteVEL e IDENTIFICADOR Tipos Primitivos de Dados

Texto Complementar e Exerciacutecios 13

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 14: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Satildeo os grupos de informaccedilotildees que o computador manipula Podem ser 1 Numeacutericos

a) inteiros Ex 1 -4 100 0 -905 b) reais Ex 13 81697 30 -00055

1 Natildeo-numeacutericos

a) alfanumeacutericos Ex ldquoCASArdquo ldquolivrordquo ldquo18rdquo lsquoR$ 5536rsquo b) loacutegicos ou booleanos Ex Falso Verdadeiro (ou False True)

Obs O delimitador usado para alfanumeacutericos pode ser ldquo rdquo ou lsquo rsquo

Constantes

Representam valores constantes ou seja que natildeo variam no decorrer do algoritmo Ex 148 ldquoOpccedilatildeordquo -869 ldquoTecle algo para continuarrdquo Falso Variaacuteveis

Representam informaccedilotildees cujos valores satildeo modificados ao longo do tempo (Ex Geneacuterico a idade de um indiviacuteduo) Podemos definir variaacuteveis tambeacutem como um local onde um determinado valor (de um dos tipos definidos) eacute armazenado Assim a variaacutevel eacute composta de dois elementos baacutesicos

conteuacutedo - valor atual da variaacutevel identificador - nome dado agrave variaacutevel para possibilitar sua manipulaccedilatildeo

O conceito de variaacutevel na verdade corresponde a ldquoposiccedilotildees de memoacuteria RAMrdquo onde seratildeo armazenados os dados manipulados pelo programa quando este for implementado

Endereccedilo = Posiccedilatildeo na memoacuteria

Conteuacutedo = Informaccedilatildeo armazenada

Memoacuteria RAM Variaacutevel

Identificador = Nome da variaacutevel

Conteuacutedo da variaacutevel

X

Identificador

Nome de um local onde se pode colocar qualquer valor do conjunto de valores possiacuteveis de um tipo baacutesico associado Usado para manipular todos os dados variaacuteveis do algoritmo Pode tambeacutem ser usado para rotular valores constantes (ex uso do identificador PI para representar o valor constante 314) Regras para Definiccedilatildeo de Identificadores em Pseudolinguagem (Portugol)

devem comeccedilar por um caracter alfabeacutetico (uma letra) pode ser seguido de letras eou diacutegitos eacute permitido o uso do caracter especial ldquo_rdquo situado entre letras eou diacutegitos

Ex de identificadores vaacutelidos Operador Nome X y ENDERECcedilO Aluno_01

Texto Complementar e Exerciacutecios 14

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 15: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

O identificador deve representar de forma significativa o conteuacutedo desejado ou seja deve ser um MNEMOcircNICO

Procure a definiccedilatildeo de ldquomnemocircnicordquo num dicionaacuterio Depois descubra como este termo ersquo empregado em programaccedilatildeo O que satildeo variaacuteveis mnemocircnicas Declaraccedilatildeo de Variaacuteveis

Eacute a criaccedilatildeo (ou definiccedilatildeo) de locais na memoacuteria rotulados com o identificador da variaacutevel (ou constante) que seraacute utilizada no algoritmo para a manipulaccedilatildeo de um determinado tipo de informaccedilatildeo Sintaxe Geral em Portugol

Lista de Variaacuteveis Tipo O Tipo pode ser inteiro real caracter (alfanumeacuterico) ou booleano Ex NUM X inteiro parcela real resposta booleano PI real definiccedilatildeo de uma constante real NOME ENDERECcedilO caracter

Neste momento as variaacuteveis ainda natildeo conteacutem nenhum valor associado a elas

A declaraccedilatildeo de variaacuteveis deve ser feita antes da definiccedilatildeo das accedilotildees do algoritmo

Os comentaacuterios representam qualquer texto que explique uma accedilatildeo ou um dado usado no algoritmo Eles podem ser colocados em qualquer ponto do algoritmo utilizando ou como delimitadores 34 Operaccedilotildees Baacutesicas Comando de Atribuiccedilatildeo

Serve para atribuir (ou associar) um valor a uma variaacutevel ou constante Sintaxe Geral em Pseudolinguagem

identificador expressatildeo onde expressatildeo pode ser um(a) Constante Variaacutevel Expressatildeo matemaacutetica Funccedilatildeo matemaacutetica Expressatildeo booleana etc Ex NOME lsquoFulano de Talrsquo PI 314 Erro Verdadeiro (ou simplesmente Erro T) Media (P1 + P2)2

Texto Complementar e Exerciacutecios 15

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 16: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilotildees Matemaacuteticas

nome da funccedilatildeo (argumento)

O argumento eacute a informaccedilatildeo que eacute dada agrave funccedilatildeo para que ela possa ser efetuada

adequadamente Pode ser uma constante ou uma variaacutevel Exemplos de Funccedilotildees Matemaacuteticas que utilizaremos Sin (X) - Funccedilatildeo que calcula o seno da variaacutevel X SQRT (y) - Funccedilatildeo que calcula a raiz quadrada de y int (z) - Funccedilatildeo que retorna a parte inteira da variaacutevel z (que deve ser do tipo real) Operadores Aritmeacuteticos + - (unaacuterios)

exponenciaccedilatildeo multiplicaccedilatildeo divisatildeo + - soma e subtraccedilatildeo (binaacuterios) div divisatildeo truncada (ou inteira) (ex x div y) mod resto da divisatildeo inteira Operadores Relacionais lt lt= gt gt= = lt gt (diferente)

Operadores Loacutegicos not and or

Podemos usar parecircnteses para alterar ordem de prioridade das operaccedilotildees

Ver resumo dos operadores e a ordem de prioridade das operaccedilotildees em ldquoLoacutegica de Programaccedilatildeordquo ndash Forbellone Cap 02 Comandos de Entrada e Saiacuteda de Dados

Representam as accedilotildees baacutesicas de algoritmos para recebimento e apresentaccedilatildeo de dados respectivamente Entrada de Dados informaccedilotildees que satildeo fornecidas ao programa pelo ldquousuaacuteriordquo durante a resoluccedilatildeo do problema Representaccedilatildeo em Portugol

leia (identificador identificador ) Ex leia (altura idade sexo) Saiacuteda de Dados informaccedilotildees que satildeo mostradas ao usuaacuterio como resposta ao problema Representaccedilatildeo em Pseudolinguagem

Escreva (expressatildeo expressatildeo )

Texto Complementar e Exerciacutecios 16

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 17: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex escreva (lsquo Seu peso ideal eh rsquo peso_ideal) escreva (lsquo Media final = rsquo (P1 + P2)2) Esquema Geneacuterico de Algoritmos em PseudoLinguagem

Declaraccedilatildeo de Variaacuteveis Constantes INICIO inicializaccedilatildeo de variaacuteveis constantes comentaacuterios bloco de comandos de entrada de dados comentaacuterios bloco de comandos de caacutelculo comentaacuterios bloco de comandos de saiacuteda de dados FIM

Exemplo Algoritmo em pseudolingugem para o problema do caacutelculo da meacutedia final dos alunos da 6ordf Seacuterie

declaraccedilatildeo de variaacuteveis 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 saiacuteda de dados Escreva (lsquo Media final = rsquo Media)

Fim

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo a) entrada de dados b) saiacuteda de dados c) declaraccedilatildeo de variaacuteveis d) inicializaccedilatildeo de variaacuteveis e) atribuiccedilatildeo do resultado de uma expressatildeo aritmeacutetica a uma variaacutevel F2 Utilizando tipos primitivos de dados crie declaraccedilotildees de variaacuteveis que armazenem as seguintes informaccedilotildees o nome de uma figura geomeacutetrica a quantidade de lados a aacuterea o periacutemetro e se a figura eacute regular ou natildeo

Exerciacutecios Complementares Livro Forbellone - Cap 02 - Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 17

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 18: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

35 Estruturas de Controle Sequencial Condicional e de Repeticcedilatildeo

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 03 Estrutura de Controle Sequumlencial

Conjunto de comandos que satildeo executados numa sequumlecircncia 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 Seleccedilatildeo

Permite a escolha de um grupo de accedilotildees para serem executadas de acordo com a aceitaccedilatildeo ou natildeo de certas condiccedilotildees Satildeo testados paracircmetros e a depender de seus valores tomamos um caminho ou outro As condiccedilotildees que satildeo testadas num Algoritmo satildeo do tipo loacutegica (booleana) portanto podem ter somente dois resultados Verdadeiro ou Falso Assim a seleccedilatildeo de accedilotildees pode seguir no maacuteximo duas alternativas uma se a condiccedilatildeo for verdadeira e outra se a condiccedilatildeo testada for falsa Existem seleccedilotildees mais simples e seleccedilotildees compostas outras seleccedilotildees Seleccedilotildees Simples Opccedilatildeo 1 Sintaxe Geral

Se condiccedilatildeo Entatildeo bloco de comandos 1 Fim se

Opccedilatildeo 2

Se condiccedilatildeo Entatildeo bloco de comandos 1 senatildeo bloco de comandos 2 Fim se

Texto Complementar e Exerciacutecios 18

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 19: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Seleccedilotildees Compostas Aninhamento de condiccedilotildees

Se condiccedilatildeo1 Entatildeo bloco de comandos 1 senatildeo Se condiccedilatildeo2 Entatildeo bloco de comandos 2 Fim se Fim se

Observaccedilatildeo as palavras sublinhadas na Sintaxe Geral satildeo chamadas de ldquopalavras

reservadasrdquo e sempre aparecem na estrutura As palavras em itaacutelico satildeo indicaccedilotildees do tipo de expressatildeo ou comando que devem ser usados Estrutura de Repeticcedilatildeo

Podemos ter repeticcedilotildees condicionais ( a repeticcedilatildeo ocorre condicionada a uma condiccedilatildeo loacutegica) e incondicionais (que tem um nuacutemero preacute-definido de repeticcedilotildees) a) Repeticcedilatildeo Condicional existem dois tipos distintos de Repeticcedilatildeo Condicional Tipo 1 - Condiccedilatildeo testada no iniacutecio da repeticcedilatildeo Sintaxe Geral

Enquanto condiccedilatildeo faccedila bloco de comandos Fim enquanto

Caracteriacutesticas

bull Testa a condiccedilatildeo antes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos pode ser executado 0 ou mais vezes bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar falsa

Exemplo

Elabore um algoritmo para determinar o menor nuacutemero fornecido de um conjunto de valores inteiros positivos dados Considere que o nuacutemero zero indica o encerramento do conjunto de dados de entrada

valor menor inteiro Iniacutecio leia (valor) menor valor inicializaccedilatildeo da variaacutevel que vai guardar o menor valor Enquanto ( valor lt gt 0 ) faccedila Se valor lt menor entatildeo menor valor

Texto Complementar e Exerciacutecios 19

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 20: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

fim se leia (valor) entrada do proacuteximo elemento do conjunto fim enquanto escreva (lsquo O menor valor do conjunto eacute lsquo menor) Fim

Tipo 2 - Condiccedilatildeo testada no final da repeticcedilatildeo

Repita bloco de comandos ateacute condiccedilatildeo

Caracteriacutesticas

bull Testa a condiccedilatildeo apoacutes da execuccedilatildeo do bloco bull Enquanto a condiccedilatildeo for verdadeira o bloco de comandos eacute executado Assim o bloco

de comandos eacute executado pelo menos uma vez bull Paacutera a execuccedilatildeo do bloco quando a condiccedilatildeo se tornar verdadeira (denominada de

Condiccedilatildeo de Parada) b) Repeticcedilatildeo Incondicional - Nordm preacute-definido de repeticcedilotildees Sintaxe Geral

Para variaacutevel de controle = valor inicial ateacute valor final Faccedila bloco de comandos Fim para

bull Repete o bloco de comandos (valor final - valor-inicial + 1) vezes bull Incrementa automaticamente a variaacutevel de controle cada vez que o bloco eacute

executado (incremento ldquodefaultrdquo de 1 ateacute alcanccedilar o valor final) bull Se o valor final definido for menor que o valor inicial o laccedilo de repeticcedilatildeo natildeo eacute

executado nenhuma vez bull A variaacutevel de controle deve ser do tipo primitivo inteiro bull A variaacutevel usada como controle da estrutura natildeo pode ser modificada dentro do

bloco

Texto Complementar e Exerciacutecios 20

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 21: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Elabore um algoritmo para calcular o fatorial de N onde N eacute um nuacutemero inteiro (maior ou igual a zero) Considere que Se N gt 0 entatildeo N = 1x 2 x 3 x x N

N= 0 entatildeo N = 1 Algoritmo em Pseudolinguagem n fat acum inteiro acum ersquo a variaacutevel de controle Iniacutecio leia (n) inicializaccedilatildeo de fat fat 1 Para acum = 2 ateacute n faccedila fat fat acum fim para escreva (lsquo o fatorial de rsquo n

lsquo eacute lsquo fat ) Fim

e em Fluxograma

Teste da Soluccedilatildeo 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 12 3 123 4 fatorial = 6

Exerciacutecios de Fixaccedilatildeo F1 Faccedila 02 exemplos para cada um dos conceitos abaixo

a) condiccedilatildeo loacutegica composta b) estrutura de seleccedilatildeo simples c) estrutura de seleccedilatildeo encadeada d) estrutura de seleccedilatildeo de muacuteltipla escolha

Texto Complementar e Exerciacutecios 21

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 22: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

F2 Observe o algoritmo e responda

X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

a) Qual o objetivo do algoritmo acima (ie qual o problema que ele estaacute solucionando) b) O algoritmo estaacute correto Como vocecirc fez para testaacute-lo c) Altere o algoritmo utilizando a Estrutura Repita Ateacute d) Altere o algoritmo utilizando a Estrutura Para Faccedila e) Qual das trecircs opccedilotildees de algoritmo eacute a melhor na sua opiniatildeo Por que

36 Consideraccedilotildees sobre o Uso de Variaacuteveis em Algoritmos Computacionais As variaacuteveis representam a informaccedilatildeo manipulada pelo algoritmo e portanto pode aparecer em diversas situaccedilotildees 1Armazenar dados que satildeo fornecidos pelo usuaacuterio

Ex leia (DIA MES ANO) 2 Armazenar resultados de expressotildees

Ex RESULT (A + B C) (D - E) 3 Acumuladores Acumular valores

Ex ACUMULA 1 Enquanto ACUMULA lt 100 faccedila leia (NUM) ACUMULA ACUMULA + NUM Fim enquanto 4 Contadores Contar valores

Ex CONTA 0 Repita CONTA CONTA + 1 escreva (ldquoRepeti o laccedilo rdquo CONTA ldquo vezes rdquo ) ateacute CONTA gt 20

5 Finalizadores Finalizar repeticcedilotildees

Texto Complementar e Exerciacutecios 22

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 23: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex1 leia (NUM) Enquanto NUM lt gt 0 faccedila condiccedilatildeo para parada raquoraquo NUM = 0 Seno SIN (NUM) escreva (Seno) leia (NUM) Fim enquanto Ex2 Repita leia (oper1 oper2) divis oper1oper2 escreva (lsquo Continuar (simnao) lsquo) leia (resp) ate resp = lsquonaorsquo condiccedilatildeo de parada

6 Sinalizadores ou Flags Sinalizar erros condiccedilotildees de falha de teste etc Variaacutevel que informa que uma determinada situaccedilatildeo foi alcanccedilada

Ex INVALIDA 0 Se (dialt1 or diagt31) or (meslt1 or mesgt12) entatildeo INVALIDA 1 senatildeo fim se Se INVALIDA = 0 entatildeo escreva (lsquo Data vaacutelida lsquo) senatildeo escreva (lsquo Data invaacutelida lsquo) fim se

Muitas vezes satildeo usadas variaacuteveis 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 (dialt1 or diagt31) entatildeo Muda o valor do flag para sinalizar um erro ou mudanccedila de estado INVALIDA True senatildeo Se (meslt1 or mesgt12) entatildeo INVALIDA True fim se Note que a condiccedilatildeo natildeo usa operadores loacutegicos do tipo (Invalida = True) Se INVALIDA entatildeo escreva (lsquo Erro na Data - dia invalido ou mes invalido rsquo) fim se

Texto Complementar e Exerciacutecios 23

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 24: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

37 Teacutecnicas de Elaboraccedilatildeo e Verificaccedilatildeo de Algoritmos

Leitura ldquoCiecircncia dos Computadores - Uma abordagem algoriacutetmicardquo - Tremblay Cap 07 Refinamentos Sucessivos ldquotop-downrdquo

Esta eacute uma teacutecnica de elaboraccedilatildeo de algoritmos que divide o desenvolvimento do mesmo em diferentes fases O problema inicial eacute subdividido em subproblemas menores e estes em partes ainda menores e assim sucessivamente A cada divisatildeo satildeo levados em conta mais detalhes sobre a especificaccedilatildeo do problema Esta eacute uma maneira de lidar com a complexidade do problema Mais adiante quando falarmos de Procedimentos e Funccedilotildees veremos na praacutetica o uso de Refinamentos Sucessivos Top-Down Regras para tornar seu algoritmo mais claro e legiacutevel

a) Utilize comentaacuterios Escreva os comentaacuterios no momento que estiver escrevendo o algoritmo Um programa mal documentado eacute um dos piores erros que um programador pode cometer O melhor momento para se escrever os comentaacuterios eacute aquele em que o programador tem maior intimidade com o algoritmo ou seja durante a sua confecccedilatildeo Existem 02 tipos de comentaacuterios que devem ser usados Proacutelogo ou Cabeccedilalho satildeo comentaacuterios que conteacutem uma identificaccedilatildeo geral do algoritmo

bull O que faz o algoritmo (programa ou moacutedulo) bull Como chamaacute-lo ou utilizaacute-lo bull Significado dos paracircmetros variaacuteveis de entrada de saiacuteda e variaacuteveis mais

importantes bull Arquivos utilizados bull Outros moacutedulos utilizados bull Meacutetodos especiais utilizados com referecircncias nas quais possa se encontrar mais

informaccedilotildees bull Autor data de escrita e uacuteltima atualizaccedilatildeo

Comentaacuterios de linha satildeo comentaacuterios de passos que podem ser mais obscuros para o leitor como o uso de variaacuteveis como acumuladores contadores flags etc b) Utilize identificadores mnemocircnicos escolha nomes representativos para variaacuteveis funccedilotildees constantes tipos etc Evite usar letras quando a variaacutevel representa algo concreto (ex X Y + Z eacute muito menos claro que Preco Custo + Lucro) Tambeacutem evite identificadores longos (ex use nome ou nAluno ao inveacutes de nome_do_aluno para representar ldquonome de alunordquo) c) Utilize indentaccedilatildeo para mostrar a estrutura loacutegica do programa Crie suas regras baacutesicas de indentaccedilatildeo e procure seguiacute-las ao escrever um algoritmo Uma boa regra eacute indentar blocos de comandos internos a uma estrutura de controle d) Utilize espaccedilos em branco para melhorar a legibilidade Os espaccedilos em branco satildeo valiosos para melhorar a aparecircncia de um programa Vocecirc pode por exemplo

Texto Complementar e Exerciacutecios 24

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 25: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Deixar uma linha em branco entre as declaraccedilotildees e o corpo do programa bull Separar grupos de comandos que executam funccedilotildees loacutegicas distintas por uma ou mais

linhas em branco Um comando por linha eacute suficiente A utilizaccedilatildeo de vaacuterios comandos por linha eacute prejudicial por vaacuterios motivos dentre eles destacam-se o fato do programa tornar-se mais ilegiacutevel e ficar mais difiacutecil de ser depurado Testes

Um tipo de teste (denominado Teste de Mesa ou Teste Exaustivo) de um algoritmo pode ser feito atraveacutes de uma simulaccedilatildeo do mesmo aonde satildeo dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde satildeo colocadas todas as variaacuteveis e constantes do algoritmo Segue-se o fluxo de execuccedilatildeo (como se estivesse executando o algoritmo em um computador imaginaacuterio) A cada comando de atribuiccedilatildeo ou caacutelculo de expressatildeo o valor das variaacuteveis deve ser atualizado Ao final do teste podemos ter as seguintes situaccedilotildees

o resultado esperado foi alcanccedilado ou foram detectados erros nos comandos ou foram detectados erros no fluxo de execuccedilatildeo - erro nas estruturas de controle

Procure fazer testes relevantes como por exemplo aqueles que verificam casos extremos e casos de exceccedilotildees Com o teste eacute possiacutevel identificar se e em que ponto o algoritmo estaacute falhando e fazer a correccedilatildeo Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo natildeo gerar nada se o computador detectar erros graves na sequumlecircncia de operaccedilotildees

Exerciacutecios de Fixaccedilatildeo Teste o algoritmo abaixo Faccedila um Teste de Mesa usando a tabela ao lado do algoritmo

lembre-se de testar os ldquocasos criacuteticosrdquo (casos extremos e casos de exceccedilotildees) X N inteiro Inicio leia (N X) Y 1 Enquanto ( X gt 0 ) faccedila inicio Y Y N X X - 1 fim Fim enquanto escreva ( Y ) Fim

N X Y ( X gt 0 )

Exerciacutecios Propostos P1 Elabore um algoritmo que verifique se um nuacutemero positivo eacute primo ou natildeo Faccedila um teste

exaustivo da soluccedilatildeo encontrada

Texto Complementar e Exerciacutecios 25

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 26: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

P2 Elabore um algoritmo que calcule os 20 primeiros termos da Seacuterie de Fibonacci A seacuterie de Fibonacci eacute formada pela seguinte sequumlecircncia 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 nuacutemeros inteiros positivos

Considere que o conjunto de dados de entrada termina quando eacute fornecido o nuacutemero -5 P4 Escreva um algoritmo que leia n nuacutemeros inteiros e determine se cada um deles eacute um

nuacutemero da sequumlecircncia de Fibonacci ou natildeo P5 O algoritmo abaixo tem como objetivo determinar o valor do somatoacuterio S dado pela seacuterie

S = X - X2 3 + X4 5 - X6 7 + usando os 20 primeiros termos da seacuterie poreacutem o

algoritmo natildeo estaacute correto Corrija os erros encontrados (se preciso rescreva o algoritmo)

e acrescente comentaacuterios para aumentar a legibilidade do algoritmo Faccedila um Teste de

Mesa

inteiro X F S Inicio leia ( X ) S larr 1 Fat larr 1 Para I = 1 ateacute 20 faccedila Para F = 1 ateacute ( 2 I ) faccedila Fat = Fat F Fim Para S larr ( S + (X (2 I) ) ) Fat Fim Para Escreva ( O somatoacuterio 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) Meacutedia de Idade das mulheres b) Estado Civil mais prevalente entre os entrevistados e o de menor ocorrecircncia

P7 Foi feita uma pesquisa de audiecircncia de canal de TV em vaacuterias casas numa certa cidade

num certo dia Para cada casa visitada eacute fornecido o nuacutemero do canal (4 5 7 11) e o nuacutemero de pessoas que estavam assistindo TV Elabore um algoritmo que leia um nuacutemero indeterminado de dados (terminando quando for lido um canal igual a zero) e calcule a percentagem de audiecircncia para cada emissora mostrando ao final o nuacutemero de cada canal e sua respectiva audiecircncia

No Apecircndice I encontra-se a soluccedilatildeo de alguns dos exerciacutecios propostos

Exerciacutecios Complementares

Livro do Forbellone - Cap 03 Exerciacutecios de Fixaccedilatildeo e Exerciacutecios Propostos

Texto Complementar e Exerciacutecios 26

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 27: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 27

II LOacuteGICA DE PROGRAMACcedilAtildeO COM PASCAL

Leitura

ldquoEngenharia de Softwarerdquo - Roger S Pressman Cap 16 - ldquoLinguagens de Programaccedilatildeo e Codificaccedilatildeordquo (exceto 162) ldquoIntroduccedilatildeo agrave Programaccedilatildeo com Pascalrdquo- Seacutergio E R Carvalho ldquoInformatica ndash Novas Aplicacoes com Microcomputadoresrdquo- Antonio Meirelles (pag 72 a 79) 4 As Linguagens de Programaccedilatildeo A linguagem de programaccedilatildeo eacute o meio pelo qual podemos indicar os ldquopassosrdquo que devem ser realizados pelo computador para resolver problemas Utilizando as linguagens de programaccedilatildeo colocamos algoritmos numa forma que o computador possa interpretaacute-los ou seja na forma de programas computacionais Para que o computador execute o algoritmo proposto as operaccedilotildees devem ser transcritas para uma linguagem que a maacutequina consiga compreender Na realidade os computadores soacute podem executar algoritmos expressos em linguagem de maacutequina que constitui-se de um conjunto de instruccedilotildees capazes de ativar diretamente os dispositivos eletrocircnicos do computador

Caracteriacutesticas da Linguagem de Maacutequina

bull diferente para cada tipo de computador dependendo de sua arquitetura bull extremamente rudimentar onde ateacute as operaccedilotildees mais simples tecircm que ser expressas

em termos de registros acumuladores e outros dispositivos de maacutequina bull totalmente expressa em forma numeacuterica - sistema de numeraccedilatildeo binaacuterio (0s e 1s) ou

hexadecimal Consequentemente eacute uma linguagem de difiacutecil aprendizado e pouco expressiva para as pessoas Para tornar a atividade de programaccedilatildeo mais acessiacutevel foram desenvolvidas outras linguagens denominadas de ldquoLinguagens de Programaccedilatildeordquo que funcionam como uma forma alternativa de se comunicar com o computador Como Funcionam as Linguagens de Programaccedilatildeo

As linguagens de programaccedilatildeo satildeo compostas por um grupo de elementos e regras que permitem a construccedilatildeo das instruccedilotildees utilizadas para resolver os problemas computacionais Com elas construiacutemos programas que devem ser posteriormente transformados em instruccedilotildees em Linguagem de Maacutequina Para realizar a transformaccedilatildeo cada linguagem de programaccedilatildeo possui um programa-suporte denominado genericamente de TRADUTOR

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 28: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

41 Tipos de Linguagens de Programaccedilatildeo As linguagens de programaccedilatildeo podem ser divididas em dois grupos baacutesicos

Linguagens de Programaccedilatildeo de Baixo Niacutevel Linguagens de Programaccedilatildeo de Alto Niacutevel

411 Linguagem de Programaccedilatildeo de Baixo Niacutevel Conhecida como Linguagem Assembler ou Linguagem de Montagem ou ainda Linguagem Simboacutelica Utiliza nuacutemeros binaacuterios hexadecimais alguns siacutembolos e letras para compor os programas Estaacute muito proacutexima da Linguagem de Maacutequina onde cada instruccedilatildeo simboacutelica corresponde praticamente a uma instruccedilatildeo de maacutequina Para transformar o programa escrito em Linguagem Assembler em coacutedigo de maacutequina executaacutevel eacute utilizado um programa-suporte denominado de MONTADOR 412 Linguagens de Programaccedilatildeo de Alto Niacutevel Satildeo linguagens de programaccedilatildeo que utilizam notaccedilotildees matemaacuteticas e grupos de palavras para representar as instruccedilotildees de maacutequina tornando o processo de programaccedilatildeo mais proacuteximo do entendimento humano Muitas destas linguagens foram desenvolvidas para atender os problemas de aacutereas de aplicaccedilatildeo especiacuteficas como por exemplo linguagens para aplicaccedilotildees comerciais cientiacuteficas administrativas de ensino etc A primeira linguagem de alto niacutevel foi desenvolvida em 1957 - denominada de FORTRAN (Formula Translator) - e destina-se a aplicaccedilotildees cientiacuteficas e de engenharia De acordo com seu periacuteodo de surgimento e caracteriacutesticas particulares adotadas em sua composiccedilatildeo as ling de alto niacutevel satildeo divididas em GERACcedilOtildeES (Linguagens de 2ordf Geraccedilatildeo 3ordf Geraccedilatildeo e 4ordf Geraccedilatildeo ) Vantagens das linguagens de Alto Niacutevel

bull facilidade de entendimento e uso bull independecircncia de maacutequina (eacute praticamente a mesma natildeo importando o

computador utilizado) Para transformar os programas escritos com Linguagens de Alto Niacutevel em coacutedigos de maacutequina eacute usado um programa-suporte denominado TRADUTOR (Compilador ou Interpretador) 42 Compilaccedilatildeo e Execuccedilatildeo de Programas Para executarmos um programa escrito numa linguagem de alto niacutevel eacute preciso primeiro traduzir o coacutedigo-fonte para coacutedigo-objeto O processo de traduccedilatildeo pode dar-se em tempo de execuccedilatildeo caso a linguagem use um interpretador (traduz e executa instruccedilatildeo a instruccedilatildeo) ou

Texto Complementar e Exerciacutecios 28

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 29: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

todas as instruccedilotildees podem ser traduzidas antes que se inicie a execuccedilatildeo do programa o que ocorre no caso de linguagens que usam tradutores do tipo compilador

Coacutedigo Objeto Coacutedigo Fonte Tradutor

Compilador No sentido mais geral qualquer programa que transforme um conjunto de siacutembolos em outro obedecendo a uma seacuterie de regras sintaacuteticas e semacircnticas no sentido mais comum um programa que traduz todo o coacutedigo-fonte de programas escritos numa linguagem de alto niacutevel em coacutedigo-objeto antes da execuccedilatildeo do programa O coacutedigo-objeto eacute o coacutedigo de maacutequina ou alguma variaccedilatildeo do coacutedigo de maacutequina Coacutedigo-fonte natildeo eacute executaacutevel diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legiacutevel aos humanos Coacutedigo-objeto eacute o coacutedigo produzido pelo compilador eacute uma forma intermediaacuteria similar a linguagem de maacutequina do computador Apesar de estar representado em binaacuterio natildeo eacute executaacutevel diretamente pelo processador pois normalmente o coacutedigo-objeto referencia partes de programa que natildeo estatildeo necessariamente definidas no mesmo arquivo que o gerou por exemplo arquivos de bibliotecas de sub-rotinas Editores de ligaccedilatildeo (ou linkeditores) Um programa que reuacutene moacutedulos compilados e arquivos de dados para criar um programa executaacutevel Os linkeditores tecircm tambeacutem outras funccedilotildees como a criaccedilatildeo de bibliotecas

Exerciacutecios de Fixaccedilatildeo F1 Faccedila um quadro comparativo para

b) Linguagem de Alto Niacutevel e Linguagem de Baixo Niacutevel

c) Programa Fonte e Programa Objeto

F2 Faccedila um diagrama que descreva o processo de compilaccedilatildeo e execuccedilatildeo de programas

indicando que ferramentas (softwares) satildeo utilizados em cada etapa e suas respectivas funccedilotildees

Pesquise sobre Linguagens de Programaccedilatildeo de Alto Niacutevel e responda

a) A que geraccedilatildeo de linguagens PASCAL pertence

b) Quais a caracteriacutesticas marcantes das linguagens de 3ordf geraccedilatildeo

c) Cite exemplos de linguagens atuais para aplicaccedilotildees comerciais e de ensino

Texto Complementar e Exerciacutecios 29

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 30: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

5 A Linguagem de Programaccedilatildeo Pascal

Leitura ldquoProgramaccedilatildeo em Pascalrdquo - Byron Gottfried Cap 2 51 Estrutura Geral dos Programas em Pascal

|-----Significado ------------------------------ estrutura do programa -------------------------------|

Cabeccedilalho PROGRAM ltidentificadorgt Bloco Declaraccedilotildees Constantes CONST ltlista de constantesgt Tipos TYPE lttipos definidos pelo usuaacuteriogt Variaacuteveis VAR ltlista de variaacuteveisgt Procedimentos PROCEDURE descriccedilatildeo do procedimento Funccedilotildees FUNCTION descriccedilatildeo da funccedilatildeo Instruccedilotildees BEGIN Bloco principal de comandos END

PROGRAM CONST etc satildeo palavras reservadas da linguagem Pascal isto eacute satildeo termos que tem um significado preacute-definido e portanto soacute devem ser usados da forma especificada na linguagem (por exemplo vocecirc natildeo poderia criar uma variaacutevel com o nome ldquovarrdquo) 52 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 baacutesicos existentes (na claacuteusula TYPE) aumentando assim o nuacutemero de aplicaccedilotildees que podem ser implementadas com a linguagem

Os Tipos de Dados podem ser divididos em 1 Tipos Simples 2 Tipos Definidos pelo usuaacuterio 21 Simples 22 Estruturados 3 Tipos Estruturados 4 Tipo Apontador 521 Tipos de Dados Simples Satildeo elementos individuais associados a um identificador simples Representam locais de memoacuteria individuais ocupados por valores simples (nuacutemeros cadeia de caracter etc)

Inteiro (integer)

Texto Complementar e Exerciacutecios 30

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 31: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

A operaccedilatildeo de divisatildeo () efetuada com valores do tipo inteiro resultam em um valor do tipo REAL Natildeo existe operador exponencial

Real (real) Os operadores DIV e MOD natildeo podem ser usados com dados do tipo real

Caracter (char)

Satildeo cadeias de caracteres individuais ou seja caracteres individuais escritos entre apoacutestrofos (lsquo rsquo)

lsquo rsquo representa o caracter branco Quando queremos representar o caracter apoacutestrofo devemos escrevecirc-lo duas vezes (lsquolsquorsquorsquo) Correspondem os caracteres da Tabela ASCII Assim cada caracter corresponde a um

coacutedigo numeacuterico podendo ser comparados uns com os outros baseados em sua ordem relativa dentro do conjunto de caracteres

Booleano (boolean)

A este tipo satildeo atribuiacutedos os valores TRUE ou FALSE que representam um conjunto ordenado onde o valor falso precede o verdadeiro

Nas operaccedilotildees loacutegicas compostas devem ser utilizados parecircnteses (obrigatoriamente) para determinar a precedecircncia de realizaccedilatildeo das operaccedilotildees

522 Tipos Definidos pelo Usuaacuterio - Tipos Simples Podem ser criados a partir de um grupo de valores especiacuteficos (Subrange) ou Enumerados Os tipos estruturados satildeo definidos a partir de tipos primitivos ou tipos definidos anteriormente (tipos de tipos) Uso de claacuteusula TYPE para declaraccedilatildeo de tipos definidos pelo usuaacuterio Deve preceder a declaraccedilatildeo de variaacuteveis (ver esquema geral de programas pascal-item 51 )

Subrange (grupo de valores) Eacute um subconjunto contiacutenuo 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 bull Sintaxe Geral

TYPE nome_tipo = primeiro_elemento uacuteltimo_elemento Ex1 Type maiuscula = lsquoArsquo lsquoZrsquo Var letra_m maiuscula Ex2 Type Dia = 131 Var dia_data dia mes_data 112 ano_data 9095

Enumerados

Texto Complementar e Exerciacutecios 31

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 32: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Tipos enumerados definem conjuntos ordenados de valores atraveacutes da enumeraccedilatildeo de identificadores que representam estes valores Sua ordem segue a sequecircncia na qual os identificadores satildeo enumerados bull Sintaxe Geral

TYPE nome = (identif identif identif ) Os identificadores na definiccedilatildeo do tipo tornam-se constanes do tipo enumerado A primeira constante eacute associada agrave posiccedilatildeo 0 a segunda agrave posiccedilatildeo 1 e assim por diante Os tipos enumerados satildeo uma subclasse dos tipos ordinais Ex1 type Naipe = (Ouros Espada Paus Copas) Dada esta declaraccedilatildeo Copas por exemplo eacute uma constante do tipo Naipe A funccedilatildeo do Pascal ORD retorna a posiccedilatildeo (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) 53 Estruturas de Controle

Seleccedilatildeo IF THEN ELSE

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt

ltbloco de instruccedilotildeesgt pode ser somente uma instruccedilatildeo ou um conjunto de instruccedilotildees delimitadas pelas palavras reservadas BEGIN e END que definem um bloco

IF ltexpressatildeo booleanagt THEN ltbloco de instruccedilotildeesgt ELSE ltbloco de instruccedilotildeesgt

Natildeo deve haver um terminador () antes do ELSE Caso haja mais de uma instruccedilatildeo antes do ELSE estas devem ser delimitadas por BEGIN e END (sem o apos o end)

Seleccedilatildeo CASE

Texto Complementar e Exerciacutecios 32

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 33: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

CASE ltexpressatildeogt OF Label1 ltbloco de instruccedilotildees1gt Label2 ltbloco de instruccedilotildees2gt hellip hellip ELSE ltbloco de instruccedilotildeesgt END

ltexpressatildeogt se for uma variaacutevel ela natildeo pode ser do tipo real e se for uma expressatildeo natildeo pode gerar resultado do tipo real Label deve ser um valor relacionado com o tipo da variaacutevel ou resultado da expressatildeo (nuacutemeros inteiros caracteres valores booleanos ) na estrutura CASE natildeo se coloca o begin mas eacute preciso colocar o end

Repeticcedilatildeo condicional

WHILE ltexpressatildeo booleanagt DO ltbloco de instruccedilotildeesgt

REPEAT ltinstruccedilotildeesgt UNTIL ltexpressatildeo booleanagt

Natildeo eacute preciso delimitar as instruccedilotildees da Estrutura REPEAT com as palavras reservadas BEGIN e END

Repeticcedilatildeo incondicional (nuacutemero preacute-definido de vezes)

FOR var_controle = Vi TO DOWNTO Vf DO ltbloco de instruccedilotildeesgt

Usando TO Enquanto Vi lt= Vf executa o laccedilo de repeticcedilatildeo Usando DOWNTO Enquanto Vi gt= Vf executa o laccedilo de repeticcedilatildeo ltvar_controlegt deve ser do tipo inteiro e natildeo pode ser alterada dentro do laccedilo Ex

Program ListaNumeros VAR lin col n integer Begin Readln(n) For lin = 1 to n do begin For col= lin to (n + lin ndash1) do write(col lsquo lsquo) 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 Exerciacutecios 33

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 34: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exemplo Exerciacutecio no 14 pag 63 - Cap 03 Forbellone (2a ediccedilatildeo) Program Pesquisa Uses crt indicaccedilatildeo do uso de biblioteca de funccedilotildees do Turbo Pascal que manipula o hardware video teclado etc Var declaraccedilatildeo de variaacuteveis sexoolhoscabelos char idade maioridade conta total integer perc real Begin total = 0 inicializaccedilatildeo de variaacuteveis conta = 0 maioridade = 0 clrscr limpa a tela gotoxy (53) Posiciona cursor na coluna 5 linha 3 da tela write (Pesquisa de Caracteristicas Fisicas na PopulaDaggerao ) gotoxy(105) write(digite a idade) readln(idade) While idade ltgt -1 do laccedilo de repeticcedilatildeo - Finaliza quando idade = -1 begin gotoxy(106) write(digite o sexo (FM)) readln(sexo) gotoxy(107) write(digite a cor dos olhos (AazuisVverdesCcastanhos) ) readln(olhos) olhos = upcase(olhos) gotoxy(108) write(digite a cor dos cabelos (LlouroCcastanhosPpretos) ) readln(cabelos) cabelos = upcase(cabelos) If (upcase(sexo)=F) and (olhos=V) and (cabelos=L) and (idade gt= 18) and (idade lt= 35) then conta= conta + 1 If idade gt maioridade then maioridade = idade total = total + 1 gotoxy(105) write(digite a idade) readln(idade) end perc = conta 100 total clrscr gotoxy(17) Apresentaccedilatildeo de Resultados writeln(A maior idade encontrada na populaccedilao foi de maioridade anos) writeln(Perc mulheres de 18 a 35 anos c cabelos louros e olhos verdes=perc52) End

Texto Complementar e Exerciacutecios 34

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 35: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios Propostos

Exemplo de programa sem entrada de dados

1 Faccedila um programa Pascal que calcule e escreva o nuacutemero de gratildeos 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

Exemplo de programa com repeticcedilotildees (nuacutemero preacute-definido de vezes)

2 Um nuacutemero primo eacute aquele que natildeo eacute divisiacutevel por nenhum nuacutemero menor do que ele exceto a unidade Deseja-se ler N nuacutemeros e mostrar todos os divisores de cada um deles Para os primos imprimir um asterisco( ) do lado

Ex 10 rarr 1 5 10 15 rarr 1 3 5 15 11 rarr 1

Exemplo de programa com repeticcedilotildees (nuacutemero indefinido de vezes) e uso de variaacuteveis de apoio a estatiacutesticas

3 Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou natildeo de um novo produto lanccedilado Para isto forneceu o sexo do entrevistado e sua resposta (sim ou natildeo) Sabendo-se que foram entrevistadas 200 pessoas fazer um programa que calcule e mostre a) o nuacutemero de pessoas que disseram SIM

b) o nuacutemero de pessoas que disseram NAtildeO

c) a percentagem de pessoas do sexo feminino que responderam SIM

d) a percentagem de pessoas do sexo masculino que responderam NAtildeO

Exemplo de programa aplicado a matemaacutetica

4 Fazer um programa que calcule o volume e a aacuterea de uma esfera usando as foacutermulas abaixo V = 4π r3 3 A = 4π r2

Um desafio de Loacutegica 5 Satildeo fornecidos o iniacutecio e o fim de uma atividade em termos de DIA MEcircS e ANO Deseja-

se imprimir o nuacutemero de meses e dias decorridos desde o iniacutecio ateacute o final da atividade

Exerciacutecios Complementares Forbellone (2a Ediccedilatildeo) - pag 62 a 65 Exerciacutecios Propostos 1 9 13 16

Texto Complementar e Exerciacutecios 35

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 36: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

54 Tipos de Dados Estruturados

Leitura ldquoLoacutegica de Programaccedilatildeordquo - Forbellone Cap 04 Os tipos estruturados satildeo compostos por muacuteltiplos elementos relacionados entre si Cada grupo de elementos estaacute relacionado a um identificador Os elementos do grupo podem estar tambeacutem relacionados a identificadores individuais Representam vaacuterios locais de memoacuteria que guardam vaacuterios valores que podem ser acessados em conjunto ou individualmente Podem ser

String Vetores Registros Arquivos Conjuntos

String Satildeo cadeias (ou sequecircncia) de caracteres (letras diacutegitos e caracteres especiais) entre apoacutestrofos (lsquo rsquo)

Nas cadeias podem ser usadas letras maiuacutesculas e minuacutesculas O nuacutemero maacuteximo de caracteres que pode ser incluiacutedo numa cadeia varia de acordo com

a versatildeo do Pascal sendo que a maioria permite um comprimento maacuteximo de 255 caracteres

Especificaccedilatildeo do tipo String string [n ] onde n eacute a quantidade de caracteres da cadeia Cada elemento da cadeia pode ser manipulado separadamente

Ex Var cadeia string[15] Begin read(cadeia) manipulaccedilatildeo de toda a cadeia write(lsquoesta foi a informaccedilatildeo digitadarsquo cadeia) write(lsquoprimeiro elemento (ou letra) da cadeia rsquo cadeia[1] )

Exerciacutecio Proposto Pesquise as Funccedilotildees do Pascal para Manipulaccedilatildeo de Strings Explique seu objetivo tipos de paracircmetros e reultados e decirc um exemplo

Ex de funccedilotildees Length( ) Copy (string iacutendice contador)

541 Vetores (ARRAY) Definem agregados de dados homogecircneos (todos os elementos satildeo do mesmo tipo) Cada elemento ocupa uma posiccedilatildeo definida no agregado e pode ser referenciado atraveacutes dela

Texto Complementar e Exerciacutecios 36

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 37: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Declaraccedilatildeo de Vetores

ARRAY [tipo_iacutendice] OF tipo_elemento tipo_iacutendice eacute um tipo simples ordenado (inteiro caracter booleano enumerado) Eacute formado por [lils ] onde li limite inferior e ls limite superior Este tipo pode ser utilizado tanto na declaraccedilatildeo de variaacuteveis como tambeacutem na definiccedilatildeo de novos tipos (sessatildeo TYPE) Ex1 Var lista array [1100] of real o identificador do vetor eacute lista e ele poderaacute conter 100 elementos do tipo real Ex2 Type iacutendice = 1100 tipo definido pelo usuaacuterio - tipo subrange Var lista array [iacutendice] of real Ex3 Type max = 300 vetor = array[1max] of string[20] Var endereccedilo vetor a variaacutevel endereccedilo estaacute associada ao tipo vetor Ex4 Var dados array[lsquoArsquorsquoZrsquo] of integer bull Definiccedilatildeo de Vetores como Constantes (Const)

Sintaxe geral identificador_constante tipo_array = (lista de valores) Ex1 Const vetconst array [13] of integer = (0 1 2) Ex2 Type vetsemana array [17] of string [3] Const dias_semana vetsemana = (lsquoDOMrsquo lsquoSEGrsquo lsquoTERrsquo lsquoQUArsquo lsquoQUIrsquo lsquoSEXrsquo lsquoSABrsquo)

Obs Os valores das constantes array de tipo Char podem ser especificadas ou como valores caracteres simples ou como um string Ex Const diacutegito array [09] of char = (lsquo0rsquo lsquo1rsquo lsquo2rsquo lsquo3rsquo lsquo4rsquo lsquo5rsquo lsquo6rsquo lsquo7rsquo lsquo8rsquo lsquo9rsquo) ou Const diacutegito array [09] of char = lsquo0123456789rsquo

Texto Complementar e Exerciacutecios 37

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 38: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

bull Manipulaccedilatildeo de vetores nos programas Pascal

identificador_array[posiccedilatildeo_elemento] posiccedilatildeo_elemento (ou iacutendice) pode ser expresso com uma constante variaacutevel ou expressatildeo devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex lista[5] lista[i] onde i eacute uma variaacutevel inteira com valores variando de 1 a 100 lista[i+j] onde i e j satildeo variaacuteveis inteiras cuja soma natildeo ultrapassa 100 Os elementos do ARRAY podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo Program ExVetor Type VetorNotas array [140] of real Var Nota vetorNotas i integer Begin i = 1 media = 0 Repeat write (lsquoDigite a Nota rsquo) read(Nota[i]) media= media + Nota[i] i= succ(i) funccedilatildeo que incrementa a variaacutevel rArr i i + 1 until i gt 40 writeln (lsquoNotas dos Alunos rsquo) For i= 1 to 40 do writeln (Nota[i]) writeln (lsquoMedia da Turmarsquo media4052) End

Texto Complementar e Exerciacutecios 38

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 39: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor

3 Elabore um programa que leia um conjunto A com 50 nuacutemeros reais e construa um

conjunto B onde os elementos de ordem (posiccedilatildeo) par satildeo os elementos correspondentes de A divididos por 2 e os de ordem (posiccedilatildeo) iacutempar correspondem aos elementos de A multiplicados por 3 Ao final mostre os dois conjuntos de nuacutemeros

4 Fazer um programa Pascal que ao ser fornecida uma data no formato DDMMAA

mostre-a por extenso Ex Entrada Data 12 06 95 Saiacuteda 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 eacute um quadrado perfeito e com 0 nos demais casos 6 Elabore um programa que utilize dois vetores V1 e V2 formados de nuacutemeros reais com 20

posiccedilotildees cada um e efetue neles as operaccedilotildees indicadas no vetor OP cujos elementos satildeo caracteres que indicam as quatro operaccedilotildees aritmeacuteticas baacutesicas (+ - ) O resultado obtido das operaccedilotildees devem ser colocados num vetor resultante VR e mostrado ao final do programa

Texto Complementar e Exerciacutecios 39

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 40: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

542 Vetores Multidimensionais (Matrizes) bull Sintaxe Geral

nome_array [dim1 dim2 dim3] of tipo_elemento Onde as dimensotildees satildeo definidas como dim1 = li1ls1 dim2 = li2ls2 dim3 = li3ls3 etc Ex1 TRIDIMENSIONAL array [110 120 140] of real define matriz

tridimensional onde a 1ordf dimensatildeo tem 10 elementos a 2ordf tem 20 elementos e a 3ordf tem 40 elementos

Ex2 BIDIMENSIONAL array [1519] of char define matriz bidimensional com 5

elementos do tipo char na 1ordf dimensatildeo e 9 na 2ordf dimensatildeo bull Manipulaccedilatildeo de matrizes nos programas Pascal

identificador_array[posiccedilatildeo_dim1 posiccedilatildeo_dim2 ] posiccedilatildeo_dim1 posiccedilatildeo_dim2 podem ser expressos com constantes variaacuteveis ou expressotildees devendo ser do tipo correto (correspondente agrave definiccedilatildeo do array) e estar dentro do intervalo preacute-definido Ex tridim[548] bidim[i9] onde i eacute uma variaacutevel inteira com valores variando de 1 a 5 Os elementos da MATRIZ podem ser usados em expressotildees instruccedilotildees de atribuiccedilatildeo instruccedilotildees read e write etc bull Programa Exemplo

Program Matrizes Var Matriz array [120 110] of integer lin col integer Begin For lin = 1 to 20 do For col = 1 to 10 do read (matriz[lincol])

Texto Complementar e Exerciacutecios 40

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 41: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Escreva um programa que leia duas matrizes bidimensionais reais MAT1 e MAT2 de

dimensotildees 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 (dimensotildees 10x10) incluindo os elementos da proacutepria diagonal

3 Escreva um programa que leia duas matrizes reais A e B de dimensotildees 3x5 e 5x3 respectivamente calcule e imprima o produto delas

4 Dada uma matriz A de dimensotildees 5x4 formada de elementos numeacutericos reais calcule e mostre sua matriz transposta T

5 Dada uma matriz B formada por nuacutemeros inteiros com 10 linhas por 15 colunas determinar o elemento de maior valor algeacutebrico Mostre tal elemento e sua posiccedilatildeo na matriz (linha e coluna)

Texto Complementar e Exerciacutecios 41

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 42: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

55 Algoritmos de Classificaccedilatildeo e Busca Algoritmos de Classificaccedilatildeo Existem diversos meacutetodos para classificar (ou ordenar) uma estrutura de dados dentre eles temos

Meacutetodo da Bolha (Bubble Sort) Meacutetodo da Seleccedilatildeo Direta Meacutetodo Quick Sort

Exemplo Meacutetodo da Bolha na ordenaccedilatildeo de um vetor de ldquonomes de objetosrdquo Program BubbleS Uses crt Const N=5 Type letras = string[10] vet_letras= array[1N] of letras Var objetos vet_letras aux letras IJcontinteger Begin clrscr Gotoxy(222) Write(gtgtgt Exercicio - Ordenacao de Vetores com metodo da Bolhaltltlt) Gotoxy(74) write(Digite n nomes de objetos para compor o conjunto) For i=1 to N do begin gotoxy(76+i) write (Digite o elemento Objetos(i) ) readln( objetos[i] ) gotoxy(336) write( ) end Ordenaccedilatildeo do Vetor For i= 2 to N do for j= N downto i do if objetos[j] lt objetos[j-1] then begin aux = objetos[j] objetos[j] = objetos[j-1] objetos[j-1]= aux end Saida Ordenada gotoxy(715) writeln (Vetor Ordenado ) for i=1 to N do begin gotoxy(2015+i) writeln( objetos[i] )

Texto Complementar e Exerciacutecios 42

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 43: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 posiccedilatildeo em que se encontra senatildeo imprimir natildeo encontrei K no vetor Program Procura_K Uses crt CONST Max=10 Indica o numero maximo de elementos do ARRAY NUM VAR IK integer achou boolean NUM Array [1Max] of integer Begin clrscr Gotoxy(107) Writeln(Digite Max numeros inteiros) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(NUM[i]) gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(1012) Write(Digite o numero que deseja procurar no conjunto ) read(k) achou=false i=1 While (not achou) and (ilt=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 faccedila um exemplo em Pascal (Ex Algoritmo de Pesquisa Binaacuteria)

Texto Complementar e Exerciacutecios 43

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 44: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 44

56 Procedimentos e Funccedilotildees

Leitura ldquoProgramaccedilatildeo em Pascalrdquo ndash B S Gottfried Cap 07 Dentre as teacutecnicas de programaccedilatildeo estruturada encontra-se a modularizaccedilatildeo Esta teacutecnica consiste em decompor um programa global em uma seacuterie de subprogramas individuais A vantagem de se usar a modularizaccedilatildeo eacute 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 eacute valida ou natildeo Este moacutedulo pode ser usado vaacuterias vezes num mesmo programa que leia varias datas diferentes e pode ser reaproveitado em novos programas que seratildeo escritos) Outras consequumlecircncias positivas do uso de modularizaccedilatildeo eacute o aumento de clareza e concisatildeo do programa pois o comprimento do programa diminui com o uso de moacutedulos Em Pascal existem dois tipo de moacutedulos de programas Procedimentos e Funccedilotildees Indicamos a leitura dos livros textos para um amplo entendimento das caracteriacutesticas dos procedimentos e funccedilotildees e diferenccedilas entre eles Abaixo encontram-se exemplos de programas que usam modularizaccedilatildeo

Exemplo1 Programa para calcular o diacutegito verificador de contas correntes Utilizaccedilatildeo de funccedilotildees definidas pelo programador 1 Funccedilotildees Principais bull Funccedilatildeo Digito(cc) recebe como entrada o nuacutemero da conta corrente e retorna seu diacutegito

verificador bull Funccedilatildeo Inverso(n tam) recebe o nuacutemero n de tamanho tam e retorna o inverso do

nuacutemero 2 Funccedilotildees Auxiliares

bull Funccedilatildeo Exponenc(np) calcula a potecircncia de um nuacutemero ( = n p) bull Funccedilatildeo Tamanho(n) determina a quantidade de algarismos de um nuacutemero

Program Conta_Corrente Var -----gt Declaraccedilatildeo de Variaacuteveis Globais cc longint Funccedilatildeo que simula a operaccedilatildeo de potenciaccedilatildeo Paracircmetros Formais valor numero que desejamos elevar a potecircncia pot potecircncia elevada FUNCTION Exponenc (valor pot integer) longint Var fator longint

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 45: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

i integer Begin if pot = 0 then Exponenc=1 usa-se o proacuteprio nome da Funccedilatildeo para assinalar o valor a ser retornado else begin fator= valor for i = 2 to pot do fator= fator valor Exponenc = fator end End Funccedilatildeo que retorna a quantidade de algarismos de um numero Paracircmetros Formais num numero desejado FUNCTION Tamanho(num longint) integer Var x string Begin str(numx) --gt Procedure do Pascal que transforma um nuacutemero numa string Tamanho = length(x) End Funccedilatildeo que retorna o inverso do numero dado Ex 34 Inverso = 43 Paracircmetros Formais n numero (de -2147483648 a 2147483647 ) 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) --gt Procedure do Pascal que decrementa um nuacutemero n= n div 10 Until tam = 0 Inverso = inv End

Texto Complementar e Exerciacutecios 45

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 46: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Funccedilatildeo que calcula o digito verificador da cc Paracircmetros Formais conta numero da cc FUNCTION Digito (conta longint) integer Var soma longint tam_soma ordem result d integer Begin soma = conta + Inverso(contaTamanho(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 CC Digito(cc)) End

Texto Complementar e Exerciacutecios 46

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 47: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo

1 Quantos nuacutemeros o programa abaixo imprimiraacute 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 imprimiraacute 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 seraacute

executado Quantas vezes o procedimento Troca seraacute executado

Program Numeros Const LIMITE = 5 Var contador Integer numeros Array[1LIMITE] 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] lt numeros[posicao]) Then

Troca(posicao indice)

Texto Complementar e Exerciacutecios 47

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 48: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo 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 funccedilatildeo POTENCIA que realize a operaccedilatildeo de potenciaccedilatildeo e que contenha os seguintes paracircmetros formais VALOR nuacutemero inteiro que se deseja elevar agrave potecircncia POT potecircncia elevada

Ex Na chamada da funccedilatildeo POTENCIA (5 3) o resultado seria 125 Na chamada da funccedilatildeo POTENCIA (2 0) o resultado seria 1

5 Escrever uma funccedilatildeo DIGITO (N K) que determine o valor do k-eacutesimo diacutegito da direita para a esquerda de um nuacutemero N inteiro Ex DIGITO (379836 3) = 8 DIGITO (567 8) = 0

Exerciacutecios Complementares Forbellone (2a Edicao) pag 135 136 (exerc de fixaccedilatildeo 11)

Texto Complementar e Exerciacutecios 48

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 49: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

57 Registros e Tabelas (Arrays de Registros) Registros satildeo estruturas de dados heterogecircneos isto eacute satildeo compostas de elementos de tipos diferentes Cada elemento do registro eacute denominado CAMPO Por exemplo considere um registro que contenha um grupo de informaccedilotildees sobre um funcionaacuterio de uma empresa

Pedro Silva Assistente 33 R$ 95000

Campo Nome Campo Salaacuterio Campo IdadeCampo Funccedilatildeo

Em pascal o registro eacute definido como um tipo RECORD 571 Declaraccedilatildeo de Registros em Pascal Podemos definir registros em Pascal na sessatildeo TYPE ou diretamente declarar variaacuteveis do tipo RECORD

a) Declaraccedilatildeo na sessatildeo TYPE

TYPE ltnome_novo_tipogt = RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END VAR ltidentificador_variavelgt ltnome_novo_tipogt

Ex Type Atencao para a indentacao dos campos do registro Funcionario = Record nome string[40] idade integer funcao string[30] salario real end

Var FuncionarioUFBA Funcionario

Texto Complementar e Exerciacutecios 49

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 50: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

b) Declaraccedilatildeo na sessatildeo VAR

VAR ltidentificador_registrogt RECORD campo1 tipo1 campo2 tipo2 hellip campon tipon END

Ex VAR FuncionarioUFBA Record nome string[40] idade integer funcao string[30] salario real End Os campos dos registros podem ser por sua vez de tipos simples ou estruturados (array registros etc) Ex Type estadosBrasil = (ACALAMAPBACEDFESGOMAMGMSMTPAPBPE PIPRRJRNRORRRSSCSESPTO) Var cliente record nome string[50] endereco record Rua string [30] Numero integer Complemento string [40] CEP string [10] Cidade string[20] Estado estadosBrasil end valoresUltimasCompras array [110] of real end 572 Manipulaccedilatildeo de Registros em Pascal O acesso aos campos de um registro pode ocorrer de duas formas

a) uso da notaccedilatildeo ltidentifRegistrogtltcampogt Ex

writeln (lsquoenbtre o nome do funcionariorsquo) readln(funcionarioUFBAnome) acesso ao campo nome writeln(lsquoEntre a funcaorsquo) readln(funcionarioUFBAfuncao) acesso ao campo funcao

b) uso da estrutura WITH ltidentif_Registrogt DO

Texto Complementar e Exerciacutecios 50

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 51: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Ex With funcionarioUFBA do begin writeln(lsquoDados do funcionario cadastradorsquo)

writeln (lsquoNomersquo nome) writeln (lsquoIdadersquo idade)

writeln (lsquoFuncaorsquo funcao) writeln(lsquoSalarionrsquo salario52)

end Exemplo Considere o tracho de programa abaixo O que ele faz Program Exemplo_registro Var aluno record variaacutevel aluno do tipo registro matricula string[6] definiccedilatildeo dos campos do registro nome string[15] serie integer turma char cada campo tem um nome e um tipo end Begin Write (Numero de matricula ) Readln (alunomatricula) Write (Nome ) Readln (alunonome) acesso ao campo nome do registro aluno Write (Serie ) Readln (alunoserie) Write (Turma ) Readln (alunoturma) With aluno do comando WITH indica o registro que seraacute usado -natildeo haacute necessiade de se

colocar begin e end quando temos um soacute comando na estrutura With write (O aluno nome estuda na serie a serie ) End 572 Definiccedilatildeo de Tabelas (Array de Registros) Se quisermos armazenar n informaccedilotildees referentes ao mesmo tipo de registro como por exemplo informaccedilotildees de vaacuterios funcionaacuterios ou vaacuterios alunos devemos usar uma Tabela Em Pascal a tabela eacute definida por um Array unidimensional de Registros Ex Pedro Silva Assistente 33 R$ 95000 Carlos Santos Secretario 33 R$ 73000

Meire Cardoso Diretora 33 R$ 105000

Cada linha tem um registro completo

As colunas tem informaccedilotildees do mesmo tipo

a) Declaraccedilatildeo de array de registros

Texto Complementar e Exerciacutecios 51

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 52: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

TYPE lt tipo_registrogt = RECORD campo1 tipo1 campon tipon END VAR ltidentif_tabelagt array [nm] of lt tipo_registrogt

Ex

Type aluno = record

matricula string[6] nomestring[15]

serieinteger end

Var Tab_alunos array [145] of aluno

b) Manipulaccedilatildeo de array de registros ltidentif_tabelagt[posicao]campo Ex

for i= 1 to 45 do begin

readln (aluno[i]matricula) readln (aluno[i]nome)

readln (aluno[i]serie) end Tambeacutem podemos usar a estrutura With ltidentif_tabelagt[posicao] do campo hellip Ex

for i=1 to 45 do with aluno[i] do

begin readln (matricula) readln (nome)

readln (serie) end Exemplo de programa com uso de tabelas e saiacuteda de dados impressa com uso de arquivo-texto LST

Texto Complementar e Exerciacutecios 52

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 53: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Produtos uses crt printer

Unit Printer - define arquivo texto chamado LST associado a um dispositivo LPT1

Type produto = record ident string[3] descr string[10] preco real quant integer

end Var tab_prod array [13] of produto

i integer

Begin clrscr gotoxy(103) Writeln ( CADASTRO DE PRODUTOS ) gotoxy(1 6) for i=1 to 3 do with tab_prod[i] do tab_prod[i] representa cada elemento do array begin write(identificaccedilatildeo ) readln(ident) write(descriccedilatildeo ) readln(descr) write(preco ) readln(preco) write(quantidade ) readln(quant) end writeln ( lst Produtos no Estoque ) writeln ( lst ) writeln ( lst ---Identif----Descricao----Preco----Quantidade--- ) for i=1 to 3 do with tab_prod[i] do if quant gt 0 then write(lst ident descr preco62 quant) End Saiacuteda Impressa Produtos no Estoque ---Identif----Descriccedilatildeo----Preco----Quantidade--- 111 lapis 085 320 102 regua 245 200 109 clips 130 170

Texto Complementar e Exerciacutecios 53

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 54: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Exerciacutecios de Fixaccedilatildeo 1 Uma escola possui o cadastro de seus alunos contendo o nome seacuterie turma e data de nascimento Deseja-se elaborar uma relaccedilatildeo de ldquoAniversariantes do Mecircsrdquo ao ser informado pelo usuaacuterio o nuacutemero correspondente ao mecircs desejado a seacuterie e a turma (apresentaccedilatildeo em ordem crescente pelos dias de aniversaacuterio) Modelo de Relaccedilatildeo de Aniversariantes Aniversariantes do Mecircs 04 2a Seacuterie Turma B

Nome-------------------Dia Joatildeo Santos 13

Maria Lopes 18 Andrea Aguiar 26 Marcelo Souza 29

2 Faccedila um programa Pascal que a) preencha um conjunto de registros de contas-correntes de clientes de uma agecircncia bancaacuteria

utilizando o modelo de informaccedilotildees abaixo coacutedigo cliente numeacuterico inteiro (4 posiccedilotildees) nome cliente alfanumeacuterico (30 posiccedilotildees) limite de creacutedito numeacuterico real (50000 a 300000) data abertura conta dd-mm-aa saldo atual numeacuterico real

O limite de creacutedito eacute calculado baseado no ano de abertura da conta-corrente 300000 abertura de conta entre 1986 e 1988 250000 abertura de conta entre 1989 e 1991 200000 abertura de conta entre 1992 e 1994 100000 abertura de conta em 1995 50000 abertura de conta em 1996 b) Apoacutes cadastrar todos os clientes deseja-se um relatoacuterio daqueles que estatildeo com saldo

negativo mas dentro do limite de creacutedito e os que ultrapassaram o limite permitido Deve ser mostrado o coacutedigo o nome do cliente e seu limite de creacutedito

3 Faccedila um programa em Pascal que apresente um Menu de Opccedilotildees para manipular uma

tabela de FILMES Utilize as informaccedilotildees abaixo para elaborar o programa 1 Tabela de Filmes - Deve conter informaccedilotildees sobre Nome do filme cadeia de caracteres (maacutex 20 caracteres) Tipo de Filme A (aventura) S (suspense) D (drama) 2 Menu de Opccedilotildees (1) Incluir Filme na Tabela

Texto Complementar e Exerciacutecios 54

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 55: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Nesta opccedilatildeo o usuaacuterio pode incluir 01 filme de cada vez sabendo-se que podem ser armazenados na tabela no maacuteximo 150 filmes Se o usuaacuterio tentar incluir mais de 150 filmes o programa deve apresentar a seguinte mensagem Tarefa Natildeo Concluiacuteda Sem Espaccedilo para Incluir Filme Para cada inclusatildeo deve ser verificado se o usuaacuterio forneceu a letra correta para o tipo do filme (que deve ser A S ou D)

(2) Listagem (em tela ) por Tipo de Filme O usuaacuterio deve fornecer o tipo de filme que deseja visualizar (A S ou D) e o programa deve mostrar na tela uma lista dos nomes dos filmes daquele tipo solicitado em ordem alfabeacutetica Devem ser mostrados 5 filmes de cada vez na tela (3) Fim do Programa Ao escolher esta opccedilatildeo o usuaacuterio indica que deseja encerrar o programa Antes de finalizar o programa deve mostrar o total de filmes cadastrados e a seguinte mensagem final Teacutermino do Programa OBS O usuaacuterio pode escolher as opccedilotildees (1) e (2) quantas vezes desejar e em qualquer ordem Exemplo da tela principal do programa Locadora Lk [1] Incluir Filme [2] Listar Filme por Tipo [3] Finalizar Opcao_____

Texto Complementar e Exerciacutecios 55

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 56: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 57

Apecircndice I

SOLUCcedilAtildeO DE EXERCIacuteCIOS PROPOSTOS (PAG 25 E 26)

P1

v num inteiro primo booleano Iniacutecio primo V leia (num) Se ( num = 1 ) entatildeo primo F fim se Para V=2 ateacute (num - 1) faccedila Se ( ( num mod V ) = 0 ) entatildeo primo F fim se fim para Se primo entatildeo escreva ( ldquo O numero rdquo num ldquo eacute primo rdquo ) senatildeo escreva ( ldquo O numero rdquo num ldquo natildeo eacute primo rdquo ) fim se Fim

Teste da Soluccedilatildeo Primo Num V Escreva V 1 X F natildeo eacute primo V 4 2 F 3 eacute primo P2

conta ant1 ant2 termo inteiro Iniacutecio ant1 0 ant2 1 escreva (ant2) mostra o primeiro termo conta 1 inicio um termo mostrado Enquanto conta lt 20 faccedila termo ant1 + ant2 escreva (termo) mostra o proacuteximo termo conta conta + 1 conta mais um termo mostrado ant1 ant2 ant2 termo fim enquanto Fim

Teste da Soluccedilatildeo (algoritmo para mostrar 4 termos) Ant1 Ant2 Termo Conta Conta lt 4 0 1 1 1 1 lt 4 V

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 57: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

1 1 2 2 2 lt 4 V 1 2 3 3 3 lt 4 V 2 3 5 4 4 lt 4 F Saiacuteda 1 1 2 3 P3

menor maior num inteiro Iniacutecio escreva (ldquoentre com um numero do conjunto rdquo) leia (num) menor num maior num Enquanto num lt gt -5 faccedila Se num lt menor entatildeo menor num fim se Se num gt maior entatildeo maior num fim se escreva (ldquoentre com um numero do conjunto rdquo) leia (num) fim enquanto Se menor lt gt -5 entatildeo escreva (ldquo O menor numero do conjunto eacute rdquo menor ) escreva (ldquo O maior numero do conjunto eacute rdquo maior ) senatildeo escreva (ldquo conjunto vazio rdquo ) fim se Fim

Teste da Soluccedilatildeo Num Maior Menor num lt gt -5 Num gt Maior Num lt Menor7 7 7 7 lt gt -5 V F F 4 4 lt gt -5 V F V 16 7 4 16 lt gt -5 V V F -5 16 4 -5 lt gt -5 F P4

num ant1 ant2 termo inteiro respcaracter Inicio Repita Leia (num) Ant1 0 Ant2 1 termo 0 Enquanto termo lt num faccedila termo ant1 + ant2 ant1 ant2 ant2 termo fim enquanto Se num = termo entatildeo escreva (ldquoo numerordquo num ldquoeacute termo da seacuterie de Fibonaccirdquo ) senatildeo escreva (ldquoo numerordquo num ldquonatildeo eacute termo da seacuterie de Fibonaccirdquo ) fim se escreva (ldquoDeseja informar outro numero (SN) rdquo) leia (Resp) ateacute Resp = ldquoSrdquo

Texto Complementar e Exerciacutecios 58

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 58: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Fim P6 casados solt divorc outros Tidade QtdeMulheres dn mn an da ma na anos meses dias cont maior menor inteiro sexo EstCivil prev menosprev caracter Inicio casados 0 solt 0 divorc 0 outros 0 Tidade 0 QtdeMulheres 0 Para cont = 1 ateacute 100 faccedila escreva (ldquoEntre com os dados de sexo (FM) estado civil - C p casado S p solteiro D p divorciado ou O - para outros e data de nascimento (diamesano) rdquo) leia ( sexo estcivil dn mn an) Calculo da idade em anos baseada na data de nascimento e data atual escreva (ldquo Entre com a data atual rdquo ) leia (da ma aa) data atual anos aa - an guarda a idade da pessoa em anos meses ma - mn dias da - dn Se (meses lt 0) or ( meses = 0 and dias lt 0 ) entatildeo anos anos - 1 corrige a idade de acordo com mes e dia fim se Acumuladores estatiacutesticos Se sexo = ldquoFrdquo entatildeo Tidade Tidade + anos QtdeMulheres QtdeMulheres + 1 Fim se Escolha EstCivil Caso ldquoCrdquo casados casados + 1 Caso ldquoSrdquo solt solt + 1 Caso ldquoDrdquo divorc divorc + 1 Caso ldquoOrdquo outros outros + 1 Fim escolha Fim para Escolha do estado civil mais prevalente - sem considerar empates prev ldquoCrdquo maior casados Se solt gt maior entatildeo prev ldquoSrdquo maior solt Fim se Se divorc gt maior entatildeo prev ldquoDrdquo maior divorc Fim se Se outros gt maior entatildeo prev ldquoOrdquo Fim se Escolha do estado civil menos prevalente - sem considerar empates menosprev ldquoCrdquo menor casados

Texto Complementar e Exerciacutecios 59

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 59: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Se solt lt menor entatildeo menosprev ldquoSrdquo menor solt Fim se Se divorc lt menor entatildeo menosprev ldquoDrdquo menor divorc Fim se Se outros lt menor entatildeo menosprev ldquoOrdquo Fim se Apresentaccedilatildeo dos Resultados Escreva (ldquo Meacutedia de idade das mulheres rdquo TidadeQtdeMulheres ) Escreva (ldquo Estado Civil mais prevalente rdquo prev) Escreva (ldquo Estado Civil menos prevalente rdquo memosprev) Fim P5

X F S inteiro Inicio leia X S X Para I = 1 ateacute 19 faccedila Fat 1 Para F = 2 ateacute ( 2 I + 1 ) faccedila Fat = Fat F Fim Para S ( S + ((-1) I ) ( X (2 I) ) Fat Fim Para Escreva ( O somatoacuterio eacute S ) Fim

Teste da Soluccedilatildeo S I =1 a 20 F = 2 a (2I +1) FAT S S +(-1) I X (2 I) ) Fat

X 1 2 a 3 1 2 3 X + ((-1) 1) X 2 3 2 2 a 5 1 2 3

4 5 X - X 2 3 + (-1)2 X 4 5

3 2 a 7 1 2 34 567

X - X 2 3 + X 4 5 + ((-1) 3) X 6 7

4 2 a 9 9

Texto Complementar e Exerciacutecios 60

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 60: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Apecircndice II

SIacuteMBOLOS USADOS EM FLUXOGRAMAS

Nome Idade Nome Idade

X lt- 1

Ylt- X Idadeos valores satildeo Y X

Inicio

1

I = 1 ateacute 10

A gt B

Fim

ouEntrada de Dados

Saida de Dados

Setas de Fluxo

Estrutura de Decisatildeo

Delimitadores de inicio e fim de bloco

Processamento (Caacutelculo)

Conector

V

F

Repeticcedilatildeo - nuacutemero preacute-definido de vezesa

a

Bloco de Comandos

Texto Complementar e Exerciacutecios 61

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 61: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

FLUXOGRAMAS DE ESTRUTURAS DE CONTROLE

Decisatildeo

Bloco de Comandos 1

Bloco de Comandos

Bloco de Comandos 2

Condiccedilatildeo deContinuaccedilatildeo

Condiccedilatildeo deParada

Bloco de Comandos

Estrutura de Seleccedilatildeo

V

F

a)Estrutura de Repeticcedilatildeo Condicional -Enquanto Faccedila

b) Estrutura de Repeticcedilatildeo Condicional -Repita Ateacute

F

F

V

V

Texto Complementar e Exerciacutecios 62

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 62: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Texto Complementar e Exerciacutecios 62

Apecircndice III

SOLUCcedilAtildeO DE ALGUNS PROBLEMAS PROPOSTOS EM PASCAL Exerciacutecios Propostos (na pagina 35) ndash Exercicio 02

Program primos Var Num i integer Primo boolean Begin write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num) While num ltgt 0 do begin write (num lsquo ndash 1 lsquo) primo = true for i= 2 to num do if (num mod i = 0) then begin write (i lsquo lsquo ) primo = false end

if primo then write (lsquorsquo) writeln write (lsquoentre numero que deseja investigar (0 para encerrar) lsquo) readln (num)

end end Forbellone (2a Ediccedilatildeo) Pag 62 Ex Proposto 1

PROGRAM EXTREMOS VAR NUM MENOR MAIOR INTEGER BEGIN WRITELN (Digite um conjunto de numeros inteiros positivos ) WRITE ((Para finalizar o conjunto digite -5) ) READLN (NUM) MENOR=NUM+1 MAIOR=NUM-1 WHILE NUM ltgt -5 DO BEGIN IF NUM lt MENOR THEN MENOR=NUM IF NUM gt MAIOR THEN MAIOR=NUM WRITE (Digite o proximo numero ) READLN (NUM) END WRITE (O menor numero do conjunto sbquo MENOR e o maior sbquo MAIOR) END Vetores Exercicio 3 (pag 39)

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 63: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program Vet_A_B Uses crt CONST Max = 50 Indica o numero maacuteximo de elementos do ARRAY VAR IL integer A Array [1Max] of integer B Array [1Max] of real Begin clrscr Gotoxy(223) Write(gtgtgtgt Exercicio 02 - Array ltltltlt) Gotoxy(107) Writeln(Digite numeros inteiros para formar o conjunto A de Max elementos) For i=1 to Max do begin Gotoxy(109) Write(Digite o elemento (i) ) read(A[i]) If odd(i) then B[i]= A[i] 3 else B[i]= A[i] 2 gotoxy(349) posiciona no local onde esta o numero digitado write( ) limpa o campo de digitacao do numero end Gotoxy(10 12) Writeln(gtgtgt Conjunto B formado a partir de A ltltlt) For i=1 to Max do begin gotoxy(1213+i) write(Elemento (i) B[i]61) end Gotoxy (1522) Write(Posicao Impar =gt Elemento de A multiplicado por 3 ) Gotoxy(1523) Write(Posicao Par =gt Elemento de A dividido por 2 ) Readkey Funcao da Unit CRT End Vetores Exercicio 5 (pag 39)

Program Perfeito Uses crt uso de biblioteca interna de rotinas do Turbo Pascal Unit CRT Biblioteca de rotinas que manipula caracteristicas do micro como modos de tela codigos de teclado cores e sons Exemplos de FuncoesProcedimentos Gotoxy Clrscr ReadKey CONST Max = 100 Indica o numero maximo de elementos do ARRAY VAR IL integer VET Array [1Max] of integer Begin Gotoxy(163) Write(gtgtgtgt Exercicio 01 - Array ltltltlt) Gotoxy(107) Writeln(Conjunto de Max elementos com valores 0s e 1s ) L=9 For i=1 to Max do begin If sqrt(i)=Int(sqrt(i)) then Vet[i]= 1

Texto Complementar e Exerciacutecios 63

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 64: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

else Vet[i]= 0 Gotoxy(10L) write(Posicao (i) = Vet[i]) L= L+1 end Gotoxy(12L+2) Writeln( 1 =gt posicao eh um quadrado perfeito) Gotoxy(12L+3) Writeln( 0 =gt posicao nao eh um quadrado perfeito) Readkey Funcao que aguarda ate que seja pressionada uma tecla End Multiplicaccedilatildeo de Matrizes Exercicio 03 (pag 41)

Program Multiplic uses crt Var A array[13 15] of integer

A Matriz 3 x 5 B array[15 13] of integer

B Matriz 5 x 3 C array[13 13] of integer

C Matriz 3 x 3 - Matriz Produto i j k integer Begin clrscr for i=1 to 3 do for j= 1 to 5 do begin write (digite o elemento A(ij)) readln( A[ij] ) end for i=1 to 5 do for j= 1 to 3 do begin write (digite o elemento B(ij) ) readln( B[ij] ) end for i=1 to 3 do for j=1 to 3 do begin C [ij] = 0 for k= 1 to 5 do C[ij] = C[ij]+A[iK] B[kj] end Exibindo a Matriz Produto clrscr gotoxy(53) writeln( ==== Matriz Produto ===) for i =1 to 3 do for j = 1 to 3 do writeln (Elemento (ij) = c[ij]) End Matrizes Exercicio 05 (pag 41)

Texto Complementar e Exerciacutecios 64

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 65: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Program MatMaior Determina o elemento de maior valor algeacutebrico da Matriz B 10x15 Uses crt Const MaxL=10 MaxC=15 Var Mat array [1MaxL1MaxC] of integer i j maior lin col integer Begin clrscr gotoxy(104) writeln(Digite os numeros da Matriz (MaxL x MaxC) ) For i= 1 to MaxL do for j= 1 to MaxC do begin write(Mat(ij) = ) readln(Mat[ij]) end clrscr gotoxy(104) writeln( Maior elemento da Matriz ) maior= MAT[11] For i=1 to MaxL do for j=1 to MaxC do if Mat[ij] gt maior then begin maior=Mat[ij] lin=i col=j end gotoxy(1010) writeln(Elemento Mat(lincol) = maior) readkey End

Texto Complementar e Exerciacutecios 65

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 66: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

Registros e Tabelas ndash Exercicio Relaccedilatildeo de aniversarientes (pag 53) Program Aniversario Uses CRT Const Max=2 Type cadastro= record nomestring[15] serieinteger turmachar data_nasc record dia integer mes integer ano integer end end VAR aluno array [1Max] of cadastro ix_seriex_meslininteger x_turmachar Begin clrscr writeln( Cadastro de Alunos ) for i=1 to Max do With aluno[i] do Begin write(Nome ) readln(nome) write(Serie ) readln(serie) write(Turma ) readln(turma) turma=upcase(turma) write(Data de Nascimento ) readln(data_nascdiadata_nascmesdata_nascano) end clrscr writeln( Lista de Aniversariantes do Mes ) Write(Mes desejado ) readln(x_mes) Write(Serie ) readln(x_serie) write(Turma ) readln(x_turma) x_turma=upcase(x_turma) clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln

Texto Complementar e Exerciacutecios 66

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin
Page 67: Introdução à Lógica de Programação - UFBA

UFBa - Introduccedilatildeo agrave Loacutegica de Programaccedilatildeo MAT 146

lin=4 for i=1 to Max do Begin with aluno[i] do If (x_mes=data_nascmes) and (x_serie=serie) and (x_turma=turma) then begin gotoxy(3lin) writeln( nome data_nascdia) lin=lin + 1 if lin = 21 then begin gotoxy(1022) write(Tecle algo para continuar) readkey clrscr writeln(Aniversariantes do mes x_mes) writeln(Serie - x_seriea Turma - x_turma) writeln lin=4 end end end End

Texto Complementar e Exerciacutecios 67

Please purchase PDF Split-Merge on wwwverypdfcom to remove this watermark

  • Revisada em Janeiro de 2004
    • O que todas essas coisas tem em comum
      • begin
          • Revisada em Maio de 2003
            • O que todas essas coisas tem em comum
              • begin
                  • Revisada em Maio de 2003
                    • O que todas essas coisas tem em comum
                      • begin
                          • Revisada em Janeiro de 2004
                            • O que todas essas coisas tem em comum
                              • begin
                                  • Revisada em Maio de 2003
                                    • O que todas essas coisas tem em comum
                                      • begin